#4sysadmins

Inicio » GNU/Linux » Netfilter: IPtables

Netfilter: IPtables

Últimas Entradas

Follow #4sysadmins on WordPress.com

Reglas IPtables

IPtables permite realizar diferentes configuración mediante el uso de las reglas que afectan al sistema de filtrado, ya sea generación de logs, acciones de pre y post routing de paquetes, NAT o forwarding.

IPtables se constituye en tres tablas: filter (para el sistema de filtrado), nat (enmascaramiento y reenvío) y mangled (configuración de opciones de paquetes). Estas tablas a su vez contienen una serie de cadenas que agruparán determinadas reglas según su función. Por ejemplo para la tabla NAT contamos con PREROUTING que permitirá modificar paquetes entrantes antes de su enrutamiento, POSTROUTING los modificará antes de que salgan al destino y OUTPUT que modifica los paquetes generados una vez se hayan enrutado, mientras que en la tabla FILTER podemos añadir reglas a las cadenas (chains) INPUT para los paquetes que entran, OUTPUT para los que salen y FORWARD si quisiéramos realizar un reenvío.

Importante: Cuando queremos hacer forwarding de paquetes, por defecto GNU/Linux no trae habilitada la opción por lo que deberemos de activarla nosotros. Podemos hacerlo de forma temporal (será volátil) a través del sistema de ficheros /proc o bien de forma estática:

  • Volátil:
echo 1 > /proc/sys/net/ipv4/ip_forward
  • Permanecerá a reinicios: deberemos de editar el archivo /etc/sysctl.conf y añadir:
net.ipv4.ip_forward = 1

Los paquetes son analizados primeramente por la tabla NAT, a continuación la tabla FILTER decidirá si pasarán (en caso de que vayan destinado a nosotros) o si hay que reenviarlos a otro destino.

No podemos abarcar ni 1% de lo que supone IPtables por lo que se recomienda acudir a su página man. No obstante se va a explicar como crear algunas reglas básicas para las tablas FILTER y NAT.

Para comenzar a utilizar IPtables deberemos de tener el servicio corriendo. Esto ya sabremos como hacerlo, en función del sistema de inicialización que estemos usando. Para sysV bastará con /etc/init.d/iptables start (stop para pararlo).

Sería interesante comprobar de que reglas dispone la configuración actual de IPtables:

$ sudo iptables -L

Crear reglas en la tabla FILTER

Para crear una regla básica en la tabla FILTER y en la cadena INPUT, podríamos utilizar la siguiente sintaxis:

$ sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

Con -s <ip> indicamos el origen (source) con -j la acción (en este caso aceptar) y podríamos haber utilizado -d para indicar un destino.

El orden de las reglas es importante, por lo que deberemos de colocar siempre las menos restrictivas en las primeras posiciones, podemos hacerlo directamente desde la línea de comandos, tal que así:

$ sudo iptables -I INPUT 3 -s 192.168.1.0/24 -j ACCEPT

Esto haría que la regla se colocara en la tercera posición. La opción -A simplemente añade, -I inserta en una determinada posición.

Podremos eliminar por ejemplo esta misma regla si pasamos la opción -D

$ sudo iptables -D INPUT 3

o

$ sudo iptables -D INPUTS -s 192.168.1.0/24 - ACCEPT

Una regla mas elaborada podría quedar así:

$ sudo iptables -A INPUT -p tcp --dport 80 -s 0.0.0.0 -d 192.168.1.23 -j ACCEPT

Con esta regla indicamos que cualquier conexión proveniente (-s) de cualquier origen con destino (-d) al equipo con IP 192.168.1.23 concretamente por el puerto 80 (–dport, puerto destino) con protocolo tcp (-p) sea (-j) aceptada.

Y con alguna opción:

$ sudo iptables - A INPUT -p tcp --dport 80 -s 0.0.0.0 -d 192.168.1.23 -j REJECT --reject-with tcp-reset

Aquí rechazamos las conexiones (REJECT) y ademas emitimos una respuesta del tipo tcp-reset

Cuando modificamos las reglas deberemos de salvarlas. Para hacerlo en Red Hat bastaría con pasarle el parámetro ‘save‘ (service iptables save o /etc/init.d/iptables save y estas se guardarán en /etc/sysconfig/iptables.

Si estamos usando una distribución Debian o derivado además de ‘save‘ deberemos de pasarle un nombre por lo que acabarán guardándose en /var/log/iptables/<nombre-reglas>

Aviso: Si el directorio no existe deberemos de crearlo.

Para cargar las reglas podremos pasar el parámetro ‘load‘ en Red Hat y ‘load nombre-reglas‘ en Debian.

Crear reglas en la tabla NAT

Podemos ver las reglas para una determinada tabla con el parámetro -t y en nombre de la tabla:

$ sudo -t nat -L

Si queremos ser mas meticulosos y ver las reglas de una cadena concreta y ademas con detalles:

$ sudo -t nat -L PREROUTING -n -v

La opción -n da resultados numéricos y -v detalla información

Podemos eliminar todas las reglas de una tabla:

$ sudo -t nat -F

O concretar a solo las de una determinada cadena de una tabla concreta:

$ sudo -t nat -F OUTPUT

Podemos, además de eliminar todas las reglas, poner los contadores a cero (útil cuando vamos a comenzar a definir reglas desde 0):

$ sudo -t nat -F
$ sudo -t nat -Z

Nota: Podemos omitir la tabla para que afecte de forma global.

Crear la regla de oro, es decir, conectar todos los ordenadores de una red privada con Internet a través de un dispositivo que posee dos interfaces de red, una conectada hacia Internet y la otra hacia el switch de la red privada. Esto recibe el nombre de Source NAT o SNAT (cambia la dirección IP de origen, en este caso para convertirla en la IP pública de nuestro ISP):

$ sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 88.23.144.210

Añadimos esta regla a la cadena POSTROUTING indicando el origen (-s) nuestra red privada. Solo se aplicará a los paquetes que salgan (-o, output) por la interfaz de red ‘eth0‘, la acción (-j) será SNAT y la nueva IP es 88.23.144.210 (la ofrecida por nuestro ISP). Existen diferentes formas de conocer nuestra IP pública, por ejemplo a través del router o de Internet, accediendo a direcciones como http://www.cualesmiip.com

Aviso: Este tipo de regla es configurada de esta manera cuando la IP que nos ofrece nuestro ISP es estática. Suele ser un servicio extra ofrecido por la compañía mediante pago.

Ahora vamos a crear la misma regla pero para una IP dinámica, es decir, lo común en cuanto a las IP ofrecidas por los ISP.

$ sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Como vemos solo cambia la acción, que en este caso usamos MASQUERADE que lo que hace es usar la IP que tiene en esos momentos configurada nuestra interfaz eth0

Para terminar con la configuración de reglas básicas de IPtables vamos a crear una regla común, que por lo general se suele hacer a nivel ‘casero‘ desde el propio firewall del router ofrecido por nuestro ISP, y es la de direccionar peticiones de acceso a un determinado servicio que escucha en un puerto concreto. El circuito típico sería, una conexión que entra desde la IP pública y que debe ser encaminada hacia una dirección IP privada específica en la cual puede haber corriendo varios servicios pero en concreto queremos configurar el servidor web que por defecto escucha en el puerto 80. Para conseguir esto deberemos de aplicar la regla a la cadena PREROUTING ya que el paquete acaba de entrar y seremos nosotros quien le cree la ruta de encaminamiento.

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.1.52

Nuevas opciones serían la -i (input) y la acción DNAT que es equivalente a –to-destination con la que se modifica la IP de destino.

 

Anuncios

Deja un comentario, Gracias!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: