Guías y scripts completos para configurar tu servidor VPC personal de forma segura y profesional.
Este repositorio contiene todo lo necesario para configurar un servidor VPC desde cero con las mejores prácticas de seguridad y herramientas modernas:
- Seguridad SSH + Firewall - Protege tu servidor de ataques
- Nginx + Let's Encrypt - Servidor web con SSL gratuito
- WireGuard VPN - VPN personal moderna y rápida
- Monitoreo - Dashboard y alertas (Netdata / Prometheus + Grafana)
- Servidor Debian (VPC de Contabo o similar)
- Acceso root o sudo
- Nombre de dominio (para SSL)
- IP pública
# 1. Seguridad primero (15-20 minutos)
cd 01-ssh-firewall
./install.sh
./setup-firewall.sh
# Aplicar configuración SSH (lee README.md cuidadosamente)
# 2. Servidor web con SSL (20 minutos)
cd ../02-nginx-letsencrypt
./install.sh
./get-ssl-cert.sh tu-dominio.com tu-email@ejemplo.com
# 3. VPN personal (30 minutos)
cd ../03-wireguard-vpn
./install.sh
./add-client.sh mi-laptop
# 4. Monitoreo (15 minutos - Opcional pero recomendado)
cd ../04-monitoring
./install-netdata.sh # Opción simple y visual
# O: ./install-prometheus-grafana.sh # Opción profesionalvpc/
├── README.md # Este archivo
├── 01-ssh-firewall/ # Paso 1: Seguridad
│ ├── README.md # Guía detallada
│ ├── install.sh # Instalador
│ ├── setup-firewall.sh # Configuración firewall
│ ├── jail.local # Configuración fail2ban
│ ├── sshd_config # SSH hardening
│ ├── verify.sh # Verificación
│ └── rollback.sh # Rollback de emergencia
│
├── 02-nginx-letsencrypt/ # Paso 2: Web + SSL
│ ├── README.md # Guía detallada
│ ├── install.sh # Instalador Nginx + Certbot
│ ├── get-ssl-cert.sh # Obtener certificado SSL
│ ├── site-example.conf # Ejemplo sitio estático
│ ├── docker-proxy-example.conf # Ejemplos reverse proxy
│ ├── docker-compose-examples.yml # Ejemplos Docker
│ └── verify.sh # Verificación
│
├── 03-wireguard-vpn/ # Paso 3: VPN
│ ├── README.md # Guía detallada
│ ├── install.sh # Instalador WireGuard
│ ├── add-client.sh # Agregar clientes
│ ├── remove-client.sh # Eliminar clientes
│ ├── list-clients.sh # Listar clientes
│ └── verify.sh # Verificación
│
└── 04-monitoring/ # Paso 4: Monitoreo
├── README.md # Guía detallada (3 opciones)
├── basic-monitor.sh # Monitoreo básico
├── setup-basic-monitoring.sh # Configurar auto-monitoreo
├── install-netdata.sh # Instalar Netdata
├── install-prometheus-grafana.sh # Instalar Prom + Grafana
├── docker-compose-monitoring.yml # Stack completo
├── prometheus.yml # Config Prometheus
└── verify-monitoring.sh # Verificación
Objetivo: Proteger tu servidor de ataques de fuerza bruta y accesos no autorizados.
- Instala y configura fail2ban (banea IPs con intentos fallidos)
- Configura ufw (firewall)
- Hardening de SSH (deshabilita passwords, solo llaves)
- Abre puertos necesarios (22, 80, 443)
cd 01-ssh-firewall
./install.sh
./setup-firewall.sh./verify.sh📖 Documentación completa: 01-ssh-firewall/README.md
Objetivo: Servidor web con certificados SSL gratuitos y renovación automática.
- Instala Nginx como reverse proxy
- Instala Certbot (cliente de Let's Encrypt)
- Obtiene certificados SSL gratuitos
- Configura renovación automática (cada 60 días)
- Headers de seguridad optimizados
cd 02-nginx-letsencrypt
# Instalar Nginx + Certbot
./install.sh
# Obtener certificado SSL
./get-ssl-cert.sh tu-dominio.com tu-email@ejemplo.comNginx en el host hace reverse proxy a contenedores Docker:
# Ejemplo: Aplicación Node.js en Docker
docker run -d -p 3000:3000 mi-app
# Nginx hace proxy de dominio.com → localhost:3000Ver ejemplos completos en:
docker-proxy-example.conf- Configuraciones de reverse proxydocker-compose-examples.yml- Stacks completos (Frontend + Backend + DB)
./verify.sh
# O manualmente
curl https://tu-dominio.com
certbot certificates📖 Documentación completa: 02-nginx-letsencrypt/README.md
Objetivo: VPN personal para navegar seguro y acceder a servicios privados.
- Instala WireGuard (VPN moderna y rápida)
- Configura servidor VPN
- Genera configuraciones para clientes
- Códigos QR para móviles
cd 03-wireguard-vpn
# Instalar servidor
./install.sh
# Agregar tu laptop
./add-client.sh laptop
# Agregar tu teléfono
./add-client.sh phoneDesktop (Linux/Mac):
# Descargar configuración
scp root@servidor:~/wireguard-clients/laptop.conf ~/
# Conectar
sudo wg-quick up laptop
# Desconectar
sudo wg-quick down laptopMóvil (iOS/Android):
- Instala WireGuard desde App Store/Play Store
- Escanea el código QR que mostró el script
- Activa la conexión
./add-client.sh nuevo-cliente # Agregar
./remove-client.sh cliente-viejo # Eliminar
./list-clients.sh # Listar todos./verify.sh
# Ver clientes conectados
wg show📖 Documentación completa: 03-wireguard-vpn/README.md
Objetivo: Monitorear recursos, servicios y detectar problemas antes de que se conviertan en críticos.
Opción 1: Monitoreo Básico (5 min)
- Script personalizado sin instalar nada
- Reportes automáticos por email
- Perfecto para empezar
Opción 2: Netdata (15 min) - RECOMENDADO
- Dashboard visual en tiempo real
- Instalación con 1 comando
- Muy bajo consumo de recursos
- Miles de métricas automáticas
Opción 3: Prometheus + Grafana (45 min)
- Solución profesional enterprise
- Dashboards personalizables
- Alertas avanzadas
- Retención histórica de datos
cd 04-monitoring
# Opción simple: Netdata
./install-netdata.sh
# Opción avanzada: Prometheus + Grafana
./install-prometheus-grafana.sh
# Configurar monitoreo básico con alertas
./setup-basic-monitoring.sh- ✅ CPU, RAM, Disco en tiempo real
- ✅ Servicios (Nginx, SSH, WireGuard, Docker)
- ✅ Intentos de intrusión (fail2ban)
- ✅ Certificados SSL (expiración)
- ✅ Clientes VPN conectados
- ✅ Tráfico de red
- ✅ Contenedores Docker
- ✅ Logs de errores
Netdata:
- Dashboard:
https://monitor.tu-dominio.com - O por VPN:
http://10.8.0.1:19999
Grafana:
- Dashboard:
https://grafana.tu-dominio.com - Usuario: admin
- Password: (generada al instalar)
./verify-monitoring.sh
# Ver reporte básico
./basic-monitor.sh📖 Documentación completa: 04-monitoring/README.md
# 1. App en Docker
docker run -d -p 3000:3000 --name mi-app mi-imagen
# 2. Configurar Nginx (usar docker-proxy-example.conf)
nano /etc/nginx/sites-available/app.conf
# Configurar proxy_pass http://localhost:3000
# 3. Obtener SSL
certbot --nginx -d app.tu-dominio.com
# 4. ¡Listo! https://app.tu-dominio.com# 1. Servicio que NO quieres exponer públicamente
docker run -d -p 127.0.0.1:5432:5432 postgres
# 2. Conecta a VPN
wg-quick up laptop
# 3. Accede al servicio
psql -h 10.8.0.1 -U usuario
# Sin VPN = inaccesible
# Con VPN = acceso total# blog.tu-dominio.com
./get-ssl-cert.sh blog.tu-dominio.com email@ejemplo.com
# api.tu-dominio.com
./get-ssl-cert.sh api.tu-dominio.com email@ejemplo.com
# app.tu-dominio.com
./get-ssl-cert.sh app.tu-dominio.com email@ejemplo.com
# Todos con SSL gratuito y renovación automática# SSH + Firewall
cd 01-ssh-firewall && ./verify.sh
# Nginx + SSL
cd ../02-nginx-letsencrypt && ./verify.sh
# WireGuard VPN
cd ../03-wireguard-vpn && ./verify.sh
# Monitoreo (si lo instalaste)
cd ../04-monitoring && ./verify-monitoring.shSi todavía tienes una sesión abierta:
cd 01-ssh-firewall
./rollback.shSi no tienes acceso, usa la consola del proveedor (Contabo) para restaurar.
# Ver logs de Let's Encrypt
less /var/log/letsencrypt/letsencrypt.log
# Problemas comunes:
# - Dominio no apunta al servidor: dig tu-dominio.com
# - Puertos cerrados: ufw status | grep -E '80|443'
# - Límite de tasa: esperar 7 días o usar --staging# Verificar IP forwarding
sysctl net.ipv4.ip_forward
# Debe ser 1
# Verificar reglas NAT
iptables -t nat -L POSTROUTING
# Reiniciar WireGuard
systemctl restart wg-quick@wg0- SSL Test - Verificar seguridad SSL
- Security Headers - Verificar headers de seguridad
- DNSChecker - Verificar DNS
- CanYouSeeMe - Verificar puertos abiertos
# Actualizar paquetes
apt update && apt upgrade -y
# Reiniciar servicios si es necesario
systemctl restart nginx
systemctl restart wg-quick@wg0Automática cada 60 días, pero puedes forzar:
certbot renew --dry-run # Probar
certbot renew # Renovar ahora# Backup de configuraciones importantes
tar -czf backup-$(date +%Y%m%d).tar.gz \
/etc/nginx/sites-available \
/etc/wireguard \
/etc/fail2ban/jail.local \
/etc/ssh/sshd_config \
~/wireguard-clients
# Descargar a tu máquina
scp root@servidor:~/backup-*.tar.gz ~/backups/Una vez que tengas todo configurado, puedes:
- Montar aplicaciones en Docker detrás de Nginx
- Configurar CI/CD para deployment automático
- Agregar monitoreo (Prometheus + Grafana)
- Bases de datos accesibles solo por VPN
- Servicios adicionales según tus necesidades
- Backups: Siempre haz backup antes de cambios importantes
- Testing: Mantén una sesión SSH abierta al hacer cambios
- Seguridad: No compartas llaves SSH o configuraciones VPN
- DNS: Verifica que tu dominio apunta al servidor antes de SSL
- Firewall: Ten cuidado al modificar reglas de firewall
- Todos los scripts están probados en Debian 11/12
- Compatible con Ubuntu 20.04/22.04
- Adaptable a otros proveedores (AWS, DigitalOcean, etc.)
- Los scripts piden confirmación antes de cambios importantes
- Incluyen verificación y rollback cuando es posible
Si encuentras errores o mejoras, siéntete libre de crear un issue o pull request.
MIT - Usa libremente para tus proyectos personales o comerciales.
¡Disfruta tu VPC seguro y profesional! 🎉
Si tienes preguntas, revisa los README.md de cada sección para documentación detallada.