Ir para o conteúdo

Instalação e Hardening do SSH

Banner

📚 Instalando o daemon

Para instalar o daemon do ssh em sistemas baseados no gerenciador de pacotes apt podemos utilizar o comando abaixo:

Comando :
sudo apt-get install openssh-server

📚 Configurando o daemon

Após a instalação do SSH, podemos realizar certos ajustes. Começaremos protegendo alguns arquivos contra leitura, escrita e gravação. Em determinados casos podemos aumentar o nível de proteção inoculando o arquivo, neste caso, ele não poderá ser apagado, movido ou alterado.

Caso o arquivo de configuração do daemon tenha sido protegido com o chattr , podemos utilizar o comando abaixo para liberar a edição do arquivo:

Comando :
sudo chattr -i /etc/ssh/sshd_config

Em seguida podemos iniciar as configurações editando o arquivo /etc/ssh/sshd_config

Comando :
sudo nano /etc/ssh/sshd_config

A primeira configuração que será realizada é a alteração da porta TCP utilizada pelo daemon. Desta forma devemos comentar a linha abaixo:

Configuração :
#Port 22

Em seguida devemos comentar as seguintes linhas:

Configuração :
#X11Forwarding yes
#PrintMotd no

E no final do arquivo devemos adicionar as seguintes linhas:

Configuração :
## ----------------------------------------------------------------------
#  Ajustes basicos
## ----------------------------------------------------------------------
# Arquivo:  /etc/ssh/sshd_config
## ----------------------------------------------------------------------
Port 65222
PermitRootLogin no
AllowTcpForwarding no

#Disable X11Forwarding
X11Forwarding no

#Whitelist Users/Groups
AllowGroups admin

#Disable Empty Passwords
PermitEmptyPasswords no

MaxStartups 5
MaxAuthTries 3

#Disconnect Idle Sessions
#ClientAliveInterval 300
#ClientAliveCountMax 2

## ----------------------------------------------------------------------
#  LR:issue.net - Apresenta o Banner antes da mensagem de login
## ----------------------------------------------------------------------
DebianBanner no
PrintMotd yes

# Checking Last Login IP Address
PrintLastLog yes
Banner /etc/issue.net

📚 Protegendo os arquivos de configuração

Neste ponto já estamos com as configurações prontas, ou seja, já podemos proteger o arquivo de configuração contra alterações:

Comando :
sudo chattr +i /etc/ssh/sshd_config
sudo lsattr  /etc/ssh/sshd_config

📚 Reiniciando o daemon

Em seguida podemos reiniciar o daemon do SSH.

Comando :
1
2
sudo systemctl restart sshd.service
sudo systemctl status sshd.service

O primeiro comando reiniciou o SSH e o segundo exibiu o status do deamon. A saída do segundo comando deve ser semelhante à:

Saída :
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-06-22 15:11:53 UTC; 11s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 1258 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 1268 (sshd)
      Tasks: 1 (limit: 9451)
     Memory: 1.3M
     CGroup: /system.slice/ssh.service
             └─1268 sshd: /usr/sbin/sshd -D [listener] 0 of 5-5 startups

Jun 22 15:11:53 XXXX systemd[1]: Starting OpenBSD Secure Shell server...
Jun 22 15:11:53 XXXX sshd[1268]: Server listening on 0.0.0.0 port 65222.
Jun 22 15:11:53 XXXX sshd[1268]: Server listening on :: port 65222.
Jun 22 15:11:53 XXXX systemd[1]: Started OpenBSD Secure Shell server.

📚 Verificando as configurações o daemon

Para verificar quais são as configurações ativas podemos utilizar o comando abaixo:

Comando :
sudo sshd -T | less

Dentre as linhas geradas pelo comando podemos identificar:

Saída :
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
port 65222
addressfamily any
listenaddress [::]:65222
listenaddress 0.0.0.0:65222
...
printmotd yes
printlastlog yes
x11forwarding no
...
permitemptypasswords no
...
usedns no
allowtcpforwarding no
... 
banner /etc/issue.net
...
loglevel INFO
syslogfacility AUTH
...
allowgroups admin

Realizaremos outro teste para garantir que o serviço está escutando na porta correte:

Comando :
sudo lsof -i:65222

Após o daemon ser reiniciado somente usuários associados ao grupo admin poderão ter acesso ao sistema. Logo, para evitarmos de perder a conexão com o sistema adicionaremos ao menos um usuário a este grupo:

Saída :
sudo groupadd admin
sudo adduser [login_name] admin

📚 Limitando o acesso ao serviço

Nós podemos limitar o acesso (login) ao ssh de forma que apenas alguns endereços IPs possam utiliza-lo e bloqueando o acesso aos demais endereços. Como daemon do SSH utiliza o TCP Warppers, podemos criar uma lista de liberação e um uma lista de bloqueio baseado nos endereços IPS. Os endereços IPs a serem liberados devem ser adicionados ao arquivo /etc/hosts.allow e os endereços a serem bloqueados devem ser adicionados ao arquivo /etc/hosts.deny.

Primeiro vamos configurar os endereços IPs a partir dos quais poderemos nos conectar ao serviço. Assim, precisamos editar o arquivo /etc/hosts.allow:

Comando :
sudo chattr -i /etc/hosts.allow
sudo nano /etc/hosts.allow

Por exemplo, podemos adiciona as seguintes linhas ao arquivo

Configuração :
## ----------------------------------------------------------------------
# Arquivo: /etc/hosts.allow
## ----------------------------------------------------------------------
# VLANs: SRE / SGS / NTL / Lab Redes / CSR
## ----------------------------------------------------------------------
sshd: 10.10.10.

Em seguida devemos editar o arquivo /etc/hosts.deny e adicionar s lista dos endereços bloqueados:

Comando :
sudo chattr -i /etc/hosts.deny
sudo nano /etc/hosts.deny

Neste arquivo podemos adicionar as seguintes linhas.

Configuração :
## ----------------------------------------------------------------------
# Arquivo: /etc/hosts.deny
## ----------------------------------------------------------------------
sshd: ALL

O parâmetro sshd: ALL fará com que o TCP Warppers bloqueie todas as conexões que não tiverem sido liberadas no arquivo /etc/hosts.allow

Para finalizar o processo, podemos proteger os dois arquivos. Desta forma eles não poderão ser alterados acidentalmente.

Comando :
sudo chattr +i /etc/hosts.allow
sudo chattr +i /etc/hosts.deny
sudo lsattr /etc/hosts.*

📚 Instalando e configurando o Fail2Ban

Este programa permite realizar bloqueios temporários baseado nas informações contidas nos arquivos de log. Ela realiza o bloqueio baseado em possíveis ações maliciosas.

Para instalar o Fail2Ban podemos utilizar o seguinte comando:

Comando :
sudo apt-get install fail2ban

Após a instalação, podemos copiar o arquivo de configuração que veio com o apliativo e utiliza-lo como base para a nossa configuração

Comando :
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Após realizar a cópia podemos ajustar algumas de suas configurações:

Comando :
sudo nano /etc/fail2ban/jail.local

Devemos localizar a seção que começa com [sshd] e logo abaixo devemos a seguinte configuração: enabled = true:

Configuração :
[sshd]
enabled  = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
bantime = 24h
ignoreip = 127.0.0.1/8 10.10.10.171

**Onde: **

  • maxretry : numero de falas que devem ocorrer nos últimos 10 minutos para que o endereço IP seja bloqueado (banido)

  • bantime : período de tempo que o endereço IP permanecerá bloqueado. A unidade padrão é segundos (s), mas alguns sistemas possuem suporte a horas (h)

  • ignoreip : lista de endereços IPs que não devem ser bloqueados

Em seguida podemos reiniciar o serviço do fail2ban:

Comando :
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban
sudo systemctl status fail2ban

O ultimo comando deve gerar uma saída semelhante à:

Saída :
● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-06-22 16:43:23 UTC; 11s ago
       Docs: man:fail2ban(1)
    Process: 2291 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
   Main PID: 2292 (f2b/server)
      Tasks: 5 (limit: 9451)
     Memory: 11.6M
     CGroup: /system.slice/fail2ban.service
             └─2292 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Jun 22 16:43:23 gru.local systemd[1]: Starting Fail2Ban Service...
Jun 22 16:43:23 gru.local systemd[1]: Started Fail2Ban Service.
Jun 22 16:43:23 gru.local fail2ban-server[2292]: Server ready

A partir de agora o fail2ban monitorará os logs gerados pelo daemon do ssh e realizará os bloqueio dos endereços IPs que tiverem realizado alguma ação suspeita.

📚 Verificando os Logs gerados pelo SSH

Para verificar os logs gerados pelo daemon do SSH podemos utilizar o seguinte comando:

Comando :
sudo journalctl -eu ssh

Que deve gerar uma saída semelhante à:

Saída :
-- Reboot --
Jun 22 14:21:36 gru.local systemd[1]: Starting OpenBSD Secure Shell server...
Jun 22 14:21:36 gru.local sshd[883]: Server listening on 0.0.0.0 port 22.
Jun 22 14:21:36 gru.local sshd[883]: Server listening on :: port 22.
Jun 22 14:21:36 gru.local systemd[1]: Started OpenBSD Secure Shell server.
Jun 22 14:22:48 gru.local sshd[932]: Accepted password for luisrodrigoog from 146.134.35.240 port 59044 ssh2
Jun 22 14:22:48 gru.local sshd[932]: pam_unix(sshd:session): session opened for user luisrodrigoog by (uid=0)
Jun 22 15:11:53 gru.local sshd[883]: Received signal 15; terminating.
Jun 22 15:11:53 gru.local systemd[1]: Stopping OpenBSD Secure Shell server...
Jun 22 15:11:53 gru.local systemd[1]: ssh.service: Succeeded.
Jun 22 15:11:53 gru.local systemd[1]: Stopped OpenBSD Secure Shell server.
Jun 22 15:11:53 gru.local systemd[1]: Starting OpenBSD Secure Shell server...
Jun 22 15:11:53 gru.local sshd[1268]: Server listening on 0.0.0.0 port 65222.
Jun 22 15:11:53 gru.local sshd[1268]: Server listening on :: port 65222.
Jun 22 15:11:53 gru.local systemd[1]: Started OpenBSD Secure Shell server.

Com isto finalizamos o pocesso de instalação e configuração do SSH e o fail2ban

Banner

🔖 Referências

✅ Hardening SSH

✅ 5 Effective Tips to Harden SSH Server on Ubuntu

✅ Mitigating SSH based attacks – Top 15 Best SSH Security Practices

Banner


Última atualização: 31 de outubro de 2020

Comentários