Sie möchten, dass die folgenden Regeln in Ihren iptables beide Anforderungen in Ihrer Frage beantworten:
iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 80 -m state \
--state RELATED,ESTABLISHED -j ACCEPT
# Adjust "--connlimit-above NN" to limit the maximum connections per IP
# that you need.
iptables -t filter -I INPUT -p tcp --syn --dport 80 -m connlimit \
--connlimit-above 10 --connlimit-mask 32 -j DROP
# Adjust "--connlimit-above NNN" to the maximum total connections you
# want your web server to support
iptables -t filter -I INPUT -p tcp --syn --dport 80 -m connlimit \
--connlimit-above 150 -j DROP
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.