OVH Community, your new community space.

Ograniczenie połączeń z każdego IP na dany port


victor
28-01-2013, 07:30
Zredukuj do sekund /proc/sys/net/ipv4/tcp_fin_timeout bo domyslnie jest 30m. Także są jakieś mechanizmy do włączenia reusowania socketów aby zminimalizować straty zasobów systemowych. Dalej możesz poszukać coś o tarpit, ale nie ma sensowych i stabilnych implementacji tego z tego co pamiętam.

desavil
27-01-2013, 16:41
Postanowiłem również spróbować z hashlimit i nic.. Zmieniłem również tcp_fin_timeout na 15s.

Nie mam pomysłu jak sobie poradzić z tym DOS'em, poniżej przesyłam kilka logów.
Wycięte dla 1 adresu IP atakującego (31.19.XXX.XXX):
Kod:
    4 SYN_RECV
    1 CLOSE_WAIT
 1002 TIME_WAIT
    1 ESTABLISHED
Kod:
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51436      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51546      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51427      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:52266      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:52191      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:52043      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51502      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:52056      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51789      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51552      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:52239      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51326      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51720      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51939      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:52316      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:52177      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:52063      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51386      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51900      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51925      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51582      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:51661      TIME_WAIT   -
tcp        0      0 failover-mojego-dedyka:10152     31.19.XXX.XXX:52230      TIME_WAIT   -
itd...
Kod:
17:39:13.072592 IP 31-19-XXX-XXX-dynip.superkabel.de.55435 > failover-mojego-dedyka.10152: Flags [S], seq 2865904364, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
17:39:13.072630 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55435: Flags [S.], seq 2368716270, ack 2865904365, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
17:39:13.098139 IP 31-19-XXX-XXX-dynip.superkabel.de.55435 > failover-mojego-dedyka.10152: Flags [.], ack 1, win 16425, length 0
17:39:13.102935 IP 31-19-XXX-XXX-dynip.superkabel.de.55435 > failover-mojego-dedyka.10152: Flags [P.], seq 1:615, ack 1, win 16425, length 614
17:39:13.102946 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55435: Flags [.], ack 615, win 124, length 0
17:39:13.109155 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55435: Flags [P.], seq 1:174, ack 615, win 124, length 173
17:39:13.109168 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55435: Flags [F.], seq 174, ack 615, win 124, length 0
17:39:13.138651 IP 31-19-XXX-XXX-dynip.superkabel.de.55435 > failover-mojego-dedyka.10152: Flags [.], ack 175, win 16381, length 0
17:39:13.142423 IP 31-19-XXX-XXX-dynip.superkabel.de.55435 > failover-mojego-dedyka.10152: Flags [F.], seq 615, ack 175, win 16381, length 0
17:39:13.142442 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55435: Flags [.], ack 616, win 124, length 0
17:39:13.160391 IP 31-19-XXX-XXX-dynip.superkabel.de.55436 > failover-mojego-dedyka.10152: Flags [S], seq 1990334108, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
17:39:13.160425 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55436: Flags [S.], seq 2544355765, ack 1990334109, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
17:39:13.191191 IP 31-19-XXX-XXX-dynip.superkabel.de.55436 > failover-mojego-dedyka.10152: Flags [.], ack 1, win 16425, length 0
17:39:13.194470 IP 31-19-XXX-XXX-dynip.superkabel.de.55436 > failover-mojego-dedyka.10152: Flags [P.], seq 1:616, ack 1, win 16425, length 615
17:39:13.194481 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55436: Flags [.], ack 616, win 124, length 0
17:39:13.196364 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55436: Flags [P.], seq 1:174, ack 616, win 124, length 173
17:39:13.196376 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55436: Flags [F.], seq 174, ack 616, win 124, length 0
17:39:13.228175 IP 31-19-XXX-XXX-dynip.superkabel.de.55436 > failover-mojego-dedyka.10152: Flags [.], ack 175, win 16381, length 0
17:39:13.232395 IP 31-19-XXX-XXX-dynip.superkabel.de.55436 > failover-mojego-dedyka.10152: Flags [F.], seq 616, ack 175, win 16381, length 0
17:39:13.232412 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55436: Flags [.], ack 617, win 124, length 0
17:39:13.240425 IP 31-19-XXX-XXX-dynip.superkabel.de.55437 > failover-mojego-dedyka.10152: Flags [S], seq 1218607434, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
17:39:13.240465 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55437: Flags [S.], seq 3133846583, ack 1218607435, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
17:39:13.270718 IP 31-19-XXX-XXX-dynip.superkabel.de.55437 > failover-mojego-dedyka.10152: Flags [.], ack 1, win 16425, length 0
17:39:13.275257 IP 31-19-XXX-XXX-dynip.superkabel.de.55437 > failover-mojego-dedyka.10152: Flags [P.], seq 1:615, ack 1, win 16425, length 614
17:39:13.275269 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55437: Flags [.], ack 615, win 124, length 0
17:39:13.280927 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55437: Flags [P.], seq 1:174, ack 615, win 124, length 173
17:39:13.280940 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55437: Flags [F.], seq 174, ack 615, win 124, length 0
17:39:13.310478 IP 31-19-XXX-XXX-dynip.superkabel.de.55437 > failover-mojego-dedyka.10152: Flags [.], ack 175, win 16381, length 0
17:39:13.314620 IP 31-19-XXX-XXX-dynip.superkabel.de.55437 > failover-mojego-dedyka.10152: Flags [F.], seq 615, ack 175, win 16381, length 0
17:39:13.314637 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55437: Flags [.], ack 616, win 124, length 0
17:39:13.366537 IP 31-19-XXX-XXX-dynip.superkabel.de.55438 > failover-mojego-dedyka.10152: Flags [S], seq 2166330047, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
17:39:13.366569 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55438: Flags [S.], seq 1764075612, ack 2166330048, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
17:39:13.396299 IP 31-19-XXX-XXX-dynip.superkabel.de.55438 > failover-mojego-dedyka.10152: Flags [.], ack 1, win 16425, length 0
17:39:13.400987 IP 31-19-XXX-XXX-dynip.superkabel.de.55438 > failover-mojego-dedyka.10152: Flags [P.], seq 1:616, ack 1, win 16425, length 615
17:39:13.401004 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55438: Flags [.], ack 616, win 124, length 0
17:39:13.402430 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55438: Flags [P.], seq 1:174, ack 616, win 124, length 173
17:39:13.402444 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55438: Flags [F.], seq 174, ack 616, win 124, length 0
17:39:13.427366 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55401: Flags [S.], seq 926678527, ack 2929900233, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
17:39:13.436124 IP 31-19-XXX-XXX-dynip.superkabel.de.55438 > failover-mojego-dedyka.10152: Flags [.], ack 175, win 16381, length 0
17:39:13.440214 IP 31-19-XXX-XXX-dynip.superkabel.de.55438 > failover-mojego-dedyka.10152: Flags [F.], seq 616, ack 175, win 16381, length 0
17:39:13.440239 IP failover-mojego-dedyka.10152 > 31-19-XXX-XXX-dynip.superkabel.de.55438: Flags [.], ack 617, win 124, length 0
I co tutaj mogę zrobić...

desavil
25-01-2013, 16:21
@refresh

desavil
23-01-2013, 15:32
Cytat Napisał borec
Chodzi Ci chyba o hashlimit.
Z hashlimit pokombinuję później. Na razie chcę tylko ograniczyć do 5 połączeń z jednego IP na dany port.

Próbowałem jeszcze zrobić tak:
Kod:
iptables -A INPUT -p tcp --syn --dport 6666 -m connlimit --connlimit-above 5 -j REJECT
i tak:
iptables –A INPUT –p tcp --syn –dport 6666–m connlimit ! --connlimit-above 5 –m state --state NEW -j ACCEPT
Ale nic to nie daje, nawet po wprowadzeniu reguły z atakującego IP raz jest 550 połączeń, raz skacze nagle do 610 i tak cały czas. A regułka znajduje się na początku firewalla jak i próbowałem dodać z opcją -I z konsoli.

iptables v1.4.8 / Debian 6.0 64bit / kernel (bez grsec): 3.2.13-xxxx-std-ipv6-64

Dodam, jeszcze że takich adresów IP jest ok 5-10 i na każdym z nich ponad 100 połączeń do 1k, na port mojego serwera. Jak jakiś zablokuję to najczęściej na jego miejsce zaraz trafia inny adres IP lub kilka nowych innych i znów z tak dużą liczbą połączeń, więc DROPowanie nie ma sensu.

borec
23-01-2013, 10:50
Chodzi Ci chyba o hashlimit.

desavil
22-01-2013, 22:18
Ostatnio mam małe problemy z atakami typu DOS w połączeniu z spoof IP.
Głównie setki połączeń typu TIME_WAIT na dany port. Myślę nad rozwiązaniem, aby ograniczyć maksymalną ilość połączeń z każdego adresu IP łączącego się na dany port do maksymalnie 5 jednoczesnych połączeń, w iptables wykombinowałem takie coś:
Kod:
iptables -I INPUT -p tcp --dport 6666 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --syn --dport 6666 -m connlimit --connlimit-above 5 -j REJECT
Nie jestem pewny czy jest to poprawne, niby działa a czasami nie - co przez to rozumiem? Raz połączenia mimo dodania regułki nadal rosną, niektóre spadają lub nie, staje się również tak że nagle wszystkie połączenia co widać, że z nich były ataki zostają przerwane.

Prosiłbym o radę, może można to zrobić w inny sposób lepiej nie koniecznie ograniczając do 5 połączeń (jak ktoś ma NAT i np. jakąś radiówkę i wszyscy będą korzystać z tego portu, to będzie problem).

Pozdrawiam!