Je suis en train de mettre en place un serveur et je dois faire une configuration spécifique. Je dois déposer 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 le premier caractère HEX, ainsi, il génère parfois 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 j'ai besoin de faire avec iptables
, c'est de ne jeter le paquet UNIQUEMENT que si XX 01
est les 4 premiers caractères de la chaîne de données. Ignorer si c'est présent après la 4ème donnée. Je veux dire, si j'ai par exemple 6D 00 00 00 00 00 XX 01 00 AA
cela doit passer.
Je sais qu'il y a un moyen opposé de le faire, je veux dire, je peux simplement connecter mon serveur et sniffer les paquets entrants avec wireshark
, afin de mettre en liste blanche le premier Hex qui n'est pas XX 01
pour chaque paquet contenant XX 01
sur sa chaîne de données: par exemple, la chaîne 6D
que j'ai mise là-bas. Mais pour le faire ainsi, je dois renifler pendant des heures et créer autant de règles. Je dois configurer une règle pour que tous les paquets qui commencent par autre chose que XX 01
soient inscrits sur la liste blanche, ou une règle qui arrête la lecture du paquet après le 4ème caractère Hex.
Toute aide serait appréciée.
Selon la section string
de la page de manuel iptables-extensions
, il existe deux options pour contrôler la partie d'un paquet sur laquelle le modèle est testé:
--from offset
Set the offset from which it starts looking for any matching. If
not passed, default is 0.
--to offset
Set the offset up to which should be scanned. That is, byte off‐
set-1 (counting from 0) is the last one that is scanned. If not
passed, default is the packet size.
Avez-vous essayé l'argument --to 2
, qui devrait limiter la longueur de la plage correspondante à cette valeur?