De préférence quelque chose de similaire à iptables
. Fondamentalement, je veux faire un filtrage de domaine / liste blanche / liste noire comme je le ferais avec des IP iptables
. Y a-t-il des recommandations sur la façon de procéder?
De préférence quelque chose de similaire à iptables
. Fondamentalement, je veux faire un filtrage de domaine / liste blanche / liste noire comme je le ferais avec des IP iptables
. Y a-t-il des recommandations sur la façon de procéder?
Réponses:
Si vous supprimez le trafic à l'aide de la résolution de noms avec des règles iptables, les noms seront résolus lors de la création de cette règle. Si quelque chose change, votre règle ne sera plus valide. Cela pourrait être une solution (pas une belle ...):
# iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|03|www|08|facebook|03|com" --algo bm -j DROP
Depuis un autre hôte à l'intérieur du LAN:
# host www.facebook.com
www.facebook.com A record not found, try again
Fondamentalement, vous dites à chaque paquet DNS ( udp/53
) dont la chaîne hexadécimale www.facebook.com to
est supprimée. Notez que cela supprimera la résolution de nom et non le trafic http lui-même.
Les nombres hexadécimaux séparés par des tuyaux ( |03|www|08|facebook|03|com
) sont la représentation du .
simbole de points sur les requêtes DNS. Il indiquera combien des caractères suivants représenteront chaque partie d'un FQDN (hôte, domaine, domaine de premier niveau). Exemple:
hôte: mail.google.com
représentation hexadécimale: 04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d
"représentation visuelle: 04mail06google03com
Obtenir le paquet avec tcpdump:
# tcpdump -i eth0 -X dst port 53
15:50:11.643672 IP xxx.xxx.xxx.xxx:xxx > ns4.google.com.domain: 16530 A? mail.google.com. (33)
0x0000: 4500 003d 779a 4000 4011 b390 c949 4742 E..=w.@.@....IGB
0x0010: d8ef 260a 8424 0035 0029 0fc0 4092 0000 ..&..$.5.)..@...
0x0020: 0001 0000 0000 0000 046d 6169 6c06 676f .........mail.go
0x0030: 6f67 6c65 0363 6f6d 0000 0100 01 ogle.com.....
Mais rappelles-toi:
Peut-être que la réponse à votre question est trop tardive, mais récemment j'ai dû résoudre un problème similaire et Google m'amène ici
Après des recherches infructueuses, j'ai écrit un petit utilitaire en C qui intercepte les réponses DNS, compare le nom de domaine qu'il contient avec l'expression régulière donnée et répertorie les adresses IP correspondantes. Le voici: https://github.com/vmxdev/sidmat/
Vous n'avez pas besoin de configurer votre propre serveur DNS, l'utilitaire peut intercepter les réponses DNS de n'importe quel serveur
Par exemple, pour voir les adresses IP facebook.com (et sous-domaines) qui sont résolues en ce moment, vous pouvez exécuter
# ./sidmat eth0 "^facebook\.com$|\.facebook\.com$"
173.252.120.6
...
où eth0 est l'interface réseau sur le routeur (ou où les réponses DNS passent)
Vous pouvez facilement l'intégrer avec iptables (ou iptables avec ipset)
Mais:
Pour la liste noire, le moyen le plus simple consiste probablement à utiliser dnsmasq
Installer dnsmasq
$ sudo apt-get install dnsmasq
et ajoutez cette ligne à /etc/dnsmasq.conf
address=/facebook.com/127.0.0.1
Cela bloquera facebook.com et tous ses sous-domaines.
Remarque: pour ubuntu, consultez cet article .
Si vous exécutez un bind9 de mise en cache local, il est souvent réalisé par un dummy-block
zone "facebook.com" { type master; file "dummy-block"; };
et le dummy-block
fichier:
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
* IN A 127.0.0.1
Voir également:
Exécution de BIND9 et ISC-DHCP avec un facebook.com
exemple.
Une approche simple basée sur DNS pour bloquer la publicité Web