En este artículo te comparto una experiencia práctica configurando reglas de firewall con iptables
en un servidor Linux (basado en Fedora), orientado a mejorar la seguridad del sistema frente a intentos de escaneo y acceso no autorizado. La solución es sencilla, robusta y completamente gestionable por script.
🎯 Objetivo
- Aplicar reglas de firewall automáticamente al inicio del servidor.
- Mantener una lista dinámica de IPs maliciosas que serán bloqueadas.
- Proteger puertos sensibles y habilitar únicamente los servicios necesarios.
⚙️ Entorno
- Distribución: Fedora 36 (kernel 6.x)
- Servicios: Postfix, Dovecot, SpamAssassin, policyd-spf
- Firewall:
iptables
con configuración personalizada por script
🧱 Estructura del Script
Creamos un script llamado /root/iptables.sh
que contiene todas las reglas deseadas. A continuación, se muestra una versión simplificada y anonimizada del mismo:
#!/bin/bash
echo "Aplicando Reglas de Firewall..."
# Limpieza inicial
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# Políticas por defecto
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# Permitir loopback local
iptables -A INPUT -i lo -j ACCEPT
# Permitir tráfico desde servidores internos
iptables -A INPUT -s 192.168.1.10 -j ACCEPT # Servidor principal
iptables -A INPUT -s 192.168.1.11 -j ACCEPT # Servidor secundario
# ...
# Permitir acceso a ciertos servicios desde IPs autorizadas
iptables -A INPUT -s 192.168.1.100 -p tcp --dport 5432 -j ACCEPT # PostgreSQL
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
iptables -A INPUT -p tcp --dport 587 -j ACCEPT # SMTP con STARTTLS
# Bloquear IPs atacantes desde archivo externo
IPS_FILE="/root/ipsAtacantes.txt"
if [[ -f "$IPS_FILE" ]]; then
echo "Aplicando reglas contra IPs maliciosas..."
grep -E '^iptables -A INPUT' "$IPS_FILE" | while read -r regla; do
eval "$regla"
done
fi
# Bloquear puertos innecesarios
for port in 20 21 22 3306 5900; do
iptables -A INPUT -p tcp --dport $port -j DROP
done
echo "Reglas aplicadas correctamente."
🔐 Lista de IPs maliciosas
El archivo /root/ipsAtacantes.txt
contiene líneas como las siguientes:
iptables -A INPUT -s 203.0.113.45 -j DROP
iptables -A INPUT -s 198.51.100.22 -j DROP
Esto permite mantener un repositorio fácilmente editable de IPs no deseadas.
🔁 Automatización al inicio
Para que estas reglas se apliquen automáticamente al encender el servidor, se crea un servicio systemd
:
[Unit]
Description=Aplicar reglas personalizadas de iptables
After=network.target
[Service]
Type=oneshot
ExecStart=/root/iptables.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Guarda esto como /etc/systemd/system/iptables-custom.service
, luego habilítalo con:
chmod +x /root/iptables.sh
systemctl daemon-reexec
systemctl enable iptables-custom
systemctl start iptables-custom
✅ Resultados
- El servidor ahora aplica automáticamente reglas de seguridad en cada arranque.
- Las IPs maliciosas se bloquean antes de llegar a servicios como Postfix o Dovecot.
- Se redujo significativamente el ruido en los logs y el riesgo de intrusiones.
📝 Conclusiones
Este método ofrece una solución eficaz y transparente para gestionar seguridad de red en servidores Linux, especialmente útil cuando no se utiliza firewalld
o se prefiere un control más directo con iptables
.
Mantener reglas en un script también facilita auditorías, respaldo, y actualizaciones.
¿Ya usas algo similar en tu infraestructura? ¿Tienes un sistema para actualizar automáticamente tu lista de IPs maliciosas? Cuéntamelo en los comentarios.