web-dev-qa-db-fra.com

L'IPTABLE HASHLIMIT Taux ne fonctionne pas comme prévu

J'ai écrit la règle de pare-feu suivante:

iptables -a entrée -M Hashlimit --Hashlimit 1/heure --Hashlimit-Burst 3 --Hashlimit-Mode SRCIP, DSTPORT --Hashlimit-Name SSH -J Accepter

Je m'attendais à ce que la rafale soit rechargée par 1 après une heure, mais en réalité, elle est rechargée d'un peu plus tôt qu'une minute. J'envoie des messages à partir du même port IP source et de même destination, je m'attendais donc à accepter 3 connexions puis 1 par heure. Mais cela accepte davantage (une toutes les 20-30 secondes). Si j'utilise - Limite 1/heure Je peux observer le comportement attendu, mais je dois utiliser Hashlimit car je dois filtrer par SRCIP et DSTPort. Qu'est-ce que je fais mal? Merci!

1
Harry

Je pense que vous rencontrez des entrées expirantes. Un exonéré du mec:

  --hashlimit-burst amount
         Maximum initial number of packets to match: this number gets recharged by
         one every time the limit specified above is not reached, up to this number;
         the default  is  5. When  byte-based rate matching is requested, this
         option specifies the amount of bytes that can exceed the given rate.
         This option should be used with caution -- if the entry expires, the burst
         value is reset too.

Et la quantité de temps que toute entrée de hachage est enregistrée est spécifiée avec l'option --hashlimit-htable-expire. Je ne sais pas quelle est la valeur par défaut de cette entrée, mais je suppose que c'est beaucoup plus court qu'une heure, ce qui expliquerait pourquoi vous pouvez connecter plus vite que le montant attendu.

Vous devriez envisager de régler ces valeurs d'autres, ce qui permet à une minute par exemple - dans ce cas, votre serveur doit uniquement se souvenir de la DMI de la dernière minute, et non la dernière heure d'IPS.

0
Martin