Podczas czytania dokumentacji serwera WWW nginx natknąłem się na interesujący moduł zwany modułem http referer . Pozwala zablokować dostęp do witryny lub jej sekcji, jeśli żądanie nie ma właściwego nagłówka referer.
Ten moduł może być użyty do ochrony administratora dowolnej witryny przed brutalną siłą. Na przykład strona działa na WordPress, ale zablokowanie dostępu przez IP będzie nieodpowiednie, jeśli strona ma zarejestrowanych użytkowników. Muszą również uwierzytelniać, a zbieranie ich IP jest bezsensownym ćwiczeniem. :)
Zasada działania jest prosta: na stronie wyświetlamy link do strony logowania wp-login.php, aw pliku konfiguracyjnym nginx ustawiamy weryfikację żądań na wp-login.php i / wp-admin / na obecność adresu naszej strony w nagłówku strony odsyłającej.
Przede wszystkim utwórz dedykowaną lokalizację dla pożądanych stron. Na przykład:
serwer { ... location ~ * (wp-login \ .php | wp-admin (. *)) $ { try_files $ uri = 404; fastcgi_pass unix: /run/php-www.sock; location ~ \ .php $ { to fastcgi_params; fastcgi_param SCRIPT_FILENAME $ katalog_dokumentu $ fastcgi_script_name; fastcgi_ignore_client_abort off; fastcgi_param PHP_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com"; fastcgi_param PHP_ADMIN_VALUE "open_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /"; } } ... }
Jak widać, tutaj są również określone parametry przetwarzania skryptów PHP (w przeciwnym razie skrypty określone w lokalizacji nie będą działały).
Konfiguracja modułu może zostać zarejestrowana natychmiast po location ~* (wp-login\.php|wp-admin(.*))$ {
.
Pierwsza linia:
valid_referers nazwa_serwera
Wskazuje, że odnośnik strony powinien być uznany za poprawne pole referujące.
A także rejestrujemy warunek testu. Jeśli pole referfer jest niepoprawne, serwer wyświetli błąd 403 (odmowa dostępu).
if ($ invalid_referer) { return 403; }
W rezultacie konfiguracja będzie wyglądać następująco:
serwer { ... location ~ * (wp-login \ .php | wp-admin (. *)) $ { valid_referers nazwa_serwera if ($ invalid_referer) { return 403; } (parametry fastcgi) } ... }
Wreszcie na stronie dodaj link do strony logowania (wp-login.php lub coś innego tam). Jeśli użytkownik kliknie na ten link, otrzyma formularz autoryzacji. Ale jeśli bot zapuka bezpośrednio do tego pliku, otrzyma błąd dostępu.
Tak, warto zauważyć, że referer nagłówka może zostać sfałszowany. Ale osobiście boty z prawidłowo wypełnionym polem referencyjnym spotkały się bardzo rzadko i zostały zbanowane przez IP. :) Tak więc ta metoda może być całkiem odpowiednia.