Saltar al contenido principal

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