¿Cómo funciona IPTables?

INDICE

IPTables es una herramienta de línea de comandos utilizada en sistemas Linux para configurar el firewall del sistema. Su función principal es controlar el tráfico de red, permitiendo o bloqueando paquetes según reglas definidas por el usuario. Esta herramienta no trabaja de forma independiente, sino que actúa como una interfaz para Netfilter, el módulo del kernel de Linux encargado del filtrado y manipulación de paquetes.

Netfilter opera directamente en el espacio del kernel, lo que permite analizar y modificar paquetes de red de forma eficiente. IPTables, por otro lado, funciona en el espacio de usuario, proporcionando una forma de gestionar y aplicar las reglas de filtrado que Netfilter ejecuta.

Cuando un paquete de red entra o sale de un sistema Linux, el kernel lo pasa a Netfilter, que lo evalúa siguiendo las reglas configuradas con IPTables. Según estas reglas, el paquete puede ser aceptado, bloqueado, modificado o redirigido. Este proceso es esencial para garantizar la seguridad y el control del tráfico de red en servidores y dispositivos Linux.

La mayoría de distribuciones de Linux incluyen IPTables de forma predeterminada. Sin embargo, si no está instalado, puedes hacerlo con los siguientes comandos según la distribución:

Instalación en Debian, Ubuntu y derivados:

Instalación en CentOS,RHEL y Fedora:

sudo yum install iptables-services -y

Instalación en Arch Linux y Manjaro:

Tras la instalación, algunos comandos útiles pueden ser los siguientes:

Verificar la versión instalada:

iptables –version

Listar las reglas actuales:

sudo iptables -L -v -n –line-numbers

Otra característica importante de IPTables es que, por defecto, las reglas no se guardan de forma permanente y se pierden tras reiniciar el sistema. Esto se debe a que IPTables gestiona las reglas en memoria, lo que significa que el kernel de Linux las mantiene activas solo mientras el sistema está en funcionamiento. Al reiniciar, la memoria se restablece, provocando la eliminación de todas las reglas configuradas. Para evitar que suceda, se pueden utilizar los siguientes comandos:

Para UBUNTU/DEBIAN:

Instalar el paquete para guardar reglas:

sudo apt install iptables-persistent -y

Guardar las reglas actuales:

sudo netfilter-persistent save

Cargar automáticamente las reglas en el arranque:

sudo systemctl enable netfilter-persistent

Los archivos de configuración se guardaran en:

Reglas IPv4: /etc/iptables/rules.v4

Reglas IPv6: /etc/iptables/rules.v6

Para CENTOS/RHEL:

Guardar reglas actuales en un archivo:

sudo service iptables save

Hacer que se carguen al reiniciar:

sudo systemctl enable iptables

sudo systemctl start iptables

Antes de entrar en profundidad con los ejemplos prácticos, es importante saber que iptables opera evaluando cada uno de los paquetes de red que entra o sale del sistema a través de una serie de tablas, que contienen cadenas, donde se aplican reglas especificas. Estas reglas determinan qué hacer con los paquetes en función de las políticas establecidas

Las tablas en IPTables son estructuras que organizan las reglas del firewall según su propósito y tipo de procesamiento. Cada tabla contiene diferentes cadenas, que a su vez tienen reglas específicas para gestionar el tráfico de red. IPTables incluye varias tablas, pero las más utilizadas son:

  • filter: Esta es la tabla principal y su propósito es permitir o bloquear tráfico.
  • nat: Se usa cuando los paquetes necesitan modificación de direcciones IP o puertos antes de ser entregador a su destino.
  • mangle: Se usa para modificar paquetes en aspectos avanzados. como la manipulación de TTL, marcas de conexión y prioridades de tráfico.
  • raw: Se usa para deshabilitar el seguimiento de conexiones en ciertos paquetes, lo que puede mejorar el rendimiento en reglas especificas.
  • security: Se usa para aplicar políticas de seguridad basadas en SELinux. Es poco utilizada en la práctica.

Las cadenas determinan qué hacer con los paquetes de red en función de su origen, destino y tipo. Cada tabla en IPTables contiene varias cadenas, y cada paquete que atraviesa el firewall debe ser evaluado por al menos una de ellas. Las cadenas pueden ser:

  • INPUT: Controla paquetes que entran a la máquina
  • OUTPUT: Controla paquetes que salen de la máquina
  • FORWARD: Controla paquetes que pasan a través del sistema (si actúa como router)
  • PREROUTING: Se usa para modificar paquetes antes de ser enrutados (en nat y mangle)
  • POSTROUTING: Se usa para modificar paquetes antes de que salgan (en nat y mangle)

Las políticas se aplican a las cadenas principales y determinan el comportamiento predeterminado cuando un paquete no coincide con ninguna regla. Existen dos políticas principales:

  • ACCEPT: Permite el tráfico por defecto. Si un paquete no coincide con ninguna regla, será aceptado.
  • DROP: Bloquea el tráfico sin dar respuesta. Si un paquete no coincide con ninguna regla, será descartado silenciosamente.
  • REJECT: Similar a DROP, pero envía un mensaje de error al remitente para indicar que el tráfico fue rechazado.

Esta regla configura un firewall simple que permite conexiones SSH (puerto 22) y bloquea todo el tráfico entrante por defecto. Es útil para servidores donde solo necesitas acceso remoto seguro sin exponer otros servicios innecesariamente.

sudo iptables -A INPUT -p tcp –dport 22 -j ACCEPT

  • -A INPUT: Manejamos el trafico entrante
  • -p tcp: Especifica que la regla se aplica al protocolo TCP
  • –dport 22: Filtra los paquetes que vayan difigidos al puerto 22
  • -j ACCEPT: Indica que los paquetes que cumplan la condición deben ser aceptados y permitidos

sudo iptables -P INPUT DROP

  • -P INPUT DROP: Cualquier trafico que no coincida con la regla anterior será bloqueado

Esta regla se usa para compartir la conexión a Internet desde un servidor a otros dispositivos en la red local. Es útil en escenarios donde el servidor actúa como router y necesita modificar la IP de origen de los paquetes para permitir el acceso externo.

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

  • -t nat: Se aplica en la tabla nat, usada para modificación de direcciones.
  • -A POSTROUTING: Aplica la regla despues de que el paquete ha sido enrutado.
  • -o eth0: Se aplica a paquetes salientes por la interfaz eth0.
  • -j MASQUERADE: Sustituye la IP de origen con la IP publica del servidor

⚠️Para que funcione, hay que permitir el reenvío de paquetes

Esta regla permite redirigir el tráfico de un puerto a otro, ya sea dentro del mismo servidor o hacia otra máquina en la red. Es útil, por ejemplo, cuando quieres que las conexiones entrantes en el puerto 8080 se envíen a otro servidor en el puerto 80.

sudo iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –to-destination 192.168.1.100:80

sudo iptables -A FORWARD -p tcp -d 192.168.1.100 –dport 80 -j ACCEPT

  • -t nat: Usa la tabla nat
  • -A PREROUTING: Modifica los paquetes entrantes antes de ser enrutados
  • -p tcp –dport 8080: Filtra tráfico TCP dirigido al puerto 8080
  • -j DNAT –to-destination 192.168.1.100:80: Redirige el tráfico a 192.168.1.100 en el puerto 80
  • -A FORWARD -p tcp -d 192.168.1.100 –dport 80 -j ACCEPT: Permite reenviar los paquetes hacia el servidor de destino

⚠️Para que funcione, el servidor debe permitir el reenvío de paquetes

Esta regla de IPTables ayuda a mitigar ataques de fuerza bruta limitando la cantidad de intentos de conexión SSH desde una misma IP en un período de tiempo. Es útil para reforzar la seguridad de servidores expuestos a Internet.

sudo iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –set –name SSH

sudo iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –update –seconds 60 –hitcount 3 –name SSH -j DROP

  • -A INPUT -p tcp –dport 22: Filtra tráfico TCP en el puerto 22 (SSH).
  • -m state –state NEW: Aplica solo a conexiones nuevas.
  • -m recent –set –name SSH: Registra cada IP que inicia una nueva conexión SSH.
  • -m recent –update –seconds 60 –hitcount 3 –name SSH -j DROP: Si una IP intenta más de 3 conexiones en 60 segundos, se bloquea.

0
0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio