Após ter instalado o Varnish perdi a capacidade de identificar os endereços IP dos clientes, tento nos registos de acesso como nos de erro. Isto impedia o fail2ban de bloquear eventuais agressores
Procurei na internet uma solução, e todas elas eram complicadas e não funcionavam, assim decidi fazer o meu trabalho de casa.
O que escrevo aplica-se a fail2ban 0.9.3-1, Apache 2.4.29-2, Varnish 5.2.1-1.
Existe uma solução simples.
Instalar mod_rpaf com o comando:
# sudo apt-get install libapache2-mod-rpaf
Em seguida activar o módulo no Apache
# sudo a2enmod rpaf
Verifique que tem o módulo log_config module carregado:
# sudo apachectl -M |grep log_config
Deve obter uma resposta contendo: log_config_module (static)
Se não:
# sudo a2enmod log_config
Agora edite o ficheiro de configuração apache:
# sudo nano /etc/apache2/apache2.conf
Localize as directivas LogFormat e após estas insira a linha:
ErrorLogFormat "%{X-Forwarded-For}i [%t] [:%l] [pid %P] [client %a] %M"
Grave e re-inicialize o Apache
# sudo service apache2 restart
Verifique os seus registos de acesso e de erro, estes devem agora mostrar o IP do cliente no início e estar no seu habitual formato
O fail2ban tem problemas de o módulo apachee-fakegooglebot for habilitado, bloqueará o googlebot, o que não é o pretendido. Editar a configuração do módulo:
# sudo nano /etc/fail2ban/filter.d/ignorecommands/apache-fakegooglebot
e substituir a primeira linha #!/usr/bin/python por #!/usr/bin/python3 e re-iniciar o fail2ban:
# sudo service fail2ban restart
Se utilizar o logrotate para refrescar os seus registos do apache (estes tendem a crescer de forma enorme com o tempo), e se como eu alojar diversos sítios, pode ter problemas de acesso quer com o fail2ban quer com o awstats. Poderá resolver a questão editando /etc/logrotate.d/apache2 e inserindo o bloco abaixo, assumindo que dispõe de uma pasta logs na raíz de cada sítio e que quer refrescar semanalmente:
/
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 775 www-data www-data
sharedscripts
postrotate
if invoke-rc.d apache2 status > /dev/null 2>&1; then \
invoke-rc.d apache2 reload > /dev/null 2>&1; \
fi;
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}
A instalação do software e modificações acima corre por sua conta e risco.