Jak mogę zablokować próby włamania do phpMyAdmina?

35

Moja witryna codziennie otrzymuje tysiące odwiedzin z różnych adresów IP próbujących uzyskać dostęp:

/php-myadmin/
/myadmin/
/mysql/

... i tysiące innych odmian. Żaden z tych katalogów nie istnieje, nawet nie mam phpmyadmin na moim serwerze.

Nie sądzę, aby któraś z tych prób zakończyła się sukcesem, jednak muszą one odbijać się na zasobach serwera i marnować przepustowość, więc chciałbym je zatrzymać, jeśli to możliwe. Zablokowałem garść tych adresów IP, ale one wciąż wracają z nowymi adresami IP, czy jest jakiś sposób, aby temu zapobiec na stałe?

amba88
źródło
8
Tysiące hitów dziennie to nic. Czy rzeczywiście masz problemy z wydajnością, czy po prostu zakładasz? Kilka tysięcy 404 dziennie to naprawdę nic .
MD Marra
Nie, nie mam problemów z wydajnością. Ale to mnie denerwuje i zastanawiałem się, czy mogę coś zrobić.
amba88
6
Zachowaj ostrożność przy blokowaniu opartym na adresach IP - wiele adresów IP kończy się cyklicznością dla legalnych użytkowników. Ponadto niektórzy legalni użytkownicy mogą zostać zainfekowani jako część botnetu. Jeśli wykonujesz jakiekolwiek blokowanie oparte na adresie IP, upewnij się, że ma ono stosunkowo krótki okres ważności.
Bob
Brak wzmianki o mod_securitytym w tym temacie, więc sprawdź to . Zwróć uwagę na komentarz pod uwagą, że to faktycznie spowodowałoby więcej pracy serwera. Może więc dobrze mod_evasivebyłoby też wdrożyć . fail2ban, ale to jest wymienione poniżej.
mbrownnyc

Odpowiedzi:

42

Nie martw się o to. Podanie 404 to niewielka, niewielka ilość pracy dla serwera WWW. Prawdopodobnie mógłbyś podać dziesięć 404 na sekundę, używając 486. Przepustowość na 404 jest znikoma; małe żądanie GET i mała odpowiedź 404.

Poważnie; nie martw się o to. To tylko część działania serwera w Internecie.

Mark Henderson
źródło
14
Hell-Banning: Podaj normalną stronę (200 OK) z bełkotliwym wyjściem. Narzędzia, których używają dzieci, zgłaszają znalezioną stronę i będą musiały to sprawdzić ręcznie (fałszywa strona logowania z pewnością byłaby urządzeniem diabła) :)
arul
4
@arul - Niektórzy napastnicy mogą potraktować to jako wyzwanie i mimo wszystko zwracają uwagę na twój serwer. Czy podanie mniejszej lub innej 404 byłoby tu w ogóle przydatne? Na przykład, jeśli host zwykle obsługuje 404 z linkiem pomocy, czy powinien / powinna zamiast tego podawać zwykły 404 bez treści do tych docelowych adresów URL?
Freiheit
1
Celem jest, aby przeciwnik spędził dodatkowe zasoby (czas) na analizie wyników. Jeśli zdobędziesz 404, wiesz, że atak nie był możliwy. Wynik OK o zmiennej długości jest [bez dalszego badania] nie do odróżnienia od oczekiwanych wyników. Oni wykonują te skany, ponieważ cierpliwość nie jest ich zaletą, więc zdemotywuj ich z piekła rodem i przestaną :)
arul
1
Aby uzyskać punkty bonusowe, zwróć stronę statyczną, która wygląda dokładnie jak prawdziwa strona phpmyadmin, ale jest całkowicie niedziałająca.
captncraig
1
Aby uzyskać dodatkowe punkty bonusowe, zbuduj opóźnienie 0,5 - 1 sekundy. Nie wydłuży to znacząco czasu ładowania przez legalnych użytkowników, ale spowolni skanowanie wykonywane przez złych facetów. (Musisz tylko upewnić się, że Twój serwer może utrzymywać otwarte połączenia dłużej niż to konieczne i nadal przetwarzać uzasadnione żądania).
Moshe Katz
38

Niestety dla Ciebie tak działa Internet. Po prostu to zignoruj. Tysiące botów / trojanów skanuje Internet. Źródłowy adres IP będzie zawsze losowy. Nie ma lekarstwa.

Jedyne 100% rozwiązanie dla wyeliminowania tego ruchu pokazano poniżej: wprowadź opis zdjęcia tutaj

Alternatywą jest:
- przejście z https / http z portu 80/443 na coś innego. Boty zwykle nie szukają serwera HTTP na wszystkich innych portach 65k.
- użyj VPN, aby połączyć się z serwerem (myślę, że nie jest to możliwe, jeśli prowadzisz publiczną stronę internetową).

Bartłomiej Zarzecki
źródło
LOL +1 dla diagramu :-) Mam ten irytujący problem (jak my wszyscy) na stronie statycznej i jest to najbardziej użyteczna odpowiedź.
Dave Everitt
30

To, czego chcesz, to Fail2ban (zakładając, że to maszyna z systemem Linux, nie powiedziałeś ...)

Co to jest Fail2ban?

Fail2ban przeanalizuje dzienniki systemowe, szukając określonych wyrażeń regularnych do zablokowania. Kiedy znajdzie dopasowanie (lub kilka dopasowań z tego samego adresu IP, w zależności od tego, jak je skonfigurujesz), zostanie zablokowane, zwykle za pośrednictwem IPTables. Zwykle służy to do blokowania nieudanych prób uwierzytelnienia przeciwko SSH lub serwerom internetowym.

Skonfigurujesz go tak, aby banował przez określony czas (może to być minut, może być dni ... zależy od tego, jak są trwałe), po czym ban wygaśnie, chyba że spróbuje ponownie.

W jaki sposób pomaga to blokować boty skanujące phpmyadmin?

Równie łatwo można go użyć do dopasowania typowych oznak ataku, takich jak próba uzyskania dostępu do nieistniejących folderów phpmyadmin. Musisz znaleźć prawidłowe wyrażenie regularne, aby dopasować je do takich prób i upewnić się, że nie blokujesz legalnych użytkowników.

Konfiguracja podana w tym poście na blogu może działać dosłownie lub wymagać drobnych poprawek w konfiguracji.

Dlaczego mam je blokować? Błędy 404 nie kosztują dużo

Zablokowanie ich w iptables ma pewne zastosowanie - istnieje prawdopodobieństwo, że sprawdzą podatność na phpmyadmin, mogą wypróbować również inne usługi pod kątem luk, dopóki nie trafią na coś, co działa. Zakazanie ich spowoduje, że większość botów / skryptów zrezygnuje po pewnym czasie i przejdą do lepszych celów.

Nawet podczas skanowania nie kosztują dużo (chyba że faktycznie znajdują lukę), zalewają twoje logi, co utrudnia dostrzeżenie udanych ataków i problemów z twoim serwerem internetowym.

Jak mówi poniższy komentarz, Fail2ban wymaga pewnych zasobów systemowych. Ale nie za dużo. Przynajmniej mogę powiedzieć, że nigdy nie miałem problemu z wydajnością, który mógłbym przypisać do Fail2ban. Miałem jednak problemy z wydajnością od bardzo agresywnych skryptów próbujących brutalnie wymuszać hasła lub rzucających tysiące prób iniekcji SQL i innych exploitów na sekundę na moim serwerze. Blokowanie ich na poziomie zapory zabiera o FAR mniej zasobów niż blokowanie ich na poziomie serwera / aplikacji. Można go także rozszerzyć, aby uruchamiał niestandardowe skrypty blokujące adresy IP - więc zamiast banować je w tabelach IP, możesz mieć możliwość zablokowania ich w zaporze sprzętowej lub wysłać e-mail do kogoś, jeśli ta sama osoba próbuje cię zaatakować, abyś mógł złożyć skargę do swojego dostawcy usług internetowych lub niech twoje centrum danych zablokuje je w swoich zaporach ogniowych.

Jakieś inne wskazówki?

WYSOCE ZALECANE jest, aby umieścić na białej liście kilka adresów IP, które kontrolujesz, aby nie przypadkowo się zablokować.

Dotacja
źródło
6
to będzie marnotrawstwo zasobów :) Myślę, że użyjesz więcej cykli procesora na Fail2ban niż na zwykłym podawaniu czasami 404 :)
Bartłomiej Zarzecki
4
@ BartłomiejZarzecki Lepsze bezpieczeństwo zawsze wymaga więcej zasobów
11153
3
@ heinrich5991 blokuje się po pierwszych próbach. Nie ma znaczenia dla niektórych skanów, ale ogromna różnica dla skanów, które próbują wielu prób na serwerze.
Grant
2
Fail2ban (lub podobny), mam nadzieję, będzie więcej niż tylko / phpmyadmin. Zakładając, że ma on jakikolwiek zdalny dostęp, blokowanie typu F2B (3 hasła, a ty ... już nie ma!) Trwa dłużej niż 404s.
WernerCD
3
Jeśli zrobisz coś takiego, upewnij się, że ban wygaśnie stosunkowo szybko (maksymalnie kilka godzin) lub możesz zablokować legalnych użytkowników, jeśli atak pochodzi z dynamicznie przydzielanego adresu IP.
Jens Neubauer
7

To, co robię, to umieszczenie małego skryptu w odpowiednim katalogu, aby działał, jeśli ktoś uzyska dostęp do / phpmyadmin /. Ten skrypt nie robi nic poza wywoływaniem iptables (pod Linuksem), który blokuje adres IP uzyskujący dostęp do skryptu na 30 minut (po czym zadanie cron opróżnia łańcuch iptables, do którego adres IP zostaje dodany).

Przewagą nad fail2ban jest to, że nie używasz żadnych zasobów do analizowania syslog / logu dostępu. Wadą jest oczywiście to, że nie sprawdzasz niczego innego, oprócz dostępu do tego bardzo konkretnego adresu.

Dlaczego to robię? Jasne, serwowanie 404 byłoby łatwe dla serwera, ale nie chcę, żeby się grzebały, takie proste. Chcę zmarnować czas narzędzia, czekając na odpowiedź serwera i ponawiając próbę, aż w końcu się podda. Ponadto, jeśli ich nie zablokujesz, wypróbują wiele różnych adresów URL, zanim w końcu przejdą dalej - czasem ponad tysiąc. W zależności od narzędzia może to być „miłe” i rozłożyć je w ciągu kilku godzin lub po prostu nie dbać o nie i wbić serwer we wszystkie w ciągu kilku minut.

Dlaczego nie wyświetlam prawidłowej strony? Ich narzędzie może przestać Cię skanować i ostrzec skiddiego, który je uruchamia - który następnie musi sprawdzić ręcznie. Wadą tego jest to, że dadzą Twojemu serwerowi znacznie bliższe spojrzenie, niż gdyby, gdyby ich skanowanie nie spowodowało pojawienia się w wynikach. Może jeszcze trochę pogrzebią, może kilka skanów portów, może ich zdenerwujesz i uruchomią DoS, aby sprawdzić, czy mogą coś zrobić. Po prostu ich zablokowanie - co z ich punktu widzenia powoduje, że serwer przestaje działać w momencie, gdy uzyskują dostęp do skryptu phpmyadmin - skutecznie marnuje czas narzędzia, unikając przy tym niepożądanej uwagi.

Jeśli masz phpMyAdmina na serwerze, skutecznym rozwiązaniem może być umieszczenie go w osobnym katalogu i użycie kontroli hasła serwera WWW (.htpasswd dla Apache), aby zablokować dostęp, zanim cokolwiek do niego dotrze.

Aaa
źródło
Brzmi jak dobra alternatywa ... ale czy to nie wymaga, aby serwer WWW mógł uruchomić skrypt z uprawnieniami roota?
Grant
1
Dostosuj alias dla narzędzi takich jak phpMyAdmin. Prosta zmiana pliku konfiguracyjnego, aby zmienić go na adminMyPhp lub chrisPhpAdmin ... lub coś, co nie będzie wymagało skryptu.
WernerCD
Przepraszamy za późną odpowiedź - nie musi (koniecznie). Możesz użyć sudo (z plikiem sudoers), aby zezwolić serwerowi WWW na wykonanie jednego dobrze znanego skryptu (i tylko tego skryptu) z uprawnieniami administratora. Ten skrypt zaakceptuje (jako parametr) adres IP i sprawdzisz go względem wyrażenia regularnego ([0-9] + \. [0-9] + \. [0-9] + \. [0-9] + ), aby upewnić się, że nie wstrzykuje niczego dziwnego.
Aaa
1

FWIW ograniczamy dostęp do / phpmyadmin / tylko do adresów IP z białej listy.

Używamy również mod_evasive (na apache2), aby powstrzymać DOS / źle zachowane ataki skryptowe.

user204880
źródło
1

powiąż narzędzie administracyjne mysql z adresem sprzężenia zwrotnego maszyny 127.0.0.1

następnie użyj ssh z przekierowaniem portów, aby uzyskać dostęp do zaplecza administratora.

dodaj dodatkową warstwę bezpieczeństwa, która może być dość przezroczysta.

The Unix Janitor
źródło
-4

Najlepszym sposobem, jaki znaleźliśmy, jest ochrona hasłem folderu, w którym znajduje się phpmyadmin. Nie używaj też niczego, co dotyczy phpmyadmin jako nazwy folderu: pma, phpmy itp.

WeWatchYourWebsite
źródło
2
Z pytania: None of these directories exist, I don't even have phpmyadmin on my server.- Nie pyta, jak zahartować swoje instalacje ... pyta, co zrobić z rzeczami, które nie istnieją. Nie możesz zmienić nazwy PMAani tego, co masz, jeśli nie istnieje.
WernerCD