web-dev-qa-db-fra.com

Comment limiter les connexions à 1 connexion sur 5 secondes? (IPTABLES)

Je mène le serveur dans le jeu, qui ont cassé AntyCheat et s'il y a beaucoup de connexions en une fois, cela casse tout le serveur et personne ne peut se connecter. La solution consiste donc à limiter les connexions en une fois à 1 connexion sur 5 secondes à l’aide de IPTables. Il devrait ressembler à: 1 joueur -> 5 secondes -> 2 joueur -> 5 secondes (si l’un se connecte, il doit arrêter l’autre pendant 5 secondes)

1
onStyle

Pour cet exemple de réponse, le protocole est TCP, et d'autres informations ont été extraites des commentaires. Ajuste en accord.

Ce premier exemple donnera en moyenne 5 secondes entre les connexions uniquement:

Sudo iptables -A INPUT -i eth0 -m state --state NEW -p tcp -m limit --limit 12/minute --dport 12871 -j ACCEPT
Sudo iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 12871 -j DROP

Ce deuxième exemple nécessitera exactement 5 secondes entre les tentatives de connexion, sans aucune autre tentative de nouvelle connexion pendant ces 5 secondes. c'est-à-dire qu'une tentative pendant ces 5 secondes réinitialisera le compteur de temps.

Sudo iptables -A INPUT -i eth0 --protocol tcp --destination-port 12871 -m state --state NEW -m recent --mask 0.0.0.0 --update --hitcount 1 --seconds 5 --name LIMIT_NEW_RATE -j DROP
Sudo iptables -A INPUT -i eth0 --protocol tcp --destination-port 12871 -m state --state NEW -m recent --mask 0.0.0.0 --set --name LIMIT_NEW_RATE -j ACCEPT

Vous devrez déterminer où cette règle doit s’inscrire dans le contexte général de vos règles iptables.

0
Doug Smythies

Utilisation du module connlimit et limit:

Sudo iptables -A INPUT -p tcp --syn -i eth0 --dport 12871:12881 -m connlimit --connlimit-above 1 --connlimit-mask 24 -j REJECT --reject-with tcp-reset    
Sudo iptables -A INPUT --dport 12871:12881 -m state --state RELATED,ESTABLISHED -m limit --limit 12/minute --limit-burst 1 -j ACCEPT 
Sudo iptables -A INPUT -p tcp --dport 12871:12881 -i eth0 -m state --state NEW -m recent --set
Sudo iptables -A INPUT -p tcp --dport 12871:12881 -i eth0 -m state --state NEW,RELATED,ESTABLISHED -m recent --update --seconds 5 --hitcount 1 -j DROP

Puis appliquez de nouvelles règles:

Sudo iptables-save > /etc/iptables/rules.v4

Installez le paquet persistant iptables:

Sudo apt install iptables-persistent
Sudo service netfilter-persistent reload

Remarque:

  • Changez le nom de l'interface en votre nom
  • Ajoutez votre plage de ports
  • Ceci s'ajoute à la règle existante, vous pouvez donc utiliser -I pour placer ces règles au premier plan.
1
George Udosen