Asignatura: Seguridad y Monitoreo Informático
Entorno: Kali Linux en VirtualBox
Objetivo: Aplicar reglas básicas de firewall, simular bloqueo de amenazas y verificar configuración de seguridad.
# 🔴 IMPORTANTE: Kali Linux viene con firewalld/nftables por defecto
# Para usar iptables legacy (más didáctico), ejecuta:
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
# ✅ Verificar que está activo:
sudo iptables-legacy -L -n
# 🔄 Para revertir cambios al final de la práctica:
sudo iptables-legacy -F # Flush: borra todas las reglas
sudo iptables-legacy -X # Delete: borra cadenas personalizadas
# Ver reglas actuales (con números de línea)
sudo iptables -L -n -v --line-numbers
# Ver reglas en formato tabla (más legible)
sudo iptables -L -n -v -x
# Guardar reglas persistentes (Kali usa iptables-persistent)
sudo netfilter-persistent save
sudo netfilter-persistent reload
# Eliminar TODAS las reglas (RESET)
sudo iptables -F
sudo iptables -X
sudo iptables -Z
# Permitir tráfico por puerto específico
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
# Bloquear IP específica
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
# Bloquear rango de IPs (subnet)
sudo iptables -A INPUT -s 10.0.0.0/24 -j DROP
# Permitir solo desde una IP específica (whitelist SSH)
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.50 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
# Permitir tráfico establecido/relacionado (RECOMENDADO)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Permitir loopback (tráfico local)
sudo iptables -A INPUT -i lo -j ACCEPT
# Política por defecto: DROP (más seguro)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# Registrar paquetes bloqueados en syslog
sudo iptables -A INPUT -j LOG --log-prefix "[FW-BLOCKED] " --log-level 4
# Ver logs en tiempo real
sudo tail -f /var/log/syslog | grep "FW-BLOCKED"
# Contar paquetes por regla (útil para estadísticas)
sudo iptables -L -n -v | grep -E "pkts|DROP|ACCEPT"
# Listar reglas con números
sudo iptables -L -n --line-numbers
# Eliminar regla por número de línea (ej: línea 3 de INPUT)
sudo iptables -D INPUT 3
# Insertar regla al inicio (prioridad alta)
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
# Reemplazar regla en posición específica
sudo iptables -R INPUT 2 -p tcp --dport 8080 -j ACCEPT
Eres administrador de un servidor Kali Linux que recibe:
Tráfico web legítimo (puertos 80/443)
SSH solo desde tu red interna (192.168.1.0/24)
Intentos de fuerza bruta desde IPs externas sospechosas
Tu misión: Configurar un firewall básico que proteja el sistema sin bloquear el tráfico legítimo.
# 1.1 Verificar iptables legacy activo
sudo update-alternatives --config iptables
# (Selecciona iptables-legacy si hay opción)
# 1.2 Limpiar reglas previas (seguro para práctica)
sudo iptables -F
sudo iptables -X
sudo iptables -Z
# 1.3 Ver estado inicial (debe estar vacío)
sudo iptables -L -n -v
📝 Registro en tu cuaderno:
"Estado inicial del firewall: __ reglas en INPUT, __ en OUTPUT"
# 2.1 Permitir tráfico local (loopback)
sudo iptables -A INPUT -i lo -j ACCEPT
# 2.2 Permitir conexiones establecidas (evita bloquear respuestas)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 2.3 Permitir SSH solo desde red interna
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
# 2.4 Permitir tráfico web público
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 2.5 Política por defecto: bloquear lo no permitido
sudo iptables -P INPUT DROP
📝 Registro en tu cuaderno:
"Reglas aplicadas: __. Política INPUT: __"
# 3.1 Ver configuración completa
sudo iptables -L -n -v --line-numbers
# 3.2 Agregar logging para paquetes bloqueados (opcional)
sudo iptables -I INPUT 99 -j LOG --log-prefix "[KALI-FW] " --log-level 4
# 3.3 Probar conectividad (desde otra terminal o máquina):
# - Ping a tu Kali (debe fallar si ICMP no está permitido)
# - curl http://[IP-KALI] (debe funcionar si puerto 80 está abierto)
# - ssh usuario@[IP-KALI] desde 192.168.1.X (debe funcionar)
# - ssh usuario@[IP-KALI] desde IP externa (debe bloquearse)
# 3.4 Ver logs en tiempo real (en otra terminal)
sudo tail -f /var/log/syslog | grep "KALI-FW"
📝 Registro en tu cuaderno:
| Prueba | Resultado Esperado | Resultado Obtenido | |--------|-------------------|-------------------| | HTTP desde cualquier IP | ✅ Permitido | __ | | SSH desde 192.168.1.50 | ✅ Permitido | __ | | SSH desde 203.0.113.10 | ❌ Bloqueado | __ | | Ping (ICMP) | ❌ Bloqueado (por defecto) | __ |
# 4.1 Eliminar regla de logging (si se agregó)
sudo iptables -D INPUT -j LOG --log-prefix "[KALI-FW] " 2>/dev/null
# 4.2 Resetear firewall para próxima práctica
sudo iptables -F
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
# 4.3 Verificar que quedó limpio
sudo iptables -L -n
📝 Preguntas de cierre (responder a mano):
¿Por qué es importante permitir ESTABLISHED,RELATED antes de aplicar DROP?
Si quisieras permitir ICMP (ping) solo desde tu red interna, ¿qué regla agregarías?
¿Qué ventaja tiene usar --line-numbers al listar reglas?
En un entorno real, ¿por qué NO deberías ejecutar iptables -F sin precaución?
# 🔴 Si te bloqueas a ti mismo por SSH:
# 1. Accede físicamente a la VM o por consola de VirtualBox
# 2. Ejecuta:
sudo iptables -F
sudo iptables -P INPUT ACCEPT
# 🔴 Si pierdes conectividad de red:
sudo iptables -F
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo systemctl restart networking # o: sudo dhclient -r && sudo dhclient
# 🔴 Para guardar configuración actual ANTES de experimentar:
sudo iptables-save > ~/backup_iptables.txt
# Para restaurar después:
sudo iptables-restore < ~/backup_iptables.txt
┌─────────────────────────┐
│ INICIO: iptables -F │
└────────┬────────────────┘
▼
┌─────────────────────────┐
│ 1. Permitir loopback │
│ -A INPUT -i lo -j ACC │
└────────┬────────────────┘
▼
┌─────────────────────────┐
│ 2. Permitir ESTABLISHED│
│ -m conntrack --state │
└────────┬────────────────┘
▼
┌─────────────────────────┐
│ 3. Permitir servicios │
│ SSH: -s 192.168.1.0/24 │
│ HTTP/HTTPS: público │
└────────┬────────────────┘
▼
┌─────────────────────────┐
│ 4. Política DROP │
│ -P INPUT DROP │
└────────┬────────────────┘
▼
┌─────────────────────────┐
│ 5. Verificar: -L -n -v │
└─────────────────────────┘