Iptables, el Firewall de Linux
El otro día comentábamos sobre cual una de las primeras preguntas que alguna vez todos los que venimos del mundo Windows nos hacemos al cruzarnos. Ergo: Es cierto que no existen virus? Y pese a que nos dicen que si pero que son demasiado escasos y que sus efectos sobre un OS Linux es “ninguno”, la segunda pregunta (paranoica) es: “bueno, entiendo, pero que antivirus me recomiendan?”
Es así que la 3 pregunta, casi obligada es, ¿Qué Firewall me recomiendan?
Si bien es sabido que hoy por hoy Linux es el SO más seguro (recordemos que en el mundo MacOS existen virus algo más dañinos y que en los encuentros de seguridad, Linux termina siendo invulnerable, siendo MacOS vulnerada a travez de Flash en Safari), esto no quiere decir que Linux no disponga de un Firewall.
Ello así, Linux dispone de un poderoso Firewall integrado ya a su kernel, se trata de iptables, el cual es utilizado en los servers y demás dada su solidez, velocidad, etc.
- Ahora, no está de más recordar que es un Firewall:
Un firewall es un dispositivo que filtra el tráfico entre redes, como mínimo dos. El firewall puede ser un dispositivo físico o un software sobre un sistema operativo. En general debemos verlo como una caja con DOS o mas interfaces de red en la que se establecen una reglas de filtrado con las que se decide si una conexión determinada puede establecerse o no. Incluso puede ir más allá y realizar modificaciones sobre las comunicaciones, como el NAT.
Esa sería la definición genérica, hoy en dia un firewall es un hardware especifico con un sistema operativo o una IOS que filtra el tráfico TCP/UDP/ICMP/../IP y decide si un paquete pasa, se modifica, se convierte o se descarta. Para que un firewall entre redes funcione como tal debe tener al menos dos tarjetas de red.
En definitiva lo que se hace es:
- Habilita el acceso a puertos de administración a determinadas IPs privilegiadas
- Enmascara el trafico de la red local hacia el exterior (NAT, una petición de un pc de la LAN sale al exterior con la ip pública), para poder salir a internet
- Deniega el acceso desde el exterior a puertos de administración y a todo lo que este entre 1 y 1024.
Hay dos maneras de implementar un firewall:
- Política por defecto ACEPTAR: en principio todo lo que entra y sale por el firewall se acepta y solo se denegará lo que se diga explícitamente.
- Política por defecto DENEGAR: todo esta denegado, y solo se permitirá pasar por el firewall aquellos que se permita explícitamente.
Como es obvio imaginar, la primera política facilita mucho la gestión del firewall, ya que simplemente nos tenemos que preocupar de proteger aquellos puertos o direcciones que sabemos que nos interesa; el resto no importa tanto y se deja pasar.
En cambio, si la política por defecto es DENEGAR, a no ser que lo permitamos explícitamente, el firewall se convierte en un auténtico MURO infranqueable. El problema es que es mucho más difícil preparar un firewall así, y hay que tener muy claro como funciona el sistema (sea iptables o el que sea) y que es lo que se tiene que abrir sin caer en la tentación de empezar a meter reglas super-permisivas.
Esta configuración de firewall es la recomendada, aunque no es aconsejable usarla si no se domina mínimamente el sistema. Uno de los objetos principales de este documento es mostrar la forma de crear este tipo de firewalls.
Netfilter es un framework disponible en el núcleo Linux que permite interceptar y manipular paquetes de red. Dicho framework permite realizar el manejo de paquetes en diferentes estados del procesamiento. Netfilter es también el nombre que recibe el proyecto que se encarga de ofrecer herramientas libres para cortafuegos basados en Linux.
El componente más popular construido sobre Netfilter es iptables, una herramientas de cortafuegos que permite no solamente filtrar paquetes, sino también realizar traducción de direcciones de red (NAT) para IPv4 o mantener registros de log. El proyecto ofrecía compatibilidad hacia atrás con ipchains hasta hace relativamente poco, aunque hoy día dicho soporte ya ha sido retirado al considerarse una herramienta obsoleta. El proyecto Netfilter no sólo ofrece componentes disponibles como módulos del núcleo sino que también ofrece herramientas de espacio de usuario y librerías.
iptables es el nombre de la herramienta de espacio de usuario mediante la cual el administrador puede definir políticas de filtrado del tráfico que circula por la red. El nombre iptables se utiliza frecuentemente de forma errónea para referirse a toda la infraestructura ofrecida por el proyecto Netfilter. Sin embargo, el proyecto ofrece otros subsistemas independientes de iptables tales como el connection tracking system o sistema de seguimiento de conexiones, o que, que permite encolar paquetes para que sean tratados desde espacio de usuario. iptables es un software disponible en prácticamente todas las distribuciones de Linux actuales.
Permite al administrador del sistema definir reglas acerca de qué hacer con los paquetes de red. Las reglas se agrupan en cadenas: cada cadena es una lista ordenada de reglas. Las cadenas se agrupan en tablas: cada tabla está asociada con un tipo diferente de procesamiento de paquetes.
Cada regla especifica qué paquetes la cumplen (match) y un destino que indica qué hacer con el paquete si éste cumple la regla. Cada paquete de red que llega a una computadora o que se envía desde una computadora recorre por lo menos una cadena y cada regla de esa cadena se comprueba con el paquete. Si la regla cumple con el datagrama, el recorrido se detiene y el destino de la regla dicta lo que se debe hacer con el paquete. Si el paquete alcanza el fin de una cadena predefinida sin haberse correspondido con ninguna regla de la cadena, la política de destino de la cadena dicta qué hacer con el paquete. Si el paquete alcanza el fin de una cadena definida por el usuario sin haber cumplido ninguna regla de la cadena o si la cadena definida por el usuario está vacía, el recorrido continúa en la cadena que hizo la llamada (lo que se denomina implicit target RETURN o RETORNO de destino implícito). Solo las cadenas predefinidas tienen políticas.
En iptables, las reglas se agrupan en cadenas. Una cadena es un conjunto de reglas para paquetes IP, que determinan lo que se debe hacer con ellos. Cada regla puede desechar el paquete de la cadena (cortocircuito), con lo cual otras cadenas no serán consideradas. Una cadena puede contener un enlace a otra cadena: si el paquete pasa a través de esa cadena entera o si cumple una regla de destino de retorno, va a continuar en la primera cadena. No hay un limite respecto de cuán anidadas pueden estar las cadenas. Hay tres cadenas básicas (INPUT, OUTPUT y FORWARD: ENTRADA, SALIDA y REENVÍO) y el usuario puede crear tantas como desee. Una regla puede ser simplemente un puntero a una cadena.
- Opciones comunes
En cada una de las formas de invocación de iptables que se muestra a continuación, las siguientes opciones comunes están disponibles:
-t tabla
- Hace que el comando se aplique a la tabla especificada. Si esta opción se omite, el comando se aplica a la tabla filter por defecto.
- -v
- Produce una salida con detalles (del inglés, verbose).
- -n
- Produce una salida numérica (es decir, números de puerto en lugar de nombres de servicio y direcciones IP en lugar de nombres de dominio).
-
- Firewall con iptables
Para generar este script con iptables, se deben seguir los siguientes pasos:
-
Se crea un archivo de texto con un editor de texto plano cualquiera, como ser vi, emacs o nano, entre muchísimos otros. A este archivo se lo llama, por ejemplo, iptables_ipt.
- Se le da permiso de ejecución mediante el comando chmod u+x o también chmod 777 iptables_ipt.
- Se ejecuta desde la línea de comandos ./iptables_ipt
#!/bin/bash iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m conntrack --ctstate NEW ! -i eth1 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE iptables -A FORWARD -i eth1 -o eth1 -j REJECT iptables -P INPUT DROP iptables -P FORWARD DROP echo "Firewall Activado"
Para este ejemplo, eth0 es la puerta local, y eth1 es la puerta de enlace a Internet. Puede además agregarse bloqueo de puertos específicos, como por ejemplo:
iptables -A INPUT -p tcp –dport 25 -j DROP # smtp filtrado
Corroboramos con nmap los puertos y nos dirá algo parecido
sudo nmap -sT “nuestra IP”
- Filtrado de puertos
Para filtrar un puerto específico, como el 22 ó 443, el código recomendable sería el siguiente:
sudo iptables -t filter -I INPUT -p tcp –dport 22 -j DROP
sudo iptables -t filter -I INPUT -p tcp –dport 443 -j DROP
Ahora, como esto no pretende ser un thread sobre iptables, sino poner claro sobre oscuro, más información pueden encontrar acá.
Retomando, decíamos que la tercer pregunta casi obligada es preguntar por un buen firewall para instalar. Acá es donde debemos terminar de aclarar la idea… Iptables es el firewall de nuestro Linux, los programas que nos recomiendan son GUIs o entornos gráficos que nos facilitan ingresar, quitar, modificar reglas a nuestro firewall. Los GUIs que suelen recomendarnos son: Firestarter, o utilizá ufw (Uncomplicated Firewall- el cual es un front end de consola y que activamos simplemente con sudo ufw enable) o para mejorar la utilización de ufw nos dicen, utilizá gufw…
Firestarter puede ser instalado con:
sudo apt-get install firestarter
Por su parte UFW se inicia de la forma que lo mencionamos
sudo ufw enable
Si queremos desactivarlo simplemente cambiamos enable por disable
Ahora, para manipular ufw es conveniente utilizar gufw.
Luego de determinada las reglas que querramos, podemos cerrar con toda tranquilidad el GUI de nuestro iptable y no equivale a “cerrar o apagar” el firewall…
Como dijimos, Iptables no se apaga, está integrado al kernel y mientras nuestra PC esté encendida, iptables estará cumpliendo su función…
Ejemplo de ello es cuando reiniciamos las X y vemos que aparece la leyenda de detención del firewall.
Saludos!















Muy buena entrada, simplificaste muy bien el tema de iptable, aunque te falto explicar bien el ejemplo del script.
Te felicito, te sigo ya desde hace 1 mes aprox.
Gracias Alberto! Es un tema bastante engorroso cuando migramos de Win… Normalmente uno pregunta y nos dicen Firestarter y otro… Asique esa era un poco la idea…
Lo del Script no es autoría mía, sino que hace tiempo vengo recopilando información al respecto y seguiremos profundizando.
Un abrazo y muchas gracias!