Buenas.
No logro comunicar mi red con el router ISP, por lo tanto no tengo navegación a Internet. El escenario que tengo es el siguiente:
Servidor con Firewall, DHCP (dnsmasq) y Squid (proxy web).
- eth0 --> con ip:192.168.1.1 conectada al router ISP (192.168.1.254).
- eth1 --> con ip: 10.0.1.1 conectada al switch (red lan).
- todo pasa por este server.
- el Router esta fuera del alcance (de forma directa) ya que los paquetes pasan por el server.
- hasta ahorita NO consigo navegacion en internet.
- para lograr navegar debo poner un cable del el router al switch, pero esto no es optimo no lo que quiero, ya que algun listo puede colocarse un IP estatico con Gateway 192.168.1.254 y se brincaria mi proxy web (squid).
Y la configuración (reglas) de mi firewall son:
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# politicas por defecto
iptables -P INPUT ACCEPT # aceptamos entradas
iptables -P OUTPUT ACCEPT # aceptamos salidas
iptables -P FORWARD ACCEPT # aceptamos reenvios
iptables -t nat -P PREROUTING ACCEPT # aceptamos nat hacia fuera
iptables -t nat -P POSTROUTING ACCEPT # aceptamos nat hacia dentro
echo 1 > /proc/sys/net/ipv4/ip_forward # habilitamos BIT de reenvios
iptables -A INPUT -i lo -j ACCEPT # localhost aceptar todo
iptables -A INPUT -p tcp --dport 20:22 -j ACCEPT # ftp y ssh
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # http
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # https
iptables -A INPUT -p tcp --dport 53 -j ACCEPT # dns - dhcp
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 111 -j ACCEPT # portmapper/rpcbind
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 137:139 -j ACCEPT # samba
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 445 -j ACCEPT # samba
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 3128 -j ACCEPT # squid
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 3130 -j ACCEPT # squid cache
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 2049 -j ACCEPT # nfs
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 5038 -j ACCEPT # asterisk
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 1000 -j ACCEPT # webmind para LAN
# forwardnig
iptables -A FORWARD -p tcp --dport 20:22 -j ACCEPT # ftp y ssh
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 53 -j ACCEPT # dns - dhcp
iptables -A FORWARD -s 10.0.1.0/24 -p udp --dport 53 -j ACCEPT # dns -dhcp (udp)
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT # http
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT # https
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 111 -j ACCEPT # portmapper/rpcbind
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 137:139 -j ACCEPT # samba
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 445 -j ACCEPT # samba
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 3128 -j ACCEPT # squid
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 3130 -j ACCEPT # squid cache
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 2049 -j ACCEPT # nfs
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 5038 -j ACCEPT # asterisk
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 1000 -j ACCEPT # webmind para LAN
iptables -A FORWARD -s 10.0.1.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -d 10.0.1.0/24 -j ACCEPT
# enmascaramiento
iptables -A OUTPUT -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j SNAT --to 192.168.1.1
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE # todo lo que salga de la red, se enmascara
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -s 10.0.1.0/24 -j REDIRECT --to-port 3128
# denegaciones
iptables -A INPUT -p tcp --dport 1000 -j DROP # denegar webmind
iptables -A INPUT -p tcp --dport 1:1024 -j DROP # cerrar puertos privados
iptables -A FORWARD -p tcp --dport 1000 -j DROP # denegar webmind
iptables -A FORWARD -j DROP # degenamos lo demas
Estoy analizando el problema, y aún no termino,
pero fijate que esta regla nunca se va a cumplir:
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE
Ya que la regla anterior (la del Source Nat - SNAT) le gana por precedencia.
Sigo analizando, pero mientras fijate ese tema.
post date: Para analizar donde estan pasando tus paquetes, utiliza:
iptables -L -n -v
Esto te muestra la cantidad paquetes y bytes que cada regla procesa, de esa manera podes ir detectando errores.
Mis comentarios:
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# politicas por defecto
iptables -P INPUT ACCEPT # aceptamos entradas
iptables -P OUTPUT ACCEPT # aceptamos salidas
iptables -P FORWARD ACCEPT # aceptamos reenvios
iptables -t nat -P PREROUTING ACCEPT # aceptamos nat hacia fuera
iptables -t nat -P POSTROUTING ACCEPT # aceptamos nat hacia dentro
echo 1 > /proc/sys/net/ipv4/ip_forward # habilitamos BIT de reenvios
iptables -A INPUT -i lo -j ACCEPT # localhost aceptar todo
iptables -A INPUT -p tcp --dport 20:22 -j ACCEPT # ftp y ssh
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # http
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # https
iptables -A INPUT -p tcp --dport 53 -j ACCEPT # dns - dhcp
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 111 -j ACCEPT # portmapper/rpcbind
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 137:139 -j ACCEPT # samba
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 445 -j ACCEPT # samba
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 3128 -j ACCEPT # squid
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 3130 -j ACCEPT # squid cache
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 2049 -j ACCEPT # nfs
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 5038 -j ACCEPT # asterisk
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 1000 -j ACCEPT # webmind para LAN
# forwardnig
iptables -A FORWARD -p tcp --dport 20:22 -j ACCEPT # ftp y ssh
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 53 -j ACCEPT # dns - dhcp
iptables -A FORWARD -s 10.0.1.0/24 -p udp --dport 53 -j ACCEPT # dns -dhcp (udp)
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT # http
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT # https
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 111 -j ACCEPT # portmapper/rpcbind
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 137:139 -j ACCEPT # samba
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 445 -j ACCEPT # samba
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 3128 -j ACCEPT # squid
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 3130 -j ACCEPT # squid cache
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 2049 -j ACCEPT # nfs
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 5038 -j ACCEPT # asterisk
iptables -A FORWARD -s 10.0.1.0/24 -p tcp --dport 1000 -j ACCEPT # webmind para LAN
Hasta aquí sin dudas.
Si tu red esta en la 10.0.1.0/24, y has configurado a todas las PCs como puerta de enlace la ip de tu server (192.168.1.1),
deberias borrar las siguientes lineas:
iptables -A FORWARD -s 10.0.1.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -d 10.0.1.0/24 -j ACCEPT
# enmascaramiento
y agregar la siguiente:
iptables -A FORWARD -s 10.0.1.0/24 -d 0.0.0.0/0 -j ACCEPT
Ya que los paquetes irán con IP de destino públicas, no las de tu router.
La siguiente linea esta demás, ya que el policy de OUTPUT es ACCEPT
iptables -A OUTPUT -j ACCEPT
Por otro lado esta última parte quedaría mejor así:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE # todo lo que salga de la red, se enmascara
Otas aclaraciones:
- El puerto del webmin es 10000 no 1000, debe ser un error de tipeo seguro
- Conviene que establezcas la policy de FORWARD en DROP y no que utilices una regla al final de todo.
- Si alguien quiere acceder al webmin de algún otro servidor no va a poder por que denegas el forward del puerto 10000 (suponiendo que
es un error de tipeo) y no es necesario hacerlo.
Por lo que la siguiente parte yo la dejaría así
# denegaciones
iptables -A INPUT -p tcp --dport 10000 -j DROP # denegar webmind
iptables -A INPUT -p tcp --dport 1:1024 -j DROP # cerrar puertos privados
y cambiaria arriba de todo esta policy
iptables -P FORWARD DROP # denegamos reenvios
Espero que me entiendas, y espero que pruebes mis recomendaciones y me digas los resultados.
Por otro lado, si a tu respuesta le agregas la salida de lo siguiente sería fantástico:
iptables -L -n -v
iptables -L -n -v -t nat
Saludos
Yo lo primero que haria es arreglar el script, tienes reglas repetidas, y cosas sin sentido alguno.
Tienes la cadena de INPUT en ACCEPT y las reglas que estableces estan tambien en ACCEPT, eso no tiene mucho sentido no? Y en la denegacion igual del puerto 1 al 1024, no seria mejor poner la politica de INPUT en DROP y abrir lo que quieras?
FORWARD mas de lo mismo.
Y voy al problema, a ver si lo entiendo, tienes las maquinas conectadas en eth1 cierto? lo que quieres es que eth1 pase las conexiones a eth0 el router del ISP no? Y luego todo lo que entre por eth0 lo envie a eth1, no?
Te pongo un ejemplo:
eth0 es la direccion publica, y la eth1 192.168.10.1.
Imaginate que en la red interna tengo una maquina que hace de servidor http.
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.10.45:80
Pretendes algo como eso? Si no explicalo mejor.
Un saludo.
Para
CPU2....
Tienes razon sobre las reglas INPUT y FORWARD, debo quitar las lineas:
iptables -P INPUT ACCEPT # aceptamos entradas
iptables -P FORWARD ACCEPT # aceptamos reenvios
Por estas:
iptables -P INPUT DROP # aceptamos entradas
iptables -P FORWARD DROP # aceptamos reenvios
Lo que veo es que usted no ha entendido mi esquema de red.
Mi eth0 tiene ip estatica: 192.168.1.1 y va conectado al router (ip del router 192.168.1.254).
La eth1 tiene ip estatica 10.0.1.1 y como ve es un segmento distinto.
El sever asigna IPs a mi red local (switch) usando el rango: 10.0.1.2 al 10.0.1.254.
CitarY voy al problema, a ver si lo entiendo, tienes las maquinas conectadas en eth1 cierto? lo que quieres es que eth1 pase las conexiones a eth0 el router del ISP no? Y luego todo lo que entre por eth0 lo envie a eth1, no?
Asi es, la eth1 recibe los paquetes y debe pasarlo a la eth0 que despues son pasados al router. Despues las respuestas son puestas en eth0 y sacarlas por eth1 al equipo que demanda el servicio.
Checa mis reglas....
Para
Epzylon....
CitarSi tu red esta en la 10.0.1.0/24, y has configurado a todas las PCs como puerta de enlace la ip de tu server (192.168.1.1),
En mi DHCP (dnsmasq) tengo configurado para que el gateway que se asigne a los equipos sera la IP de la eth1 (10.0.1.1), ya que la eth0 (192.168.1.1) se supone sera inaccesible para el segmento 10.0.1.0/24.
La eth1 (10.0.1.1) va conectada al switch.
La eth0 (192.168.1.1) va conectada al router.
Al router nadie se conecta, solo el Server.
Al switch se conectan todos los equipos y la eth1 del server.
Asumiendo que el gateway de mi equipos de red es la ip 10.0.1.1, deberia eliminar las reglas estas ????:
iptables -A FORWARD -s 10.0.1.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -d 10.0.1.0/24 -j ACCEPT
Y tienes razon sobre webmind,, puse 1000 cuando debe ser 10000... Corregire esto xD
Voy a verificar tus consejos en las reglas del iptables, mas tarde les doy mis resultados !
Saludos !
CPU2 estuve haciendo pruebas y al final veo que no es bueno ponerlas en DROP, porque si ponemos a DROP y despues declaro:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
Aun asi no tendria conexion a internet, ya que los navegadores cuando se conectan a un puerto 80, usan un puerto de ORIGEN distinto al que se pretenden conectar (Leer NAT y PAT), por lo cual el navegador se queda pensando eternamente.
Es mejor usarlas en ACCEPT, hacer las denegaciones a mano.
Saludos !
Normal que no funcione, no dejas paso a conexiones ya establecidas y relacionadas.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Cita de: Diabliyo en 23 Septiembre 2013, 23:15 PM
Aun asi no tendria conexion a internet, ya que los navegadores cuando se conectan a un puerto 80, usan un puerto de ORIGEN distinto al que se pretenden conectar
Hay tiene el porque de esa regla.
Un saludo.
P.D: Ya solucionaste el problema del NAT, dijiste que verificarias las reglas y aun no dijiste nada.
Si yo tendría que hacer tu script lo haría así:
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# politicas por defecto
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING DROP
iptables -t nat -P POSTROUTING DROP
echo 1 > /proc/sys/net/ipv4/ip_forward # habilitamos BIT de reenvios
iptables -A INPUT -i lo -j ACCEPT # localhost aceptar todo
iptables -A INPUT -p tcp --dport 20:22 -j ACCEPT # ftp y ssh
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # http
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # https
iptables -A INPUT -p tcp --dport 53 -j ACCEPT # dns - dhcp
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 111 -j ACCEPT # portmapper/rpcbind
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 137:139 -j ACCEPT # samba
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 445 -j ACCEPT # samba
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 3128 -j ACCEPT # squid
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 3130 -j ACCEPT # squid cache
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 2049 -j ACCEPT # nfs
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 5038 -j ACCEPT # asterisk
iptables -A INPUT -s 10.0.1.0/24 -p tcp --dport 1000 -j ACCEPT # webmind para LAN
# forwarding
# Podría ser mas restrictivo, pero de principio con esto va a andar mejor
iptables -A FORWARD -s 10.0.1.0/24 -d 0.0.0.0/0 -j ACCEPT
#NAT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 10.0.1.1:3128 # Aca tenias la ip del router en lugar de la del squid!!!
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -d 0.0.0.0/0 -j MASQUERADE # todo lo que salga de la red, se enmascara
Post data: no lo probé, pero haceme el favor, debría salir andando!
Estoy pendiente en verificar las reglas NAT y esta que me acaba de mencionar CPU2, ya que anteriormente no tenia ping hacia el router, ni del server ni de cualquier equipo..
Y les comento que el fallo era el cable de red que conectada del server (eth0) al router.....
Ahora que ya tengo el servicio funcionando y el router conectado unicamente a la eth0 del server, estoy por empezar a revisar con lupa las reglas.
Antes me lei un tuto sobre NAT en netfilter porque andaba un poco liado con el SNAT, DNAT, PREROUT y POSTROUT...
Mas tarde les paso mis comentarios y dudas !
Saludos !