Para configurar un firewall o cortafuegos en Linux, podemos hacer uso de iptables, una potente herramienta que parece olvidada por muchos usuarios. Aunque existen otros métodos, como ebtables y arptables para filtrar tráfico a nivel de enlaces, o Squid a nivel de aplicaciones, iptables puede resultar muy útil para la mayorÃa de los casos, implementando una buena seguridad en nuestro sistema a nivel de tráfico y transporte de red.
El kernel Linux implementa iptables, una parte que se ocupa de filtrar paquetes y que en este artÃculo te enseñamos a configurar de una forma sencilla. Dicho de forma sencilla, iptables identifica qué información puede entrar y cual no, aislando a tu equipo de posibles amenazas. Y aunque existan otros proyectos como Firehol, Firestarter, etc., muchos de estos programas para firewall usan iptables…
Pues bien, pongámonos manos a la obra, con ejemplos lo entenderéis todo mejor (para estos casos es necesario tener privilegios, por lo que usa sudo delante del comando o hazte root):
La forma general de usar iptables para crear una polÃtica de filtrado es:
IPTABLES -ARGUMENTOS I/O ACCIÓN
Donde -ARGUMENTO es el argumento que usaremos, normalmente -P para establecer la polÃtica por defecto, aunque existen otros como -L para ver las politicas que tenemos configuradas, -F para eliminar una polÃtica creada, -Z para poner a cero los contadores de bytes y paquetes, etc. Otra opción es -A para añadir una polÃtica (no por defecto), -I para insertar una regla en una posición concreta, y -D suprimir una regla dada. También habrá otros argumentos para señalar -p protocolos, –sport puerto fuente, –dport para puerto destino, -i interfaz entrante, -o interfaz saliente, -s dirección IP origen y -d dirección IP destino.

Además I/O representarÃa si la polÃtica se aplica a la entrada INPUT, a la salida OUTPUT o se trata de una redirección de tráfico FORWARD (existen otras como PREROUTING, POSTROUTING, pero no las usaremos). Finalmente, lo que yo he llamado ACCIÓN puede tomar el valor ACCEPT si aceptamos, REJECT si rechazamos o DROP si eliminamos. La diferencia entre DROP y REJECT es que cuando se rechaza un paquete con REJECT, la máquina que lo originó sabrá que ha sido rechazado, pero con DROP se actúa con silencio y el atacante u origen no sabrá que ha pasado, y tampoco sabrá si tenemos un cortafuegos o simplemente ha fallado la conexión. También hay otras como LOG, que mandan un seguimiento del syslog…
Para modificar reglas, podemos editar el fichero de iptables con nuestro editor de texto preferido, nano, gedit,… o crear scripts con reglas (si quieres anularlas, puedes hacerlo poniendo un # delante de la lÃnea para que sea ignorada como un comentario) mediante la consola con comandos como lo explicaremos aquÃ. En Debian y derivados también se pueden usar las herramientas iptables-save e iptables-restore…
La polÃtica más extrema es bloquear todo, absolutamente todo el tráfico, pero esto nos dejará aislados, con:
iptables -P INPUT DROP
Para aceptarlo todo:
iptables -P INPUT ACCEPT
Si queremos que todo el tráfico saliente desde nuestro equipo sea aceptado:
iptables -P OUTPUT ACEPT
La otra acción radical serÃa borrar todas las polÃticas de iptables con:
iptables -F
Vamos a reglas más concretas, imagina que tienes un servidor web y por tanto el tráfico por el puerto 80 debe estar permitido:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Y si además de la regla anterior, queremos que un equipo con iptables solo sea visto por los equipos de nuestra subred y que pase desapercibido para una red externa:
iptables -A INPUT -p tcp -s 192.168.30.0/24 --dport 80 -j ACCEPT
En la lÃnea anterior, lo que le estamos diciendo a iptables es que se añada una regla -A, para que las entradas INPUT, y el protocolo TCP, por el puerto 80, queden aceptadas. Ahora imagina que quieres que la navegación web sea rechazada para las máquinas locales que pasen a través de la máquina que ejecuta iptables:
iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 DROP
Creo que el uso es sencillo, teniendo en cuenta para qué sirve cada parámetro de iptables, podemos añadir reglas sencillas. Se pueden hacer todas las combinaciones y reglas que imaginemos… Para no extenderme más, solo agregar una cosa más, y es que si la máquina se reinicia, se borrarán las polÃticas creadas. Las tablas se reinician y quedarán como antes, por eso, una vez tengas bien definidas las reglas, si quieres hacerlas permanentes, debes hacer que se lancen desde /etc/rc.local o si tienes un Debian o derivados usar las herramientas que se nos dan (iptables-save, iptables-restore e iptables-apply).