Iptables ( aide regle qui accept puis filtre avec string )

Bonjour,

je recois un flood sur mon serveur. J’utilise iptables, j’aimerai une petite aide sur la réalisation.

En gros, j’accepte des plages “légitimes” mais dans ce légitime, il y a quand même des ips qui floodent, je ne peux pas tout bloquer.

Ensuite pour filter je veux limiter en fonction du string, mais le trafic n’est plus filtré, ça ne marche pas j’ai l’impression car avant j’ai accepté la plage ip? Comment y remédier?

ça ressemble à ça:

// accepte plage et refuse le reste
-I INPUT -p udp -s 92.94.0.0/16 --dport 7777 -j ACCEPT
-I INPUT -p udp -s 92.95.0.0/16 --dport 7777 -j ACCEPT

-I INPUT -p udp --dport 7777 -j DROP

// pour un meilleur filtre des plages acceptés
-I INPUT -p udp -m string --hex-string “|XXXXX|” --algo bm --dport 7777-m limit --limit 10/s -j ACCEPT
-I INPUT -p udp -m string --hex-string “|XXXXX|” --algo bm --dport 7777-j DROP

Cordialement.

En effet quand un paquet est accepté ou bloqué, son parcours dans la chaîne s’arrête et les règles suivantes ne s’appliquent pas.
Il faut passer par une chaîne utilisateur : les règles qui filtrent sur les critères statiques renvoient vers la chaîne utilisateur qui contient les règles de limitation.
Exemple :

iptables -N limitation iptables -A INPUT -p udp -s 92.94.0.0/16 --dport 7777 -m string --hex-string "|XXXXX|" --algo bm -j limitation iptables -A limitation -m limit --limit 10/s -j ACCEPT iptables -A limitation -j DROP

PS : attention avec -I, ça crée les règles dans l’ordre inverse.

merci de la réponse, mais dans mon cas pour filtrer le plus gros et ensuite passer par le string ( si on passe directe par le string etant -limit trop de problème tout le monde est refusé )

donc ça serait?

// accepte plage et refuse le reste
iptables -A INPUT -p udp -s 92.94.0.0/16 --dport 7777 -j ACCEPT
iptables -A INPUT -p udp -s 92.95.0.0/16 --dport 7777 -j ACCEPT

iptables -A INPUT -p udp --dport 7777 -j DROP

puis ça?

iptables -N limitation
iptables -A INPUT -p udp -s 92.94.0.0/16 --dport 7777 -m string --hex-string “|XXXXX|” --algo bm -j limitation
iptables -A limitation -m limit --limit 10/s -j ACCEPT
iptables -A limitation -j DROP

iptables -N limitation1
iptables -A INPUT -p udp -s 92.95.0.0/16 --dport 7777 -m string --hex-string “|XXXXX|” --algo bm -j limitation1
iptables -A limitation1 -m limit --limit 10/s -j ACCEPT
iptables -A limitation1 -j DROP

jvois pas trop la méthode.

Non, ce que tu proposes ne convient pas. Si tu acceptes d’abord tout ce qui vient des plages autorisées, alors tu ne peux plus limiter ensuite. Mais je n’ai peut-être pas bien compris ce que tu voulais faire. Voici ce que je crois avoir compris :

  • bloquer les paquets sensibles provenant de plages non autorisées ;
  • limiter les paquets sensibles provenant de plages autorisés.
    Ceci ne s’appliquant qu’aux paquets “sensibles”, c’est-à-dire susceptibles de faire partie d’un flood (UDP port 7777 contenant le motif recherché par string).

pas vraiment c’est plutot:

  • accepter les packets de range ips normalement légitime ( pour virer 70% du flood )
  • Puis pour filtrer davantage ces packets, faire un --limit string ( jpeux pas avant sinon ça bloque trop )

Ce que tu demandes n’est pas cohérent. Comme je l’ai déjà expliqué, si un paquet est accepté, c’est définitif, on ne peut pas le “filtrer davantage” ensuite.
La limitation doit s’appliquer à quels paquets, ceux qui proviennent des plages légitimes ou les autres ?

Si tu préfères, fais la liste des différents types de paquets, par exemple :

  • plage légitime et contient le motif
  • plage légitime et ne contient pas le motif
  • hors plage légitime et contient le motif
  • hors plage légitime et ne contient pas le motif

et définis quel traitement il faut appliquer à chaque type, par exemple :

  • accepter
  • bloquer
  • limiter
  • Accept plage légitime ( dont dedans du flood ) et ne contient pas le motif
  • Drop le reste
  • limit plage légitime ( dont dedans du flood ) et contient le motif

exemple:

J’ai des plages légitimes ( dont dedans du flood ) 123.555 124.555 125.555, j’accepte ces plages et je drop le reste.
Mais comme dedans j’ai encore du flood ( je ne peux pas limiter avant sinon tout le monde est bloqué ) ainsi je
Limit 123.555 et contient le motif X/s

Ce n’est toujours pas cohérent. Si tu “drop le reste”, alors la limitation suivante ne sert à rien puisqu’il n’y a plus rien à limiter. Ne serait-ce pas plutôt :

  • plage légitime et contient le motif -> limite
  • plage légitime et ne contient pas le motif -> accepte
  • hors plage légitime -> bloque

Concernant la limitation, doit-elle s’appliquer à toutes les plages réunies (l’ensemble a droit à N paquets/s) ou séparément à chaque plage (chaque plage a droit à N paquets /s) ?