Come posso bloccare un agente utente da tutti i siti sul mio server?


9

Originariamente avevo pubblicato questo post su webmasters.stackexchange.com , ma mi è stato detto che avrei avuto una ricezione migliore qui.


Negli ultimi giorni, ho sofferto di quello che sembra essere un attacco DDOS (presumibilmente involontario). Ho ricevuto così tante richieste da un agente che si identifica come "Mozilla / 4.0 (compatibile; ICS)" che Apache mangia attraverso tutta la memoria disponibile.

Di conseguenza, vorrei bloccare tutte le richieste accompagnate da questo agente utente, quindi ho provato a farlo in httpd.conf:

SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user

Ma quando riavvio Apache si lamenta dell'utilizzo denyqui. Senza doverlo racchiudere in un blocco locationo in un directoryblocco, il che significherebbe che dovrei aggiungere un nuovo blocco per ogni sito, c'è un modo in cui posso negare l'accesso all'intero server?


AGGIORNAMENTO: l'errore che ottengo

  • Riavvio del server Web apache2
    Errore di sintassi sulla riga 4 di /etc/apache2/httpd.conf: negare non consentito qui [esito negativo]

Risposte:


7

Sembra una vecchia domanda ora, ma volevo fare lo stesso e ho trovato la risposta dal nervo sopra. Non è del tutto giusto così com'è - mi sembra che dovrebbe essere <Location "/">, e ha SetEnvIfbisogno di un'espressione regolare, quindi le parentesi devono essere citate.

Questo ha funzionato per me per applicare il controllo di accesso su tutti i vhosts:

SetEnvIfNoCase User-Agent "^Mozilla/4.0 \(compatible; Synapse\)" bad_ua
<Location "/">
    Deny from env=bad_ua
</Location>

Basta includerlo prima delle definizioni vhost.


(Per l'equivalente in Apache 2.4) Prestare attenzione all'uso <Location>in quanto ignora qualsiasi altra restrizione di autorizzazione <Directory>, a meno che non si aggiunga AuthMerging And. Vedi l'avvertenza sulla sicurezza Requirenei documenti di apache: httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
Cedric Knight

4

mod_rewrite può essere configurato a livello di server secondo i documenti:

RewriteCond %{HTTP_USER_AGENT} "Mozilla/4\.0 \(compatible; ICS\)" [nocase]
RewriteRule ^.*$ - [forbidden,last]

Non dimenticare di sfuggire alla regex in RewriteCond


1
Attenzione: il trattino non è un trattino reale quando viene copiato. Ho provato a modificare, ma SF si lamenterà che la mia modifica è troppo piccola. Grazie comunque, funziona a meraviglia!
Thibaut Barrère,

@ ThibautBarrère, se necessario, puoi bypassare il piccolo limite di modifica aggiungendo un invisibile <!-- -->alla modifica
hanshenrik

1

A condizione che la sintassi sulle linee SetEnv sia corretta, dovresti essere in grado di lanciarla nella configurazione in questo modo:

<Location *>
SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user
</Location>

Dovrebbe consentire che funzioni su tutti gli host virtuali - appena testato il 2.2.24, ha funzionato come un fascino.


Questo è meglio in quanto non ci sono errori, ma durante lo spoofing del mio user agent non mi viene negato. Qualche idea sul perché potrebbe essere?
Tom Wright,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.