Question Comment utiliser iptables ou tc pour limiter les paquets par client.


J'ai des problèmes avec les clients du réseau qui envoient des données trop rapidement.

Je veux les ralentir, en utilisant iptables, ou éventuellement tc.

J'ai vu des solutions iptables comme:

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 50/second --limit-burst 50 -j ACCEPT

mais je pense que la limite s'applique à tout ce qui correspond à la règle, plutôt que par adresse client.

Existe-t-il un moyen de limiter le nombre de paquets à cette règle par adresse du client?


5
2018-02-04 15:11


origine


si vous connaissez l'adresse IP spécifique, établissez une règle pour chacun d'eux - chicks


Réponses:


vous pouvez résoudre ce problème de manière simple, essayez d’utiliser le module récent avec iptables, gardez une trace récente de l’adresse source:

iptables -m recent -h
recent match options:
[!] --set                       Add source address to list, always matches.
[!] --rcheck                    Match if source address in list.
[!] --update                    Match if source address in list, also update last-seen time.
[!] --remove                    Match if source address in list, also removes that address from list.
    --seconds seconds           For check and update commands above.
                                Specifies that the match will only occur if source address last seen within
                                the last 'seconds' seconds.
    --reap                      Purge entries older then 'seconds'.
                                Can only be used in conjunction with the seconds option.
    --hitcount hits             For check and update commands above.
                                Specifies that the match will only occur if source address seen hits times.
                                May be used in conjunction with the seconds option.
    --rttl                      For check and update commands above.
                                Specifies that the match will only occur if the source address and the TTL
                                match between this packet and the one which was set.
                                Useful if you have problems with people spoofing their source address in order
                                to DoS you via this module.
    --name name                 Name of the recent list to be used.  DEFAULT used if none given.
    --rsource                   Match/Save the source address of each packet in the recent list table (default).
    --rdest                     Match/Save the destination address of each packet in the recent list table.
    --mask netmask              Netmask that will be applied to this recent list.

exemple pour bloquer la force brute de ssh:

iptables -A INPUT -i eth0 -p tcp --syn --dport 22 -m recent --name ssh --set
iptables -A INPUT -i eth0 -p tcp --syn --dport 22 -m recent --name ssh --rcheck --seconds  30 --hitcount 2 -j DROP

3
2018-02-04 18:49





J'ai fait cela en utilisant une combinaison de TC et iptables hashlimit. J'ai créé un limiteur de bande passante TC sortant sur l'interface LAN (pour cibler le trafic de téléchargement) à 5 Mbits / seconde. J'utilise ensuite le module iptables hashlimit dans la chaîne de sortie de l'interface de sorte que, si le débit des paquets dépasse un certain seuil, entre deux adresses IP source et de destination distinctes, il commence à classer ces paquets dans la classe de mise en forme du trafic du TC 5 Mbit / s .

Cependant, vous devez définir le seuil de paquet correctement, et j’ai fondé le mien sur le fait que mon MTU est de 1 500 octets. Nous l’avons donc utilisé pour calculer le nombre de paquets par seconde qui créerait un seuil de 1,5 Mbits par seconde (1 000 paquets / seconde). ). Couplé à la définition de la valeur de rafale la plus élevée possible sur le module hashlimit iptables (qui, selon ma configuration, semble être de 10 000), le résultat de tout cela est que les téléchargements courts s’exécutent à toute vitesse, mais que les plus longs commencent à ralentir passé dans la classe de limitation de bande passante de TC, qui réduit alors évidemment le débit de paquets, etc. etc. C'est un peu un bidouillage, mais étonnamment, cela fonctionne, et cela fonctionne bien. Et parce que TC est utilisé, aucun paquet n'est jamais abandonné - simplement retardé et ralenti en raison de son transfert dans la classe TC une fois que le débit de paquets est atteint.

Ceci est sur une boîte CentOS 6. Je pense que les solutions les plus modernes permettent au module hashlimit de prendre en charge des octets par seconde, pas seulement des paquets par seconde, ce qui est encore mieux, mais j’ai essayé cela avec ma configuration et il revient simplement à utiliser des paquets par seconde.

Je suis sur un téléphone mobile en ce moment, donc je ne peux coller aucune configuration, mais si vous voulez des exemples, faites-le-moi savoir et je modifierai cette réponse. J'aime beaucoup cette solution car la limitation que j'ai choisie est basée sur l'IP source et la destination. Le système voit donc chaque combinaison distincte IP src + dst comme son propre flux de paquets à limiter. Le module hashlimit prend également en charge les ports source et de destination (essentiellement toute combinaison d’adresse IP source, port source, adresse IP de destination, port de destination), de sorte que vous pouvez même limiter la session par session entre IP source + port et IP + port de destination. .

METTRE À JOUR

Vous trouverez ci-dessous à peu près comment vous le faites. l'expérimentation sera nécessaire.

tc:

/sbin/tc qdisc add dev eth0 root handle 1: htb
/sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 5Mbit

iptables:

#!/bin/bash

[[ "$1" =~ ^[ADI]$ ]] || exit 1

for IPT in /sbin/ip{,6}tables
do
  $IPT -t mangle -$1 POSTROUTING -o eth0 -m hashlimit --hashlimit-above 1000/second --hashlimit-burst 10000 --hashlimit-mode srcip,dstip --hashlimit-name limiter -j CLASSIFY --set-class 1:1
done

3
2018-02-04 21:06





Vous pourrez peut-être résoudre cela en utilisant le module connlimit:

http://www.cyberciti.biz/faq/iptables-connection-limits-howto/


0
2018-02-04 18:38



S'il vous plaît ne pas fournir des réponses "lien seulement". - gf_