Pequeña introducción a iptables + ejemplos variados.
Pequeña introducción a iptables + ejemplos variados.
Del Dept.tutorial-relampago-de-la-pradera.
Iptables es una aplicación en linea de comandos que gestiona el filtrado de paquetes en sistemas Linux (kernels 2.4.x), en base a las reglas que hayamos definido. Iptables es mucho más potente que su antecesor Ipchains (kernels 2.2.x).
La estructura de Iptables es básicamente una cola : cuando un paquete llega, este es validado contra cada una de las reglas del firewall, en el momento que alguna regla casa (match) , se ejecuta la acción que haya sido definida en la regla (descartar el paquete, acceptarlo, enrutarlo, etc).
La estructura de un comando iptables es la siguiente :
iptables -t [tabla] -[AIRDLFZNXP] [regla] [criterio] -j [acción]
Vamos a ver que es cada cosa :
| -t [tabla] | Esta parte del comando especifica cual es la tabla en la que queremos añadir la regla. Existen 2 tipos de tablas válidas : nat y filter, siendo filter la tabla por defecto si es omitida parte en el comando. Nat se refiere a las conexiones que serán modificadas por el firewall, como por ejemplo, enmascarar conexiones, realizar redirecciones de puertos, etc. Filter es la tabla donde se añaden las relacionadas con el filtrado. |
| -[AIRDLFZNXP] [regla] | Hay 4 opciones básicas con las que se puede jugar en esta apartado del comando. Estas opciones básicas son las siguientes :
|
| [criterio] | Aqui es donde se especificarán las características del tipo de paquete que casará con esta regla. Para establecer reglas sencillas (reglas stateless), podemos operar con las siguientes opciones : -s (ip/red fuente), -d (ip/red destino), –sport (puerto fuente), –dport (puerto destino), y -p (protocolo). Un ejemplo de comando de la sintaxis de un ocmando iptables sencillo podría ser este (la parte en que se define el criterio de la regla está en negrita) :
iptables -A FORWARD -p [protocolo] -s [ip/red fuente] –sport [puerto fuente] -d [ip/red destino] –dport [puerto destino] -j DROP |
| -j [action] | Aqui establecemos que es lo que hay que hacer con el paquete. Las posibles opciones son : ACCEPT, REJECT, DROP, REDIRECT, LOG (existén más, pero estas son las básicas).
ACCEPT aceptará el paquete. |
Iptables es muy flexible y puede hacer cualquier cosa que se os ocurra a los paquetes que pasan por la red, man iptables y http://www.netfilter.org/ os informarán de todo lo que hay que saber.
Para finalizar el tutorial-relampago, vamos a ver unos ejemplos y lo que hacen, que muchas veces aclaran más las cosas que la pura documentacion
.
| Comando | iptables -A INPUT -p tcp -i eth0 –dport 80 -j DROP |
| Descripción | Cerrar conexiones entrantes desde eth0 y hacia el puerto (local) 80 (HTTP) |
| Comando | iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/255.255.255.0 -j MASQUERADE |
| Descripción | Enmascarar por las conexiones procedentes de la red 10.0.0.0 como si lo hicieran desde la ip configurada en la interfaz eth0. (típica regla en un router linux compartiendo la conexión eth0 con la red local conectada a eth1). Una regla equivalente a esta puede ser esta (si atacamos por SNAT en lugar de MASQUERADE): iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to ip-de-eth0 |
| Comando | iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT –to-port 3128 |
| Descripción | Redireccionar al puerto 3128 (proxy) todos los paquetes que entran por eth1 y con destino puerto 80 (HTTP), de esta manera conseguimos un proxy transparente. |
| Comandos | iptables -A INPUT -p tcp -i eth0 -m state –state NEW,ESTABLISHED,RELATED –dport 22 -j ACCEPT iptables -A INPUT -p all -i eth0 -m state –state NEW,INVALID -j DROP |
| Descripción | Detener todas las conexiones entrantes desde la interfaz eth0 menos la conexiones al servicio ssh. La primera regla deja pasar los paquetes al 22 y la segunda cierra todo lo demas. Sin embargo todas las conexiones que se realizen desde la máquina (como navegar, consultar correo, etc) estarán permitidas por que no son conexiones iniciadas desde “fuera”. Con ipchains este tipo de reglas (reglas de inspección de estado, statefull) no existían. |
| Comandos | iptables -A OUTPUT -i eth0 -p icmp –icmp-type 8 -j DROP iptables -A FORWARD -i eth0 -p icmp –icmp-type 8 -j DROP |
| Descripción | Deshabilitar los paquetes ICMP entrantes de tipo echo (8) para el firewall (regla INPUT) y la red protegida (regla FORWARD). |
| Comandos | iptables -A INPUT -i eth0 -f -m length –length 0:40 -j DROP iptables -A FORWARD -i eth0 -f -m length 0:40 -j DROP |
| Descripción | Denegar paquetes fragmentados por debajo de 40 bytes. Tanto para conexiones que dirigidas al firewall (regla INPUT) como las que pasan a traves de él (regla FORWARD). Esta regla evita ataques del tipo “Tiny Fragment Attack” |
Autoría: LINUCA -Asociación de Usuarios GNU/Linux en Cantabria.-