Pesquisa de site

Como bloquear ataques de força bruta SSH usando SSHGUARD


SSHGuard é um daemon de código aberto que protege hosts contra ataques de força bruta. Ele consegue isso por meio do monitoramento e agregação de logs do sistema, detectando ataques e bloqueando invasores usando um dos back-ends de firewall do Linux: iptables, FirewallD, pf > e ipfw.

Inicialmente projetado para fornecer uma camada extra de proteção para o serviço OpenSSH, o SSHGuard também protege uma ampla gama de serviços, como Vsftpd e Postfix. Ele reconhece vários formatos de log, incluindo Syslog, Syslog-ng e arquivos de log brutos.

SSHGuard é bastante semelhante ao Fail2ban, só que é escrito em C (Fail2ban é escrito em Python), é mais leve e oferece menos recursos.

Neste guia, demonstraremos como você pode instalar e configurar o SSHGuard para bloquear ataques de força bruta SSH em seu servidor Linux.

Etapa 1: Instale o SSHGuard no Linux

Começamos com a instalação do SSHGuard no Linux.

Instale SSHGuard no Debian/Ubuntu

Primeiro, atualize as listas de pacotes e depois instale o SSHGuard dos repositórios padrão usando o gerenciador de pacotes apt.

sudo apt update
sudo apt install sshguard

Uma vez instalado, o serviço SSHGuard inicia automaticamente e você pode verificar isso usando o comando:

sudo systemctl status sshguard

Instale SSHGuard em sistemas RHEL

Para distribuições baseadas em RHEL, como CentOS, Rocky e AlmaLinux, comece instalando o repositório EPEL como fornecido no comando abaixo.

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
OR
sudo dnf install epel-release

Com o EPEL instalado, vá em frente e instale o SSHGuard usando o gerenciador de pacotes dnf.

sudo dnf install sshguard 

Depois de instalado, inicie e configure o SSHGuard para iniciar na inicialização ou reinicialização do sistema.

sudo systemctl start sshguard
sudo systemctl enable sshguard

Certifique-se de verificar se o SSHGuard está funcionando conforme o esperado.

sudo systemctl status sshguard

Etapa 2: configuração SSHGuard no Linux

SSHGuard monitora ativamente o /var/log/auth.log, /var/log/secure systemd journal e syslog-ng arquivos de log para tentativas de login malsucedidas.

Para cada tentativa de login malsucedida, o host remoto é banido por um período limitado de tempo que, por padrão, é definido em 120 segundos. Depois disso, o tempo de banimento aumenta por um fator de 1,5 com cada tentativa sucessiva de login malsucedida.

O horário em que os hosts infratores são banidos, além de outros parâmetros, é especificado no arquivo sshguard.conf. Você pode acessar o arquivo de configuração usando o editor vim conforme mostrado.

sudo vim /etc/sshguard/sshguard.conf

Nas distribuições baseadas em RHEL, o arquivo de configuração está localizado no caminho a seguir.

sudo vim /etc/sshguard.conf

Aqui está um exemplo do arquivo de configuração quando visualizado no Ubuntu/Debian.

Vamos nos concentrar na opção principal.

  • A diretiva BACKEND aponta para o caminho completo do executável backend. Neste exemplo, vemos que IPtables está definido como backend padrão do firewall.
  • A diretiva THRESHOLD bloqueia invasores quando a pontuação do ataque excede o valor especificado.
  • A opção BLOCK_TIME é o número de segundos que um invasor fica bloqueado após cada tentativa sucessiva de login malsucedida. Por padrão, é definido como 120 após a primeira tentativa. Isso aumenta com cada tentativa sucessiva de login com falha.
  • A opção DETECTION_TIME refere-se ao tempo em segundos durante o qual o atacante é registrado ou lembrado pelo sistema antes que sua pontuação seja zerada.
  • A opção WHITELIST_file aponta para o caminho completo do arquivo da lista branca que contém hosts que não deveriam estar na lista negra./li>

Etapa 3: configurar o SSHGuard para bloquear ataques de força bruta SSH

Para evitar ataques de força bruta, você precisa configurar os seguintes firewalls para funcionar com o sshguard.

Bloquear ataques SSH usando UFW

Se você tiver o UFW instalado e ativado em seu sistema Ubuntu/Debian, modifique o arquivo /etc/ufw/before.rules.

sudo vim etc/ufw/before.rules

Adicione as seguintes linhas logo após a seção allow all on loopback.

allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

hand off control for sshd to sshguard
:sshguard - [0:0]
-A ufw-before-input -p tcp --dport 22 -j sshguard

Salve o arquivo e reinicie o UFW.

sudo systemctl restart ufw

Agora tente fazer login no servidor a partir de um sistema diferente com as credenciais erradas e observe que você será bloqueado por 120 segundos após a primeira tentativa de login malsucedida.

Você pode verificar isso verificando o arquivo de log auth.log.

sudo tail -f  /var/log/auth.log

Após a próxima tentativa de registro com falha, o tempo de bloqueio aumenta para 240 segundos, depois para 480 segundos, depois para 960 segundos e assim por diante.

Bloquear ataques SSH usando Firewalld

Se você estiver executando o firewalld, verifique se ele está configurado e ativado. Em seguida, execute o seguinte comando para ativar o sshguard na sua zona preferida.

sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule source ipset=sshguard4 drop"

Para aplicar as alterações, recarregue o Firewalld e o sshguard.

sudo firewall-cmd --reload
sudo systemctl restart sshguard

Em seguida, verifique a regra da seguinte forma:

sudo firewall-cmd —-info-ipset=sshguard4

Bloquear ataques SSH usando Iptables

Se você ainda usa Iptables, primeiro crie uma nova regra de cadeia para sshguard em Iptables para começar a bloquear os bandidos.

iptables -N sshguard

Em seguida, atualize a cadeia INPUT para direcionar o tráfego para o sshguard e bloquear todo o tráfego de pessoas nefastas.

iptables -A INPUT -j sshguard

Para bloquear portas específicas como SSH, POP e IMAP de invasores, execute o comando:

iptables -A INPUT -m multiport -p tcp --destination-ports 22,110,143 -j sshguard

E por fim, salve a regra para que as alterações tenham efeito.

iptables-save > /etc/iptables/iptables.rules

Etapa 4: como colocar hosts bloqueados por SSH na lista de permissões

Para colocar um host bloqueado na lista de permissões, basta especificar seu nome de host ou endereço IP no arquivo de lista de permissões localizado em:

/etc/sshguard/whitelist - Ubuntu/Debian 
/etc/sshguard.whitelist - RHEL-based distros

Depois disso, certifique-se de reiniciar o daemon sshguard e o back-end do firewall para que as alterações sejam aplicadas.

Neste guia, demonstramos como você pode bloquear ataques SSH Bruteforce usando o daemon SSHGuard em servidores Linux. Seu feedback é bem-vindo.