Iptables peut-il autoriser les requêtes DNS uniquement pour un nom de domaine donné?

J’ai iptables bloquant tout le trafic UDP pour le moment, mais je ne veux autoriser que certaines requêtes DNS à passer.

Utilisons google.com comme exemple.

J’essaie d’utiliser la correspondance de chaîne pour trouver le nom de domaine dans la requête et l’autoriser. C’est ce que j’ai trouvé.

iptables -A OUTPUT -o eth0 -p udp --sport 53 -m ssortingng --ssortingng "google.com" --algo bm -j ACCEP T

J’ai également essayé --dport 53 au lieu de --sport . Pas de dé.

Si quelqu’un sait comment cela peut être fait ou voir où je me suis trompé, votre aide est appréciée!

Merci, Jarred

Je sais que c’est un peu tard, mais comme vous n’avez pas fermé la question …

Si vous examinez le contenu du paquet de demande DNS dans brideshark ou similaire, vous constaterez que le caractère point n’est pas utilisé. Chaque partie du nom de domaine est une chaîne comptée, de sorte que les octets réels de la requête pour google.com seront:

 06 67 6f 6f 67 6c 65 03 63 6f 6d 

Le premier octet (06) correspond à la longueur de google , suivi des 6 caractères ASCII, puis d’un nombre d’octets (03) pour la longueur de com suivi de … vous avez l’idée.

Pour faire correspondre ceci dans iptables, utilisez ce qui suit:

 iptables -A OUTPUT -o eth0 -p udp --port 53 -m ssortingng --hex-ssortingng "|06|google|03|com" -algo bm -j ACCEPT 

Le paramètre --hex-ssortingng parsing la chaîne fournie à la recherche de valeurs hexadécimales délimitées par des paires de barres verticales. Tout ce qui est en dehors des barres verticales est interprété comme du texte ASCII.

Si vous listez la table OUTPUT après avoir ajouté l’entrée, vous trouverez quelque chose du genre:

 ACCEPT udp -- anywhere anywhere udp dpt:domain STRING match "|06676f6f676c6503636f6d|" ALGO name bm TO 65535 

Vous pouvez régler la règle légèrement – et l’accélérer – en limitant la plage de recherche à l’aide des parameters --to et --to .

J’ai trouvé que ce n’est pas fiable avec des cordes avec des points.

Cela fonctionnera:

 iptables -A OUTPUT -o eth0 -p udp --port 53 -m ssortingng --ssortingng google --algo bm -j ACCEPT