🔐 Cómo exponer tu servidor a Internet sin que te lo hackeen (guía real de seguridad básica)
Tener un servidor web funcionando en local es fácil.
👉 Lo difícil es esto:
hacerlo accesible desde Internet sin comprometer su seguridad
Porque en cuanto abres tu servidor al mundo…
💀 empiezan los ataques automáticos.
🧠 Lo primero que debes entender
Cuando expones un servidor:
👉 cualquiera puede intentar conectarse
No importa si tu web es pequeña o desconocida.
📊 Lo que pasa en la realidad
En minutos tendrás intentos como:
- acceso a
/wp-admin - intentos de login SSH
- escaneo de puertos
- bots buscando vulnerabilidades
👉 Esto es NORMAL.
🎯 ¿Qué significa “exponer un servidor”?
Es permitir acceso desde Internet a un servicio.
Por ejemplo:
- puerto 80 → HTTP
- puerto 443 → HTTPS
- puerto 22 → SSH
⚠️ ERROR típico
Abrir TODO:
ufw allow 1:65535/tcp
👉 Esto es una locura.
🔐 Regla básica
👉 abre solo lo que necesitas
🛡️ Paso 1: Firewall (UFW)
Si usas Linux (Ubuntu en Raspberry Pi en tu caso):
Instalar UFW
sudo apt update sudo apt install ufw
Estado inicial
sudo ufw status
Política segura
sudo ufw default deny incoming sudo ufw default allow outgoing
👉 Esto bloquea TODO por defecto.
🔓 Paso 2: Abrir solo puertos necesarios
🌐 Web
sudo ufw allow 80 sudo ufw allow 443
🔐 SSH (opcional)
sudo ufw allow 22
👉 Mejor aún:
sudo ufw allow from TU_IP to any port 22
🚀 Activar firewall
sudo ufw enable
🧪 Verificar
sudo ufw status numbered
🧠 Paso 3: Cambiar puerto SSH (opcional pero recomendado)
Archivo:
sudo nano /etc/ssh/sshd_config
Cambiar:
Port 22
Por ejemplo:
Port 2222
Reiniciar:
sudo systemctl restart ssh
👉 Reduce ataques automáticos.
🛡️ Paso 4: Instalar Fail2Ban
Esto es CLAVE.
¿Qué hace?
Bloquea IPs que intentan atacar.
Instalar
sudo apt install fail2ban
Activar
sudo systemctl enable fail2ban sudo systemctl start fail2ban
Ver estado
sudo fail2ban-client status
👉 Ya tienes protección básica automática.
🌐 Paso 5: Exposición correcta (puertos + servicios)
Arquitectura correcta
Internet → Cloudflare → Reverse Proxy → Servidor
👉 Nunca expongas servicios innecesarios.
⚠️ Cosas que NUNCA debes exponer
- MySQL (3306)
- paneles admin sin protección
- phpMyAdmin sin seguridad
- APIs sin autenticación
🔐 Paso 6: HTTPS obligatorio
Con Cloudflare puedes activar:
👉 SSL gratuito
O usar:
certbot
🧠 Paso 7: Logs (tu mejor aliado)
Revisa:
/var/log/auth.log /var/log/apache2/access.log /var/log/apache2/error.log
👉 Aquí ves ataques en tiempo real.
🚨 Ejemplo real de ataque
GET /.env GET /wp-login.php GET /.git/config
👉 Bots buscando errores comunes.
🧪 Paso 8: Test rápido de seguridad
Desde otra máquina:
nmap TU_IP
👉 Solo deberían verse:
- 80
- 443
- (opcional) SSH
🧠 Paso 9: Protección extra con Cloudflare
Ya lo viste en el post anterior:
👉 Cloudflare actúa como escudo
Beneficios:
- oculta tu IP real
- bloquea bots
- filtra tráfico
Tu stack ideal:
Usuario → Cloudflare → Apache → App
Y protección:
- UFW ✅
- Fail2Ban ✅
- Logs ✅
👉 Esto ya es nivel producción básica.
💡 Nota final
La diferencia entre:
👉 un servidor amateur
👉 y uno profesional
no es el hardware…
👉 es la seguridad.
📚 Lectura recomendada
- Qué es un DNS y cómo funciona
- Reverse proxy explicado fácil
- Cloudflare desde cero
- Qué es un WAF y por qué puede salvar tu sitio web de ataques reales
- Ataques SQL Injection (SQLi): qué son, cómo funcionan y cómo proteger tu aplicación web
🔙 Volver al post pilar: