Detectar los ataques

Dado que recientemente he dado de alta un servidor CentOS, con acceso SSH, me preguntaba cuánto tardarían en llegarme los primeros ataques de fuerza bruta y de diccionario. Han llegado mucho antes de lo esperado (en menos de 1 mes), y han sido más de 4000 intentos de acceder como root y más de 13000 de acceder como otro usuario antes de que me diera cuenta:

# grep --count "Failed password for root" /var/log/secure*
4115

# grep --count "Failed password" /var/log/secure*
17358

Por suerte había desactivado el acceso a la cuenta root, y mi nombre de usuario no es uno muy usual, así que no han tenido éxito todavía, pero hay que ir tomando precauciones.

Bloquear a los atacantes automáticamente

Usaremos fail2ban, que está disponible en los repositorios, ya que SSHGuard no lo está, aunque parece algo más completo. Si tienes algún problema en la instalación, repasa las instrucciones.

# yum install fail2ban
# chkconfig fail2ban on
# service fail2ban start

La próxima vez que intenten molestarte, quedarán bloqueados durante un tiempo. Puedes configurar esto y más cosas en /etc/fail2ban/jail.conf.

Prohibir el acceso por contraseña y forzar el uso de claves públicas y privadas

Prácticamente será imposible que un atacante tenga éxito y encima te ahorrarás teclear la contraseña cada vez que quieras acceder al servidor remoto.

Primero hay que generar las claves. Puedes saltarte este paso si ya tienes unas:

$ ssh-keygen -t rsa

Ahora añádelo a los certificados con acceso autorizado:

$ ssh-copy-id tu-servidor.com

Y por último, prohibiremos el acceso por contraseña poniendo en no la opción PasswordAuthentication del fichero /etc/ssh/sshd_config.

Más técnicas de seguridad

Puedes consultar el manual de seguridad SSH de CentOS, bastante completito.