web-dev-qa-db-fra.com

Limitation de taux avec UFW: limites de réglage

La page de l'homme de l'UFW mentionne qu'il peut configurer le taux d'iptables limitant pour moi:

uFW prend en charge la limitation du taux de connexion, qui est utile pour protéger contre les attaques de connexion brutale. UFW refusera des 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 la suivante:

     ufw limit ssh/tcp

Malheureusement, tout est la documentation que je pouvais trouver. Je voudrais coller avec UFW et ne pas utiliser des commandes d'iptables plus compliquées (pour garder les choses "simples simples").

Comment utiliser l'UFW pour limiter tout le trafic entrant (donc non pas sortant) sur les connexions de Port 80 à 20 par 30 secondes? Comment puis-je désactiver la limitation des taux pour les ports 30000 à 30005? La limitation du taux est-elle activée par défaut pour tous les ports?

22
Tom

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

Définir le problème de synchronisation de côté, voici quelques réponses à vos questions rapides à la fin.

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

    ufw limit from any to 10.10.10.0/24 port http comment 'limit web'
    
  2. et 3. La limitation de taux n'est pas activée par défaut. Pour l'ajouter à chaque port (destination), sauf la plage souhaitée, utilisez cette règle. Notez que les règles (même avec des gammes) sont des unités atomiques et ne peuvent être divisées. Vous ne pouvez pas, par exemple, ajouter une règle pour n'importe quel port, puis delete une règle (inexistante) pour une plage particulière pour la supprimer. limit n'est pas un argument acceptable pour ufw default, Soit.

    ufw limit from any to any port 0:29999,30006:65535
    
21
bonsaiviking

Comme mentionné sur le post précédent, vous pouvez personnaliser l'utilisateur.RULES. J'ai besoin de ma limite de taux de connexion SMTP de 12 connexions en 6 secondes. J'ai ajouté une règle comme indiqué ci-dessous en premier. Remarque: Ceci ajoute une règle limite permettant 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 de nombreux autres Tweaks) 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
6
Arul Selvan

La limite de taux peut être modifiée sur le fichier de règles UFW qui peut être trouvé /lib/ufw/user.rules.

Par défaut, aucune limite n'est activée pour tous les ports. Vous devriez ajouter chaque port manuellement ou en modifiant user.rules déposer.

5
cikuraku

Il est utile de souligner les conséquences possibles imprévues de l'utilisation de la limite de la limite d'UFW.

Supposons que l'on a placé une limite de couverture sur le port 22/TCP en tant que première règle UFW:

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

avec l'hypothèse selon laquelle toutes les connexions opérant sous la limite pouvaient toujours être filtrées en suivant les règles UFW et finalement la politique par défaut de "refuser (entrant)".

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

Dans pseudocode, la logique limite est

if CONDITION then DENY else ACCEPT

alors que d'autres règles UFW semblent avoir la logique:

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

J'ai personnellement constaté que pour être un comportement inattendu pour la limite UFW, que je n'ai découvert que par une recherche de manière inattendue de nombreuses tentatives de connexion du port 22 dans le fichier journal du système qui n'aurait jamais dû ne jamais être arrivée en raison de la filtrage par d'autres règles UFW.

Détails de la confirmation de comportement

Les lignes pertinentes du code IPTABLES insérées 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 dans ufw-user-input, Qui peut être confirmé avec

iptables -S | grep ufw-user-input
1
Craig Hicks