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.
Índice
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, fail2ban
irá gerenciar o monitoramento, banimento e desbanimento para você.
fail2ban
integra-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 iptables
um 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. fail2ban
apenas 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
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
No Fedora 32, digite:
sudo dnf install fail2ban
No Manjaro 20.0.1, usamos pacman
:
sudo pacman -Sy fail2ban
Configurando fail2ban
A fail2ban
instalaçã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.
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
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.
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.
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 maxretry
falhar em tentativas de conexão dentro do findtime
período, elas serão banidas enquanto durar o bantime
. As únicas exceções são os endereços IP da ignoreip
lista.
fail2ban
coloca os endereços IP na prisão por um determinado período de tempo. fail2ban
suporta 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 fail2ban
monitorar apenas um conjunto escolhido de tipos de conexão.
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's
monitoramento. 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
, findtime
e maxretry
.
Role para baixo até a linha 280 e você verá a seção [sshd].
É 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's
monitoramento 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 fail2ban
e 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 fail2ban
como serviço, usamos o systemctl
comando :
sudo systemctl enable fail2ban
Também o usamos para iniciar o serviço:
sudo systemctl start fail2ban
Podemos verificar o status do serviço usando systemctl
também:
sudo systemctl status fail2ban.service
Tudo parece bem – temos luz verde, então está tudo bem.
Vamos ver se fail2ban
concorda:
sudo fail2ban-client status
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
Isso lista o número de falhas e endereços IP proibidos. Claro, todas as estatísticas são zero no momento.
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 maxretry
valor 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.
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
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
Ocorreram três falhas e um endereço IP (192.168.4.25) foi banido.
Como mencionamos anteriormente, fail2ban
impõ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
Uma regra foi adicionada à política de INPUT, enviando tráfego SSH para a f2b-sshd
cadeia. A regra na f2b-sshd
cadeia 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
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
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.