Como proteger seu servidor Linux com fail2ban

Com o fail2ban, seu computador Linux bloqueia automaticamente endereços IP com muitas falhas de conexão. É segurança autorregulada! Mostraremos como usá-lo.

Segurança Segurança Segurança

Duquesa de Windsor, Wallis Simpson, certa vez disse: “Você nunca pode ser muito rico ou muito magro”. Atualizamos isso para nosso mundo moderno e interconectado: você nunca pode ser muito cuidadoso ou muito seguro.

Se o seu computador aceitar solicitações de conexão de entrada, como Capsula segura (SSH) ou atua como um servidor 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 dentro de um curto período, eles devem ser proibidos de fazer novas tentativas.

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

fail2ban integra-se com o firewall do Linux iptables. Ele reforça as proibições dos endereços IP suspeitos adicionando regras ao firewall. Para manter esta explicação organizada, estamos usando iptables com um conjunto de regras vazio.

É claro que, se você estiver preocupado com a segurança, provavelmente terá um firewall configurado com um conjunto de regras bem preenchido. apenas fail2ban adiciona e remove suas próprias regras—suas funções regulares de firewall permanecerão intocadas.

Podemos ver nosso conjunto de regras vazio usando este comando:

sudo iptables -L

Instalando o fail2ban

Instalar 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 o pacman:

sudo pacman -Sy fail2ban

Configurando o fail2ban

A instalação do fail2ban contém um arquivo de configuração padrão chamado jail.conf. Este arquivo é substituído quando o fail2ban é atualizado, portanto, perderemos nossas alterações se fizermos personalizações nesse arquivo.

  7 aplicativos essenciais do Linux que todo usuário precisa instalar

Em vez disso, copiaremos o arquivo jail.conf para um chamado jail.local. Ao colocar nossas alterações de configuração em jail.local, elas persistirão nas atualizações. Ambos os arquivos são lidos automaticamente pelo 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 o gedit:

sudo gedit /etc/fail2ban/jail.local

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

Você encontrará o [DEFAULT] seção em algum lugar em torno da linha 40. É uma seção longa 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 conhecer:

ignoreip: Uma lista branca 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 localhost (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 trancar permanentemente.
findtime: A quantidade de tempo em que muitas tentativas de conexão com falha resultarão no banimento de um endereço IP.
maxretry: O valor para “muitas tentativas com falha”.

Se uma conexão do mesmo endereço IP fizer tentativas de conexão com falha maxretry dentro do período findtime, elas serão banidas pela duração do bantime. As únicas exceções são os endereços IP na lista ignoreip.

fail2ban coloca os endereços IP na cadeia por um determinado período de tempo. O fail2ban suporta muitas jails diferentes, e cada uma delas representa as configurações que se aplicam a um único tipo de conexão. Isso permite que você tenha configurações diferentes para vários tipos de conexão. Ou você pode fazer com que o fail2ban monitore apenas um conjunto escolhido de tipos de conexão.

  Como instalar o tema Pop GTK no Linux

Você pode ter adivinhado a partir do [DEFAULT] nome da seção, mas as configurações que vimos são os padrões. Agora, vamos ver as configurações da prisão SSH.

Configurando uma Jail

Jails permitem que você mova os tipos de conexão para dentro e para fora do monitoramento do fail2ban. Se as configurações padrão não corresponderem àquelas que você deseja aplicar à prisão, você pode definir valores específicos para bantime, findtime e maxretry.

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

É 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:

enabled = true

Também digitamos esta linha:

maxretry = 3

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

Adicionamos esta prisão ao monitoramento do fail2ban e substituimos uma das configurações padrão. Uma jail pode usar uma combinação de configurações padrão e específicas da jail.

Ativando fail2ban

Até agora, instalamos o fail2ban e o configuramos. Agora, temos que habilitá-lo para ser executado como um serviço de inicialização automática. Em seguida, precisamos testá-lo para garantir que funcione conforme o esperado.

Para habilitar o fail2ban como serviço, usamos o comando systemctl:

sudo systemctl enable fail2ban

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

sudo systemctl start fail2ban

Também podemos verificar o status do serviço usando systemctl:

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 montamos. Habilitamos uma única prisão, chamada [sshd]. Se incluirmos o nome da jail com nosso comando anterior, podemos dar uma olhada mais profunda:

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 para nossa máquina de teste e digitaremos incorretamente a senha propositalmente. Você tem três tentativas de acertar a senha em cada tentativa de conexão.

  Como sincronizar seus arquivos usando lsyncd no Linux

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

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 acionar o fail2ban.

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

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

ssh [email protected]

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

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

sudo fail2ban-client status sshd

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

Como mencionamos anteriormente, o fail2ban impõe banimentos adicionando regras ao conjunto de regras do firewall. Vamos dar outra olhada no conjunto de regras (estava vazio antes):

sudo iptables -L

Uma regra foi adicionada à política INPUT, enviando tráfego SSH para a cadeia f2b-sshd. A regra na cadeia f2b-sshd 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 antecipadamente.

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, teremos permissão para nos conectar:

ssh [email protected]

Simples e Eficaz

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