Ostatnio zaniedbałem pewne sprawy, głównie te związane ze sprawami prywatnymi. Uwagę moją skupił serwer którym się opiekuję gdy zajrzałem w logi - spora ilość wejść na adres http://example.com/wp-login.php. Szybka analiza oraz porównanie z całkiem oddzielnym serwerem i wniosek błyskawiczny - boty zaczęły panoszyć się po naszych WordPressach.
Ręczne wycinanie IP można uznać za walkę z wiatrakami, dlatego też postanowiłem zastosować trochę inną metodę - moduł AuthBasic serwera HTTP połączony z Fail2Ban. Poniżej przedstawię konfigurację dla serwera Nginx, jednak nikt nie będzie miał problemów przepisać jej pod Apache, Lighttpd czy Cheeroke.
1. Uruchamiamy AuthBasic. Należy zwrócić na nazwę plików konfiguracyjnych, zapewne u każdego będą różne.
1.1. Otwieramy plik z konfiguracją naszej domeny, a następnie w sekcji server wpisujemy:
location /wp-login.php { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/haslo-blog; include /etc/nginx/fastcgi_params; } location /wp-admin/ { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/haslo-blog; include /etc/nginx/fastcgi_params; }
Bardzo ważne, musimy ponownie dodać odwołanie do FastCGI, w przeciwnym razie PHP się wykona bez względu na AuthBasic!
1.2. Generujemy hash.
1.3. Tworzymy plik z użytkownikiem/użytkownikami.
przykladowyuser:wygenerowanyhash przykladowyuser2:kolejnyhash:komentarz przykladowyuser3:wygenerowanyhash3:komentarz
1.4. Restartujemy nginx.
2. Połowa drogi za nami, mamy już dodatkową autoryzację do panelu logowania. Teraz pora na Fail2Ban
2.1. Instalajemy F2B.
2.2. Otwieramy jail.conf i dodajemy regułkę Nginx'a.
[nginx-auth] enabled = true filter = nginx-auth action = iptables-multiport[name=NoAuthFailures, port="http,https"] logpath = /var/log/nginx/error.log bantime = 43200 #Blokujemy dostęp na 12h maxretry = 3
2.3. Dodajemy filtr dla regułki.
[Definition] failregex = no user/password was provided for basic authentication.*client: user .* was not found in.*client: user .* password mismatch.*client: ignoreregex =
2.4. Restartujemy F2B.
To by było na tyle, metoda odrobinę uciążliwa (podwójne logowanie), jednak dla większego bezpieczeństwa chyba warto. Jak już wspomniałem, ścieżki do plików podałem przykładowe (w regułce Fail2Ban koniecznie trzeba podać poprawną ścieżkę do pliku error.log danego vhosta bądź całego Nginx'a). Warto także dla pliku z hasłem ustawić odpowiednie prawda odczytu, by niepowołane osoby nie miały dostępu.

