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]

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.


(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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.