Introducción a iptables en Linux
Voy a dedicar un artículo a hablar de iptables pero sin profundizar en su uso, será más bien una introducción a iptables en Linux, para hacernos con los conceptos básicos. En un futuro artículo espero poder dedicarle una guía práctica con ejemplos de uso, pero para que esto sea posible, antes debemos conocer como funciona iptables en Linux.
Configurar de forma correcta un firewall o cortafuegos en nuestro servidor es un paso esencial para mejorar la seguridad del mismo. En esta guía haremos una introducción a iptables sin entrar en tecnicismos para que todos la podáis entender.
Introducción a iptables en Linux
Iptables es el firewall o cortafuegos incluido por defecto de la mayoría de las distribuciones Linux (Ubuntu, CentOS, Debian, etc). En la actualidad se está trabajando en nftables para que en un futuro reemplace a iptables, pero como de momento iptables es la opción más extendida, vamos hablar sobre esta.
Como funciona iptables.
El firewall iptables funciona comparando el tráfico de nuestra red con una o varias reglas. Estas reglas determinan las características que debe tener un paquete de datos para que se le apliquen determinadas acciones.
Existen multitud de opciones a la hora de determinar si un paquete cumple o no una regla específica. Dentro de estas opciones podemos definir: el tipo de protocolo, el puerto, la ip, la interfaz de red usada, etc…
Cuando hay una coincidencia para una de nuestras reglas, la acción que se lleva a cabo recibe el nombre de target. Un target puede ser una acción final, como aceptar el paquete o descartarlo. También existen otras posibilidades, por ejemplo que el target mueva el paquete a otra cadena de reglas o que simplemente registre la coincidencia.
Las reglas están organizadas en grupos, cada grupo de reglas recibe el nombre de cadena. Una cadena es un grupo de reglas que se aplican a un paquete de forma secuencial. Cuando un paquete coincide con el patrón de una de las reglas, se ejecuta la acción determinada en esa regla, pero no se comprueban el resto de reglas en la cadena para ese paquete.
Estas cadenas las puede crear el usuario según sus necesidades, pero existen tres cadenas definidas por defecto:
- INPUT: esta cadena maneja todos los paquetes del tráfico dirigido a tu servidor (datos que entran en el servidor).
- OUTPUT: esta cadena maneja el tráfico generado por nuestro servidor (datos que salen de nuestro servidor).
- FORWARD: esta cadena se encarga de manejar los paquetes que llegan a nuestro servidor pero que van destinados a otros servidores, es decir, estos datos son redirigidos a otros servidores.
Cada cadena puede contener ninguna o varias reglas. Además la cadena tendrá una acción por defecto, que se ejecutará en caso de que el paquete no coincida con ninguna de nuestras reglas.
La cadena más usada generalmente es INPUT, ya que es la que permite establecer las reglas para rechazar tráfico no deseado.
Cosas a tener en cuenta cuando trabajemos con iptables.
El firewall iptables está diseñado para manejar reglas de tráfico IPv4. Esto es algo que debemos tener en cuenta si nuestro servidor usa la tecnología IPv6, ya que entonces en lugar de iptables habrá que usar ip6tables con el que se pueden definir las reglas aplicadas al tráfico IPv6.
Otra cosa a tener en cuenta, es que las reglas de iptables no se guardan, por lo que si reiniciamos nuestro servidor las perderemos. Obviamente podemos conseguir que cada vez que se inicie el sistema se carguen una serie de reglas, pero eso lo veremos en otro tutorial.
Debemos tener cuidado cuando trabajemos con iptables, ya que podemos bloquear el acceso al servidor accidentalmente. Por ejemplo, en el caso de los servidores de Digital Ocean si bloqueamos el acceso SSH accidentalmente podemos acceder a través de la consola web que no se ve afectada por iptables.
Cuando escribimos nuestras reglas, el orden es muy importante y hay que comenzar escribiendo las reglas más especificas dejando las reglas más generales para el final. Si un paquete pasa por todas las reglas sin coincidir con ninguna, se la aplicará la regla más general, que se le llama política por defecto. Por este motivo hay que establecer y revisar las políticas por defecto.
Repasemos algunos conceptos:
- Regla de iptables: determina las características que debe tener un paquete para que se le apliquen determinadas acciones.
- Target: la acción que se lleva a cabo cuando hay una coincidencia en una de las reglas.
- Cadena: un grupo de reglas forma una cadena.
- Política por defecto: definen la acción que se realizará con el paquete sino se cumple ninguna regla.
Esquema de iptables simplificado:
Hasta aquí con la introducción a iptables en Linux, en un futuro publicaré una guía práctica de iptables con ejemplos, pero este artículo es el punto de partida para empezar trabajar con iptables.