Przez dość długi czas na różnych stronach internetowych i forach były artykuły i tematy, które mówiły o licznych brutalnych atakach na strony z wordpressami. Ostatnio musiał stawić czoła tej infekcji. :)
W tym poście chciałbym opowiedzieć o moich doświadczeniach związanych z wyborem hasła na stronach pracujących w WordPressie. Od razu zauważam, że wszystkie moje witryny działają na nginx + php-fpm .
Jako instrukcję przyjęto jeden artykuł. Jednak opisany przepis musiał zostać nieco zmodyfikowany ze względu na specyfikę atakujących. :)
Dostosowanie
Pierwszym krokiem jest instalacja fail2ban. Nie powinno to powodować trudności.
aptitude install fail2ban
Następnie dodajemy następujący kod na końcu pliku konfiguracyjnego /etc/fail2ban/jail.conf :
[nginx-wp-auth] enabled = true filter = nginx-wp-auth action = iptables-multiport [name = wp-auth, port = "http, https"] logpath = /var/log/nginx/*.access.log maxretry = 3 bantime = 3600
W takim przypadku akcja zablokuje dostęp osobom naruszającym tylko określone protokoły i oznaczy je jako wp-auth. W ścieżce logów określ ścieżkę do dzienników.
Wszystkie dzienniki zostaną przeanalizowane, na przykład example.com.access.log. W przypadku dzienników witryn internetowych można ustawić specjalne nazwy, na przykład wordpress-example.com.access.log, aby analizować tylko te pliki dzienników.
Maksymalna liczba prób autoryzacji dla jednego ip wynosi trzy. Czas blokowania wynosi godzinę. Oba te parametry można wybrać indywidualnie.
Następnym krokiem jest utworzenie filtra.
dotknij /etc/fail2ban/filter.d/nginx-wp-auth.conf
Podczas tej akcji miałem trudności: przykład z oryginalnego artykułu nie działał. I musiał się zmienić. :)
[Definicja] failregex = <HOST>. * / wp-login.php HTTP / 1.1 "200 <HOST>. * / Wp-login.php / HTTP / 1.1 "302 <HOST>. * / Wp-login.php HTTP / 1.0 "200 ignoreregex =
Pierwszy parametr zawiera wszystkie dopasowania, które powinny znaleźć się w plikach dziennika. Tutaj musisz przeanalizować żądania atakujących w dziennikach serwera i dodać wszystkie podejrzane powiązane z wp-login.php.
Drugi parametr dotyczy wyjątków z pierwszego wiersza. Nie jest to wymagane i pozostaje puste.
Testowanie
Po utworzeniu filtru, sprawdź jego działanie za pomocą polecenia:
fail2ban-regex / var / log / nginx / example.com .access.log /etc/fail2ban/filter.d/nginx-wp-auth.conf
Znalezione mecze zostaną wyświetlone w wynikach testu. Na przykład:
Uruchamianie testów ============= Użyj pliku regex: /etc/fail2ban/filter.d/nginx-wp-auth.conf Użyj pliku dziennika: /var/log/nginx/***.ru..access.log Wyniki ======= Failregex | - Wyrażenia regularne: | [1]. * / Wp-login.php HTTP / 1.1 "200 | [2]. * / Wp-login.php / HTTP / 1.1 "302 | [3]. * / Wp-login.php HTTP / 1.0 "200 | `- Liczba dopasowań: [1] 1 mecz (y) [2] 0 meczów [3] 0 meczów Ignoreregex | - Wyrażenia regularne: | `- Liczba dopasowań: Podsumowanie ======= Znaleziono adresy: [1] 192,99.186.30 (Fri Jul 04 07:29:20 2014) [2] [3] Uderzenia w szablonie daty: 0 hitów: MONTH Day Hour: Minute: Second 0 trafień: DNI MIESIĄCA GODZINA DZIEŃ: Minuta: Drugi rok 0 trafień: WEEKDAY MIESIĄCA Godzina: Minuta: Sekund 0 trafień: rok / miesiąc / dzień godzina: minuta: sekunda 0 trafień: Dzień / Miesiąc / Rok Godzina: Minuta: Sekunda 0 trafień: Dzień / Miesiąc / Rok Godzina: Minuta: Sekunda 58 trafień: dzień / miesiąc / rok: godzina: minuta: sekunda 0 trafień: miesiąc / dzień / rok: godzina: minuta: sekunda 0 trafień: rok-miesiąc-dzień godzina: minuta: sekunda 0 hitów: Year.Month.Day Hour: Minute: Second 0 hitów: Day-MONTH-Year Hour: Minute: Second [.Millisecond] 0 hitów: Day-Month-Year Hour: Minute: Second 0 trafień: TAI64N 0 trafień: Epok 0 trafień: ISO 8601 0 trafień: Godzina: Minuta: Sekunda 0 trafień: <miesiąc / dzień / rok @ godzina: minuta: sekunda> Sukces, całkowita liczba meczów to 1
Sprawdzanie dziennika blokady
Fail2ban zapisze wszystkie wyprodukowane blokady. Jeśli to konieczne, możesz sprawdzić plik dziennika /var/log/fail2ban.log pod kątem ich obecności.
grep OSTRZEŻENIE /var/log/fail2ban.log