Cómo configurar el firewall en Linux con IPtables
Aunque alguna vez aún toco Windows por mi mismo y en otras muchas me obligan (marditoh roedoreh) cuando tengo que hacer cosas lejos de mis equipos, para mí hablar de Windows es como algo que queda muy atrás en el tiempo. Cuando lo usaba de sistema principal (no tenía otro), intentaba blindarlo con software como el antivirus de Kaspersky y algún que otro cortafuegos, entre otras muchas herramientas de seguridad. En Linux nunca hemos estado tan expuestos como en Windows, pero también hay software que nos ayuda a estar más tranquilos, como IPtables, un cortafuegos o firewall.
El cortafuegos es un sistema de seguridad que se encarga de controlar el tráfico de red que entra y sale de un sistema operativo. Uno de los más extendidos en Linux es el mencionado IPtables, hasta el punto de que, probablemente y sin que lo sepas, ya esté instalado en tu sistema operativo desde que lo estrenaste. Lo que vamos a intentar hacer en este artículo es explicar cómo configurar el firewall en Linux con IPtables.
IPtables en Linux, lo que necesitas saber
La configuración de un cortafuegos puede ser complicada, y más en un sistema operativo como Linux en el que lo mejor se consigue a golpe de terminal. Antes de empezar, es recomendable conocer un poco los temas de redes y seguridad, o como mínimo entender que, cuando estamos conectados, nos estamos comunicando con otros equipos, y estos aparatos o sus dueños pueden tener buenas o malas intenciones. Por ese motivo, dependiendo del uso que hagamos de nuestro PC, merece la pena controlar todo lo que sale y todo lo que entra en él.
También, y por lo que pueda pasar, si tenemos otro cortafuegos en nuestro sistema Linux y vamos a empezar a retocar las cosas en IPtables, merece la pena hacer una copia de seguridad de la configuración de nuestro actual firewall. Con todo esto claro, empezamos de lleno a hablar de la configuración de IPtables.
- Lo primero que tenemos que hacer es instalar el paquete. La mayoría de distribuciones Linux lo tienen instalado por defecto, pero esto es algo que no siempre se cumple. Para saber si tenemos IPtables instalado en nuestro sistema operativo, abrimos un terminal y escribimos
iptables -v
. En mi caso y en el momento de escribir este artículo, mi terminal me devuelve iptables v1.8.8. En el caso de que no esté instalado, se puede instalar con:
Ubuntu/Debian o derivados:
sudo apt install iptables
Fedora/Redhat o derivados:
sudo yum install iptables
Arch Linux y derivados
sudo pacman -S iptables
Tras la instalación, se habilitará con:
sudo systemctl enable iptables sudo systemctl start iptables
Y se puede ver su estado con:
sudo systemctl status iptables
- Con el cortafuegos ya instalado, hay que configurar sus reglas. Las reglas de IPtables se dividen en tablas (de las que hablaremos con más detalle en un punto más adelante en este artículo): filter, nat y mangle, a las que hay que sumarles la raw y security. La tabla filter se utiliza para controlar el tráfico entrante y saliente, la tabla nat se utiliza para hacer NAT (Network Address Translation) y la tabla mangle se utiliza para modificar el paquete IP. Para configurar las reglas de la tabla filter, se utilizan los siguientes comandos:
- iptables -A INPUT -j ACCEPT (permitir todo el tráfico entrante).
- iptables -A OUTPUT -j ACCEPT (permitir todo el tráfico saliente).
- iptables -A FORWARD -j ACCEPT (permitir todo el tráfico de enrutamiento). Sin embargo, esta configuración permite todo el tráfico, y no es recomendable para un sistema en producción. Es importante especificar las reglas del firewall según las necesidades específicas del sistema. Por ejemplo, si se desea bloquear el tráfico entrante en el puerto 22 (SSH), se puede utilizar el comando:
iptables -A INPUT -p tcp --dport 22 -j DROP
- Otra cosa importante es guardar las configuraciones, para no perderlas al reiniciar el sistema. En Ubuntu y Debian se utiliza el comando «iptables-save» para guardar las configuraciones actuales en un archivo. En Red Hat y Fedora, se utiliza el comando «service iptables save» para guardar las configuraciones. Si tienes dudas de cuál usar, los comandos de Ubuntu/Debian suelen funcionar en más distribuciones.
Cargar las configuraciones tras un reinicio
Para cargar las configuraciones guardadas, se utilizan los mismos comandos utilizados para guardarlas, pero con la acción «restore» en lugar de «save». En Ubuntu y Debian, se utiliza el comando «iptables-restore» para cargar las configuraciones guardadas desde un archivo. En Red Hat y Fedora, se utiliza el comando «service iptables restore» para cargar las configuraciones guardadas. Una vez más, si se tienen dudas sobre qué comando usar, los de Ubuntu/Debian suelen ser los que mejor funcionan.
Es importante tener en cuenta que, si se realizan cambios en las configuraciones del firewall, es necesario volver a guardarlas y cargarlas para que los cambios surtan efecto. Es una manera de sobrescribir el archivo de configuración con los nuevos datos, y si no se hace de esta manera, los cambios no se guardarán.
Tablas en IPtables
Hay 5 tipos de tablas en IPTables y cada una tiene diferentes reglas aplicadas:
- filter : esta es la tabla principal y por defecto cuando se utiliza IPTables. Esto significa que si no se menciona ninguna tabla específica al aplicar reglas, éstas se aplicarán a la tabla filter. Como su nombre indica, la función de la tabla de filtros es decidir si se debe permitir que los paquetes lleguen a su destino o denegar su solicitud.
- nat (Network Address Translation): como su nombre indica, esta tabla permite a los usuarios determinar la traducción de las direcciones de red. El papel de esta tabla es determinar si modificar y cómo modificar el origen y el destino de la dirección del paquete.
- mangle: esta tabla nos permite modificar las cabeceras IP de los paquetes. Por ejemplo, se puede ajustar el TTL para alargar o acortar los saltos de red que puede soportar el paquete. De una manera similar, otras cabeceras IP también pueden ser modificadas de acuerdo a su preferencia.
- raw: el uso principal de esta tabla es rastrear conexiones ya que provee un mecanismo para marcar paquetes para ver paquetes como parte de una sesión en curso.
- security: usando la tabla security, los usuarios pueden aplicar marcas internas de contexto de seguridad SELinux en paquetes de red.
Las dos últimas tablas prácticamente no se usan, hasta el punto de que en la mayoría de documentación sólo se habla de filter, nat y mangle.
En el archivo de ayuda podemos encontrar ejemplos sobre cómo gestionar IPtables. Para verlo, abriremos un terminal y escribiremos iptables -h
.
Aunque iptables es una de las mejores opciones que hay para Linux, si se prefiere algo más sencillo con interfaz gráfica se puede echar un vistazo a Firewalld.