Suite de herramientas avanzadas para administración de iptables especializada en servidores Left 4 Dead 2
Protección completa contra ataques DDoS específicos de Source Engine con sistema de logging y análisis integrado
- 🛡️ Protección Avanzada DDoS: Mitigación específica contra ataques comunes a servidores L4D2
- ⚖️ Doble Backend: Soporte modular para
iptables(legacy) ynftables(modern) - 🐳 Soporte Docker: Compatibilidad completa con servidores nativos y contenedores
- 🔐 Soporte OpenVPN: Acceso remoto seguro (host o Docker) sin afectar reglas de juego
- 📊 Sistema de Logging: Análisis detallado de ataques con reportes JSON comprehensivos
- ⚙️ Gestión Simplificada: Herramientas intuitivas para administrar reglas persistentes
- 🎯 Detección Inteligente: Identificación de patrones específicos de ataques Source Engine
- 📈 Análisis Temporal: Reportes por IP, puerto, día, semana, mes y tipo de ataque
- Sistema: Linux (Ubuntu 18.04+, Debian 9+, CentOS 7+)
- Permisos: Acceso root/sudo
- Dependencias: Python 3.6+, iptables, rsyslog
Instala primero los paquetes base del sistema:
sudo apt update
sudo apt install -y \
iptables \
nftables \
rsyslog \
python3 \
python3-pip \
python3-venvInstala luego las librerías de Python del analizador:
python3 -m pip install -r log-summary/requirements.txtOpcional (recomendado, para aislar dependencias):
./log-summary/venv.loggin.sh# 1. Clonar el repositorio
git clone https://github.com/AoC-Gamers/L4D2-Iptable-Suite.git
cd L4D2-Iptable-Suite
# 2. Configurar archivo de entorno
cp example.env .env
nano .env # Ajustar configuración según tu servidor
# 3. Aplicar reglas de iptables
sudo ./iptables.rules.sh
# 3b. (Opcional) Aplicar reglas con backend nftables
sudo ./nftables.rules.sh
# 4. Guardar persistencia del backend activo
sudo ./ipp.sh
# 5. Configurar entorno Python (Opcional - Recomendado)
chmod +x log-summary/venv.loggin.sh
./log-summary/venv.loggin.sh
# Seleccionar opción 1: Instalar entorno virtual
# 6. Configurar sistema de logging
# Método A: Con entorno virtual (recomendado)
./log-summary/venv.loggin.sh
# Seleccionar opción 6: Run iptable.loggin.py script
# Método B: Ejecución directa
python3 log-summary/app/iptable.loggin.py --env-file .envEdita el archivo .env según tu configuración:
# Tipo de servidor (0=Nativo, 1=Docker, 2=Ambos)
TYPECHAIN=0
# Puertos de tu servidor L4D2
L4D2_GAMESERVER_UDP_PORTS="27015"
L4D2_SOURCETV_UDP_PORTS="27020"
# Protección TCP RCON
# Incluir l4d2_tcp_protect en MODULES_ONLY para activar
# SSH: puertos expuestos al incluir módulo tcp_ssh
SSH_PORT="2222,22220:22229"
# IPs de confianza (bypass completo del sistema - ⚠️ TODOS los puertos)
BYPASS_SOURCE_IPS="198.51.100.10 203.0.113.5"
BYPASS_SOURCE_DOMAINS="admin-gateway.example.net"
# OpenVPN Server (host o Docker)
# Se configura solo si incluyes el módulo openvpn_server
OVPNSRV_PORT=1194
OVPNSRV_PROTO="udp"
OVPNSRV_SUBNET="10.8.0.0/24"
OVPNSRV_INTERFACE="tun0" # o "tun+" para múltiples
OVPNSRV_DOCKER_INTERFACE="docker0" # opcional para OpenVPN en Docker
OVPNSRV_LAN_SUBNET="192.168.1.0/24"
OVPNSRV_LAN_INTERFACE="enp3s0" # requerido si OVPNSRV_ENABLE_NAT=true
OVPNSRV_ENABLE_NAT=false
# (Opcional) Alias del router/LAN vía VPN server (DNAT)
OVPNSRV_ROUTER_REAL_IP=""
OVPNSRV_ROUTER_ALIAS_IP=""
OVPNSRV_LOG_ENABLED=false
OVPNSRV_LOG_PREFIX="VPN_SERVER_TRAFFIC: "
# OpenVPN Site-to-Site
# Se configura solo si incluyes el módulo openvpn_sitetosite.
# Incompatible con openvpn_server: no usar ambos a la vez.
OVPNS2S_INTERFACE="tun0"
OVPNS2S_LOCAL_SUBNETS="192.168.1.0/24"
OVPNS2S_REMOTE_SUBNETS=""
OVPNS2S_ENABLE_NAT=false
OVPNS2S_LOCAL_INTERFACE=""
OVPNS2S_LOG_ENABLED=false
OVPNS2S_LOG_PREFIX="VPN_S2S_TRAFFIC: "
# (Opcional) Alias del router/LAN en modo S2S (DNAT)
# Útil cuando hay subredes solapadas (ej. 192.168.1.0/24 en ambos sitios)
# Formato multi-alias: "real_ip;alias_ip,real_ip;alias_ip"
OVPNS2S_ROUTER_ALIAS=""
# Formato legacy (single alias, compatible)
OVPNS2S_ROUTER_REAL_IP=""
OVPNS2S_ROUTER_ALIAS_IP=""
# Si true, hace SNAT de retorno hacia el router real (requiere OVPNS2S_LOCAL_INTERFACE)
OVPNS2S_ROUTER_ALIAS_SNAT=false
# Puertos extra permitidos (servicios adicionales)
# Formato: "puerto,puerto" o rangos "inicio:fin" (multiport)
# Vacío = no agrega excepciones extras.
BYPASS_UDP_PORTS=""
BYPASS_TCP_PORTS=""
# A2S / Steam Group
# En l4d2_a2s_filters, poner RATE=0 o BURST=0 desactiva el limitador
# específico de esa clase. Útil para diagnóstico temporal de visibilidad.
A2S_INFO_RATE=75
A2S_INFO_BURST=375
A2S_PLAYERS_RATE=24
A2S_PLAYERS_BURST=120
A2S_RULES_RATE=12
A2S_RULES_BURST=60
STEAM_GROUP_RATE=30
STEAM_GROUP_BURST=150
L4D2_LOGIN_RATE=4
L4D2_LOGIN_BURST=16
Nota Docker: esta suite usa directamente la cadena `DOCKER-USER` en `filter` para las reglas del usuario, siguiendo el flujo recomendado por Docker.
⚠️ ADVERTENCIA: Las entradas deBYPASS_SOURCE_IPSyBYPASS_SOURCE_DOMAINStendrán acceso completo e irrestricto a toda la máquina (SSH, Web, Bases de datos, APIs, etc.). Usar solo para administradores y orígenes absolutamente confiables.
Script principal que implementa reglas avanzadas de iptables específicamente diseñadas para mitigar ataques DDoS contra servidores L4D2. Incluye protección contra floods UDP, ataques challenge, validación de paquetes, consultas A2S maliciosas, spam TCP/RCON, consultas Steam Group y ping floods.
Soporta configuración flexible para servidores nativos, contenedores Docker o configuraciones híbridas mediante variables de entorno.
Entrypoint equivalente para aplicar protección usando nftables con la misma filosofía modular y configuración compartida por .env.
Ideal para entornos modernos que ya operan con reglas nft y desean mantener paridad funcional con el flujo legacy.
Watcher systemd para hosts detrás de una conexión residencial con IP pública
dinámica. Consulta la IPv4 WAN, espera confirmación de los nameservers
autoritativos de No-IP y reaplica nftables solamente cuando detecta un cambio
confirmado. Incluye validación previa, estado persistente y un hook opcional
para solicitar un heartbeat a los gameservers sin reiniciarlos.
make public-ip-watch-test
sudo make public-ip-watch-install
make public-ip-watch-statusHerramienta interactiva con menú para gestionar reglas guardadas y persistencia operativa de ambos backends. En iptables maneja iptables-persistent; en nftables trabaja con nftables.service y /etc/nftables.conf.
Simplifica significativamente la administración de reglas guardadas, recarga selectiva y diagnóstico del estado activo/persistente.
Herramienta avanzada de logging y análisis que configura automáticamente rsyslog para capturar logs de iptables y genera reportes JSON detallados. Proporciona análisis temporal por IP, puerto, día, semana, mes y tipo de ataque, permitiendo identificar patrones maliciosos y tendencias de seguridad.
Incluye detección de 12 tipos específicos de ataques contra servidores L4D2 con categorización por severidad y recomendaciones de mitigación.
Sistema avanzado de gestión de entorno virtual Python con interfaz interactiva de 8 opciones. Facilita la instalación, configuración y uso de iptable.loggin.py ubicado en log-summary/app/ mediante aislamiento de dependencias y compatibilidad multiplataforma.
Características principales:
- 🖥️ Compatibilidad multiplataforma: Windows, Linux, macOS
- 🔧 Instalación automática: Crea y configura el entorno virtual automáticamente
- 🐍 Ejecución guiada: Ejecuta el analizador desde
log-summary/con el entorno listo - 📊 Verificación completa: Confirma dependencias y archivos antes de ejecutar
- 🎯 Uso directo: Opción 6 ejecuta el script sin activación manual del entorno
Menú interactivo:
Available options:
1. 🔧 Install virtual environment
2. ▶️ Activate virtual environment
3. ⏹️ Deactivate virtual environment
4. 📊 Check environment status
5. 🔄 Reinstall dependencies
6. 🐍 Run iptable.loggin.py script
7. ❓ Help
8. 🚪 Exit
- Smoke tests modulares:
tests/smoke-modules.sh- Verifica contrato mínimo por módulo y ejecuta
--dry-runde ambos backends si hay privilegios/dependencias.
- Verifica contrato mínimo por módulo y ejecuta
Comando rápido:
./tests/smoke-modules.shHerramienta opcional para generar resúmenes rápidos desde logs estructurados FW_EVT en formato JSON/TXT, útil para operación por SSH o revisión rápida.
Ruta:
log-summaryDocumentación:
log-summary/docs/log-summary-container.md# .env configuration
TYPECHAIN=0
L4D2_GAMESERVER_UDP_PORTS="27015"
L4D2_SOURCETV_UDP_PORTS="27020"
# Activación TCP protect por módulo: incluir l4d2_tcp_protect en MODULES_ONLY# .env configuration
TYPECHAIN=0
L4D2_GAMESERVER_UDP_PORTS="27015:27030" # 16 servidores
L4D2_SOURCETV_UDP_PORTS="27115:27130" # 16 SourceTV
# Activación TCP protect por módulo: incluir l4d2_tcp_protect en MODULES_ONLY# .env configuration
TYPECHAIN=1 # Solo Docker
L4D2_GAMESERVER_UDP_PORTS="27015:27018"
TCP_DOCKER="80,443" # Puertos adicionales
SSH_DOCKER="2222"# .env configuration
TYPECHAIN=2 # Nativo + Docker
L4D2_GAMESERVER_UDP_PORTS="27015:27020"
L4D2_SOURCETV_UDP_PORTS="27115:27120"
TCP_DOCKER="80,443,8080"
# Activación TCP protect por módulo: incluir l4d2_tcp_protect en MODULES_ONLYEl sistema identifica y mitiga los siguientes patrones de ataque:
| Tipo de Ataque | Descripción | Severidad | Impacto |
|---|---|---|---|
| A2S_INFO_FLOOD | Flood de consultas de información del servidor | Media | Saturación CPU/Bandwidth |
| A2S_PLAYERS_FLOOD | Flood de consultas de lista de jugadores | Media | Mayor consumo de bandwidth |
| A2S_RULES_FLOOD | Flood de consultas de variables del servidor | Alta | Respuesta muy grande |
| L4D2_CONNECT_FLOOD | Flood de paquetes "connect" | Alta | Bloquea conexiones legítimas |
| L4D2_RESERVE_FLOOD | Flood de paquetes "reserve" | Alta | Inestabilidad de lobby |
| UDP_NEW_LIMIT | Límite de conexiones UDP nuevas | Baja | Protección preventiva |
| UDP_EST_LIMIT | Límite de conexiones UDP establecidas | Media | Afecta jugadores activos |
| TCP_RCON_BLOCK | Intentos de acceso RCON malicioso | Alta | Compromiso administrativo |
| INVALID_SIZE | Paquetes con tamaños maliciosos | Baja | Consumo CPU |
| MALFORMED | Paquetes UDP malformados | Baja | Potencial crash |
| STEAM_GROUP_FLOOD | Flood de consultas Steam | Media | Recursos Steam API |
| ICMP_FLOOD | Ping flood | Baja | Degradación de red |
# Legacy (iptables)
sudo ./iptables.rules.sh
# Modern (nftables)
sudo ./nftables.rules.shmodules/
├─ common_loader.sh
├─ preload.sh
├─ postload.sh
├─ common_nft.sh
├─ ip/ # módulos ip_*.sh
└─ nf/ # módulos nf_*.sh
- SSH base
ip_tcp_ssh/nf_tcp_ssh- Variables:
SSH_PORT,SSH_DOCKER,SSH_RATE,SSH_BURST,LOG_PREFIX_SSH_ABUSE
- Protección TCP L4D2 (separada)
ip_l4d2_tcp_protect/nf_l4d2_tcp_protect- Variables:
L4D2_GAMESERVER_UDP_PORTS,LOG_PREFIX_TCP_RCON_BLOCK
- Cadena anti-spam TCP (ip específico)
ip_l4d2_tcpfilter_chain/nf_l4d2_tcpfilter_chain(compatibilidad)- En
nftables, la protección efectiva la aplicanf_l4d2_tcp_protect.
# Configurar reglas básicas
sudo ./iptables.rules.sh
# Guardar persistencia del backend activo
sudo ./ipp.sh # iptables: Install + Save | nftables: Save to /etc/nftables.conf
# Configurar logging con entorno virtual (recomendado)
./log-summary/venv.loggin.sh # Opción 1: Install, Opción 6: Run script
# O configurar logging directamente
python3 log-summary/app/iptable.loggin.py --env-file .env
# Si vas a usar la opción 1 (configurar rsyslog), ejecútalo con sudo# Generar reportes semanales con entorno virtual
./log-summary/venv.loggin.sh # Opción 6: Run script, Opción 4: Analyze logs
# O generar reportes directamente
python3 log-summary/app/iptable.loggin.py --env-file .env # Opción 4: Analyze logs
# Verificar estado de reglas
sudo ./ipp.sh # Opción 9: Status# Actualizar configuración
nano .env
sudo ./iptables.rules.sh # Reaplicar reglas
sudo ./ipp.sh # Opción 5: Save rules
# Limpiar logs antiguos
sudo logrotate -f /etc/logrotate.d/l4d2-iptables- 📖 iptables.rules.sh - Documentación técnica del motor de protección
- 📖 nftables.rules.sh - Arquitectura y operación del backend moderno
- 📡 Public IP watcher - Detección de cambios WAN, confirmación No-IP y recarga segura
- 📖 Arquitectura Modular - Contrato de módulos, paridad y validación
- 🧭 Auditoría Operativa - Hallazgos prácticos, falsos positivos y checklist de diagnóstico
- 📖 ipp.sh - Guía del gestor de persistencia
- 📖 iptable.loggin.py - Manual del sistema de análisis
- 📖 log-summary/venv.loggin.sh - Guía del gestor de entorno virtual
- 📋 example.env - Archivo de configuración de ejemplo
- 📊 log-summary/summary_example/ - Ejemplos de reportes JSON
- 📚 Documentación de Módulos - Índice con descripciones breves de cada módulo
Este proyecto está basado en el trabajo original de SirPlease y su repositorio IPTables. La suite L4D2 IPTables incluye modificaciones significativas, nuevas funcionalidades y herramientas complementarias desarrolladas por la comunidad AoC-Gamers.
- SirPlease - Creador del script base de iptables para L4D2
- AoC-Gamers - Desarrollo de herramientas complementarias y mejoras
- Sheo - Por sus aportes para el bloqueo de ataques A2S.
- Comunidad L4D2 - Testing y feedback
¿Te ha sido útil esta suite? ⭐ ¡Dale una estrella al repositorio!
Desarrollado para la comunidad de Left 4 Dead 2