Wie soll Connlimit in Iptables funktionieren?

Wie soll Connlimit in Iptables funktionieren?

Ich wollte die Anzahl gleichzeitiger Verbindungen auf meinem Webserver begrenzen. Ich habe die folgenden Regeln auf einem iptables (v1.4.19.1) Kernel 3.14.4-200.fc20.x86_64 mit einer Standard-DROP-Richtlinie für die INPUT-Kette unter der filterTabelle ausprobiert:

-A INPUT -p tcp --dport 80 -m connlimit --connlimit-upto 10 -j WEB
-A WEB -j ACCEPT

Dann habe ich den Server mithilfe des Apache-Benchmarks mit 50 gleichzeitigen Verbindungen aufgerufen:

$ ab -kc 50 -t 10 http://mysite.com/

Wenn ich mir jedoch mein Serverzugriffsprotokoll anschaue, sehe ich immer noch einige hundert Zeilen erfolgreicher Anfragen. Ich erwarte, dass die connlimitRegel greift und alle Verbindungen trennt. Stimmt etwas mit meinen Regeln oder meiner Interpretation gleichzeitiger Verbindungen nicht?

Antwort1

Nach vielen Tests habe ich festgestellt, dass eine Standard-Drop-Policy nicht ausreicht.

*filter
-F
-X
:INPUT DROP [0:0]

Es ist sehr wichtig, nicht davon auszugehen, dass sie befolgt wird. Die connlimitRegel würde nur dann greifen, wenn SieausdrücklichFügen Sie am Ende der Kette eine Drop-Regel hinzu:

-A INPUT -j DROP

Es funktioniert jetzt sogar bei einer geringeren Parallelität als dem angegebenen Limit:

$ ab -kc 7 -t 6 http://mysite.com/
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking mysite.com (be patient)
apr_pollset_poll: The timeout specified has expired (70007)

Das Wichtigste ist, zu testen. Ich bin mir jedoch nicht sicher, ob Sie dies als Fehler einstufen würden.

verwandte Informationen