Configuración práctica de firewall en Linux con iptables, firewalld y UFW, cubriendo políticas por defecto, reglas de filtrado y NAT.
# 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
# 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
# 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
# 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
# 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
# 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
# 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