- Will, in general, blocking by IP address work? I know it's been a long time since "IP Address == unique device on Internet", but I'm wondering if these sort of probes generally come from the sort of networks where it'd be safe for me to just block them outright
Você pode facilmente bloquear muitas das solicitações usando um simples arquivo .htaccess. Lá você pode bloquear IPs, URLs e muitas coisas. Mas não sei qual é a origem dos seus "pedidos ruins". O que eu sei é que você deve começar interrompendo o tráfego ruim que conhecemos. E isso pode ser feito se você aumentar o seu objetivo e, em vez disso, parar a negação de ataques de serviços e, ao mesmo tempo, limitar os pedidos ruins! Tudo o que você precisa é neste recurso muito útil . No entanto, eles não dizem realmente quais módulos instalar. Eu recomendo: mod_antiloris , mod_evasive mas você pode encontrar mais cargas aqui .
Eu pessoalmente verificaria a configuração de algumas dessas antes de passar para hard-blocking certos urls ou ips. No entanto, se você quiser começar a limitar padrões específicos, pode ser mais fácil fazê-lo usando um PHP scrict. Ou seja Encaminhe todos os parâmetros para index.php e analise-os lá. Isso ainda exigiria um redirecionamento usando o arquivo .htaccess. O Drupal faz algo assim:
# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
Ao fazer isso, você pode "capturar" todas as URLs incipientes. Drupal realmente tem este built-in e irá dizer-lhe que a pessoa X estava procurando o arquivo Y. E Drupal novamente também tem módulos que podem bloquear o acesso certo com certas regras. Se isso for possível, tenho certeza que conectar-se ao PHP irá expô-lo a várias opções diferentes que você pode usar para bloquear ou não o acesso de ips.
Acho que propus uma solução, mas preciso de mais informações para aconselhar mais. Se você fizer o acima, você será capaz de reunir mais informações para talvez identificar a fonte exata de suas aflições de pedido ruim. Usando essas ferramentas, você poderá ver padrões e, no mínimo, aprender maneiras melhores de configurar regras para bloquear os malfeitores.
- If I can't block by IP address, does anyone maintain a list of URLs that bad actors generally probe for so I can block by URL?
Existem módulos do apache que fazem isso e usam suas próprias bibliotecas. Existem também bibliotecas para PHP que fazem isso e várias redes que rastreiam "bandidos", sejam spammers usando IPs ou spam usando endereços de email, etc. Aqui está uma lista completa de pessoas que acompanham os servidores que ficam na lista negra por vários motivos. Experimente digitando www.google.com.br.
- Re #2. If I was going to handle this blocking at the server level, which apache module is right for this sort of thing? (MOD_REWRITE, MOD_SECURITY)
MOD_REWRITE trabalharia para obter o pedido para um arquivo PHP, após o qual você pode lidar com o problema no PHP. Mas isso tem um pouco de sobrecarga. Você é melhor de usar MOD_SECURITY e talvez MOD_EVASIVE
- Is there a better way to block these requests other than by IP or URL?
Isso realmente depende. Você deve estudar os padrões que surgem e identificar a causa. Fiquei muito frustrado por termos recebido solicitações de "transparent.png" (ou algo assim) que se tornaram um novo pedido padrão para muitos telefones celulares. Nós pensamos que era ruim, era bom. Não acabe fazendo isso.
- Also, the system is hosted on EC2 -- does amazon offer any help with this sort of thing?
Eu não sei. Fora da minha própria experiência pessoal, que foi mais com o uso para enviar informações, ficamos na lista negra muito rapidamente, mesmo enviando menos de 2500 e-mails. Mas se você estiver hospedando com eles e quiser que eles bloqueiem as "solicitações incorretas" recebidas, eles já devem estar fazendo isso até certo ponto. A menos que você tenha um exército de bots em massa atacando seu servidor a cada poucos dias, você deve pedir para eles intervirem. Talvez peça-lhes para ajudá-lo a identificar a fonte ou fazer sua própria investigação e decidir a partir daí.