Boty, które próbują włamać się na serwery to dla mnie codzienność, bo w końcu prowadzę hosting serwerów VPS 🤷♂️
Używam prostej metody, aby odsiać pewien promil internetowych agresorów 🧵 ↓
Środowisko Mikrusa (mikr.us) to ponad 10 tysięcy serwerów VPS.
Nie ma szans, aby admini platformy zabezpieczyli każdego z użytkowników, tym bardziej że każdy z nich ma prawa roota i może konfigurować serwer, jak zechce.
Chcemy jednak blokować intruzów.
Pierwsza linia obrony to klasyka, czyli wycięcie Rosji, Chin i Indii na portach TCP związanych z usługą SSH. To obniżyło liczbę udanych włamań o jakieś 80-90%.
Ale przecież nie tylko z tych krajów przychodzą ataki, a całego świata przecież nie wytniemy — choć można próbować ;)
Korzystam z dwóch czarnych list z adresami IP dokonującymi ataków. Pobieram je z poniższych platform.
↳ AbuseIPDB - darmowa/komercyjna baza abuserów
↳ SniffCat - publicznie dostępna baza abuserów
Każdy z serwisów oferuje API.
Przy pierwszym korzystam z planu darmowego.
Konto FREE na AbuseIPDB umożliwia pobranie bazy danych abuserów tylko 10x na dzień, a mając kilkadziesiąt serwerów, ten limit jest za mały.
Sniffcat ma jeszcze gorzej - limit 6x/dzień.
Rozwiązanie? Jeden, centralny serwer pobiera listę i wrzuca ją do wspólnego repozytorium.
Każdy z serwisów zwraca około 10 tysięcy topowych adresów IP abuserów do zablokowania. To łącznie daje 20k IPv4. Nie ma sensu tworzyć 20 tysięcy regułek firewalla - wystarczy jedna.
Tutaj z pomocą przychodzi "ipset".
W dużym uproszczeniu procedura karmienia ipseta i blokowanie ruchu w iptables wyglądają następująco:
ipset create blocklist hash:ip
cat lista.txt | xargs -n1 -I {} ipset add blocklist {}
iptables -A INPUT -m set --match-set blocklist src -j DROP
Oczywiście prawdziwy skrypt zawiera sprawdzanie, czy set istnieje, czyszczenie go ze starych wpisów, weryfikację istnienia reguły w iptables (aby jej nie dublować), a do tego używam łańcucha FORWARD, a nie INPUT, bo to serwery VPS wpięte do bridge.
Licznik użycia tej reguły na serwerach pokazuje od 200 tysięcy do 2 milionów zdropowanych pakietów ze złośliwych źródeł rocznie.
Czy to dużo? Moim zdaniem tak, a biorąc pod uwagę, że koszty wdrożenia tego zabezpieczenia są niemal zerowe, warto je dorzucić do serwera.
Oczywiście, zamiast odcinać 100% ruchu z podanych adresów IP, można odciąć jedynie ruch skierowany na konkretne usługi — np. SSH, czy porty serwera webowego.
To nie jest 'silver bullet' - to tylko kolejny, mały kamyczek do koszyka z zabezpieczeniami serwerów ;)