Forum Linux.pl

System => Sieć => Wątek zaczęty przez: 1709 w 2021-05-16, 22:45:48

Tytuł: iptables filtrowanie połączeń
Wiadomość wysłana przez: 1709 w 2021-05-16, 22:45:48
Chciałbym " limitować " / ograniczyć ilość logowanych połączeń danego IP co 10 minut.
Zrobiłem sobię taką zaporę.

# iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i lo -m comment --comment Default_policy_desktop_v4 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -m comment --comment Default_policy_desktop_v4 -j ACCEPT
-A OUTPUT -m limit --limit 10/min --limit-burst 1 -j LOG --log-prefix "IPTables: "

Czyli według poradnika / dokumentacji https://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-7.html
Rozumiem to tak że w moim przypadku
gdy wystąpi powyżej 2 połączeń jakiegoś IP wyjściowego, wtedy na 10 min. dane połączenie nie jest logowane.

Ale u mnie to coś chyba nie działa, a prawdopodobnie źle zrozumiałem.
Bo mam tak, czyli " DST=IP_google_analitics "  powtarza się częściej niż co 10 minut.

May 16 22:34:28 user kernel: [25124.691524] IPTables: IN= OUT=eth SRC=Local_IP DST=IP_google_analitics LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=39061 DF PROTO=TCP SPT=41200 DPT=443 WINDOW=24576 RES=0x00 ACK URGP=0 
May 16 22:34:42 user kernel: [25138.835635] IPTables: IN= OUT=eth SRC=Local_IP DST=IP_google_analitics LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=39075 DF PROTO=TCP SPT=41200 DPT=443 WINDOW=24576 RES=0x00 ACK URGP=0
May 16 22:34:54 user kernel: [25151.123774] IPTables: IN= OUT=eth SRC=Local_IP DST=IP_google_analitics LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=39134 DF PROTO=TCP SPT=41200 DPT=443 WINDOW=24576 RES=0x00 ACK URGP=0
May 16 22:35:01 user kernel: [25157.874129] IPTables: IN= OUT=eth SRC=Local_IP DST=IP_google_analitics LEN=1352 TOS=0x00 PREC=0x00 TTL=64 ID=39135 DF PROTO=TCP SPT=41200 DPT=443 WINDOW=24576 RES=0x00 ACK PSH URGP=0
May 16 22:35:11 user kernel: [25168.212019] IPTables: IN= OUT=eth SRC=Local_IP DST=IP_google_analitics LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=39213 DF PROTO=TCP SPT=41200 DPT=443 WINDOW=24576 RES=0x00 ACK URGP=0
May 16 22:35:22 user kernel: [25178.452091] IPTables: IN= OUT=eth SRC=Local_IP DST=IP_google_analitics LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=39214 DF PROTO=TCP SPT=41200 DPT=443 WINDOW=24576 RES=0x00 ACK URGP=0

Testuję na Linux Mint.
Tytuł: Odp: iptables filtrowanie połączeń
Wiadomość wysłana przez: 1709 w 2021-05-25, 10:54:31
Chyba rozwiązałem problem

iptables -N CHAINFILTR
iptables -A OUTPUT -m conntrack --ctstate NEW -j CHAINFILTR
iptables -A CHAINFILTR -m recent --set --name FILTRNOWY --mask 255.255.255.255 --rdest
iptables -A CHAINFILTR -m recent ! --rcheck --seconds 60 --hitcount 2 --name FILTRNOWY --mask 255.255.255.255 --rdest -j LOG --log-prefix "iptables "

Dla mnie trochę dziwnie działa, ale lepsze to niż nic.

W praktyce to działa tak.
Jeżeli jedną pewną stronę odwiedzam częściej niż co minutę,
    Wtedy tylko jedno nowe połączenie będzie zanotowane w logu / w dzienniku systemowym.
    Natomiast pozostałe nowe połączenia do tej samej strony nie  będą zanotowane w logu / w dzienniku systemowym,
    nawet gdyby trwały ponad godzinę.
Jeżeli robię sobie większe przerwy powyżej 1 minuty przy odwiedzaniu strony internetowej,
    to każde nowe połączenie do tej strony  będzie odnotowane w logu.