Ratelimiting på Linux

Linie 2 matcher kun 10 pakker i sekundet, med en burst på 20 (forklaret længere nede) og disse jumpes til accept. Resten fortsætter i tabellen, hvor man så kan gøre andet med den – f.eks. logge den.

iptables -N RateLimit
iptables -A RateLimit –match hashlimit –hashlimit-mode srcip –hashlimit-upto 10/sec –hashlimit-burst 20 –hashlimit-name conn_rate_limit –jump ACCEPT
iptables -A RateLimit –jump DROP

iptables -A INPUT –match conntrack –ctstate NEW –jump RateLimit

Burst er grænsen for hvor mange forbindelser der kan være bagud. Hvis f.eks. du ikke har haft trafik i flere timer kan du kortvarigt have flere tusind requests uden at komme over 10req/s hvis man ser på det over f.eks. en hel dag. Derfor fungerer det på den måde at hver ip adresse har en konto, og på denne bliver der sat 10 tokkens ind per sekund, og hvergang en forbindelse smutter igennem fjernes en tokken. Denne konto har i vores eksempel et max på 20 tokkens. Det betyder at når den grænse er nået sættes der ikke flere tokkens ind.

Test:
https://www.petefreitag.com/item/689.cfm

# ab -n 100 -c 10 http://renesejling.mikjaer.com/ 2>1 | grep “Requests per second”
Requests per second: 12.43 [#/sec] (mean)

Noter:
https://making.pusher.com/per-ip-rate-limiting-with-iptables/

Dette indlæg blev udgivet i Knowledge Base, Linux, Networking. Bogmærk permalinket.

Skriv et svar