[+] blokowanie UDP o zadanej wielko

Konfiguracja serwerów, usług, itp.
Awatar użytkownika
skoorek
Posty: 13
Rejestracja: 30 sierpnia 2006, 08:27
Lokalizacja: od fEnIo

[+] blokowanie UDP o zadanej wielkości

Post autor: skoorek »

Witam wszystkich.
Ostatnio w sieci pojawił mi się problem z pakietami udp, mimo że mam załączoną opcję przed fragmentacją pakietów, to nie pomaga i w przeciągu kilku minut, jak zaczynają się pojawiać duże pakiety udp (30000), zaczyna brakować RAM-u i ruter umiera i trzeba go restartować z palca.
W ruterze mam 8G RAM DDR3 i Intel(R) Core(TM) i3 CPU.

Kod: Zaznacz cały

# wlaczamy zabezpieczenie przed defragmentacja pakietow
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then
     echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
Po długim szukaniu z pomocą Google znalazłem, iż jest moduł do wielkości pakietów (-m length), przy pomocy iptables chciałem ustawić im opcję ,,drop'' ale nie do końca coś działa dobrze, jak robię to w ten sposób:

Kod: Zaznacz cały

iptables -A INPUT -p udp -i eth0 -m length --length 3000: -j DROP
iptables -A INPUT -p udp -o < dla każdego eth, klienci > -m length --length 3000: -j DROP
jakimś cudem blokuje mi CENTREONA (nagios przez SNMP), a mimo tego nie robi tego co bym chciał, czuli odrzucać coś co jest większe niż (zadana wartość).
Ewentualnie wolałbym stworzyć sobie jakiś własny łańcuch tam ewentualnie z opcją ,,drop'' zalogować te pakiety. Zastanawiałem się także nad blokowaniem tych dziwnych udp w tabeli nat i w łańcuchu PREROUTING ale coś nie działa iptables, wyrzuca błąd iż nie można użyć opcji DROP w tym łańcuchu.
Ruter działa pod Linuksem:

Kod: Zaznacz cały

rtr-ubuntu:# iptables -V
iptables v1.4.4

rtr-ubuntu:# lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.2 LTS
Release:        10.04
Codename:       lucid

rtr-ubuntu:# uname -r -m -v
2.6.32.21+drm33.7imq #1 SMP Wed Nov 17 20:30:20 CET 2010 x86_64
Za wszelką pomoc z góry dziękuję.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

Trudno tak powiedzieć, dlaczego nie działa moduł lenght, bez pokazania całości reguł firewalla. Zgaduje, że któraś z późniejszych reguł wpuszcza ponownie pakiety. Pokaż całość reguł.
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Wspomniałeś, że jest to router, zatem pakiety przechodzą przez niego na świat przez łańcuch FORWARD tablicy filter. Łańcuch INPUT jest dla pakietów trafiających do procesów lokalnych serwera.
Awatar użytkownika
skoorek
Posty: 13
Rejestracja: 30 sierpnia 2006, 08:27
Lokalizacja: od fEnIo

Post autor: skoorek »

Dziękuję serdeczne, właśnie sprawdzam regułki, zrobiłem tak:

Kod: Zaznacz cały

rtr-ubuntu:# iptables -t filter -N LONGUDP

# w zamiarze ma działać tak że udp, które wychodzi eth0 i jest większe niż 3000 ma być dropowane do LONGUDP
rtr-ubuntu:# iptables -t filter -I FORWARD -p udp -o eth0 -m length --length 3000: -j LONGUDP

# w zamiarze ma działać tak że udp, które wchodzi eth0 i jest większe niż 3000 ma być kierowane do LONGUDP
rtr-ubuntu:# iptables -t filter -I FORWARD -p udp -i eth0 -m length --length 3000: -j LONGUDP

# w LONGUDP mam
rtr-ubuntu:# iptables -t filter -A LONGUDP -p udp -s 10.0.0.0/24 -m length --length 3000: -j DROP
rtr-ubuntu:# iptables -t filter -A LONGUDP -p udp -s 10.1.0.0/24 -m length --length 3000: -j DROP
rtr-ubuntu:# iptables -t filter -A LONGUDP -p udp -s 10.1.1.0/24 -m length --length 3000: -j DROP
rtr-ubuntu:# iptables -t filter -A LONGUDP -p udp -s 10.0.1.0/24 -m length --length 3000: -j DROP
rtr-ubuntu:# iptables -t filter -A LONGUDP -p udp -s 10.2.0.0/24 -m length --length 3000: -j DROP
Nie wiem, czy ma to jakiś sens, właśnie się testuję, zobaczymy, czy pomoże.

Kod: Zaznacz cały

rtr-ubuntu:# iptables -t filter -L LONGUDP -nv
Chain LONGUDP (2 references)
 pkts bytes target     prot opt in     out     source               destination
    5 41795 DROP       udp  --  *      *       10.0.0.0/24          0.0.0.0/0           length 3000:65535
    0     0 DROP       udp  --  *      *       10.1.0.0/24          0.0.0.0/0           length 3000:65535
    0     0 DROP       udp  --  *      *       10.1.1.0/24          0.0.0.0/0           length 3000:65535
    0     0 DROP       udp  --  *      *       10.0.1.0/24          0.0.0.0/0           length 3000:65535
    0     0 DROP       udp  --  *      *       10.2.0.0/24          0.0.0.0/0           length 3000:65535

rtr-ubuntu:# iptables -t filter -L FORWARD -nv | head
Chain FORWARD (policy ACCEPT 55M packets, 59G bytes)
 pkts bytes target     prot opt in     out     source               destination
2395K  211M LOG        all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           state NEW LOG flags 0 level 4 prefix `TRAFFIC OUT LOG: '
 988K  101M LOG        all  --  eth0   *       0.0.0.0/0            0.0.0.0/0           state NEW LOG flags 0 level 4 prefix `TRAFFIC IN LOG: '
    5 41795 LONGUDP    udp  --  *      eth0    0.0.0.0/0            0.0.0.0/0           length 3000:65535
    2  9123 LONGUDP    udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           length 3000:65535
    0     0 DROP       tcp  --  *      *       10.1.0.201           0.0.0.0/0           tcp dpt:25
    0     0 DROP       tcp  --  *      *       10.0.0.65            0.0.0.0/0           tcp dpt:25
    0     0 DROP       tcp  --  *      *       10.0.1.114           0.0.0.0/0           tcp dpt:25
    0     0 DROP       tcp  --  *      *       10.1.1.102           0.0.0.0/0           tcp dpt:25

Dodane:
Dziękuję za pomoc z iptables, przetestowałem kilka dni i działa dobrze nie ma problemów z CENTREONEM, a pakiety udp blokuje jak należy. Dodałem sobie jeszcze informacyjnie logowanie tych pakietów w syslog-ng do osobnego pliku w tabeli LONGUDP.

Kod: Zaznacz cały

rtr-ubuntu:# iptables -t filter -L LONGUDP -nv | head
Chain LONGUDP (2 references)
 pkts bytes target     prot opt in     out     source               destination
  220 1386K LOG        udp  --  *      eth0    0.0.0.0/0            0.0.0.0/0           length 3000:65535 LOG flags 0 level 4 prefix `LONG UDP OUT LOG: '
   61  490K LOG        udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           length 3000:65535 LOG flags 0 level 4 prefix `LONG UDP IN LOG: '
  176 1135K DROP       udp  --  *      *       10.0.0.0/24          0.0.0.0/0           length 3000:65535
    0     0 DROP       udp  --  *      *       10.1.0.0/24          0.0.0.0/0           length 3000:65535
   42  245K DROP       udp  --  *      *       10.1.1.0/24          0.0.0.0/0           length 3000:65535
    0     0 DROP       udp  --  *      *       10.0.1.0/24          0.0.0.0/0           length 3000:65535
    0     0 DROP       udp  --  *      *       10.2.0.0/24          0.0.0.0/0           length 3000:65535
ODPOWIEDZ