WordPress. Bezpieczeństwo 5- blokada IP oraz pre-hasło

W kolejnym artykule dotyczącym bezpieczeństwa w stronach internetowych chciałbym przedstawić Wam sposób drugi w swojej randze zaraz po silnym haśle – blokadę po adresie IP oraz wzmocnienie zabezpieczeń tzw. pre-hasłem. Do wykonania poniższych czynności musisz znać podstawy obsługi FTP (które opisywałem wcześniej) oraz mieć dostęp via ftp do swojego serwera.

Poziom trudności opisywanych czynności oznaczam jako średnio-zaawansowany.

WordPress jak każdy system zarządzania treścią posiada drzwi – o tym wiecie choćby z mojego poprzedniego artykułu tutaj. Takie drzwi, lub bramki to miejsca w których podajemy login i hasło aby móc przejść do zaplecza strony i zarządzać nią. Przecież o to właśnie chodzi, aby pewne osoby mogły się zalogować. Chodzi też o to aby inne osoby nie mogły 🙂 Zatem nietrudno dostrzec analogię, że tak w domu mieszkalnym jak i na stronie internetowej najbardziej narażonym na ataki miejscem są właśnie wspomniane drzwi. Całkiem nietrudno też je lepiej zabezpieczyć i choć powtarzam od samego początku jak mantrę, że 100% sposobu nie ma – jest to tylko backup któremu poświeciliśmy już wystarczająco dużo uwagi, to należy zrobić co tylko jest możliwe, aby to bezpieczeństwo zwiększyć.

Wrota Morii

Kiedy Drużyna Pierścienia (“Władca Pierścieni” autorstwa J.R.R. Tolkiena) dotarła do wrót Morii – kopalni krasnoludów – początkowo nie mogła odnaleźć drzwi. Drzwi bowiem otwierały się tylko w pewnych specyficznych warunkach. Narysowane cienką linią ithildinu pokazywały swój obraz oświetlone jedynie blaskiem gwiazd i księżyca. A to był dopiero początek zabezpieczeń. W blasku księżyca pojawiło się hasło ponad bramą “Powiedz przyjacielu i wejdź” – z pozoru nic sensownego nie znaczące. Można było odczytać je na wiele sposobów a fakt, że wprost mówiło co należy powiedzieć wcale nie ułatwiało zadania i nie było tak oczywiste…

Jeśli pamiętacie ten fragment z książki Tolkiena lub z filmu reż. Petera Jacksona, macie doskonały obraz sytuacji z jaką mamy do czynienia nawet jeśli jeszcze tego nie wiecie. Taki efekt jaki uzyskały zmyślne krasnoludy i my chcemy uzyskać i nie jest to wcale takie trudne…

To że drzwi mogą pokazać się jedynie dla wybranych można uzyskać na kilka sposobów. Można użyć wtyczki, która pozwoli ograniczyć logowanie dla wybranego adresu IP albo umożliwić logowanie tylko o wybranych porach dnia czy nocy, albo odpowiedniego wpisu w htaccess (za moment wyjaśnię co to takiego).

To że nad drzwiami pojawi się napis mówiący “Powiedz przyjacielu i wejdź” to tzw. pre-hasło. Może być całkiem jasne i wprost napisane nad drzwiami zrozumiałe dla ludzi, a totalnie ukryte dla niemyślących programów komputerowych mających na celu łamanie zabezpieczeń. Ten “obrazek” z ponadczasowej powieści Tolkiena jest naprawdę doskonałą ilustracją omawianego zagadnienia…

IP – całkowite skrycie strony logowania

Najlepszym i najpewniejszym zabezpieczeniem jest blokada po adresie IP. Ma ona jednak swoje wady od których warto zacząć akapit. Blokada po IP jest możliwa tylko wtedy kiedy zawsze logujemy się z tego samego adresu (lub adresów). W dodatku musi być on stały a nie dynamiczny. Jaki jest nasz adres IP możemy sprawdzić na wiele sposobów, ot choćby tutaj:

http://moj-ip.pl/

Kiedy zdecydujemy się na ten sposób ekran logowania pojawi się wyłącznie dla osób próbujących wejść na stronę z zapleczem spod wskazanego adresu IP. Oznacza to, że można oszukać tę metodę jedynie podszywając się pod odpowiedni adres IP, co nie jest wcale takie proste i choć możliwe, trud ten nie ma większego sensu w większości przypadków. Można tę metodę uznać za jedną z najpewniejszych i wartych stosowania. Takich adresów możemy podać kilka, jednak należy mieć na uwadze, żeby nie utrudnić sobie życia zanadto – kiedy musimy logować się z wielu różnych komputerów a w szczególności z dynamicznego IP może lepiej z niej zrezygnować a zabezpieczyć stronę na inny sposób.

W jaki sposób blokujemy dostęp do /wp-admin dla wybranego adresu IP?

Polecaną przeze mnie metodą jest użycie pliku .htaccess. Bez wdawania się w zbędne szczegóły plik .htaccess pozwala na zmianę pewnych ustawień serwera Apache. Dodając do tego pliku pewne ściśle określone wpisy możemy zmienić to jak zachowuje się serwer względem pewnych katalogów, a konkretniej w tym przypadku np.: zezwolić lub zabronić dostępu do niego pewnym grupom osób lub programów. Plik .htaccess jest umieszczony w głównym katalogu WordPressa ale w podkatalogach już go z reguły brakuje. Możemy go sami utworzyć i to gdzie się on znajdzie jest bardzo ważne! Jeśli chcemy aby .htaccess odnosił się do stron znajdujących się w pewnym katalogu i podkatalogach musimy umieścić plik .htaccess w tym właśnie katalogu. Obejmie on wtedy swoim działaniem ten katalog i podkatalogi. Dla nas w tej chwili najistotniejszy jest katalog wp-admin gdyż tam znajduje się login.php – plik do którego się odwołujemy podczas logowania.

Gdybyśmy nieopatrznie wrzucili tak przygotowany plik nie do /wp-admin a do głównego katalogu public_html w którym jest nasz WordPress wtedy w ogóle odcięlibyśmy osoby spoza zezwolonego kręgu po IP do wglądu do strony, a tego akurat najczęściej nie chcemy:) Zatem uważnie wykonajmy poniższą procedurę.

Otwieramy (lub tworzymy od podstaw) plik .htaccess w dowolnym edytorze (polecam Notepad ++) i dodajemy następną komendę (w miejscu „X” musi być nasz adres IP).

order deny,allow
deny from all
allow from XXX.XXX.XXX.XXX

Co oznaczają powyższe sformułowania? Mówią że podajemy reguły odmowy dostępu i przydzielenia dostępu. W drugim wierszu podajemy komu odmawiamy deny from all (all oznacza wszystkim) a allow from w wierszu trzecim pokazuje komu przydzielamy uprawnienia do wglądu do danego katalogu. Oczywiście taki przykład można zmodyfikować a w internecie jest mnóstwo różnych sposobów wykorzystania .htaccess. Zatem nie będę tutaj ich mnożył. Dodam tylko że z powodzeniem można odwrócić sytuację i zablokować pewnym konkretnym użytkownikom dostępu, a zezwolić wszystkim pozostałym. W ten sposób można odciąć pewnych użytkowników którzy dla przykładu naprzykrzają się nam. Jest to przykład często wspominanego na forach “bana”, które otrzymują osoby piszące notorycznie w sposób niezgodny z regulaminem.

Plik taki należy umieścić w /wp-admin. Przypominam o tym ponieważ jest to bardzo ważne. Nie umieszczamy go w katalogu głównym WordPressa.

Teraz można już przetestować czy wszystko działa. Trzeba tylko spróbować zalogować się z innego adresu IP. Można do tego użyć dowolnej techniki zmieniającej / maskującej nasz IP, albo zalogować się z innej sieci.

Powiedz przyjacielu i wejdź. Pre-hasło.

Druga metoda o której napiszę to powszechnie używane pre-hasło. Można się z nim spotkać niejednokrotnie nawet, kiedy sami nie podejmujemy działań mających doprowadzić do pojawiania się go. Chodzi o to, że wielu dostawców usług hostingowych domyślnie nadaje obowiązek podania pre-hasła o którym piszę w momencie wejścia np.: na /wp-admin. Jest tak choćbym z firmą Linuxpl.com co świadczy na pewno o dodatkowej dbałości firmy o nasze bezpieczeństwo i swoje zasoby.

Cała idea posiadania pre-hasła ma na celu przede wszystkim (choć nie tylko) odcięcie programów komputerowych łamiących hasła metodą brute force. Czyli program komputerowy nie dostanie się na ekran logowania jeśli nie poda pre-hasła, a że jest tylko programem (bez inteligencji) nie koniecznie poradzi sobie nawet z tak prostą kwestią jak powiedzenie „przyjacielu” kiedy wprost napiszemy powiedz „przyjacielu„ i wejdź. Często na tzw pre-hasłach podaje się wprost co mamy napisać. Np.: przepisz jako login i hasło “jestem człowiekiem”. Człowiek nie będzie miał z tym problemu a oprogramowanie już tak. A skoro program nie dostanie się do ekranu właściwego logowania nie rozpocznie bezmyślnego ataku brute force i nie obciąży zasobów serwera a także nie złamie hasła metodą prób i błędów o której piszę.

Pre hasło – jak je nadać?

Tutaj sprawa jest odrobinę bardziej skomplikowana. Ale tylko odrobinę. Znów użyjemy dobrze znanego nam .htaccess. Jednak w metodzie tej potrzebujemy dwóch rzeczy. Pierwsza to plik z hasłem, który sami stworzymy a druga to odpowiedni zapis w .htaccess. Metoda ta pochodzi z oficjalnej strony repozytorium WordPressa https://codex.wordpress.org/Brute_Force_Attacks do której zapraszam osoby nieco bieglejsze w obsłudze zagadnień informatycznych i języku angielskim. Jest tam opisane to o czym mówię znacznie dokładniej i obszerniej.

Etap pierwszy – plik z hasłem .password

Utwórz na swoim komputerze (np. pulpicie) nowy plik z dowolną nazwą. Dla potrzeb przykładu będzie to .password. W pliku tym zapiszemy hasło. Ale oczywiście słabo by to wyglądało gdyby po otwarciu pliku jak byk stały tam:

login: janek
hasło: K0wal5k1

Aby plik spełniał swoją rolę dobrze byłoby zaszyfrować dane które tam wpiszemy. Aby to sprawnie przeprowadzić skorzystamy z generatora znajdującego się tutaj (htaccestools password generator) i dzięki niemu powyższy login z hasłem wygląda już tak:

janek:$apr1$Sbo.KAMR$LuthIJW2D6xotHO3SkfPH.

Taką treść zapisujemy w pliku i wgrywamy go na serwer. Najlepiej piętro wyżej niż WordPress a więc w katalogu nadrzędnym.

Jeśli nie będziecie mogli się odnaleźć w ścieżkach na swoim serwerze warto stworzyć nowy plik info.php w którym wklejamy:

<?php echo dirname( __FILE__ ); ?>

po jego wgraniu na serwer do dowolnego katalogu via ftp i wpisaniu nazwy w pasku adresowym URL wyświetli on całą ścieżkę naszego serwera. Nam potrzebny jest początek tego adresu dzięki czemu mamy już wszelkie dane aby móc odwołać się do pliku w etapie drugim poniżej…

Etap drugi – wpis w .htaccess

# Stop Apache from serving .ht* files
<Files ~ "^\.ht">
Order allow,deny
Deny from all

</Files>
# Protect wp-login
<Files wp-login.php>
AuthUserFile /sciezka serwera az do pliku password/.htpassword
AuthName "Dostęp dla upowaznionych"
AuthType Basic
require user mysecretuser
</Files>

Po wgraniu plików w odpowiednie miejsca (zgodnie z ścieżkami jakie ustaliliśmy) wystarczy podać adres naszej strony/wp-admin aby okazało się czy wszystko działa. Jeśli zrobiliśmy wszystko poprawnie pozostaje nam wcielić się w rolę Gandalfa Szarego zaskoczonego hasłem „powiedz przyjacielu i wejdź”…