← Volver al inicio
iptables firewalld Firewall UFW Linux

Firewall con iptables y firewalld

25/02/2022

Configuración práctica de firewall en Linux con iptables, firewalld y UFW, cubriendo políticas por defecto, reglas de filtrado y NAT.

1. Conceptos básicos de iptables

# Ver reglas actuales:
iptables -L -v -n
iptables -L -v -n --line-numbers   # Con números de línea

# Tablas principales:
# filter: reglas de filtrado (INPUT, OUTPUT, FORWARD)
# nat:    traducción de direcciones (PREROUTING, POSTROUTING)
# mangle: modificación de paquetes

2. Política por defecto — Deny All

# Bloquear todo el tráfico entrante y de reenvío (política restrictiva):
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT   # Permitir todo el tráfico saliente

# Mantener conexiones ya establecidas:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Permitir loopback:
iptables -A INPUT -i lo -j ACCEPT

3. Reglas de filtrado comunes

# Permitir SSH (evitar bloquearse):
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Permitir HTTP y HTTPS:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Permitir DNS (UDP):
iptables -A INPUT -p udp --dport 53 -j ACCEPT

# Permitir ping (ICMP):
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Bloquear IP concreta:
iptables -A INPUT -s 192.168.1.100 -j DROP

# Limitar intentos de conexión (anti-brute force):
iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

4. NAT con iptables

# Masquerade (router/gateway):
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Activar IP forwarding:
echo 1 > /proc/sys/net/ipv4/ip_forward
# Permanente en /etc/sysctl.conf:
net.ipv4.ip_forward = 1

# Port forwarding (redirigir puerto externo a interno):
iptables -t nat -A PREROUTING -p tcp --dport 8080 \
  -j DNAT --to-destination 192.168.1.10:80

5. Guardar y restaurar reglas

# Guardar reglas actuales:
iptables-save > /etc/iptables/rules.v4

# Restaurar reglas:
iptables-restore < /etc/iptables/rules.v4

# En Debian/Ubuntu, persistencia automática:
apt install iptables-persistent
netfilter-persistent save

6. UFW — Interfaz simplificada

# Activar UFW:
ufw enable

# Política por defecto:
ufw default deny incoming
ufw default allow outgoing

# Permitir servicios:
ufw allow ssh
ufw allow http
ufw allow https
ufw allow 8080/tcp

# Denegar puertos:
ufw deny 23/tcp   # Telnet

# Ver estado:
ufw status verbose

# Desactivar:
ufw disable

7. firewalld (CentOS/RHEL/Fedora)

# Estado y zona activa:
firewall-cmd --state
firewall-cmd --get-active-zones

# Listar reglas de la zona por defecto:
firewall-cmd --list-all

# Añadir servicios permanentes:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=8080/tcp

# Aplicar cambios:
firewall-cmd --reload