Limitation de débit avec UFW: définition de limites

22

La page de manuel d'UFW mentionne qu'elle peut configurer la limitation de débit iptables pour moi:

ufw prend en charge la limitation du taux de connexion, ce qui est utile pour se protéger contre les attaques par connexion par force brute. ufw refusera les connexions si une adresse IP a tenté d'initier 6 connexions ou plus au cours des 30 dernières secondes. Voir http://www.debian-administration.org/articles/187 pour plus de détails. L'utilisation typique est:

     ufw limit ssh/tcp

Malheureusement, c'est toute la documentation que j'ai pu trouver. Je voudrais m'en tenir à UFW, et ne pas utiliser de commandes iptables plus compliquées (pour garder les choses "simples").

Comment utiliser ufw pour limiter tout le trafic entrant (donc pas sortant) sur le port 80 à 20 connexions par 30 secondes? Comment désactiver la limitation de débit pour les ports 30000 à 30005? La limitation du débit est-elle activée par défaut pour tous les ports?

À M
la source

Réponses:

21

UFW est conçu pour être «simple», ce qui signifie dans ce cas que vous n'avez pas le contrôle sur les détails de la vitesse à laquelle les connexions sont limitées. Si vous souhaitez creuser dans la source Python d'UFW, vous pouvez découvrir comment la modifier. Les informations appropriées sont (sur mon système Ubuntu 10.04) dans/usr/share/pyshared/ufw/backend_iptables.py

En mettant de côté le problème de synchronisation, voici donc quelques réponses à vos questions à tir rapide à la fin.

  1. En supposant que 10.10.10.0/24 est votre réseau local, cela applique la règle de limitation par défaut au port 80 / tcp entrant:

    ufw limit proto tcp from any port 80 to 10.10.10.0/24
    
  2. et 3. La limitation de débit n'est pas activée par défaut. Pour l'ajouter à chaque port (de destination) à l'exception de la plage souhaitée, utilisez cette règle. Notez que les règles (même avec des plages) sont des unités atomiques et ne peuvent pas être divisées. Vous ne pouvez pas, par exemple, ajouter une règle pour un port, puis deleteune règle (inexistante) pour une plage particulière pour la supprimer. limitn'est pas non plus un argument acceptable ufw default.

    ufw limit from any to any port 0:29999,30006:65535
    
bonsaiviking
la source
Est-ce à dire que le taux ne peut jamais être fixé?
Tom
2
Pas sans pirater la source, du moins pas pour UFW 0.30pre1-0ubuntu2, qui est courant pour Ubuntu 10.04. D'après l'aspect des choses dans la source actuelle , cela n'a pas changé. Vous pouvez cependant mettre des règles iptables dans /etc/ufw/after.rules (ou /etc/ufw/before.rules), et celles-ci seront également utilisées. Voir man ufw-framework pour plus d'informations.
bonsaiviking
@bonsaiviking Est-il possible iptable, si oui, alors iptable est le backend d'ufw.
Nullpointer
6

Comme mentionné dans le post précédent, vous pouvez personnaliser les règles utilisateur. J'ai besoin de ma limite de débit de connexion smtp jusqu'à 12 connexions en 6 secondes. J'ai ajouté une règle comme indiqué ci-dessous en premier. Remarque: cela ajoute une règle de limite autorisant 6 en 30 secondes par défaut

ufw limit smtp

et j'ai édité le /lib/ufw/user.rules (je garde une copie personnalisée de ce fichier avec beaucoup d'autres réglages) comme indiqué ci-dessous ...

### tuple ### limit tcp 25 0.0.0.0/0 any 0.0.0.0/0 in
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --set
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --update --seconds 6 --hitcount 12 -j ufw-user-limit
-A ufw-user-input -p tcp --dport 25 -j ufw-user-limit-accept
Arul Selvan
la source
J'ai trouvé user.rules dans / etc / ufw
Otto Kanellis
5

la limite de débit peut être modifiée dans le fichier de règles ufw qui se trouve /lib/ufw/user.rules. par défaut, aucune limite n'est activée pour tous les ports. vous devez ajouter chaque port manuellement ou en modifiant le fichier user.rules.

cikuraku
la source
1

Il vaut la peine de signaler les conséquences involontaires possibles de l'utilisation de la fonction LIMIT d'ufw.

Supposons que l'on place une limite de couverture sur le port 22 / TCP comme première règle UFW:

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     LIMIT IN    Anywhere                  
...

avec l'hypothèse que toutes les connexions fonctionnant sous la limite pourraient toujours être filtrées en suivant les règles ufw et enfin la politique par défaut de "refuser (entrant)".

Au moins pour ufw 0,35, cette hypothèse serait fausse. En fait, la logique LIMIT IN accepte immédiatement toute entrée non rejetée par le critère de limite.

En pseudo-code, la logique LIMIT est

if CONDITION then DENY else ACCEPT

alors que d'autres règles ufw semblent avoir une logique:

if CONDITION then (DENY|ACCEPT) else continue to next rule.

Personnellement, j'ai trouvé que c'était un comportement inattendu pour ufw LIMIT, que j'ai découvert uniquement en trouvant de manière inattendue de nombreuses tentatives de connexion au port 22 dans le fichier journal du système, ce qui n'aurait jamais dû se produire en raison du filtrage par d'autres règles ufw.

Détails de la confirmation du comportement

Les lignes pertinentes du code iptables inséré par ufw sont les suivantes:

-A ufw-user-input -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 --name DEFAULT --mask 255.255.255.255 --rsource -j ufw-user-limit
-A ufw-user-input -p tcp -m tcp --dport 22 -j ufw-user-limit-accept
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT

La liste ci-dessus peut être créée avec

iptables -S | grep ufw-user-limit

Les deux premières lignes sont consécutives ufw-user-inputet peuvent être confirmées par

iptables -S | grep ufw-user-input
Craig Hicks
la source