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!
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.