Trwale zablokuj po N połączeniach za minutę z iptables

0

Próbuję stworzyć kilka reguł iptables, które to zrobią:

Jeśli źródłowy IP próbuje 3 lub więcej połączeń w czasie krótszym niż minuta, zakazuj tego IP do odwołania.

Nie jestem zbyt dobrze zaznajomiony z iptables i jest to trudniejsze do wdrożenia niż myślałem, że będzie. Większość przykładów znalazłem tylko blok na 60 sekund. Gdyby ktoś mógł mi pokazać, jak to zrobić, byłbym wdzięczny.

zallik
źródło

Odpowiedzi:

3

Możesz użyć fail2ban, aby automatycznie zarządzać swoimi iptables. Monitoruje pliki dziennika i podejmuje działania na podstawie kryteriów, które można skonfigurować. Domyślnie może obsługiwać wiele różnych typów połączeń. Korzystając z tej struktury, jestem pewien, że możesz zablokować dowolne zachowanie.

https://www.fail2ban.org/wiki/index.php/Main_Page

Z README:

Fail2Ban skanuje pliki dziennika, takie jak [plik: /// var / log / pwdfail pwdfail] i   zakazuje adresów IP, które powodują zbyt wiele błędów hasła. To aktualizuje   reguły zapory, aby odrzucić adres IP. Te reguły można zdefiniować   przez użytkownika. Fail2Ban może czytać wiele plików dziennika, takich jak sshd lub   Apache Web server. Ten README to szybkie wprowadzenie do   Fail2Ban. Więcej dokumentacji, FAQ, HOWTO są dostępne na stronie   strona internetowa projektu.

HackSlash
źródło
2

Wygląda na to, że moduł ipset może być najbardziej bezpośrednim sposobem na osiągnięcie tego, co próbuję zrobić. Jednak wymaga najpierw utworzenia ipsetu.

To właśnie wymyśliłem i wydaje się działać:

iptables -A INPUT -p tcp --dport 80 -m stan - stan NEW -m ostatni - zestaw

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --second 60 --hountount 3 -j SET --add-set blocked src

iptables -A INPUT -p tcp --dport 80 -m set --match-set zablokowany src -j DROP

zallik
źródło
UWAGA: Jeśli twoim celem jest ochrona przeciwpowodziowa, nie wymyślaj na nowo koła. Możesz użyć istniejącej ochrony DDoS. Niektóre CDN zrobią to za darmo: cloudflare.com/ddos
HackSlash
1

Istnieje opcja --hitcount, która określa liczbę nieudanych prób. Proponuję przetestować to na komputerze testowym lub innym, a nie na SSH do zdalnego serwera, ponieważ możesz zostać zablokowany. Chyba że masz dostęp do konsoli KVM.

Podobna odpowiedź jest podana tutaj: Automatycznie odmawiaj prób włamania w CentOS?

Aby uzyskać więcej sekund, podaj wartość i powinna działać.

Zawsze należy pamiętać, że reguły DROP muszą znajdować się na końcu reguł. Zazwyczaj plik reguł iptables znajduje się w / etc / sysconfig / iptables

W przypadku innych opcji możesz to sprawdzić https://linux.die.net/man/8/iptables . Możesz znaleźć prawie wszystko na stronie linux.die.net. Zawiera strony man i inne.

Aby sprawdzić listę zablokowanych adresów IP, możesz uruchomić: iptables -L INPUT -v -n Sprawdź to, aby uzyskać więcej: https://www.cyberciti.biz/faq/linux-howto-check-ip-blocked-against-iptables/

I to, co osobiście uznałem za przydatne, to ten przewodnik: https://linuxacademy.com/howtoguides/posts/show/topic/15473-introduction-to-iptables

Erlis D.
źródło
3
Przechowywanie listy zabronionych adresów IP w iptables ostatecznie zabije Twoją wydajność. ipset został specjalnie zaprojektowany do zarządzania dużą listą adresów IP.
cybernard
1
Niesamowite! Dziękujemy za udostępnienie tego @cybernard!
Erlis D.