Como proteger seu servidor Linux com fail2ban

Uma janela de terminal estilizada em execução em um laptop Linux estilo Ubuntu.
Fatmawati Achmad Zaenuri / Shutterstock

Com o fail2ban, seu computador Linux bloqueia automaticamente os endereços IP que têm muitas falhas de conexão. É uma segurança autorregulável! Mostraremos como usá-lo.

Segurança Segurança Segurança

A duquesa de Windsor,  Wallis Simpson,  uma vez disse a famosa frase: “Você nunca pode ser muito rico ou muito magro.” Nós atualizamos isso para nosso mundo moderno e interconectado: Você nunca pode ser muito cuidadoso ou muito seguro.

Se o seu computador aceita solicitações de conexão de entrada, como conexões Secure Shell ( SSH ), ou atua como um servidor da web ou de e-mail, você precisa protegê-lo contra ataques de força bruta e adivinhadores de senha.

Para fazer isso, você precisará monitorar as solicitações de conexão que não conseguem entrar em uma conta. Se eles falharem repetidamente na autenticação em um curto período, eles devem ser proibidos de fazer novas tentativas.

A única maneira de conseguir isso de forma prática é automatizar todo o processo. Com um pouco de configuração simples, fail2banirá gerenciar o monitoramento, banimento e desbanimento para você.

fail2banintegra-se com o firewall Linux iptables . Ele impõe a proibição de endereços IP suspeitos, adicionando regras ao firewall. Para manter esta explicação organizada, estamos usando iptablesum conjunto de regras vazio.

Claro, se você está preocupado com a segurança, provavelmente tem um firewall configurado com um conjunto de regras bem preenchido. fail2banapenas adiciona e remove suas próprias regras – suas funções regulares de firewall permanecerão intactas.

Podemos ver nosso conjunto de regras vazio usando este comando:

sudo iptables -L

sudo iptables -L em uma janela de terminal.

Instalando fail2ban

A instalação fail2bané simples em todas as distribuições que usamos para pesquisar este artigo. No Ubuntu 20.04, o comando é o seguinte:

sudo apt-get install fail2ban

sudo apt-get install fail2ban em uma janela de terminal.

No Fedora 32, digite:

sudo dnf install fail2ban

sudo dnf instale o fail2ban em uma janela de terminal.

No Manjaro 20.0.1, usamos  pacman:

sudo pacman -Sy fail2ban

sudo pacman -Sy fail2ban em uma janela de terminal.

Configurando fail2ban

A fail2baninstalação contém um arquivo de configuração padrão chamado jail.conf. Este arquivo é sobrescrito quando fail2bané atualizado, portanto, perderemos nossas alterações se fizermos personalizações para este arquivo.

Recomendado:  A lanterna do Android 13 pode ser menos cegante, se você quiser

Em vez disso, copiaremos o arquivo jail.conf para um chamado jail.local. Colocando nossas alterações de configuração em jail.local, elas persistirão entre as atualizações. Ambos os arquivos são lidos automaticamente por fail2ban.

Veja como copiar o arquivo:

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

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local em uma janela de terminal.

Agora abra o arquivo em seu editor favorito. Vamos usar gedit:

sudo gedit /etc/fail2ban/jail.local

Procuraremos duas seções no arquivo: [DEFAULT] e [sshd]. No entanto, tome cuidado para encontrar as seções reais. Esses rótulos também aparecem próximos ao topo em uma seção que os descreve, mas não é isso que queremos.

/etc/fail2ban/jail.local aberto em uma janela do gedit.

Você encontrará a seção [DEFAULT] em algum lugar em torno da linha 40. É uma longa seção com muitos comentários e explicações.

/etc/fail2ban/jail.local aberto em uma janela do gedit e rolado para a linha 89.

Role para baixo até a linha 90 e você encontrará as quatro configurações a seguir que você precisa saber:

  • ignoreip:  uma lista de permissões de endereços IP que nunca serão banidos. Eles têm um cartão permanente Get Out of Jail Free. O endereço IP do host local  ( 127.0.0.1) está na lista por padrão, junto com seu equivalente IPv6 ( ::1). Se houver outros endereços IP que você sabe que nunca devem ser banidos, adicione-os a esta lista e deixe um espaço entre cada um.
  • bantime: A duração pela qual um endereço IP é banido (o “m” significa minutos). Se você digitar um valor sem “m” ou “h” (para horas), ele será tratado como segundos. Um valor de -1 banirá permanentemente um endereço IP. Tenha muito cuidado para não se bloquear permanentemente.
  • findtime: a quantidade de tempo dentro do qual muitas tentativas de conexão com falha resultarão no banimento de um endereço IP.
  • maxretry: O valor para “muitas tentativas malsucedidas”.

Se uma conexão do mesmo endereço IP maxretryfalhar em tentativas de conexão dentro do findtimeperíodo, elas serão banidas enquanto durar o bantime. As únicas exceções são os endereços IP da ignoreiplista.

fail2bancoloca os endereços IP na prisão por um determinado período de tempo. fail2bansuporta muitas cadeias diferentes, e cada uma representa mantém as configurações aplicáveis ​​a um único tipo de conexão. Isso permite que você tenha diferentes configurações para vários tipos de conexão. Ou você pode fail2banmonitorar apenas um conjunto escolhido de tipos de conexão.

Recomendado:  O programa de auto-reparo da Apple ficou um pouco melhor

Você pode ter adivinhado pelo nome da seção [DEFAULT], mas as configurações que examinamos são os padrões. Agora, vamos dar uma olhada nas configurações da prisão SSH.

Configurando uma prisão

Jails permitem que você mova os tipos de conexão dentro e fora do fail2ban'smonitoramento. Se as configurações padrão não coincidem com aqueles que deseja aplicar para a cadeia, você pode definir valores específicos para bantime, findtimee maxretry.

Role para baixo até a linha 280 e você verá a seção [sshd].

/etc/fail2ban/jail.local aberto em uma janela do gedit e rolado para a linha 280.

É aqui que você pode definir valores para a cadeia de conexão SSH. Para incluir esta prisão no monitoramento e banimento, temos que digitar a seguinte linha:

ativado = verdadeiro

Também digitamos esta linha:

maxretry = 3

A configuração padrão era cinco, mas queremos ser mais cautelosos com conexões SSH. Baixamos para três, salvamos e fechamos o arquivo.

Adicionamos esta prisão ao fail2ban'smonitoramento e substituímos uma das configurações padrão. Uma prisão pode usar uma combinação de configurações padrão e específicas da prisão.

Habilitando fail2ban

Até agora, nós o instalamos fail2bane configuramos. Agora, temos que habilitá-lo para ser executado como um serviço de inicialização automática. Então, precisamos testá-lo para ter certeza de que funciona conforme o esperado.

Para habilitar fail2bancomo serviço, usamos o systemctlcomando :

sudo systemctl enable fail2ban

Também o usamos para iniciar o serviço:

sudo systemctl start fail2ban

sudo systemctl enable fail2ban em uma janela de terminal.

Podemos verificar o status do serviço usando systemctltambém:

sudo systemctl status fail2ban.service

sudo systemctl status fail2ban.service em uma janela de terminal.

Tudo parece bem – temos luz verde, então está tudo bem.

Vamos ver se  fail2ban concorda:

sudo fail2ban-client status

sudo fail2ban-client status em uma janela de terminal.

Isso reflete o que configuramos. Habilitamos uma única prisão, chamada [sshd]. Se incluirmos o nome da prisão com nosso comando anterior, podemos analisá-lo mais profundamente:

sudo fail2ban-client status sshd

sudo fail2ban-client status sshd em uma janela de terminal.

Isso lista o número de falhas e endereços IP proibidos. Claro, todas as estatísticas são zero no momento.

Recomendado:  Como fazer o Windows funcionar melhor em monitores de alto DPI e corrigir fontes borradas

Testando nossa prisão

Em outro computador, faremos uma solicitação de conexão SSH à nossa máquina de teste e digitaremos incorretamente a senha de propósito. Você tem três tentativas para obter a senha certa em cada tentativa de conexão.

O maxretryvalor será acionado após três tentativas de conexão malsucedidas, não três tentativas de senha malsucedidas. Portanto, temos que digitar uma senha incorreta três vezes para falhar na primeira tentativa de conexão.

Em seguida, faremos outra tentativa de conexão e digitaremos a senha incorretamente mais três vezes. A primeira tentativa de senha incorreta da terceira solicitação de conexão deve disparar fail2ban.

ssh dave@ubtuntu20-04.local em uma janela de terminal com muitas tentativas de senha falhadas.

Após a primeira senha incorreta na terceira solicitação de conexão, não obtemos uma resposta da máquina remota. Não recebemos nenhuma explicação; nós apenas pegamos o ombro frio.

Você deve pressionar Ctrl + C para retornar ao prompt de comando. Se tentarmos mais uma vez, obteremos uma resposta diferente:

ssh dave@ubuntu20-04.local

ssh dave@ubuntu20-04.local em uma janela de terminal com resposta de conexão recusada.

Anteriormente, a mensagem de erro era “Permissão negada”. Desta vez, a conexão foi recusada. Somos persona non grata. Fomos banidos.

Vejamos os detalhes da prisão [sshd] novamente:

sudo fail2ban-client status sshd

sudo fail2ban-client status sshd em uma janela de terminal.

Ocorreram três falhas e um endereço IP (192.168.4.25) foi banido.

Como mencionamos anteriormente, fail2banimpõe proibições adicionando regras ao conjunto de regras do firewall. Vamos dar outra olhada no conjunto de regras (ele estava vazio antes):

sudo iptables -L

sudo iptables -L em uma janela de terminal.

Uma regra foi adicionada à política de INPUT, enviando tráfego SSH para a f2b-sshdcadeia. A regra na f2b-sshdcadeia rejeita conexões SSH de 192.168.4.25. Não alteramos a configuração padrão para  bantime, portanto, em 10 minutos, esse endereço IP será desbanido e poderá fazer novas solicitações de conexão.

Se você definir uma duração de banimento mais longa (como várias horas), mas quiser permitir que um endereço IP faça outra solicitação de conexão mais cedo, você pode liberá-lo antes.

Nós digitamos o seguinte para fazer isso:

sudo fail2ban-client set sshd unbanip 192.168.5.25

sudo fail2ban-client set sshd unbanip 192.168.5.25 em uma janela de terminal.

Em nosso computador remoto, se fizermos outra solicitação de conexão SSH e digitarmos a senha correta, poderemos nos conectar:

ssh dave@ubuntu20-04.local

ssh dave@ubuntu20-04.local em uma janela de terminal.

Simples e Eficaz

Normalmente, mais simples é melhor e fail2bané uma solução elegante para um problema complicado. Requer muito pouca configuração e quase não impõe nenhuma sobrecarga operacional – para você ou seu computador.