Limit prędkości/pakietów na adres IP

Szymonjjay | 2020-06-11 21:58:39 UTC | #1

Dzień dobry
Chcę zabezpieczyć serwer przed zapychaniem łącza i przychodzę do was z zapytaniem: Czy ktoś umie lub czy posiada ktoś jakieś gotowe rozwiązanie na ustawienie sztywnego limitu prędkości lub też limit przesyłanych pakietów dla każdego pojedyńczego połączonego z osobna IP z serwerem VPS?
Byłbym wam bardzo wdzięczny.


Axerr | 2020-06-11 22:24:45 UTC | #2

Masz na myśli transfer plików czy pojedyncze pakiety?
IPTables powinno dać radę.


Szymonjjay | 2020-06-11 23:02:09 UTC | #3

Pakiety. Jak ktoś wyśle więcej niż jest ustawione to serwer je odrzuci.


Axerr | 2020-06-11 23:47:57 UTC | #4

sudo iptables -N PACKET-LIMIT
sudo iptables -A PACKET-LIMIT -m limit --limit 50/s --limit-burst 0 -j ACCEPT
sudo iptables -A PACKET-LIMIT -j DROP
sudo iptables -A INPUT -j PACKET-LIMIT

Tutaj masz przykład 50 pakietów na sekundę, reszta jest odrzucana przez serwer.


Szymonjjay | 2020-06-12 14:05:13 UTC | #5

Bardzo dziękuje, ale pomyślałem, że może ktoś wysłać mniej pakietów, ale dużo dużo większych. Da się jakoś ustawić maksymalną wielkość?


Axerr | 2020-06-12 14:19:30 UTC | #6

Dodawanie takich ograniczeń za pomocą iptables może być trudne.
Spróbuj zedytować/napisać/znaleźć jakąś wtyczkę (która sprawdzałaby wielkość pakietu i odrzucała go) do aplikacji/gry którą chcesz zabezpieczyć.


SystemZ | 2020-06-12 18:37:23 UTC | #7

[quote=”Axerr, post:6, topic:15106”]
Dodawanie takich ograniczeń za pomocą iptables może być trudne.
[/quote]

Niekoniecznie, wystarczy to wyliczyć jeśli znamy protokół i chcemy blokować po ilości pakietów w czasie.
@Nieznajomy11 masz jakieś konkretne dane odnośnie wielkości pakietów? Domyślam się że chodzi tu o MC

[quote=”Axerr, post:6, topic:15106”]
Spróbuj zedytować/napisać/znaleźć jakąś wtyczkę (która sprawdzałaby wielkość pakietu i odrzucała go) do aplikacji/gry którą chcesz zabezpieczyć.
[/quote]

To jest zdecydowanie mniej wydajne, prawdopodobnie taka sytuacja ma już właśnie miejsce i silnik gry po prostu nie wyrabia.


Nieznajomy11 | 2020-06-12 20:20:41 UTC | #8

[quote=”SystemZ, post:7, topic:15106”]
masz jakieś konkretne dane odnośnie wielkości pakietów? Domyślam się że chodzi tu o MC
[/quote]

Wszystko zależy od ustawionej kompresji, same pakiety przy normalnym ustawieniu to zazwyczaj długość do około 1200 bajtów, ale bywa i czasami powyżej 2000. Wszystko zależy od typu pakietu i treści, są np. pakiety z książkami jako itemek albo pakiet zmiany zawartości, które mogą mieć dużo więcej. Jeśli jakiś plugin dorzuca NBT, to itemki mogą mieć też inny rozmiar i wpłyną na pakiety.

Generalnie moim zdaniem niekoniecznie to pomoże z atakami, przy takim ustawieniu “na sucho”. To samo ten limit ilości pakietów po stronie iptables jest całkowicie bez sensu, klient na lagu może przyspamić 2000 pakietów ruchu i nie będzie to problem, ale już tyle samo pakietów “groźniejszego typu” ubije serwer całkowicie albo na parę sekund.


Szymonjjay | 2020-06-15 16:56:41 UTC | #9

Masz może jakiś lepszy pomysł?


Szymonjjay | 2020-06-20 21:23:34 UTC | #10

Wydaje mi się, że ustawienie limitu prędkości pobierania i wysyłu Klient <-> Serwer będzie najlepszym rozwiązaniem. Wiem, że można to zrobić globalnie dla całego interfejsu sieciowego, ale nie dla każdego z osobna przy użyciu tc. Może zna ktoś z was jakiś gotowy skrypt na takowy limit?


Axerr | 2020-06-21 17:53:38 UTC | #11

https://askubuntu.com/questions/486081/how-do-i-write-an-iptables-rule-to-limit-internet-bandwidth-usage-of-user-or-ip

https://unix.stackexchange.com/questions/183593/limit-transfer-speed-rate-by-iptables-rules

https://serverfault.com/questions/384132/iptables-limit-rate-of-a-specific-incoming-ip


system | 2020-07-23 18:01:15 UTC | #12

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.