El Cortafuegos Definitivo de Linux
iptables es una utilidad de línea de comandos en sistemas operativos Linux que se utiliza para configurar las reglas de firewall. Actúa como la interfaz para el framework Netfilter del kernel de Linux, permitiendo a los administradores de sistemas definir cómo se debe manejar el tráfico de red, ya sea para permitirlo o denegarlo.
Datos Interesantes:
iptables opera a través de un sistema de tablas, cadenas y reglas.
Son categorías que manejan diferentes tipos de procesamiento del tráfico. Las cuatro tablas principales son:
Son listas de reglas dentro de una tabla. Un paquete debe pasar por las reglas de una cadena para ser procesado. Las cadenas más comunes son:
Son las instrucciones individuales dentro de una cadena. Cada regla especifica una condición (por ejemplo, una dirección IP de origen o un puerto de destino) y una acción a tomar si se cumple la condición (por ejemplo, ACCEPT - aceptar, DROP - eliminar, o REJECT - rechazar).
iptables se usa ampliamente para:
En la mayoría de las distribuciones Linux, iptables viene preinstalado. Si no es el caso:
sudo apt update && sudo apt install iptables
sudo yum install iptables
# o
sudo dnf install iptables
sudo pacman -S iptables
# Verificar si iptables está funcionando
sudo iptables -L -v -n
# Verificar versión
iptables --version
La sintaxis general de iptables sigue este patrón:
iptables [-t tabla] [acción] [cadena] [criterios] -j [target]
Los parámetros más comunes incluyen:
-t: Especifica la tabla (-t filter por defecto)-A: Agregar regla al final-I: Insertar regla en posición específica-D: Eliminar regla-s: Dirección IP origen-d: Dirección IP destino-p: Protocolo (tcp, udp, icmp)--dport: Puerto destino--sport: Puerto origen# Permitir SSH entrante en puerto 22
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Permitir SSH solo desde una IP específica
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
# Permitir HTTP (puerto 80)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Permitir HTTPS (puerto 443)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Permitir solo conexiones establecidas y relacionadas
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Bloquear una IP específica
sudo iptables -A INPUT -s 192.168.1.50 -j DROP
# Bloquear un rango de IPs
sudo iptables -A INPUT -s 192.168.1.0/24 -j DROP
# SNAT - Cambiar IP origen (para salida a Internet)
sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.1
# MASQUERADE - Para IPs dinámicas
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# DNAT - Redirección de puertos
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
# Redirigir puerto 8080 externo al 80 interno
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.10 --dport 80 -j SNAT --to-source 192.168.1.1
# Instalar iptables-persistent
sudo apt install iptables-persistent
# Guardar reglas actuales
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6
# Restaurar reglas
sudo iptables-restore < /etc/iptables/rules.v4
# Guardar reglas
sudo service iptables save
# O manualmente
sudo iptables-save > /etc/sysconfig/iptables
# Habilitar servicio
sudo systemctl start iptables
#!/bin/bash
# Configuración básica de iptables para servidor web
# Limpiar reglas existentes
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# Políticas por defecto
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Permitir loopback
iptables -I INPUT 1 -i lo -j ACCEPT
# Permitir conexiones establecidas y relacionadas
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# SSH (puerto 22) - SIEMPRE PRIMERO
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP y HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Ping (ICMP)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
echo "Configuración de iptables aplicada correctamente"
iptables sigue siendo una herramienta fundamental para la seguridad en Linux, ofreciendo un control granular sobre el tráfico de red. Aunque las distribuciones más modernas están migrando hacia nftables, el conocimiento de iptables permanece relevante debido a: