[iptables] No logro sacar los paquetes de la eth1 a la eth0

Iniciado por Diabliyo, 22 Septiembre 2013, 05:08 AM

0 Miembros y 2 Visitantes están viendo este tema.

Diabliyo

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

Epzylon

#1
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.

Epzylon

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


cpu2

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.

Diabliyo

#4
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 !

Diabliyo

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 !

cpu2

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.

Epzylon

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!

Diabliyo

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 !