Tutorial Completo de Firewalls: No Quiero Ser Hackeado
Tutorial Completo de Firewalls: No Quiero Ser Hackeado
¿Qué es un Firewall?
Un firewall es como un guarda de seguridad para tu computadora o servidor. Decide qué tráfico puede entrar o salir, basándose en reglas que tú defines.
Parte 1: Tipos de Firewalls
1. Firewall del Proveedor en la Nube
Digital Ocean Cloud Firewall: Firewall administrado por Digital Ocean
AWS Security Groups: Firewall administrado por AWS
Google Cloud Firewall Rules: Firewall de Google Cloud
2. Firewall del Sistema Operativo
UFW (Ubuntu/Debian): El más fácil para principiantes
firewalld (CentOS/RHEL/Fedora)
iptables/nftables: Para expertos (control total)
Parte 2: UFW (Uncomplicated Firewall) - EL MÁS FÁCIL
Instalación y Estado
# Ver si UFW está instalado (normalmente ya viene en Ubuntu)
sudo ufw version
# Ver estado actual
sudo ufw status
# Si dice "inactive", está desactivado
# Ver estado más detallado
sudo ufw status verboseActivación y Configuración Básica
# 1. PRIMERO permite SSH para no quedar fuera
sudo ufw allow OpenSSH
# o específicamente el puerto 22:
sudo ufw allow 22/tcp
# 2. Activar UFW
sudo ufw enable
# Te preguntará si estás seguro, responde "y"
# 3. Verificar que está activo
sudo ufw statusComandos Básicos que DEBES Saber
# PERMITIR tráfico
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 3306/tcp # MySQL
sudo ufw allow 5432/tcp # PostgreSQL
sudo ufw allow 27017/tcp # MongoDB
# PERMITIR por nombre de aplicación
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
# PERMITIR desde una IP específica
sudo ufw allow from 192.168.1.100 to any port 22
sudo ufw allow from 192.168.1.0/24 to any port 3306 # Red completa
# DENEGAR tráfico
sudo ufw deny 23/tcp # Telnet (inseguro)
sudo ufw deny 137:139 # Rango de puertos
sudo ufw deny from 10.0.0.0/8 # Red completa
# ELIMINAR una regla
sudo ufw status numbered # Muestra reglas con números
sudo ufw delete 2 # Elimina la regla número 2Reglas por Defecto (IMPORTANTE)
# Ver políticas por defecto
sudo ufw status verbose | grep Default
# Cambiar políticas por defecto (RECOMENDADO)
sudo ufw default deny incoming # Deniega todo lo que entra
sudo ufw default allow outgoing # Permite todo lo que sale
# O el más restrictivo:
sudo ufw default deny incoming
sudo ufw default deny outgoing
# Luego permitir solo lo necesario para salir
sudo ufw allow out 53/tcp # DNS
sudo ufw allow out 53/udp # DNS
sudo ufw allow out 80/tcp # HTTP
sudo ufw allow out 443/tcp # HTTPSParte 3: Configuración Segura Paso a Paso
Paso 1: Configuración Inicial SEGURA
# 1. Desactivar UFW temporalmente (si está activo)
sudo ufw disable
# 2. Restablecer a valores por defecto
sudo ufw reset
# 3. Configurar políticas por defecto SEGURAS
sudo ufw default deny incoming # NADA entra
sudo ufw default allow outgoing # TODO sale (puedes ser más restrictivo)
# 4. Permitir SSH (PERO solo desde tu IP si tienes IP fija)
# Si tienes IP fija:
sudo ufw allow from [TU_IP_FIJA] to any port 22
# Si no tienes IP fija:
sudo ufw allow 22/tcp
# 5. Permitir ping (ICMP) - opcional pero útil
sudo ufw allow in on eth0 proto icmp
# 6. Activar UFW
sudo ufw enablePaso 2: Abrir Solo lo Necesario
Supongamos que tienes un servidor web:
# Servidor web básico
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
# Si necesitas administración remota
sudo ufw allow from 192.168.1.100 to any port 22 # Solo desde tu PC
# Si tienes una API
sudo ufw allow 3000/tcp # Node.js API
# Ver todas las reglas
sudo ufw status numberedPaso 3: Configuración para Servicios Específicos
Para WordPress (LAMP Stack):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp # SSH
sudo ufw allow from 127.0.0.1 to any port 3306 # MySQL solo localPara Servidor de Juegos (ejemplo):
sudo ufw allow 25565/tcp # Minecraft
sudo ufw allow 27015:27030/tcp # Steam/CS:GO
sudo ufw allow 27015:27030/udpParte 4: Firewall en la Nube (Digital Ocean/AWS)
Digital Ocean Cloud Firewall
Ve a Networking > Firewalls
Clic en Create Firewall
Configura:
Nombre: my-secure-firewall
Inbound Rules:
- SSH (22) - Solo desde tu IP o todo internet si es necesario
- HTTP (80) - Todo internet
- HTTPS (443) - Todo internet
- Personalizado: otros puertos que necesites
Outbound Rules:
- All TCP - Todo internet (para actualizaciones)
- All UDP - Todo internet
- All ICMP - Todo internetAplica el firewall a tus Droplets
AWS Security Groups
Ve a EC2 > Security Groups
Clic en Create Security Group
Configura:
Name: my-secure-sg
Inbound Rules:
- SSH (22) - My IP (0.0.0.0/0 si no tienes IP fija pero NO RECOMENDADO)
- HTTP (80) - 0.0.0.0/0
- HTTPS (443) - 0.0.0.0/0
Outbound Rules:
- All traffic - 0.0.0.0/0Parte 5: Configuración SÚPER SEGURA (Recomendada)
Para un Servidor de Producción:
#!/bin/bash
# Script de configuración SEGURA de firewall
# 1. Resetear todo
sudo ufw --force reset
# 2. Políticas extremadamente seguras
sudo ufw default deny incoming
sudo ufw default deny outgoing
# 3. Permitir SOLO tráfico necesario de SALIDA
# DNS (para resolver nombres)
sudo ufw allow out 53/tcp
sudo ufw allow out 53/udp
# HTTP/HTTPS (para actualizaciones y APIs)
sudo ufw allow out 80/tcp
sudo ufw allow out 443/tcp
# NTP (sincronización de hora)
sudo ufw allow out 123/udp
# 4. Permitir ENTRADA solo para servicios esenciales
# SSH - SOLO desde tu IP (cambia la IP)
sudo ufw allow in from [TU_IP] to any port 22
# HTTP/HTTPS para servidor web
sudo ufw allow in 80/tcp
sudo ufw allow in 443/tcp
# 5. Permitir ping (opcional)
sudo ufw allow in proto icmp
# 6. Activar logging para monitoreo
sudo ufw logging on
# 7. Activar firewall
sudo ufw enable
# 8. Mostrar configuración final
echo "=== CONFIGURACIÓN FINAL ==="
sudo ufw status verboseParte 6: Comandos de Monitoreo y Troubleshooting
# Ver todo el tráfico bloqueado/permitido
sudo ufw status numbered
# Ver logs del firewall
sudo tail -f /var/log/ufw.log
# o
sudo journalctl -u ufw -f
# Ver tráfico en tiempo real
sudo tcpdump -i eth0
# Probar si un puerto está abierto desde otra máquina
nc -zv [IP_SERVIDOR] [PUERTO]
# Ejemplo:
nc -zv 192.168.1.100 22
# Escanear puertos abiertos localmente
sudo ss -tuln
sudo netstat -tuln
# Ver las reglas de iptables (detrás de UFW)
sudo iptables -L -n -vParte 7: Configuración con Docker (PROBLEMA COMÚN)
El Problema:
Docker ignora UFW y abre puertos directamente.
Solución 1: Exponer solo localmente
# MAL: Expone a todo internet
sudo docker run -d -p 80:80 nginx
# BIEN: Solo localhost
sudo docker run -d -p 127.0.0.1:80:80 nginxSolución 2: Usar Docker con UFW corregido
# Editar configuración de Docker
sudo nano /etc/docker/daemon.json
# Agregar:
{
"iptables": false,
"ip-forward": false
}
# Reiniciar Docker
sudo systemctl restart dockerSolución 3: Redes de Docker aisladas
# Crear red interna
sudo docker network create internal_network
# Ejecutar contenedor en red interna
sudo docker run -d --network internal_network --name app myapp
# Conectar solo contenedores que necesiten salir
sudo docker run -d --network internal_network --name nginx -p 80:80 nginxParte 8: Checklist de Seguridad
✅ Antes de Activar el Firewall:
Tienes acceso SSH configurado
Has probado la conexión SSH
Tienes una consola física/rescue por si falla
Has anotado todas las reglas que necesitas
✅ Después de Activar:
Puedes conectarte por SSH
Los servicios web funcionan (si aplica)
Puedes hacer ping al servidor
Las actualizaciones funcionan (
sudo apt update)
✅ Mantenimiento Mensual:
Revisar logs:
sudo tail -100 /var/log/ufw.logVer intentos de ataque:
sudo grep BLOCK /var/log/ufw.logActualizar reglas si cambian servicios
Backup de configuración:
sudo ufw status > ufw_backup.txt
Parte 9: Backup y Restauración
# Backup de toda la configuración
sudo ufw status verbose > ~/ufw_backup_$(date +%Y%m%d).txt
sudo iptables-save > ~/iptables_backup_$(date +%Y%m%d).rules
# Restaurar configuración UFW
# 1. Desactivar
sudo ufw disable
# 2. Eliminar todas las reglas
sudo ufw reset
# 3. Aplicar reglas desde backup manualmente
# (Recrear las reglas una por una desde tu archivo de backup)
# Restaurar iptables directamente
sudo iptables-restore < ~/iptables_backup.rulesParte 10: Plantillas Listas para Usar
Plantilla 1: Servidor Web Básico
#!/bin/bash
# Firewall para servidor web
sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Entrada
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow out 53/tcp # DNS
sudo ufw allow out 53/udp
sudo ufw allow out 80/tcp # HTTP salida
sudo ufw allow out 443/tcp # HTTPS salida
sudo ufw enablePlantilla 2: Desarrollo Local
#!/bin/bash
# Firewall para desarrollo
sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp # SSH
sudo ufw allow 3000:4000/tcp # Puertos de desarrollo
sudo ufw allow 5432/tcp # PostgreSQL
sudo ufw allow 27017/tcp # MongoDB
sudo ufw allow from 192.168.1.0/24 # Red local
sudo ufw enableRecursos Adicionales
Comandos de Emergencia:
# Si te quedas fuera del servidor:
# 1. Usa la consola del proveedor (Digital Ocean/AWS)
# 2. Desactiva UFW desde consola de rescate
# 3. O usa: sudo ufw disable (si tienes acceso físico)
# Ver todas las conexiones activas
sudo ss -tunap
# Bloquear una IP atacante inmediatamente
sudo ufw deny from 1.2.3.4Documentación Oficial:
# Ayuda de UFW
man ufw
ufw --help
# Tutorial interactivo
sudo ufw --dry-runConclusión Final
Reglas de Oro:
Mínimo privilegio: Abre solo lo absolutamente necesario
IP específicas: Cuando sea posible, restringe por IP
Monitorea logs: Revisa regularmente
/var/log/ufw.logPrueba cambios: Siempre prueba desde otra terminal antes de cerrar
Documenta: Mantén un registro de qué puertos abriste y por qué
Comando que SALVA VIDAS:
# Antes de hacer cambios peligrosos, abre otra sesión SSH
# Y mantén este comando listo:
sudo ufw disable # Por si bloqueas tu propio accesoRecuerda: Un firewall bien configurado bloquea el 99% de ataques automáticos.
Comentarios
Publicar un comentario