Fonctionnalités anti-flood

From UnrealIRCd documentation wiki
Jump to navigation Jump to search
This page is a translated version of the page Anti-flood features and the translation is 48% complete.
Outdated translations are marked like this.
Other languages:
English • ‎français

Paramètres de configuration

Il existe plusieurs paramètres disponibles pour le bloc set::anti-flood, comme par exemple set::anti-flood::connect-flood qui autorise seulement X connexions par YY secondes depuis la même IP. UnrealIRCd est fourni avec de bonnes valeurs par défaut, mais vous pouvez les changer si vous voulez.

There are many settings available in the set::anti-flood block, such as set::anti-flood::connect-flood to only allow X connections per YY seconds from the same IP. Other X per Y time settings are: nick-flood, join-flood, away-flood, invite-flood and knock-flood.

The option set::anti-flood::unknown-flood-amount is used to limit the amount of data in the handshake (rarely changed, default is a few KB's).

set::anti-flood::max-concurrent-conversations limits the number of concurrent conversions a user can have, which is another anti-flood feature so a user cannot /MSG tens of users at the same time.

set::max-targets-per-command limits the number of targets the user can specify in a command (eg: JOIN 3 channels at the same time via JOIN #a,#b,#c).

Again, the default settings are probably fine for you already, as we focus on security and do our best to have tight but good defaults.

DNS Blacklists

While technically not an anti-flood feature, it definitely helps against unwanted bots/drones/users. By using one or more blacklist blocks you can have UnrealIRCd check a DNSBL service to see if an IP was blacklisted due to abuse. This is highly recommended for a server on the internet. See the example section there.

Connthrottle

This module is highly effective against bot/drone attacks. It will reject most "bad" connections, while still allowing most of your regular users in.

When the connthrottle module in UnrealIRCd detects a high number of users connecting from IP addresses that have not been seen before, then connections from new IP's are rejected above the set rate. For example at 10:60 only 10 users per minute can connect that have not been seen before. Known IP addresses (so: your regular users) can always get in, regardless of the set rate. Same for users who login using SASL.

This module was added in UnrealIRCd 4.2.3. At the time of writing (June 2019) it is not yet loaded by default, but this will change later in 2019.

AntiRandom

With the antirandom module you can block random nicks like 'fhdshfdhf'.This module is not enabled by default because it may catch innocent users for non-English languages, especially for non-Western-European languages.

Modes de salon

Il y a aussi quelques modes de salon qui peuvent être très efficaces contre le flood. En voici quelques uns :

  • N : pas de changement de nick
  • C : CTCP interdit
  • M : seuls les utilisateurs enregistrés peuvent parler
  • K : /KNOCK interdit

Il y a aussi un mode de salon très avancé : +f.

Mode de salon f

À la place d'utiliser des scripts ou des bots pour vous protéger contre le flood d'un salon, vous pouvez désormais utiliser une fonctionnalité de l'ircd. Un exemple du mode +f :

*** Blabla ajoute le mode : +f [10j]:15

Ceci signifie que maximum 10 joins par 15 secondes sont autorisés sur le salon, et que si la limite est atteinte, le mode +i (sur invitation seulement) sera ajouté automatiquement au salon.

Les types de flood suivant sont gérés :

Type Nom Action par défaut Autres actions Commentaires
c CTCP Ajoute le mode +C au salon (bloquer tous les CTCP) m, M
j joins Ajoute le mode +i au salon (sur invitation seulement) R
k knocks Ajoute le mode +K au salon (pas de /KNOCK) Compté uniquement pour les clients locaux
m messages/notices Ajoute le mode +m au salon (les utilisateurs normaux ne peuvent plus parler) M
n changements de nick Ajoute le mode +N au salon (changements de nick interdits)
t text Kick l'utilisateur b Contrairement à tous les autres, celui-ci est une limite de messages/notices par utilisateur. L'action est de kicker/bannir l'utilisateur.

Exemple :

*** ChanOp ajoute le mode : +f [20j,50m,7n]:15
<ChanOp> lalala
*** Evil1 (~fdsdsfddf@Clk-17B4D84B.blah.net) a rejoint #test
*** Evil2 (~jcvibhcih@Clk-3472A942.xx.someispcom) a rejoint #test
*** Evil3 (~toijhlihs@Clk-38D374A3.aol.com) a rejoint #test
*** Evil4 (~eihjifihi@Clk-5387B42F.dfdfd.blablalba.be) a rejoint #test
-- XX lignes supplémentaires --
*** Evil21 (~jiovoihew@Clk-48D826C3.e.something.org) a rejoint #test
-server1.test.net:#test *** Channel joinflood detected (limit is 20 per 15 seconds), putting +i
*** server1.test.net ajoute le mode : +i
<Evil2> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
<Evil12> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
<Evil15> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
<Evil10> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
<Evil8> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
-- XX lignes supplémentaires --
-server1.test.net:#test *** Channel msg/noticeflood detected (limit is 50 per 15 seconds), putting +m
*** server1.test.net ajoute le mode : +m
*** Evil1 s'appelle maintenant Hmmm1
*** Evil2 s'appelle maintenant Hmmm2
*** Evil3 s'appelle maintenant Hmmm3
*** Evil4 s'appelle maintenant Hmmm4
*** Evil5 s'appelle maintenant Hmmm5
*** Evil6 s'appelle maintenant Hmmm6
*** Evil7 s'appelle maintenant Hmmm7
*** Evil8 s'appelle maintenant Hmmm8
-server1.test.net:#test *** Channel nickflood detected (limit is 7 per 15 seconds), putting +N
*** server1.test.net ajoute le mode : +N

En fait, ça peut même être encore plus avancé/complexe :
À la place de l'action par défaut, vous pouvez en indiquer une autre pour certains types de flood, par exemple : +f [20j#R,50m#M]:15
Ceci ajoutera le mode +R au salon si la limite de joins est atteinte (>20 joins en 15 secondes) et ajoutera le mode +M si la limite de messages est atteinte (>50 messages en 15 secondes).

Il y a aussi une fonctionnalité qui permet d'enlever le mode après X minutes : +f [20j#R5]:15 ajoutera le mode +R au salon si la limite est atteinte et l'enlèvera après 5 minutes.
Un serveur peut avoir une durée par défaut (set::modef-default-unsettime), et donc +f [20j]:15 peut être transformé en +f [20j#i10]:15. Comme il s'agit d'une valeur par défaut, vous pouvez toujours faire [20j#i2]:15 explicitement, et vous pouvez forcer le mode à rester avec +f [20j#i0]:15 (un 0 explicite).

Les meilleurs paramètres pour le mode +f dépend du salon : combien d'utilisateurs il a ? y a-t-il un jeu qui fait que les utilisateurs envoient beaucoup de messages (ex : un quiz) ? est-ce un salon officiel du réseau ou avec un auto-join ? etc ...

Un mode +f parfait pour tous les salons n'existe pas, mais vous pouvez vous baser sur l'exemple suivant et l'adapter à vos besoins :
+f [30j#i10,40m#m10,7c#C15,10n#N15,30k#K10]:15

  • 30 joins en 15 secondes, sinon le salon passe en +i pour 10 minutes
  • 40 messages en 15 secondes, sinon le salon passe en +m pour 10 minutes
  • 7 CTCP en 15 secondes, sinon le salon passe en +C pour 15 minutes
  • 10 changements de nick en 15 secondes, sinon le salon passe en +N pour 15 minutes
  • 30 /KNOCK en 15 secondes, sinon le salon passe en +K pour 10 minutes

S'il s'agit d'un gros salon (>75 utilisateurs ?), vous voudrez sans doute augmenter la limite de joins (à 50 par exemple) et la limite de messages (à 60 ou 75 par exemple).
En particulier, le temps avant que les modes soient retirés est une question de préférences personnelles. Il faut vous poser la question : et si aucun op n'est disponible pour gérer la situation, est-ce que je veux que le salon soit verrouillé pour 15 minutes (= pas très sympa pour les utilisateurs) ou plutôt 5 minutes (= mais dans ce cas, les floodeurs n'auront qu'à attendre 5 minutes pour recommencer) ? Ça dépend aussi du type de flood : empêcher les utilisateurs de join le salon (+i) ou de parler (+m) est pire que les empêcher de changer de nick (+N) ou d'envoyer des CTCP au salon (+C), donc vous voudrez sans doute ajuster les durées en fonction.