Wir haben einen Ubuntu 12.04 Server mit httpd auf Port 80 und wir wollen einschränken:
- die maximalen Verbindungen pro IP-Adresse zu httpd bis 10
- die maximale Anzahl neuer Verbindungen pro Sekunde zu httpd bis 150
Wie können wir das mit iptables machen?
-m conntrack --ctstate
anstelle von-m state --state
. conntrack ist neu und verbessert gegen state.NEW
Verbindungen - tun Sie das nicht - es macht IhreINPUT
Kette effektiv zu einem Standardaccept
!!!Sie möchten, dass die folgenden Regeln in Ihren iptables beide Anforderungen in Ihrer Frage beantworten:
Da wir -I (gemäß der OP-Anforderung) verwenden, müssen wir sie in umgekehrter Reihenfolge ausführen, um sie von unten nach oben zu "lesen".
Ich schlage auch vor, die Änderung von --connlimit-mask NN von 32 auf 24 zu berücksichtigen. Dadurch wird ein vollständiges Class-C-Netzwerk (max. 256 IP-Adressen im gleichen Bereich) auf 10 Verbindungen begrenzt. Sie können auch eine andere klassenlose Nummer wie 22 oder 30 verwenden, je nachdem, wie Ihr Dienst Ihrer Meinung nach verwendet wird.
Abhängig davon, wie sich der Client verhalten soll, können Sie auch "-j REJECT --reject-with tcp-reset" anstelle von "-j DROP" in den beiden obigen Regeln oder sogar nur in den max. 150 Verbindungen verwenden Regel.
Wenn Sie die Verbindung ABLEHNEN, zeigt der Browser oder die Software, die Port 80 verwendet, sofort den Status "Nicht verfügbar" an, aber die DROP-Option veranlasst den Client, einige Male zu warten und es erneut zu versuchen, bevor die Site als nicht verfügbar gemeldet wird. Ich neige dazu, mich selbst an den DROP zu lehnen, da er sich eher wie eine schlechte Verbindung als wie ein Offline-Server verhält.
Wenn das Verbindungslimit wieder unter 150 (oder 10) fällt, während es noch versucht, wird es schließlich zu Ihrem Server durchgeleitet.
Die Option REJECT verursacht jedoch einen Bruchteil des Datenverkehrs auf Ihrer Site, da DROP dazu führt, dass zusätzliche Pakete gesendet werden, während der Versuch wiederholt wird. Wahrscheinlich nicht so relevant.
Wenn Ihr Port 80-Datenverkehr andererseits Teil eines Clusters ist, teilt REJECT dem Cluster-Controller mit, dass er nicht aktiv ist, und beendet das Senden von Datenverkehr an ihn für die Dauer des Zeitlimits für Wiederholungsversuche.
Die RELATED, ESTABLISHED-Regel gibt es unter der Annahme, dass Ihre Standardregel den gesamten Datenverkehr blockiert (iptables -t filter -P INPUT DROP). Dies akzeptiert nur weitere Pakete, die zu akzeptierten Verbindungen gehören.
Außerdem weist --syn es an, auf die Pakete zu achten (oder diese zu zählen), die eine TCP-Verbindung herstellen.
quelle
Sie müssen die
connlimit
Module verwenden, mit denen Sie die Anzahl der parallelen TCP-Verbindungen zu einem Server pro Client-IP-Adresse (oder Adressblock) beschränken können.quelle