Capítulo 9.3 - Cortafuegos
Objetivos de Aprendizaje
Al final de este capítulo, usted será capaz de:
- Comprender los cortafuegos Linux
- Configurar iptables
- Utilizar firewalld (Red Hat/CentOS)
- Utilizar ufw (Ubuntu/Debian)
- Comprender las reglas de filtrado
- Asegurar los servicios
Tipos de Cortafuegos
iptables
Cortafuegos de bajo nivel, control directo del kernel:
Características:
- Muy potente
- Complejo
- Directo al kernel
- Disponible en todas partes
firewalld
Cortafuegos de alto nivel, interfaz simplificada:
- Zonas (public, internal, etc.)
- Servicios predefinidos
- Más simple que iptables
- Red Hat/CentOS/Fedora
ufw
Uncomplicated Firewall, muy simple:
- Interfaz sencilla
- Ubuntu/Debian
- Basado en iptables
- Fácil de usar
iptables - Base
Tablas
# Tablas principales
# - filter: Filtrado (por defecto)
# - nat: Traducción de direcciones
# - mangle: Modificación de paquetes
# Ver reglas
sudo iptables -L -n -v
# Por tabla
sudo iptables -t filter -L
sudo iptables -t nat -L
Cadenas
Tabla FILTER:
- INPUT: Paquetes entrantes
- OUTPUT: Paquetes salientes
- FORWARD: Paquetes reenviados
Ver las Reglas
# Lista simple
sudo iptables -L
# Con números
sudo iptables -L --line-numbers
# Numérico (sin resolución DNS)
sudo iptables -L -n
# Verbose (detalles)
sudo iptables -L -v
# Todas las tablas
sudo iptables -t nat -L -n -v
Reglas iptables
Añadir una Regla
# Formato: iptables -A CADENA -j ACCIÓN
# Permitir SSH (puerto 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Permitir HTTP (puerto 80)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Permitir HTTPS (puerto 443)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Rechazar todo lo demás
sudo iptables -A INPUT -j DROP
Insertar una Regla
# Insertar al inicio (prioridad)
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
# Insertar en posición específica
sudo iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT
Eliminar una Regla
# Por número
sudo iptables -D INPUT 1
# Por coincidencia
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT
Política por Defecto
# Política por defecto (si ninguna regla coincide)
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD DROP
Ejemplos iptables
Configuración Básica
#!/bin/bash
# Configuración básica de cortafuegos
# Vaciar reglas existentes
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
# Política por defecto
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# Permitir loopback
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
# Permitir conexiones establecidas
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Permitir SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Permitir HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# ICMP (ping)
sudo iptables -A INPUT -p icmp -j ACCEPT
Guardar/Restaurar
# Guardar
sudo iptables-save > /etc/iptables/rules.v4
# Restaurar
sudo iptables-restore < /etc/iptables/rules.v4
# Automático al inicio (Ubuntu/Debian)
sudo apt install iptables-persistent
sudo netfilter-persistent save
firewalld
Conceptos
Zonas:
- public: Zona pública (por defecto)
- internal: Red interna
- trusted: Confiable
- work: Oficina
- home: Hogar
Comandos Básicos
# Estado
sudo firewall-cmd --state
sudo firewall-cmd --list-all
# Zonas
sudo firewall-cmd --get-zones
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --set-default-zone public
# Servicios
sudo firewall-cmd --get-services
sudo firewall-cmd --list-services
Añadir Servicios
# Añadir servicio (temporal)
sudo firewall-cmd --add-service=http
# Añadir servicio (permanente)
sudo firewall-cmd --add-service=http --permanent
# Recargar
sudo firewall-cmd --reload
# Verificar
sudo firewall-cmd --list-services
Puertos
# Añadir puerto
sudo firewall-cmd --add-port=8080/tcp
# Permanente
sudo firewall-cmd --add-port=8080/tcp --permanent
# Eliminar
sudo firewall-cmd --remove-port=8080/tcp --permanent
ufw (Ubuntu/Debian)
Activación
# Ver estado
sudo ufw status
# Activar
sudo ufw enable
# Desactivar
sudo ufw disable
Reglas Básicas
# Permitir SSH
sudo ufw allow 22/tcp
sudo ufw allow ssh
# Permitir HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Permitir desde IP
sudo ufw allow from 192.168.1.0/24
# Denegar
sudo ufw deny 3306/tcp # MySQL
# Eliminar regla
sudo ufw delete allow 80/tcp
Ver las Reglas
# Lista numerada
sudo ufw status numbered
# Detalles
sudo ufw status verbose
Restablecer
# Restablecer todas las reglas
sudo ufw reset
Buenas Prácticas
Seguridad
# 1. Siempre permitir SSH antes de activar
sudo ufw allow ssh
sudo ufw enable
# 2. Política por defecto restrictiva
# DROP para INPUT, ACCEPT para OUTPUT
# 3. Permitir solo lo necesario
# No reglas demasiado amplias
# 4. Probar antes de guardar
# Verificar conectividad
# 5. Registrar los rechazos
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "
Mantenimiento
# Verificar reglas regularmente
sudo iptables -L -n -v
sudo firewall-cmd --list-all
sudo ufw status verbose
# Guardar configuración
sudo iptables-save > backup-$(date +%Y%m%d).rules
Resumen
En este capítulo, usted ha aprendido:
Tipos: iptables (bajo nivel), firewalld (zonas), ufw (simple)
iptables: Tablas, cadenas, reglas, políticas
firewalld: Zonas, servicios, puertos, permanente
ufw: Activación, reglas, estado, reset
Seguridad: Política restrictiva, permitir solo lo necesario
Práctica: Configuración básica, respaldo, prueba
Próximos Pasos
Capítulo 9.4: Auditoría y Monitoreo de Seguridad
Módulo 10: Gestión de Paquetes
Capítulo creado el: Diciembre 2024