Como proteger seu servidor Linux com fail2ban

Conteúdo

Uma janela de terminal estilizada em execução em um laptop Linux estilo Ubuntu.

Com fail2ban, o seu computador Linux bloqueia automaticamente os endereços IP que têm muitas falhas de conexão. É segurança autorregulável! Vamos mostrar a você como usá-lo.

Segurança Segurança Segurança

Duquesa de Windsor, Wallis Simpson, uma vez dito: “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 aceita solicitações de conexão de entrada, O que Cobertura segura (SSH) conexões, ele atua como um servidor web ou de e-mail, você precisa protegê-lo de ataques de força bruta e adivinhadores de senha.

Para faze-lo, você precisará monitorar as solicitações de conexão que não entram em uma conta. Se eles não conseguirem autenticar repetidamente em um curto período de tempo, eles devem ser proibidos de fazer novas tentativas.

A única maneira de conseguir isso de forma prática é automatizar todo o procedimento. Com uma pequena configuração simples, fail2ban vai gerenciar o monitor, banir e anular a proibição para você.

fail2ban integra-se com Firewall Linux iptables. Imponha proibições em endereços IP suspeitos, adicionando regras ao firewall. Para manter esta explicação arrumada, estamos usando iptables com um conjunto de regras vazio.

Desde já, se você está preocupado com a segurança, você provavelmente tem um firewall configurado com um conjunto de regras bem preenchido. fail2banadicione e remova 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

RELACIONADO: O guia do iniciante para iptables, Firewall Linux

Instalar fail2ban

Instalando fail2ban é simples em todas as distribuições que usamos para investigar este post. No Ubuntu 20.04, o comando é o seguinte:

sudo apt-get install fail2ban

No Fedora 32, escriba:

sudo dnf install fail2ban

Em manjaro 20.0.1, nós usamos pacman:

sudo pacman -Sy fail2ban

configuração fail2ban

a fail2ban A instalação contém um arquivo de configuração padrão chamado jail.conf. Este arquivo é sobrescrito quando fail2ban Ele atualiza, então perderemos as alterações se personalizarmos este arquivo.

Em seu lugar, vamos copiar o arquivo jail.conf para um chamado jail.local. Colocando nossas mudanças de configuração em jail.local, persistirá nas atualizações. Ambos os arquivos são lidos automaticamente por fail2ban.

É assim que o arquivo é copiado:

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

Vamos procurar duas seções no arquivo: [PREDEFINIÇÃO] e [sshd]. Apesar disto, tenha cuidado para encontrar as seções reais. Essas marcas também aparecem perto do topo em uma seção que as descreve., mas não é isso que queremos.

/etc / fail2ban / jail.local aberto em uma janela do gedit.

Você encontrará o [PREDEFINIÇÃO] seção em algum lugar ao redor da linha 40. É uma longa seção com muitos comentários e explicações.

/etc / fail2ban / jail.local aberto em uma janela do gedit e rolado para a linha 89.

Role para baixo até a linha 90 e você encontrará as quatro configurações a seguir que você precisa saber:

  • ignorarip: Uma lista branca de endereços IP que nunca serão banidos. Eles têm um cartão permanente para sair da prisão livre. a dirección IP localhost (127.0.0.1) está listado por padrão, junto com seu IPv6 idêntico (::1). Se houver outros endereços IP que você conhece, nunca deve ser banido, adicione-os a esta lista e deixe um espaço entre cada um.
  • bantime: A duração da proibição de um endereço IP (a “m” significa minutos). Se você digitar um valor sem um “m” o “h” (para horas), será tratado como segundos. Um valor de -1 banir permanentemente um endereço IP. Tenha muito cuidado para não ficar bloqueado permanentemente.
  • tempo de busca: A quantidade de tempo dentro do qual muitas tentativas de conexão com falha resultarão na proibição de um endereço IP.
  • maxretria: O valor de “Muitas tentativas falhas”.

Se uma conexão for feita a partir do mesmo endereço IP maxretry tentativas de conexão malsucedidas dentro do findtime período, são proibidos durante a duração do bantime. As únicas exceções são os endereços IP no ignoreip pronto.

fail2ban coloca endereços IP na prisão por um período de tempo especificado. fail2ban admite muitas prisões diferentes, e cada um deles representa que a configuração se aplica a apenas um tipo de conexão. Isso permite que você tenha diferentes configurações para vários tipos de conexão. Ou você pode ter fail2ban monitore apenas um conjunto escolhido de tipos de conexão.

Você pode ter adivinhado a partir do [PREDEFINIÇÃO] Nome da Seção, mas as configurações que vimos são as padrão. Agora, Vamos ver a configuração da prisão SSH.

RELACIONADO: Como editar graficamente arquivos de texto no Linux com gedit

Configurar uma prisão

As prisões permitem que você mova os tipos de conexão para dentro e para fora fail2ban's vigilância. Se as configurações padrão não corresponderem às que você deseja que a prisão aplique, pode determinar valores específicos para bantime, findtime, e maxretry.

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

/etc / fail2ban / jail.local aberto em uma janela do gedit e rolado para a linha 280.

É aqui que você pode determinar os valores para a gaiola de conexão SSH. Para incluir esta prisão no monitoramento e proibição, temos que escrever a próxima linha:

ativado = verdadeiro

Nós também escrevemos esta linha:

maxretry = 3

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

Nós adicionamos esta prisão a fail2ban's monitorar e substituir uma das configurações padrão. Uma prisão pode usar uma combinação de configurações específicas da prisão e padrão.

Habilitando fail2ban

Até agora, nós instalamos fail2ban e eu configurei isso. Agora, temos que habilitá-lo para funcionar como um serviço de inicialização automática. Depois de, precisamos testá-lo para ter certeza de que funciona conforme o esperado.

Para permitir fail2ban como um serviço, nós 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, O que mais:

sudo systemctl status fail2ban.service

Tudo parece bem, nós temos luz verde, portanto está tudo bem.

Vamos ver se fail2ban está de acordo:

sudo fail2ban-client status

Isso reflete o que configuramos. Nós habilitamos uma única prisão, ligar [sshd]. Se incluirmos o nome da prisão com nosso comando anterior, podemos dar uma olhada mais a fundo nisso:

sudo fail2ban-client status sshd

Isso lista o número de falhas e endereços IP proibidos. Desde já, todas as estatísticas são zero agora.

Testando nossa prisão

Em outro computador, faremos uma solicitação de conexão SSH para nossa máquina de teste e digitaremos a senha incorretamente de propósito. Obtém três tentativas para obter a senha correta em cada tentativa de conexão.

a maxretry O valor será ativado após três tentativas de conexão sem sucesso, não três tentativas de senha falhadas. Por isso, temos que digitar uma senha errada três vezes para falhar a 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 ser acionada fail2ban.

Após a primeira senha errada na terceira solicitação de conexão, não recebemos uma resposta da máquina remota. Não temos explicação; nós só temos um ombro frio.

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

ssh [email protected]

Anteriormente, a mensagem de erro foi “permissão negada”. Desta vez, a conexão foi completamente rejeitada. Somos uma pessoa ingrata. Eles nos baniram.

Vamos ver os detalhes do [sshd] prisão de novo:

sudo fail2ban-client status sshd

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

Como mencionamos anteriormente, fail2ban aplicar proibições adicionando regras ao conjunto de regras do firewall. Vamos dar uma outra olhada no conjunto de regras (antes que estivesse vazio):

sudo iptables -L

Uma regra foi adicionada à política INPUT, que envia tráfego SSH para f2b-sshd corrente. A regra no f2b-sshd A cadeia rejeita conexões SSH de 192.168.4.25. Não modificamos as configurações padrão para bantime, pelo que, sobre 10 minutos, esse endereço IP será substituído e você poderá fazer novas solicitações de conexão.

Se você definir uma extensão de proibição mais longa (como várias horas), mas você deseja permitir que um endereço IP faça outra solicitação de conexão antes, pode liberá-lo mais cedo.

Escrevemos 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 escrevermos a senha correta, seremos capazes de nos conectar:

ssh [email protected]

Simples e eficiente

O mais simples geralmente é melhor e fail2ban é uma solução elegante para um obstáculo complicado. Requer muito pouca configuração e impõe pouca sobrecarga operacional, nem para você nem para o seu computador.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.