Jak wyświetlić listę adresów IP zablokowanych przez iptables?

16

Aby zapobiec brutalnym atakom na ssh, dodałem kilka reguł iptables (poniżej). Pytanie brzmi: jak mogę wyświetlić listę zablokowanych adresów IP?

(1)
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
Eddie
źródło
1
iptables -L INPUT -v -npokazuje wszystkie zablokowane IP
dynamiczne

Odpowiedzi:

16

Jedną z opcji byłoby zalogowanie dowolnego z upuszczonych pakietów przy użyciu reguły takiej jak:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl -j LOG --log-prefix "FW_DROPPED: "

Wstaw to bezpośrednio przed DROPregułą. Następnie możesz grepować plik syslog na cokolwiek z „FW_DROPPED” w nim, a lista adresów IP będzie tam. Wpisy w pliku dziennika wyglądają mniej więcej tak:

Jun  3 08:05:57 some-machine kernel: [15852451.420557] FW_DROPPED: IN=eth0 OUT= MAC=00:50:ba:4a:d9:e3:00:12:17:3a:e3:64:08:00 SRC=228.23.45.189 DST=192.168.1.1 LEN=48 TOS=0x00 PREC=0x00 TTL=106 ID=10941 PROTO=TCP SPT=58212 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

Więc wycięcie tego, co następuje po „SRC =”, pokaże ci upuszczone adresy IP. Posortuj to, eliminując duplikaty, a będziesz mieć swoją listę.

Uważam, że samouczek Iptables jest najbardziej przydatną dokumentacją dla iptables / netfilter.

yukondude
źródło
Tak, to jest sposób, aby to zrobić.
Brent
Wymagałoby to skopiowania reguł, ponieważ nie logujesz się i nie wpisujesz tej samej reguły.
David Pashley,
3
Byłoby jeszcze lepiej, gdyby stworzył łańcuch użytkowników, w którym loguje się i upuszcza szkodliwe pakiety. W ten sposób niepotrzebnie duplikacja jest usuwana. Można to zrobić w następujący sposób: iptables -N ataki; iptables -A WEJŚCIE -i eth0 -p tcp --port 22 -m stan - stan NOWOŚĆ -m niedawny --aktualizacja - sekundy 60 --hitcount 8 --rttl - nazwa ataki SSH -j; iptables -A ataki -j LOG - prefix dziennika „FW_DROPPED:”; iptables -A ataki -j DROP
Cristian Ciupitu
1
Zgoda. Tabele / łańcuchy są właściwą drogą; cały sens iptables, naprawdę. Tworzę osobne tabele dla akceptowanych, cicho upuszczanych, słyszalnie odrzucanych, odrzucanych, podejrzewanych powodzi, nielegalnych, podejrzanych sond, podejrzanych skanów, nieznanych typów i obserwowanego ruchu. Moje FW oparte są na tym starym skrypcie (ostrzeżenie: autopromocja): code.google.com/p/klondike-firewall/source/browse/trunk/…
yukondude
1
Moduł ipt_recent, do którego odwołują się ipozgaj i David Pashley, jest całkiem sprytnym dodatkiem, chociaż nie może dostarczyć tego samego drobiazgowego powodu, dla którego dany adres IP został usunięty (jak to możliwe przy różnych ustawieniach - log-prefix) lub śledzić długa historia ataków ze znacznikami czasu. Zdecydowanie dobrym pomysłem jest jednak wykorzystanie obu technik na koncertach.
yukondude
5

Możesz znaleźć szczegóły w / proc / net / ipt_recent / SSH.

Ten artykuł zawiera więcej informacji.

David Pashley
źródło
Ten artykuł już nie istnieje.
Dan Metheus
4

Patrzeć na

/proc/net/ipt_recent/YOURNAME

gdzie YOURNAME to nazwa użyta z opcją --name w regule iptables.

ipozgaj
źródło
W niektórych dystrybucjach (np. Debian) poprawna ścieżka to:/proc/net/xt_recent/[list-name]
itachi
3

Oto prosty jeden linijka:

$ iptables -L -n --line
giorgio79
źródło
1

To, co robię, na przykład w celu fałszowania adresów wejściowych, to zdefiniowanie łańcucha SPOOF_REJECT:

iptables -N SPOOF_REJECT
iptables -A SPOOF_REJECT -j LOG --log-prefix "Input spoof detected: "
iptables -A SPOOF_REJECT -j REJECT

następnie, aby wysłać pakiety do tego łańcucha, jeśli są sfałszowane:

iptables -A INPUT -i $EXT_DEV1 -s $INT_NET -j SPOOF_REJECT
iptables -A INPUT -i $EXT_DEV2 -s $INT_NET -j SPOOF_REJECT

Możesz zrobić coś takiego dla każdej kategorii pakietów, które upuszczasz lub odrzucasz, aby uzyskać linię w dzienniku systemowym do wyszukiwania, a następnie okresowo grep, wytnij, sortuj, aby uzyskać tylko adresy IP z tych linii dziennika.

Zaletą korzystania z poszczególnych łańcuchów dla każdej kategorii jest to, że konfiguracja staje się prostsza i łatwiejsza do odczytania iptables. Gdy dodajesz coraz więcej reguł, będziesz zadowolony, że użyłeś poszczególnych łańcuchów do konkretnych różnych działań.

Eddie
źródło
Jak dokładnie wykrywasz sfałszowane pakiety? Z mojego doświadczenia wynika, że ​​jest to niemożliwe w ogólnym przypadku.
MarkR
Powyższe jest tylko przykładem. Tutaj szukam każdego pakietu przychodzącego do łańcucha INPUT, który pochodzi z urządzenia zewnętrznego, ale twierdzi, że pochodzi z adresu IP wewnętrznego w mojej sieci. W takim przypadku mogę absolutnie wykryć fałszowanie adresów, ale tak, w ogólnym przypadku sprawy wyglądają inaczej.
Eddie
1

„Pytanie brzmi: jak mogę wyświetlić listę zablokowanych adresów IP?”

Utwórz łańcuch BANNED:

iptables -N BANNED
iptables -F BANNED

Utwórz łańcuch rejestrowania:

iptables -N BANNEDLOG
iptables -F BANNEDLOG
iptables -A BANNEDLOG -j LOG --log-prefix "BANNED:" --log-level 6
iptables -A BANNEDLOG -j DROP

Dodaj skok do zbanowanego łańcucha w łańcuchu INPUT przed większością innych reguł

...
iptables -A INPUT -j BANNED
...

Teraz dodaj adresy ip do zbanowanego łańcucha:

flock -w 5 /var/lock/iptables -c 'iptables -A BANNED -s 140.130.20.202/32 -i eth0 -m comment --comment "2012-03-19 23:49:33 accesslog" -j BANNEDLOG'
etc...

Możesz także używać go jako bazy danych z opcjami komentowania, dzięki czemu możesz wiedzieć, kiedy i dlaczego itp. Flokowanie jest ważne, gdy iptables jest często aktualizowany przez wiele procesów - wygląda na to, że iptables nie ma wbudowanego żadnego blokowania.

Aby wyświetlić zabronione adresy i reguły w zbanowanym łańcuchu:

iptables -S BANNED

Aby wyświetlić tylko posortowane unikalne adresy IP:

iptables -S BANNED | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -u

Mam kilka demonów działających na moich serwerach sprawdzających pliki syslog i blogi, więc jeśli ktoś spróbuje czegoś paskudnego, ich adres jest automatycznie blokowany na kilka dni, w zależności od rodzaju i ciężkości oraz liczby wcześniejszych ataków. Informacje są rejestrowane w bazie danych mysql i okresowo wygasają. Adresy są również dystrybuowane na każdą inną maszynę w klastrze za pośrednictwem replikacji mysql, dzięki czemu są również chronione i synchronizowane. Moje oprogramowanie wyszukuje również właściciela sieci i wysyła skargę do dostawcy usług internetowych.

Po 10 latach pracy mam nadzieję, że wkrótce będzie dostępna dla wszystkich. Obecnie mam około 1,5 miliona historii adresów IP i setki tysięcy ataków pocztowych i ssh, które pomagają oczyścić sieć. Jeśli więcej z niego skorzysta, to mam nadzieję, że będzie to miało większy wpływ.

Andy Lee Robinson
źródło