secure_ssh

secure_ssh(){
    clear
    f_banner
    echo -e "\e[34m---------------------------------------------------------------------------------------------------------\e[00m"
    echo -e "\e[93m[+]\e[00m Securing SSH"
    echo -e "\e[34m---------------------------------------------------------------------------------------------------------\e[00m"
    echo ""
    echo -n " Securing SSH..."
    spinner
    sed s/USERNAME/$username/g templates/sshd_config > /etc/ssh/sshd_config; echo "OK"
    chattr -i /home/$username/.ssh/authorized_keys
    service ssh restart
    say_done
}

La función secure_ssh se encarga de realizar una configuración segura del sshd_config para protejer los accesos remotos al servidor. Hace uso de la plantilla que se encuentra en templates/sshd_config, vamos a ver el contenido de ese archivo:

Port 372
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 30
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PasswordAuthentication no
X11Forwarding no
AllowTcpForwarding no
PermitUserEnvironment no
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
MaxStartups 2
Banner /etc/motd
AllowUsers USERNAME

Vamos a ver algunas de las opciones.

  • Port 372 : Aquí configuramos el puerto donde vamos a hacer las conexiones remotas. Muchos de los ataques de fuerza bruta van dirigidas al puerto por defecto 22.

  • Protocol 2: Aquí le decimos al servidor que solo use este protocolo ya que la versión 1 es vulnerable a diversos ataques.

  • PermitRootLogin no: Aquí le estamos diciendo que no le permita al usuario root hacer login remoto a este servidor.

  • PasswordAuthentication no: Eliminar la autenticación por contraseñas convencionales

  • AllowUsers USERNAME: aquí Jshielder coloca el usuario que creamos al principio, y ese solo será el usuario permitido a hacer conexiones remotas al servidor.

Las demás opciones ponen ciertas restricciones en lo que podemos hacer con ssh.