Eu tenho uma máquina Ubuntu 12.04 rodando Apache2 que hospeda cerca de 10 sites wordpress.
Recentemente fui submetido a ataques de clientes que parecem estar enviando solicitações POST para um arquivo wordpress chamado 'xmlrpc.php'
A forma como bloqueio os endereços IP que enviam essas solicitações maliciosas é um processo manual tedioso e quero automatizar isso de alguma forma.
Quando percebo que a carga do meu servidor está alta, executo as seguintes ações:
Eu executo o apachetop em todos os meus arquivos de acesso ao host virtual. Isso mostra todas as solicitações sendo feitas para que eu possa ver se alguma solicitação está sendo feita para xmlrpc.php
Depois de identificar quais IPs estão atacando meu servidor, executo o seguinte comando para cada endereço IP ofensivo:
sudo iptables -A INPUT -s 94.102.52.95 -j DROP
Quando todos os endereços IP forem adicionados à minha lista de bloqueios, a carga do meu servidor cai imediatamente para níveis normais
Existe uma maneira de automatizar esse processo? Eu estava pensando em escrever algum código em xmlrpc.php que adicionaria quaisquer endereços IP à minha lista de bloqueios para qualquer IP que enviasse solicitações para ele. Alguém tem alguma idéia de como fazer isso?
Desde já, obrigado!
Responder1
Não acho que bloquear todos os IP seja a solução para esse problema. Os IPs que realizam ações POST são provavelmente PCs infectados/hackeados em todo o mundo. Você só inundará seus IPtables colocando cada um deles na lista negra. Se o site WP tiver sido hackeado, sugiro colocá-lo offline e notificar o cliente para limpar a bagunça e atualizar todos os componentes.
Você pode instalar o mod_security para evitar uploads de código malicioso. Você também pode instruir o mod_security para bloquear solicitações POST também naquela página específica, ele retornará simplesmente um 404, isso economizará um pouco de carga (e interromperá o hacking).
Se o item acima ainda não ajudar e você quiser bloquear todos os IPs (eu me certificaria de removê-los depois de algum tempo, para evitar iptables enormes), você poderia fazer um script seguindo o access.log e bloqueando os IPs (por exemplo, um shell script com um cronjob/sleep, ou melhor: um bom daemon em perl/python).