Niektóre adresy IP otwierają tysiące połączeń mojego serwera. Mam serwer Ubuntu 14. Sprawdzam wszystkie połączenia za pomocą następującego polecenia:
netstat -an | grep tcp | awk '{print 5 $}' | cut -f 1 -d: | sortuj | uniq -c | sortuj -n
Następnie używam następującej reguły iptables, aby zablokować winowajcę.
iptables -I WEJŚCIE 1 -s xxxx -j DROP
Działa dobrze i blokuje adres IP. Nie mogę jednak pozostać online 24/7, aby monitorować serwer. Zastanawiałem się, czy jest jakiś skrypt Shell, którego mogę użyć, aby zrobić to automatycznie? Na przykład, jeśli adres IP otwiera w dowolnym momencie więcej niż X połączeń, powinien zostać automatycznie zbanowany zgodnie z powyższą regułą iptables.
command-line
scripts
iptables
connection
użytkownik3404047
źródło
źródło
Odpowiedzi:
Przede wszystkim nie wymyślaj koła na nowo. Właśnie po to
denyhosts
jest:O ile mi wiadomo,
denyhosts
dotyczy tylkossh
połączeń, ale jest też coś,fail2ban
co dotyczy praktycznie wszystkiego:Oba są dostępne w repozytoriach:
Możesz to również napisać, jeśli chcesz. Coś jak:
awk
Będzie wyodrębnić IP i policzyć je i wydrukować tylko te, które pojawiają się więcej niżmax
razy (tu-vmax=100
, zmień je odpowiednio). Adresy IP są następnie podawane do pętli while, która uruchamia odpowiedniąiptables
regułę.Aby uruchomić to 24/7, zrobiłbym cronjob, który uruchamia polecenie powyżej co minutę. Dodaj tę linię do
/etc/crontab
źródło
fail2ban
to jednak tylko ssh. Działa również dobrze dla portu 80. Zobacz, na przykład tutaj , tutaj i tutaj .Możliwą alternatywną opcją jest identyfikacja i rozwiązywanie problemów z adresami IP w ramach zestawu reguł iptables przy użyciu
recent
modułu. Wyzwaniem dla tej metody jest domyślny limit liczby trafień wynoszący 20, więc trzeba albo odstąpić od wartości domyślnych, albo utworzyć liczniki przenoszenia na wyższym poziomie, aby osiągnąć wyższy punkt aktywacji liczby trafień.Poniższy przykład pochodzi z mojego zestawu reguł iptables i zablokuje adres IP na nieco ponad 1 dzień, jeśli nawiąże 80 nowych połączeń TCP na porcie 80 w mniej niż 12 minut. Gdy znajdziesz się na liście złych facetów, każda próba połączenia spowoduje zresetowanie licznika 1-dniowego na 0. Ta metoda może osiągnąć maksymalnie 400 trafień, zanim będzie wymagane rozszerzenie do innego przenoszenia (i przetestowałem inny łańcuch przenoszenia). Pamiętaj, że opublikowany kod ma infrastrukturę, której można używać do blokowania przez długi czas tylko przy wielu wyzwalaczach o krótszym czasie. Obecnie mam ustawiony długi czas po pierwszym uruchomieniu.
źródło