Seguridad básica
feb 5, 2026 17:45 • 1.6K visitas
La seguridad en un servidor no es importante. Es vital. Como el oxígeno. Como el café. Como evitar que entren por la ventana mientras duermes y te cambien los muebles de sitio. Un servidor sin seguridad es un local abierto a las tres de la mañana: cualquiera entra, nadie paga y todos dejan huella, por eso, cuando un sysadmin levanta una máquina, lo primero que debería hacer no es celebrar el evento, sino cerrar con llave.
Empezamos el ritual conectándonos vía ssh y pidiéndole al sistema que recuerde quién es, porque suele olvidarlo:
ssh username@IP_SERVER_ADDR
sudo apt update
sudo apt upgrade
Después, el primer acto de camuflaje: cambiar el puerto por defecto. No es que esto convierta tu servidor en invisible, pero al menos deja de llevar el cartel luminoso de "Hola, soy el 22, pégame". Abrimos el confesionario con sudo nano /etc/ssh/sshd_config:
Port 23
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
Reiniciamos el servicio con sudo systemctl restart sshd. Ahora toca levantar un muro. Un cortafuegos. Un portero con cara de pocos amigos. Uno ligero, educado y con porra: Uncomplicated Firewall (ufw):
sudo apt install ufw
sudo export PATH=$PATH:/usr/sbin # Add route to PATH
uwf --version
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 23/tcp # SSH/SFTP
sudo ufw allow 25/tcp # SMTP
sudo ufw allow 587/tcp # SMTPS
sudo ufw allow 993/tcp # IMAPS
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
Aquí el servidor aprende una palabra nueva: "no". No a lo que no conoce. No a lo que no toca. No a los que llaman a las tres de la mañana. Pero aún queda la fauna persistente: los que prueban contraseñas como quien mete monedas en una tragaperras esperando premio. Para ellos existe fail2ban: la memoria rencorosa del sistema.
sudo apt install fail2ban
fail2ban --version
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
sudo systemctl enable --now fail2ban
Una configuración sencilla para sshd sería la que se indica más abajo, seguida de un reinicio del servicio y de la comprobación de su estado:
[sshd]
enabled = true
mode = normal
port = 23
logpath = %(sshd_log)s
maxretry= 10
bantime = 1d
backend = %(sshd_backend)s
action = ufw
sudo systemctl restart fail2ban
sudo systemctl status fail2ban
sudo systemctl status fail2ban sshd
Y cuando el servidor ya sabe decir "no" en varios idiomas, le damos un nombre propio: apuntamos el dominio a su IP y lo vestimos con un certificado SSL, que viene a ser como ponerle traje y corbata criptográfica:
sudo apt update
sudo apt install certbot
certbot --version
sudo apt install python3-certbot-nginx
sudo certbot --nginx -d your_domain
Certbot, eso sí, exige silencio por el puerto :80 durante el ritual. Como un sacerdote en plena ceremonia dominical. Después editamos la configuración del sitio en Nginx: /etc/nginx/sites-available/your_domain.conf:
server {
listen 443 ssl;
server_name your_domain;
ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
# Additional security parameters
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# HTTP Redirection versus HTTPS
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name your_domain;
return 301 https://$host$request_uri;
}
Y reiniciamos:
sudo nginx -t
sudo systemctl reload nginx
Y con esto, el servidor deja de ser un adolescente ingenuo y pasa a ser un adulto desconfiado. No es invulnerable -nadie lo es-, pero ya no abre la puerta en bata ni contesta a desconocidos. Porque la seguridad no es una opción avanzada del menú. Es el menú. No es un "ya lo miraré". Es un "si no lo hago hoy, otro lo hará mañana... pero desde fuera". Un servidor sin defensa es una promesa sin cifrar, una puerta sin cerrojo y una confianza sin memoria. Así que endurecerlo no es un mero cumplimiento: es un acto moral. Es una forma de decirle al mundo: aquí se entra con permiso, o no se entra. Y eso, en la red, es casi un poema.
Antes de continuar...
Detrás de cada artículo de Bitácora hay tiempo, investigación y desarrollo contínuo. Si quiere ayudar a mantener este proyecto libre e independiente, apóyeme: