Instale o Fail2ban e associe-o a SSH e Nginx

Quando montamos um servidor com Linux e queremos gerenciá-lo da internet através do controle remoto SSH, pode acontecer que passemos a receber ataques com o objetivo de entrar no sistema e poder controlá-lo para seus fins. Esses ataques geralmente são realizados por programas de computador (bots) que por muito tempo tentam acessar o sistema por meio de força bruta.

Em posts anteriores, falei sobre como configurar o serviço SSH, mas alguns bots avançados não entram no serviço, mas podem matar o serviço SSH no servidor desabilitando o acesso remoto.

Manual completo de SSH (Secure Shell)

Podemos evitá-lo usando o ferramenta fail2ban, é muito prático e oferece uma grande margem de segurança. Para explicar um pouco como funciona. É capaz de criar iptables antes de qualquer tentativa de login com falha por mais de 5 vezes consecutivas, rejeitando qualquer tipo de conexão uma vez que seja banida.

Instalar Fail2ban


A instalação pode ser feita diretamente do apt. Primeiro atualizamos o sistema e depois instalamos o Fail2ban.
 apt-get update && apt-get -y upgrade
 apt-get install fail2ban
Isso não apenas instala o programa, mas também o deixa em execução e iniciando com o sistema.

Configurando Fail2ban


O serviço Fail2ban tem suas configurações no diretório / etc / fail2ban. Você tem algumas opções pré-configuradas no jail.conf, o melhor neste caso é copiar o arquivo e não fazer as modificações diretamente nele, ao atualizar o fail2ban esses arquivos são sobrescritos e você pode perder todas as alterações feitas anteriormente.

Nesse caso, copiamos o arquivo e o nomeamos jail.local para que ele possa localizá-lo.

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Depois de copiado, podemos abri-lo e ver como funciona.
 vim /etc/fail2ban/jail.local
Dentro do arquivo, temos vários parâmetros que podemos ajustar. Qualquer parâmetro que esteja sob a tag [DEFAULT] será aplicado a todos os serviços habilitados pelo Fail2ban como SSH, NGINX, APACHE, chamaremos isso de global, então teremos seções específicas para cada serviço.

Começaremos adicionando parâmetros à seção global.

 ignoreip = 127.0.0.1
Adicionamos nosso host local desta forma, ele irá ignorar todo o tráfego local, podemos adicionar endereços adicionais separando-os por um espaço.
 bantime = 600
O bantime é o período de tempo que o cliente ficará banido após ser bloqueado. A unidade está em segundos, 600 segundos seriam 10 minutos é o valor padrão.
 findtime = 600 maxretry = 3
Então temos findtime e maxretry. Eles são responsáveis ​​por estabelecer as condições para que um cliente seja banido por padrão, pode-se ler que qualquer usuário com mais de 3 tentativas falhadas em menos de 10 minutos será banido.
 destemail = root @ localhost sendername = Fail2Ban mta = sendmail
Se quisermos criar alertas para usuários banidos, estes 3 parâmetros são necessários, definiremos o destino para quem enviaremos o e-mail de alerta, quem será o encarregado de enviá-lo e finalmente o mta para definir qual serviço de e-mail usaremos .
 ação = $ (ação_) s
Aqui, definiremos qual ação tomar quando um banimento for necessário. O valor action_ é a ação padrão baseada na rejeição de qualquer tráfego do cliente até que o tempo de proibição expire.

Se quisermos enviar um alerta por e-mail, devemos alterar o valor para action_mw, mas se também quisermos anexar linhas do log no corpo do e-mail, usaremos action_mwl. Devemos ter certeza de que as configurações de e-mail estão corretas antes de alterar este valor.

Configurações por serviço


Assim que as configurações globais forem concluídas, adicionaremos os parâmetros que serão aplicados exclusivamente ao

Serviço SSH, certificamo-nos de adicionar as opções sob a tag [SSH].

 ativado = verdadeiro
Por padrão, o serviço SSH está habilitado, mas podemos modificá-lo se necessário nesta opção.

Toda esta seção poderia funcionar com os valores que detalharei posteriormente, mas você pode modificar para adaptá-la às suas necessidades ou deixar todos como padrão.

Outra das configurações são os filtros que indicam se o login estava correto ou não e podem ser adicionados para outros serviços, por exemplo temos um servidor com nginx e uma parte da página é protegida por senha, mas um cliente está atacando com força bruta , podemos parar isso adicionando o seguinte na tag [nginx-http-auth].

 [nginx-http-auth] enabled = true filter = nginx-http-auth port = http, https logpath = /var/log/nginx/error.log
Agora, se um usuário tiver mais de 3 tentativas de login malsucedidas, isso será refletido nos logs e o fail2ban agirá e bloqueará todo o tráfego do usuário.

Ambiente de teste


Depois de entender o básico, faremos um pequeno ambiente de teste onde protegeremos SSH e Nginx através do Fail2ban criando uma política de banimento que nos notificará do IP que foi banido.

Vamos instalar o Nginx primeiro, se não estiver instalado

 apt-get install nginx
vamos instalar um serviço de e-mail para notificações pode ser sendmail
 apt-get install sendmail
finalmente, queremos que nosso iptables seja persistente após uma inicialização, podemos criar um script rc.0 ou instalar o pacote iptables-persistent.
 apt-get install iptables-persistent
Ele será instalado.

Estabelecendo nosso Firewall


Depois de instalar o acima, precisamos implementar um firewall para que ele possa bloquear o tráfego. Vou criar um firewall básico em posts posteriores irei falar mais sobre iptables.

Permitiremos conexões estabelecidas, tráfego de servidor, como atualizações, e tráfego destinado às portas SSH e Nginx. Todo o tráfego restante será negado.

 sudo iptables -A ENTRADA -i lo -j ACEITAR sudo iptables -A ENTRADA -m conntrack --ctstate ESTABELECIDO, RELACIONADO -j ACEITAR sudo iptables -A ENTRADA -p tcp --dport 22 -j ACEITAR sudo iptables -A ENTRADA -p tcp --dport 80 -j ACEITAR sudo iptables -A INPUT -j DROP
Podemos ver as mudanças com:
 iptables -S
Deve dar um resultado semelhante.
 -P ENTRADA ACEITAR -P AVANÇAR ACEITAR -P SAÍDA ACEITAR -N fail2ban-ssh -A ENTRADA -p tcp -m multiporta --dportas 22 -j fail2ban-ssh -A ENTRADA -i lo -j ACEITAR -A ENTRADA -m conntrack --ctstate RELACIONADO, ESTABELECIDO -j ACEITAR -A ENTRADA -p tcp -m tcp --dport 22 -j ACEITAR -A ENTRADA -p tcp -m tcp --dport 80 -j ACEITAR -A ENTRADA -j DROP -A fail2ban -ssh -j RETURN

Ajustando as configurações de Fail2ban


Agora devemos configurar o arquivo jail.local conforme nossa conveniência.
 vi /etc/fail2ban/jail.local
Podemos estender o tempo de banimento de um usuário por pelo menos 30 minutos, lembre-se de definir o valor em segundos.
 bantime = 1800
Devemos configurar um email que receba todos os alertas de banimento fail2ban, vamos procurar o valor do email no arquivo e colocar o email.
 destemail = [email protected]
Podemos mudar o remetente que enviará o alerta que normalmente coloco com o nome fail2ban para que possamos filtrar melhor entre todos os logs.

Depois que devemos mudar o valor da ação, temos 2 opções:

  • action_mw: envia um alerta com relatório semelhante ao comando whois do cliente banido.
  • action_mwl: envie um alerta muito mais detalhado incluindo um log no corpo da mensagem.

Neste, usaremos a segunda opção:

 ação =% (action_mwl) s 
Em seguida, iremos para a seção [SSH] e podemos editar o número máximo de tentativas antes do banimento, deixaremos em 5:
 maxretry = 5
Se tivermos o serviço SSH em uma porta diferente de 22, o que é altamente recomendado, devemos mencionar sua porta.
 porta = 45024
Em seguida, procuraremos a tag [nginx-http-auth] e deixaremos como está.
 [nginx-http-auth] ativado = verdadeiro
Terminamos e podemos salvar e fechar o arquivo.

Reiniciando o serviço Fail2ban


Para todas as mudanças a serem aplicadas, recomendo interromper o serviço.
 parada fail2ban de serviço 
Então podemos iniciá-los novamente
 serviço fail2ban start
Isso vai demorar um pouco, depois de cerca de 5 minutos, podemos ver nossas regras novamente com
 iptables -S
 -P ENTRADA ACEITAR -P AVANÇAR ACEITAR -P SAÍDA ACEITAR -N fail2ban-nginx-http-auth -N fail2ban-ssh -A ENTRADA -p tcp -m multiport --porta 80.443 -j fail2ban-nginx-http-auth -A ENTRADA -p tcp -m multiport --dports 22 -j fail2ban-ssh -A ENTRADA -i lo -j ACEITAR -A ENTRADA -m conntrack --ctstate RELACIONADO, ESTABELECIDO -j ACEITAR -A ENTRADA -p tcp -m tcp - -dport 22 -j ACEITAR -A ENTRADA -p tcp -m tcp --dport 80 -j ACEITAR -A ENTRADA -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -j RETURN
Vemos como fail2ban adicionou novas políticas, podem variar dependendo da configuração que você definiu em /etc/fail2ban/jail.local.

ConclusõesInstalamos o fail2ban e configuramos para trabalhar com SSH e NGINX no caso do APACHE devemos mudar os rótulos e o diretório dos logs mas é muito parecido com o nginx. Configuramos apenas o básico, você pode criar filtros e regras muito mais avançadas, recomendo ler um pouco a página de manual deles, os arquivos de configuração são bem comentados, recomendo ir aos poucos descobrir todas as suas funções.

Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave