Comment faire le filtrage de domaine sous Linux?

12

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?


la source
quoi / pourquoi essayez-vous de bloquer? Essayez-vous de filtrer HTTP ou SMTP ou NTP sortant / entrant? Différents outils peuvent être utilisés pour différents scénarios.
Creek
1
Quelques suggestions qui pourraient vous aider sont denyhosts.sourceforge.net/faq.html et fail2ban.org/wiki/index.php/Main_Page .
Ramesh
1
@josten, idéalement, vous utiliseriez un proxy HTTP comme Squid . Le blocage des noms de domaine iptablespeut être fait mais cela peut être risqué
Creek

Réponses:

8

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 toest 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.@[email protected]
        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:

  • Si vous essayez de filtrer des trafics plus spécifiques comme smtp, ftp ou http, un proxy de ce protocole devrait être meilleur.
  • Vous "détournez" les requêtes DNS et ne bloquez pas le domaine. Les utilisateurs ne sont pas si stupides;)

Sources: ici et ici


la source
pourquoi le type algo est bm?
Gaurav Kansal
Algorithme Boyer-Moore - en.wikipedia.org/wiki/…
4

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:

  • l'utilité est vraiment simple. Il n'effectue pas beaucoup de vérifications, donc l'attaquant peut le tromper
  • cette technique est inutile si les utilisateurs n'utilisent pas DNS pour la résolution de noms
vmx
la source
3

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 .

citronnelle
la source
1

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-blockfichier:

$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.comexemple.

Une approche simple basée sur DNS pour bloquer la publicité Web


la source