Como proteger seu servidor Linux com fail2ban
Publicados: 2022-01-29 Com 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
A duquesa de Windsor, Wallis Simpson, disse uma vez: “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 conexões Secure Shell (SSH), ou atuar como um servidor da Web ou de e-mail, você precisará 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. fail2ban
apenas 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
RELACIONADO: O Guia do Iniciante para iptables, o Linux Firewall
Instalando o fail2ban
Instalar 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 fail2ban
é atualizado, portanto, perderemos nossas alterações se fizermos personalizações nesse arquivo.
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 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 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á a seção [DEFAULT] em algum lugar por volta 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 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 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. 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.
Você pode ter adivinhado pelo nome da seção [DEFAULT], mas as configurações que analisamos são os padrões. Agora, vamos ver as configurações da prisão SSH.
RELACIONADO: Como editar arquivos de texto graficamente no Linux com gedit
Configurando uma Jail
Jails permitem que você mova os tipos de conexão para dentro e para fora fail2ban's
. 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á 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:
habilitado = verdadeiro
Também digitamos esta linha:
maxretentativa = 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 fail2ban's
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 habilitar 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:
status do cliente sudo fail2ban
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.
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 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 da prisão [sshd] 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, poderemos nos conectar:
ssh [email protected]
Simples e Eficaz
Mais simples geralmente é melhor, e 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.
Comandos Linux | ||
arquivos | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · tipo · renomear · zip · descompactar · montar · umount · instalar · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · converter · rclone · triturar · srm | |
Processos | alias · tela · topo · legal · renice · progresso · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · tempo limite · parede · sim · matar · dormir · sudo · su · tempo · groupadd · usermod · grupos · lshw · desligar · reiniciar · parar · desligar · passwd · lscpu · crontab · data · bg · fg | |
Rede | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
RELACIONADO: Melhores laptops Linux para desenvolvedores e entusiastas