Est-il possible d'exécuter des scripts dans BIND en fonction de la recherche

9

Est-il possible de configurer BIND en tant que serveur DNS sur mon réseau local et de faire exécuter des scripts lorsqu'il obtient une recherche?

Je voudrais exécuter un script Python ou Bash, basé sur la recherche DNS entrante, comment puis-je résoudre ce problème?

Si possible dans Bind, dites-moi comment, et sinon, dites-moi si c'est possible dans d'autres implémentations de serveur DNS, qui fonctionnent sur Ubuntu.

Merci beaucoup.

Gunnar
la source
1
Cela me semble un peu étrange, puis-je vous demander ce que vous essayez de réaliser?
sr_
Cela peut être un peu étrange;) Ce que j'essaie de faire, c'est de chercher dans ma base de données, si l'adresse IP de destination de la recherche se trouve dans un certain pays étranger, et si c'est le cas, je veux configurer un itinéraire sur mon serveur, qui agit également comme un routeur, vers un FAI spécifique ou, dans certains cas, une connexion VPN. J'ai essayé de mettre en place de nombreuses routes, 99% ne seront jamais utilisées et les performances sont très mauvaises. Si je peux le faire à la demande, les performances DNS seront mauvaises, mais dans mon cas, cela n'a aucune influence.
Gunnar
Hmm, cela pourrait échouer horriblement si, disons, le site Web hongrois utilise Google Ad-blah, n'est-ce pas? (Mais je n'ai pas d'idée alternative non plus, désolé.)
sr_
Je suis plutôt curieux de savoir ce que vous essayez d'accomplir, car ce qui doit se produire, vous obtiendrez une demande d'une adresse IP que vous devrez comparer à un emplacement géographique, ce qui peut être faux, puis définir un itinéraire sur votre DNS. serveur pour répondre à cette IP via une route particulière, ce qui n'a aucun sens puisque la demande l'a déjà fait dans BIND?
Karlson
Si ma supposition de ce que vous essayez de réaliser est correcte (acheminer certaines connexions via des passerelles non standard), BIND n'est-il pas le mauvais endroit pour le faire? Avez-vous étudié le routage des politiques et / ou les iptables?
Alexios

Réponses:

1

Je peux penser à deux options supplémentaires qui ne nécessitent pas d'analyser les journaux BIND ou d'interférer avec BIND du tout.

1) Mise en miroir des ports - dupliquez les paquets et envoyez-les à un port séparé où une application écoute, analyse les requêtes DNS et prend des mesures. dpktou scapydes bibliothèques de création de paquets similaires vous aideront à analyser les demandes brutes.

2) Utilisez un certain type de bibliothèque de reniflage de paquets pour surveiller passivement les demandes. Voici un exemple d'utilisation scapy:

from scapy.all import *

def handler(req):
    if req.haslayer(DNS) and req.getlayer(DNS).qr == 0:
        ip = req.getlayer(IP)
        dns = req.getlayer(DNS)

        q = dns.qd
        print q.qname # simply print domain name


if __name__ == '__main__':
    sniff(iface="eth0", filter="udp and port 53", prn=handler, store=0)

De toute évidence, ce n'est qu'un exemple primitif. Il n'imprime que le nom du domaine qui a été interrogé, mais vous pouvez bien sûr ajouter beaucoup de logique. Si vous faites référence à la documentation de Scapy, vous constaterez que tous les champs de la demande DNS sont facilement disponibles.

kwarrick
la source
Cela semble intéressant. J'examinerai cela. Merci :-)
Gunnar
0

Vous pouvez le faire en surveillant le journal du serveur de liaison (la journalisation des requêtes doit être activée). Bonne chance...

Nils
la source
Notez que l' enregistrement de toutes les requêtes se lient est une grave fuite des performances. Je ne recommanderais ceci sur aucun serveur faisant autorité au niveau de la production.
Shadur
Dépend de la charge de ce serveur de liaisons. Et on pourrait aussi écrire les journaux sur un disque RAM /dev/shm.
Nils
journal, puis exécutez swatchou OSSEC sur les journaux pour appeler votre script. pas une très bonne idée à long terme, de toute façon.
Jodie C
0

Aucun événement tel que les événements n'est implémenté dans bind, il n'en a pas besoin.

Vous pouvez regarder autour des pare-feu applicatifs, qui sont utilisés dans certaines organisations pour restreindre l'accès à certains utilisateurs. Là, vous auriez plus de chances d'atteindre ce que vous voulez.

La configuration de routes semble également une bonne idée, à la fin ce que vous voulez réaliser avec une liaison et une exécution de script déclenchée sera également inefficace: vous devez:

for each dest IP 
look up through your database  
if match set the route
then the OS will see and use the root

La configuration de nombreuses routes n'est pas un problème et n'affectera pas les performances de manière notable. Selon vous, combien de routes les routeurs d'entreprise ont-ils? des centaines? pas tout à fait ... Et ils n'ont pas nécessairement une configuration matérielle sophistiquée. Sérieusement, vous allez bien, les systèmes d'exploitation sérieux sont spécialement conçus pour gérer de nombreux itinéraires et optimiser la recherche.

Outre ce que vous vouliez faire en premier lieu, vous utilisez une base de données au-dessus de la table de routage, qui serait un autre type de base de données. Rester simple. Sur les serveurs BGP, de nombreux itinéraires sont réellement sélectionnés / préférés pour des raisons politiques / financières, chaque FAI / organisation peut le faire et ils ajoutent tous des itinéraires spécifiques à cet effet. Le coût du transit ou d'une décision de justice est souvent à l'origine de telles mesures.

Aki
la source