2 votes

Besoin d'aide avec la règle IP Tables pour filtrer par Hex.

Je configure un serveur et j'ai besoin de faire une configuration spécifique. Je dois supprimer un paquet spécifique qui commence toujours par XX 01. Je peux le faire avec cette règle :

sudo iptables -A INPUT  -p tcp --dport XXXX -m string --hex-string '|XX 01|' --algo bm -j REJECT

Mais le problème est que iptables commence à lire à partir du premier caractère HEX, donc parfois il génère des faux positifs.
Je veux dire, iptables supprime les bons paquets qui correspondent à la règle. Par exemple : il supprime aa aa aa XX 01 aa aa aa aa.

Ce que je veux que iptables fasse, c'est de rejeter le paquet UNIQUEMENT si XX 01 est les 4 premiers caractères de la chaîne de données. Ignorant s'il est présent après le 4ème octet de données. Je veux dire, si j'ai par exemple 6D 00 00 00 00 00 XX 01 00 AA il doit passer.

Je sais qu'il y a une manière opposée de le faire, je veux dire, je peux simplement connecter mon serveur et inspecter les paquets entrants avec wireshark, afin de mettre sur liste blanche le premier Hex qui n'est pas XX 01 pour chaque paquet qui contient XX 01 dans sa chaîne de données : par exemple la chaîne 6D que j'ai mentionnée. Mais pour le faire de cette manière, j'ai besoin de surveiller pendant des heures et je dois créer beaucoup de règles. J'ai besoin de mettre en place une règle pour mettre sur liste blanche tous les paquets qui commencent par autre chose que XX 01, ou une règle qui arrête de lire le paquet après le 4ème caractère Hex.

Toute aide sera appréciée.

1voto

Selon la section string de la page de manuel iptables-extensions, il existe deux options pour contrôler la partie du packet sur laquelle le motif est testé :

   --from offset
          Définit le décalage à partir duquel il commence à rechercher toute correspondance. Si
          non spécifié, la valeur par défaut est 0.

   --to offset
          Définit le décalage jusqu'auquel la recherche doit être effectuée. C'est-à-dire, le décalage du
          dernier octet (en partant de 0) qui est scanné. Si non spécifié, la valeur par défaut est la taille du packet.

Avez-vous essayé l'argument --to 2, qui devrait censément limiter la longueur de la plage de correspondance à cette valeur ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X