Restringindo as tentativas de login de ssh com fail2ban (solução para bots que tentam usar senhas de força bruta via ssh)

imagem



O SSH é bastante seguro, especialmente se você tomar precauções razoáveis, como exigir autenticação baseada em par de chaves. No entanto, ainda existem muitos bots à solta que tentam encontrar hosts vulneráveis ​​tentando fazer login com nomes de usuário e senhas comuns comprometidos, como root / root ou admin / admin. Embora seja improvável que tenham sucesso, eles ainda usarão sua largura de banda e gerarão grandes quantidades de logs.



Uma maneira de minimizar as tentativas de login de força bruta é alterar a porta padrão de escuta do SSH. No entanto, isso não é considerado uma boa prática - primeiro, lembre-se de que cada vez que se conectarem ao servidor, eles devem definir a porta correta, diferente da padrão. Além disso, ele pode criar outra vulnerabilidade de segurança se a porta selecionada for maior que 1024. Normalmente, apenas o root pode se vincular a números de porta abaixo de 1024. No entanto, se um número de porta maior for usado para SSH, em certas circunstâncias, os usuários sem acesso root podem substituir o daemon SSH com outro serviço possivelmente malicioso.

A melhor maneira de resolver esse problema é usar uma ferramenta que bloqueie o acesso de um invasor ao servidor SSH. Uma tal ferramenta amplamente utilizada é fail2ban ( www.fail2ban.org ). Ao analisar os logs, o fail2ban detecta tentativas repetidas de autenticação com falha e define automaticamente as regras de firewall para descartar o tráfego originado do endereço IP do invasor.



Instale fail2ban no Ubuntu



Instalação manual



Instalar fail2ban no Ubuntu (e outras distribuições baseadas em Debian) é muito simples:



$ sudo apt install fail2ban
      
      





Verificando como funciona



Você pode verificar se o serviço está sendo executado com o seguinte comando:



$ sudo systemctl status fail2ban



A saída deve ser semelhante à seguinte - o status do serviço deve ser ativo:



● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-05-18 12:36:36 ***; ** min ago
       Docs: man:fail2ban(1)
    Process: 723*** ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
   Main PID: 723*** (f2b/server)
      Tasks: 5 (limit: 38293)
     Memory: 18.0M
     CGroup: /system.slice/fail2ban.service
             └─723488 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
      
      





Vamos ver como fail2ban mudou as regras de iptables:



$ sudo iptables -L -n -v
      
      





Você também deve ver que há uma nova cadeia f2b-sshd na configuração do iptables que é referenciada pela regra de cadeia INPUT:



Chain INPUT (policy ACCEPT 73411 packets, 6622K bytes)
 pkts bytes target     prot opt in     out     source               destination
 1019 65297 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22


Chain f2b-sshd (1 references)
 pkts bytes target     prot opt in     out     source               destination
    8   480 REJECT     all  --  *      *       94.191.93.46         0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       77.50.75.162         0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       51.254.143.190       0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       46.101.97.5          0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       43.129.28.88         0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       41.221.168.167       0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       35.247.219.12        0.0.0.0/0            reject-with icmp-port-unreachable
   12   720 REJECT     all  --  *      *       220.180.119.192      0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       218.75.121.75        0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       213.87.101.176       0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       192.139.15.34        0.0.0.0/0            reject-with icmp-port-unreachable
   21  1260 REJECT     all  --  *      *       187.104.145.210      0.0.0.0/0            reject-with icmp-port-unreachable
    8   480 REJECT     all  --  *      *       177.191.189.13       0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       159.89.82.134        0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       159.75.140.97        0.0.0.0/0            reject-with icmp-port-unreachable
    8   480 REJECT     all  --  *      *       157.92.13.105        0.0.0.0/0            reject-with icmp-port-unreachable
   11   660 REJECT     all  --  *      *       117.80.225.245       0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       106.53.121.179       0.0.0.0/0            reject-with icmp-port-unreachable
  865 56057 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
      
      







O pacote fail2ban contém uma ferramenta chamada fail2ban-client. Ele permite que você verifique o status do serviço e interaja com ele (por exemplo, permite que você bloqueie e desbloqueie manualmente endereços IP, habilite e desabilite as cadeias, etc.)



Vamos ver quais cadeias estão ativas:



$ sudo fail2ban-client status
      
      





Status
|- Number of jail:	1
`- Jail list:	sshd
      
      







Há apenas uma prisão - sshd - que sq é responsável por monitorar os logs do servidor SSH para login com falha e configurar regras de firewall para bloquear novas tentativas.



Agora podemos verificar as estatísticas da prisão sshd:



$ sudo fail2ban-client status sshd
      
      





Status for the jail: sshd
|- Filter
|  |- Currently failed:	8
|  |- Total failed:	26
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	22
   |- Total banned:	25
   `- Banned IP list:	106.53.121.179 117.80.225.245 157.92.13.105 159.75.140.97 159.89.82.134 177.191.189.13 187.104.145.210 213.87.101.176 218.75.121.75 220.180.119.192 35.247.219.12 41.221.168.167 43.129.28.88 46.101.97.5 51.254.143.190 77.50.75.162 94.191.93.46 1.55.165.141 120.53.245.68 104.131.178.145 106.56.102.83 152.32.146.21
      
      





Configurando fail2ban



Na maioria dos casos, a configuração padrão deve ser suficiente. No entanto, é útil entender quais são esses padrões e como eles podem ser alterados para atender às suas necessidades.



Em uma configuração padrão, fail2ban protegerá o servidor SSH e bloqueará o invasor por 10 minutos após 5 tentativas de login malsucedidas em 10 minutos. O arquivo de configuração padrão pode ser encontrado em /etc/fail2ban/jail.conf. O arquivo é bem documentado e, em grande parte, autoexplicativo. Observe que você não deve fazer nenhuma alteração neste arquivo, pois ele pode ser substituído durante a atualização fail2ban.



Após alterar a configuração, não se esqueça de reiniciar o serviço:



$ sudo systemctl restart fail2ban
      
      





Devo observar que, neste caso, alterei os parâmetros de configuração, entendendo a estratégia de ataque e recebi uma lista diária de hosts atacantes e bloqueei.



Mas falarei sobre isso mais tarde em uma nota separada, se esta for útil e interessante para alguém.



All Articles