Ograniczanie ilości połączeń
W sieciach osiedlowych userzy mają p2p. Generuje to baaaardzo dużo połączeń. Można to podejrzeć:
grep -v udp /proc/net/ip_conntrack|cut -c 12-|cut -d" " -f 2,3,4,5,6|sort -k 2,5
Jeżeli połączenie zostanie nieprawidłowo zerwane to moduł conntrack domyślnie trzyma wpis 5 dni - powoduje to niepotrzebny przyrost wpisów w tym pliku i znaczne zamulenie rutera.
Dlatego też warto przekompilować jądro wprowadzając małą poprawkę do pliku (źródło kernela)
./net/ipv4/netfilter/ip_conntrack_proto_tcp.c
należy zainteresować się parametrami
ip_ct_tcp_timeout_close_wait
ip_ct_tcp_timeout_established
oraz podobnymi - po prostu zmniejszyć ich wartości. O ile? Ja mam na przykład
unsigned long ip_ct_tcp_timeout_syn_sent = 2 MINS;
unsigned long ip_ct_tcp_timeout_syn_recv = 60 SECS;
unsigned long ip_ct_tcp_timeout_established = 2 HOURS;
unsigned long ip_ct_tcp_timeout_fin_wait = 2 MINS;
unsigned long ip_ct_tcp_timeout_close_wait = 60 SECS;
unsigned long ip_ct_tcp_timeout_last_ack = 30 SECS;
unsigned long ip_ct_tcp_timeout_time_wait = 2 MINS;
unsigned long ip_ct_tcp_timeout_close = 10 SECS;
oczywiście to, że ja tak mam nie oznacza, że Ty musisz też tak mieć - poeksperymentuj.
Zainteresuj się też modułem connlimit (dawniej iplimit)
dla iptablesów - ogranicz po prostu liczbę połączeń do wysokich portów do powiedzmy 20, to co powyżej - REJECT lub DROP (też organoleptycznie), ja mam akurat DROP, bo REJECT powiadamia aplikację p2p o tym, że połączenia nie da się uzyskać a ona natychmiast generuje następne połączenie. Jak jest DROP to musi poczekać na timeout.
${IPTABLES} -A FORWARD -p tcp -s ${net} -o ${pub} --dport 1024:65535 -m connlimit --connlimit-above 20 -j DROP
Zablokuj też w forwardzie połączenia z portami 135-139,445 (tcp,udp) te ipki, które wykazują taką aktywność odłączaj - mają wirusa.
Komentarze:
Czytalem manuala i przyznam ze troche nie zrozumialem jak przy uzyciu connlimit ograniczyc ruch per user oczywiscie nie wpisujac recznie 500+ regul do fw;]
Dodajac do tego --connlimit-mask 32?
no to: iptables -I FORWARD -p tcp -s 192.168.0.0/23 -o eth0 --dport 1024:65535 -m connlimit --connlimit-above 20 -j DROP
teraz tak, czy ta regula ogranicza połączenia do 20 dla calej podsieci? czy tez 20 na ip w tej podsieci? intersuje mnie aby kazdy ip z tej podsieci mogl nawiazac maksymalnie do 20 polaczen na portach które wymieniłem wczesniej.
Znasz może jeszcze inne sposoby na ograniczenie p2p? w mojej sieci generuje to bardzo duzy ruch i obciazenie sprzetu.
Pozdrawiam