Instalação e Hardening do SSH¶
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 |
|
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 |
|
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
Referências¶
5 Effective Tips to Harden SSH Server on Ubuntu
Mitigating SSH based attacks – Top 15 Best SSH Security Practices