Você pode considerar que existem outras maneiras de bloquear endereços IP. Por exemplo, Fail2ban foi projetado para verificar arquivos de log para determinados padrões e temporariamente bloquear IPs.
Como mencionado nos comentários, você pode estar adicionando milhares de IPs à sua lista negra. Enquanto iptables
funciona, cada regra adicional pode aumentar o tempo de processamento de cada solicitação. Você pode usar ipset
como alternativa, o que parece ser muito mais rápido quando há muitos IPs adicionados. É preciso uma abordagem hash para acelerar as partidas. Consulte Endereços IP de bloqueio em massa com o ipset para obter detalhes e comparação entre iptables
e ipset
.
Se você quiser usar iptables
, provavelmente dependerá de como o seu servidor da web está configurado. Supondo que você use o apache ou o nginx, você pode configurá-lo para acionar um script cgi de algum tipo para ser executado quando wpad.dat
for solicitado.
Por exemplo, se o seu site já usa php, você pode usar uma reescrita interna para acionar um script php (ou ruby / python / java, dependendo do idioma que você usa normalmente).
Quando o script for executado, basta executá-lo para executar algo assim na linha de comando:
iptables -I INPUT -s {IP-HERE} -j DROP
O script precisa ser executado como root, e provavelmente não é uma boa idéia dar privilégios root ao usuário da web, assim você pode empacotá-lo como um script de shell, chown
it como root e usar setuid
disso.
Grande aviso: você pode bloquear-se acidentalmente se visitar esse recurso, portanto, convém definir --dport
na porta 80 ou algo do tipo. Isso evita pelo menos bloquear o seu protocolo ssh, então se você conseguir se bloquear, você pode ssh em seu servidor e se auto-bloquear.
Expiry: Como bloquear permanentemente muitos endereços IP raramente é uma boa ideia, talvez você queira controlar o endereço IP bloqueado (talvez anexá-lo em um arquivo de log) e criar um cron job para excluir esses endereços IP periodicamente. Você só precisa executar algo como:
iptables -D INPUT -s 192.168.1.100 -j DROP