.htaccess block access, gdy HTTP_HOST to IP (Security)
Miałem wiele ataków na swój serwer. Większość zaczyna się od skanowania luk, po którym następują fale żądań POST.
Wkrótce będę wdrażał Cloudflare (WAF i DDos). Oznacza to, że wyszukiwanie DNS w mojej domenie pokaże adres IP Cloudflare, a nie mój serwer. Więc adres IP mojego serwera będzie ukryty pod tym względem.
Jednak ataki nadal mogą nadejść, przechodząc jeden po drugim przez wszystkie możliwe adresy IP na świecie. Kiedy patrzę na moje dzienniki serwera, widzę, że dzieje się to DUŻO. (Mam 3 adresy IP powiązane z moim 1 serwerem i dokładnie takie same ataki mają miejsce na XXX.XXX.XXX.XX1, następnie XXX.XXX.XXX.XX2, a następnie XXX.XXX.XXX.XX3)
Mój .htaccess najwyższego poziomu wygląda następująco:
# deny all POST requests
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteRule .* - [F,L]
</IfModule>
# deny unused request types
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
RewriteRule .* - [F,L]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Pytania:
Co powinienem dodać, aby [jeśli HTTP_HOST = XXX.XXX.XXX.XX1 OR HTTP_HOST = XXX.XXX.XXX.XX2 LUB HTTP_HOST = XXX.XXX.XXX.XX3] był natychmiast blokowany?
Czy mogę umieścić ten nowy kod u góry pliku .htaccess? Czy zepsuje to, co jest obecnie?
Odpowiedzi
Nie musisz sprawdzać Hostnagłówka pod kątem określonych adresów IP, po prostu sprawdź, czy nie ma tych, Hostktóre zaczynają się od cyfry. Na przykład u góry .htaccesspliku:
RewriteCond %{HTTP_HOST} ^\d
RewriteRule .* - [F]
Nie potrzebujesz Lflagi z F- to jest domniemane.
Nie potrzebujesz również dodatkowych <IfModule mod_rewrite.c>opakowań. Po prostu zostaw WordPress taki, jaki jest. (Chociaż nie jest to też ściśle wymagane).
Jednak najlepiej byłoby, gdyby tego typu bloki były wykonywane na poziomie server / vitualhost, a nie w .htaccess. Skonfiguruj ustawienie domyślne, <VirtualHost>które przechwytuje te niepożądane żądania IP.
Na przykład zakładając, że używasz tylko hostów wirtualnych opartych na nazwach, możesz skonfigurować domyślny host wirtualny (który musi występować przed wszystkimi innymi hostami wirtualnymi) formularza:
# Catch all other requests for non-specific hosts. eg IP address access
<VirtualHost _default_>
ServerName default.example.com
<Location />
Require all denied
</Location>
</VirtualHost>
Spowoduje to przechwytywanie wszystkich żądań, które nie są mapowane na żaden inny „nazwany” host wirtualny. _default_jest po prostu aliasem dla *. Jak wspomniano powyżej, ten <VirtualHost>kontener musi wystąpić przed wszystkimi innymi <VirtualHost>kontenerami w konfiguracji serwera. Fakt, że jest zdefiniowany jako pierwszy, czyni go „domyślnym”.
ServerNameDyrektywa powinna być zdefiniowana jako coś innego niż rzeczywistej nazwy serwera w systemie. Można go pominąć, ale serwer będzie tylko próbował go obliczyć, co może okazać się zawodne.
Dzięki temu Twoje rzeczywiste hosty wirtualne (obsługujące Twoją witrynę) nie będą musiały obsługiwać tych innych żądań.
# deny all POST requests
Wydaje się to trochę ekstremalne! Dziwię się, że Twoja witryna nadal działa?