Jak zablokować klientom dostęp do określonych adresów URL na moim serwerze internetowym przez adres IP?

9

Jak mogę trwale zablokować dowolny ipaddress, który uzyskuje dostęp do znanych podatnych stron, takich jak /phpMyadmin/? Korzystam z serwera Debian i często widzę boty lub hakerów skanujących mój serwer w poszukiwaniu luk.

73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpMyadmin/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpMyAdmin/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyAdmin/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyadmin2/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyadmin3/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyadmin4/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"

Podążyłem już za tym pytaniem dotyczącym przepełnienia stosu : Jak zabezpieczyć phpMyAdmin .

Chcę zacząć blokować boty przed zajmowaniem pasma.

Biały kot
źródło
4
Spowoduje to wyczyszczenie plików dziennika, ale nie pomoże w ogóle z bezpieczeństwem. Albo zawsze aktualizuj phpmyadmin, albo uzyskuj do niego dostęp tylko z localhost (i blokuj cały pozostały ruch). Aby uzyskać dostęp do zdalnego serwera, tuneluj port przez ssh.
Stefan M
Myślę, że to poprawi bezpieczeństwo, ponieważ zablokuje złośliwe adresy IP, które próbują uzyskać dostęp do tej witryny.
Whitecat
@ Whitecat 404oznacza kod HTTP Page not found. Jak czujesz, że te adresy IP naruszają adresy IP? Na podstawie jakiego wyjścia zdecydujesz się zablokować te adresy IP?
Valentin Bajrami
Chcę zablokować IP na podstawie faktu, że zamierzają phpMyAdmin. Zabezpiecziłem swoją witrynę i wiem, że każdy odwiedzający tę stronę jest złośliwy.
Whitecat
1
Dlaczego nie utworzysz.htpasswd
nicoX

Odpowiedzi:

18

Może to być większy ciężar niż szukasz, ale możesz rozważyć użycie fail2ban ( https://www.fail2ban.org ). To narzędzie może monitorować pliki dziennika i automatycznie blokować adresy generujące dzienniki pasujące do zestawu konfigurowalnych wzorców.

Andy Dalton
źródło
5
thh właśnie ten problem fail2banma rozwiązać. Jest trochę ciężki, ale z drugiej strony pożądane kryteria są dość dynamiczne. Wszystkie rozważane kwestie fail2bansą tak lekkie, jak to możliwe, próbując rozwiązać tę klasę problemów za pomocą standardowego narzędzia.
Bratchley,
1
Cóż, przypuszczam, że możesz napisać binarne cgi suid-root, hostować go jako / phpmyadmin, który dodaje regułę zapory do swojego programu wywołującego.
Joshua
7

Nie rób W najlepszym razie nie osiągniesz nic poza zmniejszeniem bałaganu; w najgorszym wypadku skończysz blokować legalnych gości, którym zdarzyło się uzyskać (za pośrednictwem DHCP) adres IP, który kiedyś należał do osoby, której komputer został zainfekowany jako węzeł botnetu.

Prawdziwym problemem jest bałagan w logach, który można rozwiązać, konfigurując rejestrowanie w celu usunięcia żądań, o których wiadomo, że skanowanie w poszukiwaniu wulgary nie ma i nie będzie, ponieważ witryna nie jest narażona na ataki struktury, które skanują. Jeśli martwisz się całkowitą utratą rejestrowania (być może dostarczają dowodów sugerujących, kto był odpowiedzialny za inny atak, lub kiedy atak się rozpoczął, itp.), Po prostu dławienie wielu wpisów dziennika dla śmieciowych adresów URL z danego adresu IP w krótkim czasie powinien działać lepiej.

R .. GitHub ZATRZYMAJ LÓD
źródło
6
fail2banzakazy są tymczasowe - X trafień przy złej próbie zalogowania się w ciągu Y sekund, Z minutowy ban, z konfigurowalnymi XY i Z. Upuszczanie dzienników aktywnych prób włamań brzmi dla mnie jak znacznie bardziej niebezpieczny wybór.
Shadur
2
z prawdopodobieństwem 0,1%, że tak się stanie, uprawnieni użytkownicy tej instancji phpmyadmin powinni mieć możliwość przesłania komunikatu OP, aby zostać odblokowanym. Ponadto fail2ban może zablokować atak skanujący, zanim trafi na lukę na serwerze w niezałatanym lub zerowym dniu.
Segfault
1
@ Segfault: Prawdopodobnie nie ma legalnych użytkowników, /phymyadmin/ponieważ /phymyadmin/nie istnieje na serwerze (patrz: 404). Raczej uprawnieni użytkownicy, o których mowa, to użytkownicy witryny, którzy zostali zablokowani przez zaporę ogniową.
R .. GitHub ZATRZYMAJ LÓD
1
„Najlepsze” faktycznie obejmuje kolejne testy, w tym te, które mogły się powieść. Przeszukiwanie zawartości dziennika również wydaje się dobrym sposobem na utratę informacji, gdy uświadomisz sobie, że popełniłeś jakiś błąd w filtrze. Jeśli martwisz się bałaganem, potrzebujesz platformy analitycznej, takiej jak ELK, aby przejrzeć to wszystko, co Cię interesuje.
Bratchley,
2
Drugim pokrewnym problemem jest rosnące wykorzystanie CGN. Dostawca usług internetowych może mieć setki klientów korzystających z jednego adresu IP, co czyni blokowanie adresów IP w najlepszym wypadku niebezpiecznym, nawet tymczasowym. Możesz mieć uprawnionego użytkownika i aktywny skan z tego samego adresu w tym samym czasie.
Bob
3

znajdź deny 73.199.136.112plik phpMyAdmin.conf w jednym z katalogów konfiguracyjnych httpd i dodaj sekcję zezwól / odrzuć w pliku konfiguracyjnym oraz wymagany adres IP w sekcji 2.4. Poniżej umieściłem przykład pełnego pliku konfiguracyjnego, w którym mam wpisy w odwrotnej kolejności, blokuję wszystko oprócz dozwolonych segmentów IP, aby uzyskać dostęp do narzędzia.

[thebtm@server conf.d]# cat /etc/httpd/conf.d/phpMyAdmin.conf
# phpMyAdmin - Web based MySQL browser written in php
# 
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 10.10.26
       Require ip 192.168.56
       Require ip 127.0.0.1       
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 10.10.25
     Allow from 192.168.56
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

# These directories do not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#
<Directory /usr/share/phpMyAdmin/libraries/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/lib/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/frames/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc.  This may break your mod_security implementation.
#
#<IfModule mod_security.c>
#    <Directory /usr/share/phpMyAdmin/>
#        SecRuleInheritance Off
#    </Directory>
#</IfModule>
thebtm
źródło
To jest niesamowite. Ale problem polega na tym, że istnieją stałe boty z wielu różnych adresów IP. Nie jestem w stanie nadążyć za każdym innym adresem IP, ponieważ otrzymuję od 20 do 30 unikalnych złośliwych ips dziennie.
Whitecat
2
Dlatego pokazałem odwrotnie, gdzie pozwalasz segmentom, do których chcesz mieć dostęp, a resztę automatycznie blokuje.
thebtm
Alias /phpmyadmin /usr/share/phpMyAdmind /phpmyadminnależy zmienić na coś innego ze względów bezpieczeństwa. Alias /secret /usr/share/phpMyAdmind
nicoX
Zmodyfikowałem domyślny plik konfiguracyjny dostarczany wraz z narzędziem podczas instalacji i utworzyłem losowe adresy IP.
thebtm