1. Servicio SSH

Configuraciones para servicio SSH.


Desactivación del usuario root remoto

sudo sed -i -e $$\a\\\nPermitRootLogin no’ /etc/ssh/sshd_config

Desactivación de algoritmos inseguros

sudo sed -i -e $'$a\\\nCiphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128, aes128-cbc,cast128-cbc,aes192-cbc, aes256-cbc,arcfour, chacha20-poly1305, blowfish-cbc' /etc/ssh/sshd_config

Reemplazar login directo con login a través de llaves

  • Crear claves

sudo ssh-keygen -O hashalg=sha512 -t rsa -Z aes256-cbc
  • Copiar claves a un servidor.

sudo ssh-copy_id user@server
  • Desactivar el acceso por contraseñas

sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/g; s/#PasswordAuthentication no/PasswordAuthentication no/g' /etc/ssh/sshd_config

Cambiar puerto por defecto (deshabilitar puerto 22)

  • Cambiar puerto al 2222.

sudo sed -i 's/#Port 22$/Port 2222/g; s/Port 22$/Port 2222/g' /etc/ssh/sshd_config
  • Desactivar puerto 22 por iptables

sudo iptables -A INPUT -p tcp –dport 22 -j DROP
sudo iptables-save | tee /etc/iptables/rules.v4

Revisar forzado ssh2

sudo sed -e -i $'$a\\\nProtocol 2' /etc/ssh/sshd_config

Tiempo de espera de sesión

sudo sed -i -e $'$a\\\nClientAliveInterval 300 # segundos' /etc/ssh/sshd_config

Máximos intentos de login y tiempo para completar login

sed -i -e $'$a\\\nMaxAuthTries 3 # intentos' -e $'$a\\\nLoginGraceTime 30 # segundos' /etc/ssh/sshd_config

Limitación de usuarios con permisos de uso SSH

sudo sed -e $'$a\\\nAllowUsers usuario1,usuario2,usuario3' /etc/ssh/sshd_config

Deshabilitar DNS reversing

sudo sed -i -e $'$a\\\nUseDNS no' /etc/ssh/sshd_config

MFA libpam-google-authenticator

  • Instalar libpam-google-authenticator

sudo amazon-linux-extras install epel -y
sudo yum install google-authenticator -y
google-authenticator
  • Configurar servicio PAM códigos MFA

sudo sed -i -e $'$a\\\nauth required pam_google_authenticator.so' /etc/pam.d/sshd
sudo sed -i -e $'$a\\\nChallengeResponseAuthentication yes' /etc/ssh/sshd_config

Limitar de conexiones concurrentes vía SSH

sudo sed -i -e $'$a\\\nMaxStartups 1' /etc/ssh/sshd_config

Limitar de sesiones concurrentes vía SSH

sudo sed -i -e $'$a\\\nMaxSessions 1' /etc/ssh/sshd_config

Deshabilitar autenticación por clave vacía (empty password)

sudo sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/' /etc/ssh/sshd_config

Deshabilitar reenvío de puertos (port forwarding)

sudo sed -i 's/#AllowTcpForwarding yes/AllowTcpForwarding no/' /etc/ssh/sshd_config

Auditar el servicio SSH con auditd

sudo auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config_changes`

Proteger por permisos archivos de claves privadas SSH

sudo chmod 600 $HOME/.ssh/id_rsa

Cambiar banner SSH

sudo echo "Unauthorized access to this system is prohibited. Doing so without proper permissions will result in severe legal action." > /etc/issue.net
sudo sed -i 's/#Banner none/Banner \/etc\/issue.net/' /etc/ssh/sshd_config

Monitoreo de acceso con Fail2Ban

sudo apt-get install fail2ban
sudo systemctl enable fail2ban.service
sudo systemctl start fail2ban.service
  • Implementar reglas de baneo en /etc/fail2ban/jail.local

[DEFAULT]
bantime = 600
maxretry = 3
findtime = 120

...SNIP...

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
  • Bloquear manualmente una IP

sudo fail2ban-client set sshd banip 10.10.10.10
  • Desbloquear manualmente una IP

sudo fail2ban-client set sshd unbanip 10.10.10.10
  • Verificar IP bloqueada

sudo fail2ban-client status sshd