Firewall y Red
Resumen¶
Esta guía cubre configuración de firewalls en Linux (iptables/nftables, UFW) y herramientas de detección de intrusiones como Suricata/Zeek. Incluye ejemplos prácticos para hardening de red en servidores y contenedores.
Prerrequisitos¶
- Conocimientos básicos de redes (TCP/IP, puertos, protocolos).
- Acceso a un servidor Linux (Ubuntu/Debian/CentOS).
- Familiaridad con comandos de terminal.
Firewalls en Linux¶
UFW (Uncomplicated Firewall)¶
Interfaz simplificada para iptables, recomendado para principiantes.
Instalación y Configuración Básica¶
# Ubuntu/Debian
sudo apt update
sudo apt install ufw
# Habilitar
sudo ufw enable
# Reglas básicas
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Denegar todo por defecto
sudo ufw default deny incoming
sudo ufw default allow outgoing
Reglas Avanzadas¶
# Permitir rango de puertos
sudo ufw allow 3000:4000/tcp
# Permitir desde IP específica
sudo ufw allow from 192.168.1.100 to any port 22
# Limitar conexiones SSH
sudo ufw limit ssh
# Ver estado
sudo ufw status verbose
iptables¶
Herramienta clásica para configuración de firewall en kernel Linux.
Sintaxis Básica¶
# Ver reglas actuales
sudo iptables -L -n
# Permitir loopback
sudo iptables -A INPUT -i lo -j ACCEPT
# Permitir conexiones establecidas
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Permitir SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Política por defecto
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# Guardar reglas
sudo apt install iptables-persistent
sudo netfilter-persistent save
nftables¶
Reemplazo moderno de iptables, más eficiente y legible.
Ejemplo Básico¶
# Crear tabla
sudo nft add table inet filter
# Crear cadenas
sudo nft add chain inet filter input { type filter hook input priority 0 \; }
sudo nft add chain inet filter output { type filter hook output priority 0 \; }
# Reglas
sudo nft add rule inet filter input iif lo accept
sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input tcp dport 22 accept
sudo nft add rule inet filter input drop
# Ver reglas
sudo nft list ruleset
Herramientas de Detección de Intrusiones (IDS)¶
Suricata¶
IDS/IPS open-source, similar a Snort pero más moderno.
Instalación¶
# Ubuntu
sudo apt install suricata
# Configurar interfaz
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
Configuración Básica¶
# /etc/suricata/suricata.yaml
vars:
address-groups:
HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
rule-files:
- suricata.rules
- custom.rules
Reglas Personalizadas¶
# Archivo custom.rules
alert tcp any any -> $HOME_NET 22 (msg:"SSH connection attempt"; sid:1000001; rev:1;)
Modos de Operación¶
# Modo IDS (solo detección)
suricata -c suricata.yaml -i eth0
# Modo IPS (prevención)
suricata -c suricata.yaml -i eth0 --af-packet
Zeek (anteriormente Bro)¶
Framework de análisis de red, enfocado en seguridad.
Instalación y Uso¶
# Instalar
sudo apt install zeek
# Ejecutar
zeek -i eth0 local
# Ver logs
tail -f /var/log/zeek/current/conn.log
Aplicación en Contenedores¶
Docker¶
# Ejecutar contenedor con red host (menos seguro)
docker run --network host nginx
# Mejor: usar redes bridge y publicar puertos específicos
docker run -p 8080:80 nginx
# Firewall en host para contenedores
sudo ufw allow 8080/tcp
Kubernetes¶
# Network Policy para restringir tráfico
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-web
spec:
podSelector:
matchLabels:
app: web
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: api
ports:
- protocol: TCP
port: 80
Mejores Prácticas¶
- Principio de Least Privilege: Permitir solo lo necesario.
- Monitoreo: Logs de firewall y alertas.
- Actualizaciones: Mantener reglas y firmas IDS actualizadas.
- Testing: Probar reglas antes de aplicar en producción.
Troubleshooting¶
# Ver logs de UFW
sudo tail -f /var/log/ufw.log
# Ver logs de Suricata
sudo tail -f /var/log/suricata/fast.log
# Ver conexiones activas
sudo ss -tuln
sudo netstat -tuln