Como instalar e configurar o Fail2Ban para proteger o servidor Linux
Este guia detalhado ensina o que é Fail2Ban, como configurá-lo e como usá-lo para fornecer uma camada adicional de segurança em seu sistema Linux.
O que é Fail2Ban?
Se você ativou o SSH, verifique o histórico de login do seu servidor Linux. Você ficará surpreso ao ver um grande número de IPs que tentam fazer login no seu servidor via SSH.
Se você não tiver nenhum mecanismo para impedir essas tentativas de login, seu sistema estará suscetível a ataques de força bruta. Basicamente, um script/bot continuará tentando conectar SSH ao seu sistema, tentando várias combinações de nome de usuário e senhas.
É aqui que uma ferramenta como o Fail2Ban entra em cena. Fail2Ban é um software gratuito e de código aberto que ajuda a proteger seu servidor Linux contra logins maliciosos. Fail2Ban banirá o IP (por um certo tempo) se houver um certo número de tentativas de login malsucedidas.
Fail2Ban funciona imediatamente com as configurações básicas, mas também é extremamente configurável. Você pode ajustá-lo ao seu gosto e criar filtros e regras conforme sua necessidade.
Soa interessante? Por que não testar o Fail2Ban? Leia e siga o resto do artigo e experimente você mesmo o Fail2Ban.
Instalando Fail2Ban no Linux
Você pode adivinhar a popularidade do Fail2Ban pelo fato de ele estar disponível nos repositórios oficiais de todas as principais distribuições Linux. Isso torna a instalação do Fail2Ban uma tarefa simples.
Instale Fail2Ban no CentOS e Red Hat
Você precisa ser usuário root ou sudo para instalar novo software em seu sistema.
Você precisa ter certeza de que seu sistema está atualizado e que você possui o repositório EPEL instalado.
sudo yum update && sudo yum install epel-release
Agora você pode instalar o Fail2Ban com o seguinte comando:
sudo yum install fail2ban
Instale Fail2Ban no Ubuntu e Debian
Primeiro, certifique-se de que seu sistema esteja atualizado:
sudo apt update && sudo apt upgrade -y
Agora, instale o Fail2Ban com este comando:
sudo apt install fail2ban
Compreendendo o arquivo de configuração Fail2Ban
Existem dois arquivos de configuração principais no Fail2Ban: /etc/fail2ban/fail2ban.conf e /etc/fail2ban/jail.conf. Deixe-me explicar o que eles fazem.
/etc/fail2ban/fail2ban.conf: Este é o arquivo de configuração para as configurações operacionais do daemon Fail2Ban. Configurações como loglevel, arquivo de log, soquete e arquivo pid são definidas aqui.
/etc/fail2ban/jail.conf: É aqui que toda a mágica acontece. Este é o arquivo onde você pode configurar coisas como tempo de banimento padrão, número de reties antes de banir um IP, lista de permissões de IPs, informações de envio de e-mail, etc. Basicamente você controla o comportamento do Fail2Ban a partir deste arquivo.
Agora, antes de alterar esses arquivos, Fail2Ban aconselha fazer uma cópia com o arquivo .local para esses arquivos conf. Isso ocorre porque os arquivos conf padrão podem ser substituídos nas atualizações e você perderá todas as suas configurações.
sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Agora vamos entender o arquivo jail.conf. Se você usar o comando less para ler este arquivo grande, pode parecer bastante confuso. O arquivo conf tenta explicar tudo com muitos comentários. Então, deixe-me simplificar isso para você.
O arquivo jail.conf é dividido em serviços. Existe uma seção [Padrão] e ela se aplica a todos os serviços. E então você poderá ver vários serviços com suas respectivas configurações (se houver). Todos esses serviços estão entre colchetes. Você verá seções como [sshd], [apache-auth], [squid] etc.
Se eu remover os comentários, a seção padrão ficará assim:
[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(name)s[mode=%(mode)s]
destemail = root@localhost
sender = root@
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb = abuseipdb
action = %(action_)s
Deixe-me contar o significado de alguns desses parâmetros.
bantime: Defina a duração do banimento. O padrão é 10 minutos.
findtime: A janela na qual será realizada a ação em um IP. O padrão é 10 minutos. Suponha que um login incorreto tenha sido tentado por um determinado IP às 10h30. Se o mesmo IP atingir o número máximo de tentativas antes das 10h40, será banido. Caso contrário, a próxima tentativa falhada após 10:40 será contada como primeira tentativa falhada.
maxretry: O número de tentativas com falha antes que uma ação seja executada
usedns: A configuração “warn” tenta usar DNS reverso para procurar o nome do host e bani-lo usando o nome do host. Configurá-lo como não banirá IPs, não o nome do host.
destemail: O endereço de e-mail para o qual os alertas serão enviados (precisa ser configurado)
-
remetente: o nome do remetente no e-mail de notificação
mta: Agente de transferência de correio usado para email de notificação
banaction: Este parâmetro usa o arquivo /etc/fail2ban/action.d/iptables-multiport.conf para definir a ação após o máximo de tentativas com falha
protocolo: O tipo de tráfego que será descartado após o banimento
Se você quiser fazer alguma alteração em qualquer prisão (ou em todas as cadeias), como número máximo de tentativas, tempo de banimento, tempo de localização etc., você deve editar o arquivo jail.local.
Como usar o Fail2Ban para proteger o servidor Linux
Deixe-me mostrar algumas maneiras de usar o Fail2Ban para fortalecer a segurança do Linux.
Observe que você precisa ser usuário root ou ter acesso sudo para executar os comandos fail2ban.
Habilite Fail2Ban em seu servidor e verifique todas as jails em execução
Você pode usar comandos systemd para iniciar e habilitar Fail2Ban em seu servidor Linux:
systemctl start fail2ban
systemctl enable fail2ban
Assim que o Fail2Ban estiver ativado, você poderá ver o status e as prisões ativas com o comando fail2ban-client:
fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Caso você esteja se perguntando, o sshd jail está habilitado por padrão.
Veja o registro Fail2Ban
O log Fail2Ban está localizado em /var/log/fail2ban.log. Os arquivos de log estão no seguinte formato:
2019-03-25 07:09:08,004 fail2ban.filter [25630]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07
2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213
2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202
2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90
Você pode ver que ele identifica os IPs e os proíbe quando eles ultrapassam o limite máximo de novas tentativas.
Veja IPs banidos por Fail2Ban
Uma maneira é verificar o status de uma determinada prisão. Você pode usar o cliente Fail2Ban para essa finalidade.
fail2ban-client status <jail_name>
Por exemplo, se você precisar ver todos os logins SSH incorretos banidos pelo Fail2Ban, poderá usá-lo da seguinte maneira. A saída mostraria o total de tentativas fracassadas e o total de IPs banidos.
root@test-server:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 14
| |- Total failed: 715
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 7
|- Total banned: 17
`- Banned IP list: 177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150
O sistema que está tentando fazer login via SSH a partir da falha no login deve receber um erro como este
ssh: connect to host 93.233.73.133 port 22: Connection refused
Como banir permanentemente um IP com Fail2Ban
Agora você já sabe que o banimento de um IP pelo Fail2Ban é temporário. Por padrão, dura 10 minutos e o invasor pode tentar fazer login novamente após 10 minutos.
Isso representa um risco à segurança porque os invasores podem usar um script que tenta fazer login após um intervalo de 10 minutos.
Então, como você proíbe permanentemente o Fail2Ban? Não há uma resposta clara para isso.
A partir da versão 0.11 do Fail2Ban, o tempo de banimento será calculado automaticamente e os IPs persistentes terão seu tempo de banimento aumentado exponencialmente.
Mas se você verificar sua versão do Fail2Ban, provavelmente está executando a versão 0.10.
fail2ban-server --version
Fail2Ban v0.10.2
Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).
Nas versões anteriores, você poderia usar um bantime negativo (bantime=-1) e isso seria equivalente a um banimento permanente, mas se você tentar este método, provavelmente verá um erro como 'Starting fail2ban: ERROR NOK: (' a imagem do disco do banco de dados está malformada',)'.
Uma solução alternativa não tão limpa seria aumentar o tempo de proibição para algo como 1 dia, 1 semana, 1 mês ou 1 ano. Isso pode contornar o problema até que a nova versão esteja disponível em seu sistema.
Como desbanir IP bloqueado por Fail2Ban
Primeiro verifique se o IP está bloqueado ou não. Como o Fail2Ban funciona no iptables, você pode consultar o iptable para ver os IPs que estão sendo banidos pelo seu servidor:
iptables -n -L
Você pode ter que usar o comando grep se houver muitos IPs sendo banidos.
Se você encontrar o endereço IP especificado na saída, ele está sendo banido:
Assim, o próximo passo é descobrir qual ‘prisão’ está banindo o referido IP. Você terá que usar o comando Grep com os logs fail2ban aqui.
Como você pode ver na saída abaixo, o IP está sendo banido pelo sshd jail.
root@test-server:~# grep -E ‘Ban.*61.184.247.3’ /var/log/fail2ban.log
2019-03-14 13:09:25,029 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
2019-03-14 13:52:56,745 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
Agora que você sabe o nome da prisão que bloqueia o IP, você pode desbanir o IP usando o fail2ban-client:
fail2ban-client set <jail_name> unbanip <ip_address>
Como colocar IP na lista de permissões no Fail2Ban
Não será bom se você se banir, certo? Para ignorar o banimento de um endereço IP pela sessão atual do Fail2Ban, você pode colocar o IP na lista de permissões usando um comando como este:
fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>
Você pode encontrar facilmente seu endereço IP no Linux. No meu caso, foi
sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
`- 203.93.83.113
Se você deseja colocar o IP permanentemente na lista de permissões, você deve editar o arquivo de configuração da prisão. Vá para a seção de prisão e adicione a linha ignoreip assim:
ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>
Se você deseja colocar um IP na lista de permissões de todas as prisões do seu sistema, seria uma ideia melhor editar o arquivo /etc/fail2ban/jail.local e adicionar uma linha na seção DEFAULT como vimos acima.
Você terá que reiniciar o Fail2Ban para que essa alteração tenha efeito.
Como ver a lista de permissões de IP de uma prisão
Você pode ver todos os IPs permitidos por uma prisão usando este comando:
fail2ban-client get <JAIL_NAME> ignoreip
Deve mostrar todos os IPs sendo ignorados pelo Fail2Ban para aquela prisão:
sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
|- 127.0.0.0/8
|- ::1
`- 203.93.83.113
Como remover um IP da lista branca Fail2Ban
Se você estiver removendo o IP da lista de permissões de uma determinada prisão, você pode usar este comando:
fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>
Se quiser remover permanentemente o IP, você deve editar o arquivo /etc/fail2ban/jail.local.
O que mais?
Você pode fazer muito mais coisas com Fail2Ban. Este guia fornece o básico para começar a usar o Fail2Ban. Não toquei em tópicos como ações, notificações por e-mail, filtros, etc.
Depois de conhecer os fundamentos do Fail2Ban, você pode começar a explorar mais sobre ele. Por enquanto, basta brincar com ele e adicionar uma camada adicional de segurança ao SSH no seu servidor Linux.