Escolar Documentos
Profissional Documentos
Cultura Documentos
Iptables en Linux
Firewall en Linux
Walter Cervini
Amigos lectores, voy a dedicar este captulo a los firewall en Linux o lo que es lo mismo cortinas,
paredes o muros de fuego. La funcin bsica de un firewall es la de filtrar paquetes. Los firewall
pueden ser de Hardware o de Software. En Linux el firewall est compilado en el kernel, lo que lo hace
disponible en cualquier distribucin Linux, y no es necesario arrancar ningn tipo de aplicacin ya que
arranca cada vez que se inicia el Sistema Operativo. Se preguntarn, cmo dejo de filtrar paquetes?
Sencillo, el firewall en Linux es manejado por reglas, si no existen reglas, queda inactivo.
E
n el mundo Open Source existen una cantidad NAT: Permite el enmascaramiento de IP, la cual es muy
linux@software.com.pl
de aplicaciones grficas que permiten gene- usada en el paso de una red a otra, a travs de varias
rar reglas de modo sencillo, de las cuales me interfaces de red.
llama la atencin fwbuilder y webmin (ste MANGLE: Permite la modificacin del paquete como
permite la administracin de la mquina de forma re- puede ser TOS (Type of Service), TTL (Time to Live), o
mota va web, y tiene una funcin para manejo de filtro mark, lo cual permite marcar el paquete (usado para
de paquetes). QOS o Calidad de Servicio)
Cmo se crean las reglas... Cada una de estas tablas poseen cadenas, que no son ms
Para comenzar, para versiones de kernel anterior a 2.4, se que la agrupacin de reglas. Cada tabla posee cadenas por
usa el comando ipchain, posterior a esta versin de ker- defecto, las cuales no pueden ser eliminadas.
nel se usa iptables, que es la que explicaremos. La dife- Adems de las cadenas por defecto, podemos tener
rencia entre iptables e ipchain es el aporte de muchas mejo-nuestras cadenas, que nos permitirn agrupar y darle un
ras. poco de orden a las reglas.
Iptables maneja tablas las cuales son filter (filtrado), El proceso de funcionamiento de iptables lo podemos
NAT o Network Address Translation (translacin de puer- ver en la grfica siguiente, basta que alguna regla cumpla
tos), mangle (alteracin de paquetes). con la condicin del paquete entrante o saliente para que
Descripcin de las tablas sea aplicada:
Es recomendable recordar estos pasos, cuando se ge-
FILTER: Esta es la tabla por defecto, permite generar neren reglas. Continuando con reglas, adems de las tab-
reglas de filtrado. Qu paquetes aceptar, cuales recha- las y las cadenas, tenemos los parmetros que deseamos
zar o cuales paquetes omitir. filtrar, convertir, marcar, etc. Los parmetros pueden ser
60 Linux+ 4/2007
seguridad
Iptables en Linux
interfaces de red, sean de entrada o salida, Vamos a describir a continuacin los co- -L listado de reglas de la cadena cadena.
direcciones IP origen o destino, puertos de mandos: Si no se especifica la cadena listar todas
origen o destino, en fin podemos generar las reglas de todas las cadenas,
reglas desde lo ms simple a lo ms comple- -R Reemplazar la regla numero_regla -F eliminar todas las reglas de la cadena
jo. existente en la cadena cadena por los pa- cadena. (Si no se especifica la cadena eli-
Cada una de las reglas tiene como resul- rmetros dados, minar todas las reglas de todas las cade-
tado final una accin. La accin la podemos -A Agregar una nueva regla al final de la nas),
definir como qu debemos hacer con el pa- cadena especificada cadena, -Z Colocar en cero los contadores de pa-
quete. Cada cadena tiene una accin definida -I Insertar una nueva regla antes de la quetes y bytes de la cadena. (Si no se es-
por defecto, debido a que si no existe regla regla numero_regla en la cadena cadena pecifica la cadena borrar todos los con-
que cumpla con la condicin del paquete se por los parmetros dados, tadores de todas las reglas en todas las
ejecuta la accin por defecto. -D Eliminar la regla numero_regla exis- cadenas).
Las acciones pueden ser ACCEPT, RE- tente en la cadena cadena,
JECT, DROP, MASQUERADE, DNAT, SNAT, -N Crear una nueva cadena con el nom- Los parmetros
LOG bre cadena, Los parmetros en iptables son la base prin-
-X Elimina cadena con el nombre cade- cipal de una regla, ya que define la condicin
ACCEPT: como su nombre lo indica, el na. (No deben existir reglas para poder de una regla. Los parmetros pueden ser
paquete es aceptado, eliminar una cadena), direcciones IP de origen y/o destino, puerto
REJECT: el paquete es rechazado y el emi- -P Modifica accin por defecto de la ca- de entrada y/o salida, etc. Voy a detallar cada
sor recibe notificacin a travs del proto- dena cadena, uno de estos parmetros a continuacin:
colo ICMP, -E Modifica el nombre de la cadena nom-
DROP: el paquete es descartado y no se bre-anterior-cadena por nombre-nue- -i Interfaz de entrada (eth0, eth1,eth2,
enva ninguna notificacin al emisor, va-cadena, etc),
MASQUERADE: enmascaramiento de la
direccin IP origen de forma dinmica
(ms adelante se explicar),
DNAT: enmascaramiento de la direccin
destino, ideal para re-enrutado de pa-
quetes,
SNAT: enmascaramiento de la IP origen
similar a MASQUERADE pero con IP
FIJA.
www.lpmagazine.org 61
seguridad
Iptables en Linux
62 Linux+ 4/2007
seguridad
Iptables en Linux
Sintaxis
iptables [-t tabla] -A cadena parmetros
iptables [-t tabla] -I cadena [numero_regla] parmetros
iptables [-t tabla] -R cadena numero_regla parmetros
iptables [-t tabla] -D cadena numero_regla Figura 5. Regla por defecto de la cadena input en
iptables [-t tabla] -[LFZ] [cadena] la tabla filter
iptables [-t tabla] -N cadena
iptables [-t tabla] -X [cadena] iptables -A INPUT -p tcp dport ssh -m
iptables [-t tabla] -P cadena accin limit limit 10/sec -j LOG log-prefix
quina1 o de la mquina2, verifique en la cade- mo saludo de tres vas o handshaking. Cada El comando anterior mandar un mximo de
na segn la mquina. Para esto debemos te- vez que llega una nueva conexin se pro- 10 paquetes por segundo al Log evitando sa-
ner las direcciones IP de las mquinas, supo- duce un SYN, la mquina opuesta contesta turar de informacin nuestro disco duro.
niendo que la mquina 1 tenga la direccin con un ACK, establecindose la conexin, el Por lo general las cadenas INPUT y OUT-
192.168.0.10 y la mquina 2 192.168.19.20; estado de la conexin es ESTABLISHED, esta PUT operan sobre la propia mquina, pero
conexin puede generar nuevas conexiones, tambin podemos usar la mquina como en-
iptables -A INPUT -i eth0 -s teniendo estados RELATED, o conexiones re- rutador con filtrado de paquetes, muy usado
192.168.0.10 -j mquina1 lacionadas de la primera. Una vez cerrada la para control de trfico a Internet. Esto lo
iptables -A INPUT -i eth0 -s conexin pasa al estado FIN. Para qu nos efectuamos con la cadena FORWARD. Antes de-
192.168.19.20 -j mquina2 sirve todo esto? Podemos generar una regla bemos tener dos interfaces de red, activar el
que permita el paso de paquetes de conexio- paso de paquetes de una interfaz a la otra
Cada vez que llegue un paquete con la di- nes ya establecidas o relacionadas, y colo- y enmascarar los paquetes que salgan a In-
reccin ip 192.168.0.10 ste verificar los pro- cndola antes que cualquier verificacin de ternet con la IP pblica proporcionada por
tocolos en la cadena mquina 1, si no existe regla de filtrado. nuestro ISP.
ninguna condicin que cumpla con las reglas Para activar el paso de paquetes entre
el paquete ser descartado, en caso contrario Iptables -A INPUT -m state state interfaces ejecutamos echo 1 > /proc/sys/net/
se aplicar la regla. ESTABLISHED,RELATED -j ACCEPT ipv4/ip_forward , cuando est en 1 habilitamos
En caso que la regla por defecto sea el paso de datos entre interfaces, en cero lo
ACCEPT, podemos usar como accin REJECT Se supone que si esta condicin se cumple es deshabilitamos. En el caso de Fedora pode-
o DROP. Como mencion anteriormente, DROP que pas por un proceso previo de aceptacin mos usar el comando:
no enva ningn mensaje icmp al emisor del de alguna regla.
paquete y REJECT puede enviar mensajes icmp Anteriormente comentamos que si algu- sysctl; sysctl net-ipv4.ip_forward=1
preseleccionados al emisor, como ejemplo va- na regla se cumpla, iptables no efectuaba
mos a descartar que no puedan hacer ping ninguna verificacin. La nica accin que no Para enmascarar la direccin, podemos usar
a nuestra mquina enviando un mensaje cumple con esta norma es LOG. Cuando ge- el siguiente comando:
de ICMP Protocolo no encontrado; neramos una regla con accin LOG, sta man-
da una copia de la conexin al demonio de Iptables -t nat -A POSTROUTING -o eth1
iptables -A INPUT -p icmp -j DROP log o syslog, y es usado para llevar un re- -j MASQUERADE
gistro o depurar el filtrado de paquetes, un
(descarta solicitudes de ping) ejemplo sera esto supone que la interfaz de red eth1 es
la que est conectada a Internet y que la
iptables -A INPUT -p ICMP -j REJECT iptables -A INPUT -p tcp direccin que nos proporciona nuestro pro-
reject-type icpm-proto-unreachable dport ssh -j LOG veedor es dinmica o asignada a travs de
log-prefix "Conexin a SSH" DHCP.
(enva mensaje de protocolo no alcanzable) En el caso de que nuestro proveedor de
o tambin podemos enviar el mensaje Toda conexin o paso de paquetes a SSH es Internet nos proporcione una IP pblica fija
ICMP Mquina no encontrada; enviado al syslog, pudindose ver con el co- podemos usar la siguiente regla para hacer
mando dmesg, all tendremos informacin NAT
iptables -A INPUT -p ICMP -j REJECT detallada del paquete. Debemos tener mu-
reject-type icpm-host-unreachable cho cuidado al usar la accin LOG, ya que
podemos saturar nuestro disco. Podemos li-
Un tipo de regla algo especial es la maneja- mitar el envo de informacin al log con pa-
da por el mdulo conntrack, que no es ms rmetros de limitacin, con -m limit li-
que la verificacin del estado del paquete. mit tiempo. Un ejemplo de limitar a un m-
En el protocolo TCP el paquete pasa por tres ximo de paquetes por seg. sera algo como Figura 6. Trfico de entrada hacia el puerto http (80)
estados SYN, ACK, FIN. Esto es conocido co- esto: es aceptado
www.lpmagazine.org 63
seguridad
Iptables en Linux
64 Linux+ 4/2007
seguridad
Iptables en Linux
negamos el resto:
iptables -A INPUT
-m state state ESTABLISHED,
RELATED -j ACCEPT
Iptables -A INPUT
-i eth0 -j REJECT reject-with
icmp-host-unreachable Iptables
-A INPUT -i eth1 -j REJECT
reject-with icmp-host-unreachable Figura 11. NAT y redireccin de paquetes
www.lpmagazine.org 65