Nous avons un serveur Ubuntu 12.04 avec httpd sur le port 80 et nous voulons limiter:
- le nombre maximal de connexions par adresse IP entre httpd et 10
- le maximum de nouvelles connexions par seconde à httpd à 150
Comment pouvons-nous faire cela avec iptables?
-m conntrack --ctstate
à la place de-m state --state
. conntrack est nouveau et amélioré par rapport à l'état.NEW
connexions - ne faites pas cela - il transforme effectivement votreINPUT
chaîne en défautaccept
!!!Vous voulez que les règles suivantes dans votre iptables répondent aux deux exigences de votre question:
Parce que nous utilisons -I (conformément à la demande OP), nous devons les faire dans l’ordre inverse afin de les «lire» de bas en haut.
Je suggère également d’envisager une modification de --connlimit-mask NN de 32 à 24. Ceci limitera un réseau complet de classe C (maximum 256 adresses IP dans la même plage) à 10 connexions. Vous pouvez également utiliser n'importe quel autre nombre sans classe comme 22 ou 30, selon la manière dont votre service pourrait être utilisé.
En fonction de la manière dont vous souhaitez que le client se comporte, vous pouvez également utiliser "-j REJECT --reject-with tcp-reset" au lieu de "-j DROP" dans les deux règles ci-dessus, ou même dans les 150 connexions max. règle.
Si vous REFUSEZ la connexion, le navigateur ou le logiciel utilisant le port 80 affichera immédiatement le statut "non disponible", mais l'option DROP fera attendre et réessayer le client plusieurs fois avant de signaler le site comme non disponible. J'ai tendance à m'appuyer moi-même sur DROP, qui se comporte davantage comme une mauvaise connexion que comme un serveur hors ligne.
De plus, si la limite de connexion redescend en dessous de 150 (ou 10) alors que la tentative est en cours, le serveur parviendra à son tour.
L'option REJECT entraînera une fraction de moins de trafic sur votre site, car DROP lui enverra des paquets supplémentaires pendant ses tentatives. Probablement pas tout ce qui est pertinent.
Si, en revanche, le trafic du port 80 fait partie d'un cluster, REJECT informe alors le contrôleur de cluster de son arrêt et arrête de lui envoyer du trafic pendant la durée de son délai d'attente avant tentative.
La règle RELATED, ESTABLISHED est présente dans l'hypothèse où votre règle par défaut consiste à bloquer tout le trafic (iptables -t filter -P INPUT DROP). Cela accepte uniquement les paquets appartenant aux connexions acceptées.
De plus, --syn lui dit de faire attention (ou de compter) les paquets qui établissent une connexion TCP.
la source
Vous devez utiliser les
connlimit
modules, ce qui vous permet de limiter le nombre de connexions TCP parallèles à un serveur par adresse IP client (ou bloc d'adresse).la source