20 junio, 2025

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.


Deja un comentario

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