Saudações,
Recentemente ao verificar os logs de um servidor web, eu notei uma quantidade excessiva de erros 403 e 404.
Na verdade o erro 403 até que não tinha muito. Era um forbidden aqui e ali; ao esperado.
Já o erro 404... rapaz... parece que os robôs estava no modo gera url aleatoriamente e testa!
Ignorando IP no Fail2ban com base da geolocalização
Acessando o servidor, eu abri o arquivo jail.local e editei a seção apache-40x...
#vim jail.local
...
[apache-40x]
enabled = true
port = http,https
filter = apache-40x
logpath = /var/log/apache2/other_vhosts_access.log
maxretry = 3
bantime = 300
ignorecache = key="<ip>", max-count=50, max-time=10m
ignorecommand = if echo "<ip>" | grep -qE '^([0-9a-fA-F:]{2,}|::1)$'; then geoiplookup6 "<ip>"; else geoiplookup "<ip>"; fi | egrep "BR|Brazil" && exit 0 || exit 1
...
Salvei o arquivos e reiniciei o Fail2ban. Acessei o site do cliente e ao testar um endereço inexistente os logs do Failban exibiu um "... INFO [apache-40x] Found 1xx.xxx.xxx.xx7 ...".
Oxi... não esperava isto! Deveria ser outra mensagem. Isto indica que o geoiplookup consultou meu IP mas não retornou informações relacionadas ao Brasil.
De fato, executando o comando geoiplookup 1xx.xxx.xxx.xx7 o resultado trazia informações referente a Costa Rica.
Fiz um apt update e depois um apt upgrade, mas a mensagem sobre meu IP não mudava. Este servidor roda o Ubuntu 22.04 LTS e o pacote que precisa ser atualizado é o geoip-database. Mas infelizmente não há atualização disponível para o geoip-database.
Bem, hora de colocar a "mão na massa" e atualizar a base de geolocalização manualmente.
Eu acessei o site do mantenedor das bases de dados em mailfud.org/geoip-legacy, e depois baixei o arquivo GeoIP.dat.gz e o GeoIPv6.dat.gz...
It's enough to download these once a week. Unpack to /usr/share/GeoIP or equivalent directory.
Depois descompactei o conteúdo dos arquivos no diretório /usr/share/GeoIP...
Agora ao executar o comando geoiplookup 1xx.xxx.xxx.xx7 obtenho exatamente a saída que espero...
Retornando o teste com o Fail2ban, ao tentar acessar uma pagina inexistente no site do cliente, o log mostra a mensagem: "... INFO [apache-40x] Ignore 1xx.xxx.xxx.xx7 by command ...".
Show! Esta era a mensagem que esperava.
Agora o servidor do cliente reduziu a carga pois não tem que ficar dando tantas respostas 404.
Talvez você esteva se perguntando sobre a diretiva ignorecommand. Ela funciona assim:
- O IP casa com o filtro apache-40x.
- A seção apache-40x é processada e o ignorecommand executa o comando 'if echo "<ip>" ... exit 0 || exit 1'.
- O IP não será bloqueado se o comando for executado com sucesso (exit code 0).
Nesta situação eu use o ignorecommand apenas para um filtro. Mas você também pode usar globalmente se desejar. Assim todos os filtros irão ignorar os IPS de um ou mais países; sua configuração é quem dita as regras.
Paz a todos!




0 comentários:
Postar um comentário