Jak mogę zablokować klienta użytkownika ze wszystkich stron na moim serwerze?

9

Pierwotnie napisałem to na webmasters.stackexchange.com , ale powiedziano mi, że otrzymam lepszy odbiór tutaj.


Przez ostatnie kilka dni cierpiałem na (prawdopodobnie nieumyślny) atak DDOS. Otrzymuję tak wiele żądań od agenta identyfikującego się jako „Mozilla / 4.0 (zgodny; ICS)”, że apache zjada całą dostępną pamięć.

W związku z tym chciałbym zablokować wszystkie żądania połączone z tym agentem użytkownika, więc próbowałem to zrobić w httpd.conf:

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

Ale kiedy ponownie uruchamiam apache, narzeka na używanie denytutaj. Bez konieczności owijania go w blok locationlub directory, co oznaczałoby, że musiałbym dodać nowy blok dla każdej witryny, czy jest jakiś sposób, aby odmówić dostępu do całego serwera?


AKTUALIZACJA: Występuje błąd

  • Ponowne uruchamianie serwera WWW apache2
    Błąd składniowy w wierszu 4 pliku /etc/apache2/httpd.conf: odmowa niedozwolona tutaj [błąd]
Tom Wright
źródło

Odpowiedzi:

7

Wygląda jak stare pytanie, ale chciałem zrobić to samo i znaleźć odpowiedź z nerwów powyżej. Nie jest tak, jak jest - wydaje mi się, że tak powinno być <Location "/">, i SetEnvIfpotrzebuje regularnego wyrażenia, więc nawiasy trzeba cytować.

To działało dla mnie, aby zastosować kontrolę dostępu na wszystkich vhostach:

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

Po prostu dołącz to przed definicjami vhosta.

użytkownik3061288
źródło
(Dla odpowiednika w Apache 2.4) Zachowaj ostrożność, <Location>ponieważ zastępuje on wszelkie inne ograniczenia autoryzacji w <Directory>, chyba że dodasz AuthMerging And. Zobacz ostrzeżenie dotyczące bezpieczeństwa Requirew dokumentach apache: httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
Cedric Knight
4

mod_rewrite można skonfigurować na poziomie serwera zgodnie z dokumentacją:

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

Nie zapomnij uciec od wyrażenia regularnego w RewriteCond

fukawi2
źródło
1
Uwaga: kreska nie jest prawdziwą kreską po skopiowaniu. Próbowałem edytować, ale SF będzie narzekać, że moja edycja jest zbyt mała. W każdym razie dzięki, działa uczta!
Thibaut Barrère
@ ThibautBarrère, jeśli naprawdę potrzebujesz, możesz ominąć mały limit edycji, dodając niewidzialną <!-- -->do edycji
hanshenrik
1

Pod warunkiem, że składnia w wierszach SetEnv jest poprawna, powinieneś być w stanie przekazać to w conf w następujący sposób:

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

Powinno to umożliwić działanie na wszystkich wirtualnych hostach - właśnie przetestowane w wersji 2.2.24, działało jak urok.

nerw
źródło
Jest to lepsze, ponieważ nie ma żadnych błędów, ale podczas fałszowania mojego agenta użytkownika nie odmawia mi się. Wiesz, dlaczego to może być?
Tom Wright