Saltar al contenido

Servidor Dedicado: Consejos de Seguridad para Linux

Descubre cómo mejorar la seguridad de tu servidor Linux con consejos clave para prevenir accesos no autorizados y proteger tus servicios → Aprende más ahora

10 de noviembre de 202610 min de lectura7 Visitas0 útil

Introducción

Esta guía contiene algunos consejos y recomendaciones para hacer tu servidor Linux más seguro. Dado que los servidores deben ser accesibles desde el exterior, es fundamental contar con una protección básica contra accesos no deseados y no debe ser descuidada.

Información

Ten en cuenta que estas instrucciones no son exhaustivas y puedes encontrar información más detallada en otras secciones de la documentación de ZAP. (por ejemplo, 2FA (SSH))

Consejo

La forma más sencilla de proteger tu servidor es siempre la misma, sin importar el tipo de servidor: usa contraseñas seguras, actualiza tus servicios regularmente y presta atención a qué servicios instalas y qué guías sigues.

Configuración de puertos de tus servicios

ServicioPuerto
SSH22
FTP21
Correo25
DNS53
HTTP80
HTTPS443

Servicios como SSH o FTP usan por defecto siempre los mismos puertos (algunos están en la tabla anterior). Si un atacante externo intenta vulnerar tu servicio SSH mediante fuerza bruta, primero debe saber qué puerto usa SSH. Si no cambias estos puertos, los puertos 22 y 21 suelen ser los objetivos para ejecutar comandos directamente en el servidor o acceder a archivos vía FTP.

Para evitar esto, recomendamos configurar puertos personalizados para los servicios estándar. En la siguiente sección aprenderás cómo hacerlo:

Atención

El puerto que elijas debe estar entre 1024 y 65535 y no debe estar ya en uso.

Puedes usar cat /etc/services para ver algunos puertos estándar y evitar elegir uno ocupado.

Cambiar el puerto SSH

Para cambiar el puerto SSH, debes modificar el archivo de configuración, normalmente ubicado en /etc/ssh/sshd_config. Si no lo encuentras, búscalo con:

Code
find / -name "sshd_config" 2>/dev/null

Abre el archivo con nano (como root o usando sudo):

Code
sudo nano /etc/ssh/sshd_config

Inserta el puerto deseado tras Port. Si Port está comentado (por ejemplo, #Port 22), elimina el "#" y reemplaza el 22 por el puerto que quieras. Guarda el archivo (en Nano con Ctrl + o) y ciérralo (Ctrl + x).

Luego reinicia el servicio SSH para aplicar los cambios:

Code
# En Ubuntu/Debian/CentOS por ejemplo
sudo systemctl restart sshd

Cambiar el puerto FTP

Si tienes instalado un servicio FTP como proFTPd, también puedes cambiar su puerto mediante el archivo de configuración, de forma similar a SSH.

Busca el archivo proftpd.conf:

Code
find / -name "proftpd.conf" 2>/dev/null

Normalmente está en /etc/proftpd.conf (CentOS) o /etc/proftpd/proftpd.conf (Ubuntu, Debian). Ábrelo con nano, quita el "#" delante de port y escribe el puerto deseado. Recuerda las indicaciones anteriores para no elegir un puerto inválido.

Consejo

Usa Ctrl + W para buscar en nano.

Code
nano /etc/proftpd/proftpd.conf

Protección adicional con Fail2Ban

Fail2Ban es un servicio que bloquea direcciones IP que intentan acceder al servidor con intenciones probablemente maliciosas. Fail2Ban monitorea archivos de registro para detectar anomalías y protege tu sistema de forma sencilla y efectiva.

Tras la instalación, Fail2Ban incluye configuraciones predefinidas para servicios comunes, como:

  • apache
  • lighttpd
  • sshd
  • qmail
  • postfix
  • Courier Mail Server Otros servicios pueden añadirse fácilmente mediante expresiones regulares (RegEx) y especificando el archivo de registro deseado.
Como ejemplo, veamos una entrada en /var/log/auth.log. Este archivo contiene todos los intentos de inicio de sesión SSH, exitosos o fallidos.

Aquí ves la entrada:

Code
Dec 2 12:59:19 vps-zap515723-2 sshd[364126]: Failed password for root from 92.117.xxx.xxx port 52504 ssh2

Fail2Ban usa este archivo y lo monitorea para detectar autenticaciones fallidas. Como el archivo de registro contiene la IP del atacante, Fail2Ban puede bloquear esa IP tras varios intentos fallidos.

Instalar Fail2Ban

Inicia sesión en tu servidor Linux. Si necesitas ayuda, sigue nuestra guía Primer acceso (SSH). Ejecuta los comandos como root o con sudo.

Code
sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban

Tras la instalación, puedes verificar el estado con systemctl: (Ctrl+C para salir)

Code
systemctl status fail2ban.service
* fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor pres>
     Active: active (running) since Sat 2023-12-02 13:10:33 UTC; 24s ago
       Docs: man:fail2ban(1)
    Process: 23988 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, statu>
   Main PID: 23989 (fail2ban-server)
        CPU: 409ms
     CGroup: /system.slice/fail2ban.service
             `-23989 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Starting Fail2Ban Service...
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Started Fail2Ban Service.
Dec 02 13:10:34 vps-zap515723-1 fail2ban-server[23989]: Server ready

Configurar Fail2Ban

Fail2Ban está instalado pero aún no activo ni configurado. Revisa /etc/fail2ban, donde deberían estar estos archivos:

Code
action.d fail2ban.d jail.conf paths-arch.conf paths-debian.conf
fail2ban.conf filter.d jail.d paths-common.conf paths-opensuse.conf

Para crear una "jail" activa, crea un archivo llamado jail.local. Simplemente copia el contenido de jail.conf a este nuevo archivo y ábrelo:

Code
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Aquí puedes hacer todas las configuraciones, incluyendo qué servicios monitorear. Solo mira la sección después de [Default], que contiene configuraciones generales.

Baja hasta encontrar esta sección y modifícala así:

AtributoExplicaciónValor
ignoreipIPs que no serán bloqueadas127.0.0.1/8
ignorecommandNo relevante
bantimeTiempo que una IP queda bloqueada1h
findtimeIntervalo para contar intentos fallidos10m
maxretryNúmero de intentos fallidos antes de bloquear5
Code
# puede definirse separado por espacios y/o comas
#ignoreip = 127.0.0.1/8 ::1

# ignorecommand = /path/to/command <ip>
ignorecommand =

# "bantime" es el tiempo en segundos que un host queda bloqueado
bantime  = 1h

# Un host se bloquea si tiene "maxretry" errores en los últimos "findtime" segundos
findtime  = 10m

# "maxretry" es el número de errores antes de bloquear
maxretry = 5

Con esto tienes la configuración básica. Para monitorear el servicio SSH, baja hasta la etiqueta [sshd]. Si cambiaste el puerto, ponlo en port.

El bloque [sshd] debería verse así:

Code
[sshd]

enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Consejo

Como ves, puedes hacer configuraciones individuales para cada servicio (por ejemplo, maxretry más bajo que el valor por defecto). Si no haces esto, se usan las configuraciones generales.

Finalmente, reinicia Fail2Ban para activar la supervisión:

Code
sudo systemctl restart fail2ban.service

Verificar funcionamiento de Fail2Ban

Si tienes acceso a una VPN o un segundo servidor, puedes probar si Fail2Ban funciona bloqueándote a ti mismo. Con una VPN o hotspot móvil obtendrás otra IP para hacer la prueba.

Atención

No hagas esta prueba en tu red habitual, porque podrías bloquear tu propia IP y quedarte bloqueado.

Intenta conectarte por SSH a tu servidor (con otra IP) y escribe la contraseña incorrecta varias veces. El resultado debería ser:

Code
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
root@185.223.29.xxx: Permission denied (publickey,password).
root@vps-zap515723-2:/var/log# ssh root@185.223.29.179
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
^C
root@vps-zap515723-2:/var/log# ssh root@185.223.29.xxx
ssh: connect to host 185.223.29.xxx port 22: Connection refused

Como ves, la conexión es rechazada (Connection refused en lugar de Permission denied).

Muestra el estado de Fail2Ban. Verás que una IP está bloqueada:

Code
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 4
|  |- Total failed:     8
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   xxx

Si quieres desbloquear una IP, usa: fail2ban-client set sshd unbanip {tu IP}.

Información

Si tienes muchas IP bloqueadas, considera aumentar el tiempo de bloqueo con cada intento fallido para reducir los intentos posibles.

Code
[sshd]

enabled = true
port    = 22
filter  = sshd
logpath = /var/log/auth.log
maxretry = 4

bantime = 1h
# El tiempo de bloqueo aumenta con cada bloqueo de esta IP
bantime.increment = true
# Factor de escala de 24 horas (1h,24h,48h,3d,4d....)
bantime.factor = 24
# Tiempo máximo de bloqueo = 5 semanas
bantime.maxtime = 5w

FAQ

Preguntas frecuentes

Usa contraseñas seguras, actualiza tus servicios regularmente y presta atención a qué servicios instalas y qué guías sigues.
El inicio de sesión SSH con contraseña puede ser vulnerado fácilmente mediante ataques de fuerza bruta, especialmente si la contraseña es débil. Se recomienda usar autenticación solo con claves SSH y desactivar el acceso por contraseña.
SSH usa por defecto el puerto 22. Como servicios como SSH o FTP usan siempre los mismos puertos estándar, estos son objetivos comunes de ataques automatizados, por lo que es recomendable tomar medidas de protección.

Comentarios

¿Te resultó útil este artículo?

Tus comentarios nos ayudan a priorizar y mejorar los contenidos.

0 de 0 Las valoraciones consideraron útil este artículo.

Ayuda personalizada

¿No te basta con la guía?

Nuestro equipo de soporte de ZAP conoce tu producto. Describe brevemente tu consulta y te ayudaremos personalmente.

Zappy conoce esta guía y te responde directamente en el chat.