Introdução
Todo servidor ou computador ligado a uma rede é exposto a um certo grau de risco. Qualquer máquina, incluindo uma instânica, conectada à internet é um alvo potencial para ataques maliciosos.
Ter um firewall bem configurado irá evitar muitos tipos de acesso ilegítimo. SSH é o serviço mais utilizado para entrar em sistemas remotos, e por isso também é um dos alvos mais frequentes.
Felizmente, existe uma ferramenta disponível que pode mitigar este vetor de ataque, chamado fail2ban , essa ferramenta pode ser configurada para permitir logins legítimos usando SSH, e proibir endereços IP depois de terem falhado para autenticar corretamente após um determinado número de vezes.
Vamos instalar e configurar este software em um Instância Debian 7.
Primeiro Passo - Instale fail2ban
Debian inclui fail2ban em seus repositórios padrão. Podemos fazer download e instalá-lo com o seguinte comando:
|
---|
Este fail2ban não só irá instalar, mas também irá iniciar o serviço com as configurações padrão.
Segundo Passo - Configurar fail2ban
A configuração fail2ban é mantida no diretório /etc/fail2ban. O arquivo de configuração que especifica as regras que proíbem padrão é chamado jail.conf.
Por causa da maneira que Fail2ban atualiza seus arquivos de configuração quando o programa tem uma nova versão, não devemos editar o arquivo de configuração padrão.
Em vez disso, devemos copiá-lo para um novo local e editá-lo lá:
|
---|
Aqui, podemos alterar qualquer configuração que foi definida na configuração padrão.
Configuração padrão
A sessão que começa [DEFAULT] configura padrões que podem ser substituídas em contextos mais específicos mais tarde na configuração. É uma boa ideia ter padrões fortes.
A maioria das configurações que foram dadas são boas opções para opções padrão. No entanto, há algumas áreas que beneficiariam com a configuração.
Padrões Ban
Podemos configurar a maneira que Fail2ban implementa a sua proibição, modificando alguns parâmetros. Aqui estão alguns dos mais importantes:
ignoreip: Este parâmetro recebe uma lista de endereços IP que devem ser excluídos das regras Fail2ban. Os endereços IP ou blocos listados aqui não terá restrições colocadas sobre eles, para escolhê-los com sabedoria e especificamente.
- Endereços IP e intervalos são separados por espaço em branco.
- Você deve adicionar o seu endereço residencial ou comercial IP para o final da lista de modo que você não será bloqueado, se você está tendo problemas para acessar.
- Isso será algo como: "ignoreip = 127.0.0.1/8 YOUR_IP_ADDRESS "
bantime: Esta lista a quantidade de tempo que uma proibição vai durar, se o cliente não consegue autenticar corretamente. É dado em segundos.
- O valor padrão proíbe clientes por 10 minutos.
maxretry: Este parâmetro especifica o número de tentativas que são permitidas antes de uma proibição ser instituída.
Definir ações Ban
Quando a proibição é necessária, fail2ban pode proceder em algumas maneiras diferentes. Ele decide sobre as ações necessárias, olhando para os seguintes parâmetros:
banaction: Esta configuração especifica o arquivo de configuração que será usada quando a proibição é necessária.
- O valor deste parâmetro refere-se a um arquivo no diretório /etc/fail2ban/action.d, que irá lidar com o processo de proibição real.
- O valor padrão usa iptables (um firewall) para proibir um IP em todas as portas quando ele falha a autenticação. Vamos olhar para as regras que proíbem IP específicos mais tarde.
action: Este parâmetro especifica um dos atalhos de ação listados acima dela. Ele basicamente chama um banaction roteiro (como mencionado acima), e em seguida, atribui informação apropriada para variáveis e as passa para o script.
- A ação padrão é action_, que chama o script e passa o nome, porta, protocolo, e da cadeia para o script. Não envia um endereço de e-mail ou linhas de log como algumas das outras ações fazem.
Configurar alertas de e-mail
Se você gostaria de configurar fail2ban para e-mail quando se institui uma proibição, você pode configurar isso na sessão padrão também.
Se tiver configurado um servidor de correio em sua máquina, você pode configurar fail2ban para enviar e-mail para um endereço externo. Caso contrário, você pode tê-la entregue a uma conta local unix.
Há dois parâmetros relevantes:
destemail: Esta opção define o endereço de e-mail que será notificado no caso de uma proibição.
- O valor padrão, "root @ localhost", irá entregar correio para a conta root do computador atual.
- Se você tem um servidor de email configurado, sinta-se livre para mudar isso para um endereço de correio externo.
mta: Isso especifica o agente de correio que será usado para entregar o correio.
- Se você tem um servidor de email configurado com sendmail, deixe a opção padrão (sendmail), como é.
- Se você não tiver um servidor de email configurado, mas quer correio local entregue a uma conta de usuário, você pode mudar "sendmail" para "mail".
Se você deseja configurar e-mail, você terá que editar a action parâmetro como mencionado acima. Alterar a ação a qualquer "mw ação" ou "mwl ação" para ter a informação de e-mail passado para o script proibição.
Se você configurou a entrega de correio local, você pode verificar o e-mail, escrevendo:
|
---|
Configurar as cadeias de Aplicação Específica
Mais abaixo no arquivo, você deve ver ações marcadas como esta:
[application_name] |
---|
Deve ser capaz de decifrar a maioria dos parâmetros.
O filter parâmetro especifica um arquivo dentro do diretório /etc/fail2ban/filter.d. Isto diz fail2ban como analisar o arquivo de log do programa de attemts falha de autenticação.
O logpath variável contém o caminho para o arquivo de log do serviço, que Fail2ban irá analisar as falhas.
Você pode substituir qualquer um dos outros parâmetros padrão aqui. Por exemplo, o maxretry opção é diferente para SSH do que a opção Dault em uma instalação Debian.
Terceiro Passo - Configurar iptables
Nós realmente não vamos estar fazendo muitas configuração do iptables, mas vamos dar uma olhada no arquivo de configuração que implementa o seu comportamento. Isso nos ajudará a entender como fail2ban implementa suas políticas de proibição.
Abra o arquivo que foi especificado na nossa configuração de prisão sob a banaction parâmetro:
|
---|
Aqui, podemos ver o que realmente acontece quando uma chamada fail2ban proibi um IP. Ele usa o software de firewall (iptables) para implementar regras.
Quando fail2ban começa, ele chama estas linhas:
|
---|
Isso inicializa o ambiente para passar o tráfego através de uma cadeia de filtragem.
O tráfego de controles de software iptables tem base em "funis", ou "correntes". Cada um desses funis aplica regras em todo o tráfego que é dado a ele a fim de decidir se é aceitável ou não.
A primeira linha, iptables -N fail2ban-<name> , cria uma nova cadeia com o nome "fail2ban-" com o nome do serviço seguinte. Isto irá manter as regras que proíbem determinados endereços IP.
A próxima linha, iptables -A fail2ban-<name> -j RETURN , adiciona uma regra para a cadeia que acabamos de criar, que informa ao iptables para retornar o controle para a cadeia que chamou esta cadeia.
A última linha, iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>, adiciona uma regra para a chain (corrente) INPUT (especificado em nosso arquivo jail.local), que imediatamente passa o controle para a nossa nova cadeia fail2ban.
Assim, o fluxo de corrente do tráfego de entrada é tratado pelo nosso chain INPUT. Neste ponto, ela atinge a regra de passar o controle para a cadeia fail2ban. A primeira regra nesta cadeia passa o controle de volta para a cadeia que chamou, a chain INPUT.
Então, neste momento, o controle é passado apenas a frente e para trás com nada realmente acontecendo. No entanto, temos um conjunto de um fluxo de controle que irá acomodar regras adicionais. Quando precisamos proibir um endereço IP, podemos adicionar outra regra para a cadeia fail2ban logo acima, onde ele passa o controle de volta para a chain INPUT.
Podemos ver as ações complementares para derrubar as regras Fail2ban, para quando o serviço parar, aqui:
|
---|
Isso basicamente apenas inverte todas as regras que acabamos construídas.
Quando você proibir um cliente, esta regra é implementada:
|
---|
Isto diz iptables para soltar todos os pacotes desse endereço IP, o que efetivamente proíbe-os de mesmo tentar autenticar novamente.
Quando o bantime tenha decorrido, esta regra inverte a proibição:
|
---|
Se você gostaria de ver quais as regras são implementadas e que os endereços IP são atualmente proibidos, você pode verificar as regras do iptables atual, digitando:
|
---|
Se todos os clientes são proibidos, eles estarão na cadeia inferior.
Passo Quatro - Restart fail2ban
Quando você tiver feito alterações à sua configuração, você precisa reiniciar o fail2ban para implementar as novas regras.
Você pode fazer isso digitando o comando:
|
---|
Para testar as novas regras, você pode criar outra instâncias e autenticar incorretamente algumas vezes na finalidade de acionar a regra proibição. Depois disso, a sua chamada SSH não vai voltar a solicitação da senha.
Se você olhar para as regras iptable no host configurado, você verá uma nova regra:
|
---|
|
---|
Você pode ver a nova segunda regra a partir do fundo.
Conclusão
Agora você deve ter alguma segurança adicional, tornando o seu servidor um alvo mais difícil de para ataques de força bruta. Enquanto isso é um grande começo, uma solução mais completa seria desabilitar a autenticação de senha completamente e permitindo apenas a autenticação baseada em chave.