Estou usando fail2ban em todos os servidores com serviços publicamente visíveis e me pergunto:
- Existe uma maneira fácil de compartilhar IPs proibidos entre hosts que eu controle?
- Existe um serviço lá fora, coletando e publicando esses dados?
Venho recebendo inúmeras tentativas de login desde o primeiro dia de configuração deste servidor.
Respostas:
Uma vez vi um sistema para centralizar os dados do fail2ban neste site e criei uma versão modificada. O banco de dados é o mesmo, mas mudei e criei alguns scripts.
Meu sistema possui 4 componentes:
banco de dados fail2ban
É um banco de dados MySQL contendo apenas uma tabela
erp_core_fail2ban
:fail2ban.php
Toda vez que um host é banido, ele preenche o banco de dados:
cron2ban
Você coloca isso para rodar no crontab, a cada minuto. Ele recuperará os últimos hosts adicionados e os banirá.
phpconfig
Este arquivo vai para / etc / fail2ban e possui configuração de banco de dados e seleção de prisão.
Crie esses arquivos e altere a configuração de fail2ban:
Após a linha com
actionban = .....
uma nova linha inserida para chamar o script PHP:/root/fail2ban.php <name> <protocol> <port> <ip>
O uso dessa estrutura em todos os seus servidores garantirá que toda vez que um host for banido em um servidor, todos os outros servidores também o banirão.
fonte
Então, fiz uma série de pesquisas sobre como fazer isso depois de assistir o mesmo endereço IP atingir meu cluster de servidores da Web, um após o outro. Como estou usando a AWS, achei que poderia ser uma maneira fácil e funcionaria perfeitamente nos meus dois primeiros dias de teste de 5 servidores.
A primeira coisa que recomendo é desativar temporariamente o SELinux; lidaremos com isso no final. Não sou especialista em SELinux, mas o que fiz funcionou até agora.
O requisito principal é uma fonte de arquivo compartilhada, eu uso o AWS EFS. Depois que a nova unidade é provisionada e montada, alterei o logtarget dentro de /etc/fail2ban/fail2ban.conf para uma subpasta na unidade EFS.
Então eu escrevi um filtro simples e coloquei em /etc/fail2ban/filter.d/fail2ban-log.conf
Adicionado o filtro para /etc/fail2ban/jail.local
Em seguida, reiniciou o fail2ban
Por enquanto, tudo bem! Não, a parte dolorosa é o SELinux. Depois de deixar o fail2ban rodar um pouco, executei este comando que permitiria o fail2ban através dos filtros.
O Audit2allow solicitará que você execute este comando
Ainda estou checando meus logs do SELinux aqui e ali para ver se há mais negações. Se alguém tiver uma dica sobre como obter esse SELinux claro com outro método, isso seria incrível.
Neste ponto, eu ainda estava recebendo erros ao reiniciar o fail2ban. Há um erro ao usar action = action_mwl no jail.local. Depois de pesquisar um pouco, achei isso que está funcionando até agora. Pelo que li, por causa das quebras de linha na diretiva de caminho de log, apontando para vários arquivos. Eu tentei com vírgulas, espaços, etc, nada mais funcionou com action_mwl.
Não se esqueça de ativar o SELinux novamente!
fonte
Acabei de implementar isso e, até agora, parece estar funcionando bem. No entanto, tive que atualizar parte do php porque os scripts na resposta original usam funções obsoletas.
Aqui estão os scripts atualizados
phpconfig.php
fail2ban.php
cron2ban.php
Além disso, onde quer que você coloque a ação fail2ban.php, ela deve ser recuada tanto quanto a linha acima dela. Por exemplo:
Caso contrário, o fail2ban não será iniciado. Espero que isso ajude quem estiver tentando implantar isso.
fonte
Uma alternativa
fail2ban
é o DenyHosts, que vem com uma funcionalidade de sincronização. A instalação é bastante semelhante àfail2ban
, consulte o tutorial da Cyberciti para obter mais detalhes .O problema é que o serviço de sincronização é centralizado e o código-fonte do lado do servidor não parece estar disponível; portanto, você não pode iniciar facilmente seu próprio serviço DenyHosts e precisa confiar em terceiros (o que pode ser bom para alguns casos de uso).
fonte
Sim e sim. Ambos podem ser feitos.
Você precisa encontrar um mecanismo adequado para compartilhar a lista de IPs. Se você estiver usando a AWS, por exemplo, poderá aproveitar o s3. Você pode usar o rsync entre hosts Linux ou um banco de dados comum a todos os hosts. Você pode contratar um serviço com sua linguagem de programação favorita que forneça uma API tranquila, a escolha é sua.
Em termos de compartilhamento da lista publicamente, você pode criar um site e hospedar um arquivo de texto simples, alguns já fornecem essas listas (não é uma fonte que conheço). Como criar seu próprio site / serviço estaria fora do escopo de uma resposta, no entanto, não deve ser muito difícil de fazer.
fonte
Uma configuração razoavelmente manual seria alterar a configuração que chama
iptables
para atualizar as regras, para que ele chame um script de sua preferência, que percorra uma lista de hosts (lidos de um arquivo?) E faça oiptables
chamadas em cada um deles via SSH. Você precisaria de autenticação baseada em chave entre todos os hosts configurados para que isso funcionasse. Ferramentas de automação de administradores, como o fantoche, podem facilitar a configuração e a manutenção. Isso não seria muito eficiente, mas, a menos que você veja uma quantidade enorme de tráfego de análise (e / ou tenha um grande número de hosts), tenho certeza de que seria bom o suficiente. Se você possui apenas alguns hosts, nem precisa percorrer um arquivo: configure cada um para chamar os outros em ordem. O esforço de script será mínimo.Não há dúvida de muitas maneiras. Faça com que os scripts acima coloquem os dados em um banco de dados e os clientes os leiam, pesquisando novas regras e executando-as à medida que entram. O simples "executar uma regra como você vê" não será perfeito se muitos hosts estão enviando informações, por exemplo, este caso:
mas isso não deve ser um problema significativo e, se você ficar um pouco mais inteligente com o banco de dados, poderá gerenciar vários envios de maneira mais limpa, se decidir que vale a pena o esforço.
Executar isso como um serviço público abriria você para um mundo de aborrecimentos administrativos:
fonte