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

bash
# 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 verbose

Activación y Configuración Básica

bash
# 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 status

Comandos Básicos que DEBES Saber

bash
# 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 2

Reglas por Defecto (IMPORTANTE)

bash
# 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       # HTTPS

Parte 3: Configuración Segura Paso a Paso

Paso 1: Configuración Inicial SEGURA

bash
# 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 enable

Paso 2: Abrir Solo lo Necesario

Supongamos que tienes un servidor web:

bash
# 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 numbered

Paso 3: Configuración para Servicios Específicos

Para WordPress (LAMP Stack):

bash
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 local

Para Servidor de Juegos (ejemplo):

bash
sudo ufw allow 25565/tcp                    # Minecraft
sudo ufw allow 27015:27030/tcp              # Steam/CS:GO
sudo ufw allow 27015:27030/udp

Parte 4: Firewall en la Nube (Digital Ocean/AWS)

Digital Ocean Cloud Firewall

  1. Ve a Networking > Firewalls

  2. Clic en Create Firewall

  3. Configura:

text
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 internet
  1. Aplica el firewall a tus Droplets

AWS Security Groups

  1. Ve a EC2 > Security Groups

  2. Clic en Create Security Group

  3. Configura:

text
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/0

Parte 5: Configuración SÚPER SEGURA (Recomendada)

Para un Servidor de Producción:

bash
#!/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 verbose

Parte 6: Comandos de Monitoreo y Troubleshooting

bash
# 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 -v

Parte 7: Configuración con Docker (PROBLEMA COMÚN)

El Problema:

Docker ignora UFW y abre puertos directamente.

Solución 1: Exponer solo localmente

bash
# 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 nginx

Solución 2: Usar Docker con UFW corregido

bash
# Editar configuración de Docker
sudo nano /etc/docker/daemon.json

# Agregar:
{
  "iptables": false,
  "ip-forward": false
}

# Reiniciar Docker
sudo systemctl restart docker

Solución 3: Redes de Docker aisladas

bash
# 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 nginx

Parte 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.log

  • Ver intentos de ataque: sudo grep BLOCK /var/log/ufw.log

  • Actualizar reglas si cambian servicios

  • Backup de configuración: sudo ufw status > ufw_backup.txt


Parte 9: Backup y Restauración

bash
# 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.rules

Parte 10: Plantillas Listas para Usar

Plantilla 1: Servidor Web Básico

bash
#!/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 enable

Plantilla 2: Desarrollo Local

bash
#!/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 enable

Recursos Adicionales

Comandos de Emergencia:

bash
# 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.4

Documentación Oficial:

bash
# Ayuda de UFW
man ufw
ufw --help

# Tutorial interactivo
sudo ufw --dry-run

Conclusión Final

Reglas de Oro:

  1. Mínimo privilegio: Abre solo lo absolutamente necesario

  2. IP específicas: Cuando sea posible, restringe por IP

  3. Monitorea logs: Revisa regularmente /var/log/ufw.log

  4. Prueba cambios: Siempre prueba desde otra terminal antes de cerrar

  5. Documenta: Mantén un registro de qué puertos abriste y por qué

Comando que SALVA VIDAS:

bash
# Antes de hacer cambios peligrosos, abre otra sesión SSH
# Y mantén este comando listo:
sudo ufw disable  # Por si bloqueas tu propio acceso

Recuerda: Un firewall bien configurado bloquea el 99% de ataques automáticos.

Comentarios

Entradas más populares de este blog

14. Publish and Detached modes

12. Hola Mundo en Docker.

11¿Qué es Docker? y ¿Por qué debo saberlo?