SSHfail2banLinux6 min de lectura

Hardening básico de Linux

Configuración de SSH seguro, fail2ban, actualizaciones automáticas y usuario no-root.


¿Qué es hardening?

Hardening es el proceso de asegurar un servidor reduciendo su superficie de ataque. Un servidor recién instalado tiene configuraciones por defecto que no son seguras para producción. Esta guía cubre las medidas esenciales que todo servidor debería tener.

Paso 1: Actualizar el sistema

Antes de cualquier otra cosa:

bash
sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y

Paso 2: Crear usuario no-root

Nunca trabajes como root directamente:

bash
adduser deploy
usermod -aG sudo deploy

Verificá el acceso sudo:

bash
su - deploy
sudo whoami  # Debe mostrar: root

Paso 3: Configurar SSH seguro

Editá /etc/ssh/sshd_config:

bash
sudo nano /etc/ssh/sshd_config

Cambiá estas directivas:

terminal
# Deshabilitar acceso root
PermitRootLogin no

# Solo autenticación por clave
PasswordAuthentication no
PubkeyAuthentication yes

# Cambiar puerto (opcional pero recomendado)
Port 2222

# Limitar intentos
MaxAuthTries 3
MaxSessions 3

# Timeout de sesiones inactivas
ClientAliveInterval 300
ClientAliveCountMax 2

# Deshabilitar métodos inseguros
X11Forwarding no
PermitEmptyPasswords no

Antes de reiniciar SSH, asegurate de tener tu clave pública copiada:

bash
# Desde tu máquina local
ssh-copy-id -p 2222 deploy@TU_IP

Reiniciá SSH:

bash
sudo systemctl restart sshd

Paso 4: Instalar y configurar fail2ban

fail2ban bloquea IPs que intentan fuerza bruta:

bash
sudo apt install -y fail2ban

Creá /etc/fail2ban/jail.local:

ini
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = ufw

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400

Activá el servicio:

bash
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Verificá el estado:

bash
sudo fail2ban-client status sshd

Paso 5: Configurar actualizaciones automáticas

bash
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Editá /etc/apt/apt.conf.d/50unattended-upgrades para configurar qué se actualiza:

terminal
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
    "${distro_id}ESMApps:${distro_codename}-apps-security";
};

Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";

Paso 6: Deshabilitar servicios innecesarios

bash
# Ver servicios activos
systemctl list-units --type=service --state=running

# Deshabilitar servicios que no uses
sudo systemctl disable --now cups
sudo systemctl disable --now avahi-daemon

Paso 7: Configurar límites de recursos

Editá /etc/security/limits.conf:

terminal
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096

Paso 8: Auditoría básica

Instalá herramientas de auditoría:

bash
sudo apt install -y lynis
sudo lynis audit system

Lynis te da un reporte con sugerencias de mejora específicas para tu servidor.

Checklist de hardening

  • Sistema actualizado
  • Usuario no-root con sudo
  • SSH: sin root, sin password, puerto cambiado
  • fail2ban activo
  • Actualizaciones automáticas de seguridad
  • Servicios innecesarios deshabilitados
  • Firewall configurado (ver guía de UFW)

Recomendaciones

  • Ejecutá lynis audit system mensualmente para detectar nuevas vulnerabilidades
  • Revisá los logs de fail2ban para ver intentos de intrusión
  • Mantené un registro de los cambios de configuración
  • Considerá herramientas adicionales como rkhunter para detectar rootkits

¿Te resultó útil esta guía?