Ist es möglich, Skripte in BIND basierend auf der Suche auszuführen?

9

Ist es möglich, BIND als DNS-Server in meinem lokalen Netzwerk einzurichten und Skripts auszuführen, wenn es nachgeschlagen wird?

Ich möchte ein Python- oder Bash-Skript basierend auf der eingehenden DNS-Suche ausführen. Wie kann ich das lösen?

Wenn möglich in Bind, teilen Sie mir bitte mit, wie und wenn nicht, ob dies in anderen DNS-Server-Implementierungen möglich ist, die unter Ubuntu ausgeführt werden.

Vielen Dank.

Gunnar
quelle
1
Das erscheint mir etwas seltsam. Darf ich fragen, was Sie erreichen wollen?
sr_
Es könnte seltsam sein;) Ich versuche, in meiner Datenbank nachzuschlagen, ob sich die Ziel-IP der Suche in einem bestimmten fremden Land befindet, und wenn ja, möchte ich eine Route auf meiner Datenbank einrichten Server, der auch als Router, für einen bestimmten ISP oder in einigen Fällen als VPN-Verbindung fungiert. Ich habe versucht, viele Routen einzurichten, 99% werden nie verwendet und die Leistung ist sehr schlecht. Wenn ich es bei Bedarf tun kann, ist die DNS-Leistung schlecht, aber in meinem Fall hat dies keinen Einfluss.
Gunnar
Hmm, das könnte schrecklich scheitern, wenn die ungarische Website beispielsweise Google Ad-blah verwendet, nicht wahr? (Aber ich habe auch keine alternative Idee, sorry.)
sr_
Ich bin ziemlich neugierig, was Sie erreichen möchten, da Sie eine Anfrage von einer IP erhalten, die Sie mit einem geografischen Standort abgleichen müssen, der möglicherweise falsch ist, und dann eine Route in Ihrem DNS einrichten Server, um auf diese IP über eine bestimmte Route zu antworten, was keinen Sinn macht, da die Anfrage es bereits in BIND geschafft hat?
Karlson
Wenn meine Vermutung, was Sie erreichen möchten, richtig ist (bestimmte Verbindungen über nicht standardmäßige Gateways weiterleiten), ist BIND dann nicht der falsche Ort dafür? Haben Sie sich mit Richtlinienrouting und / oder iptables befasst?
Alexios

Antworten:

1

Ich kann mir zwei zusätzliche Optionen vorstellen, bei denen BIND-Protokolle nicht analysiert oder BIND überhaupt nicht gestört werden müssen.

1) Portspiegelung - Duplizieren Sie Pakete und senden Sie sie an einen separaten Port, an dem eine Anwendung lauscht, die DNS-Anforderungen analysiert und Maßnahmen ergreift. dpktoder scapyähnliche Paketbearbeitungsbibliotheken helfen Ihnen beim Analysieren der Rohanforderungen.

2) Verwenden Sie eine Art Paket-Sniffing-Bibliothek, um die Anforderungen passiv zu überwachen. Hier ist ein Beispiel mit 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)

Offensichtlich ist dies nur ein primitives Beispiel. Es wird nur der Name der Domain gedruckt, die abgefragt wurde, aber Sie können natürlich viel Logik hinzufügen. Wenn Sie auf die Scapy-Dokumentation verweisen, werden Sie feststellen, dass alle Felder der DNS-Anforderung sofort verfügbar sind.

Kwarrick
quelle
Das sieht interessant aus. Ich werde das untersuchen. Danke :-)
Gunnar
0

Sie können dies tun, indem Sie das Bindungsserverprotokoll überwachen (die Abfrageprotokollierung muss aktiviert sein). Viel Glück...

Nils
quelle
Beachten Sie, dass das Protokollieren aller Bindungsabfragen einen erheblichen Leistungsverlust darstellt. Ich würde dies auf keinem autorisierenden Server auf Produktionsebene empfehlen .
Shadur
Hängt von der Auslastung dieses Bindeservers ab. Und man könnte die Protokolle zB /dev/shmauch auf eine RAM-Disk schreiben .
Nils
protokollieren und dann swatchOSSEC in den Protokollen ausführen, um Ihr Skript aufzurufen. Auf lange Sicht keine sehr gute Idee.
Jodie C
0

In bind sind keine Ereignisse implementiert, das wird nicht benötigt.

Sie können sich in anwendbaren Firewalls umsehen, die in einigen Organisationen verwendet werden, um den Zugriff auf einige Benutzer zu beschränken. Dort hätten Sie mehr Chancen, das zu erreichen, was Sie wollen.

Das Einrichten von Routen scheint ebenfalls eine gute Idee zu sein. Letztendlich ist das, was Sie mit dem Binden und der ausgelösten Skriptausführung erreichen möchten, ebenfalls ineffizient: Sie müssen:

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

Das Einrichten zahlreicher Routen ist kein Problem und beeinträchtigt die Leistung nicht spürbar. Wie viele Routen haben Ihrer Meinung nach Unternehmensrouter? Hunderte? nicht ganz ... Und sie haben nicht unbedingt eine ausgefallene Hardwarekonfiguration. Im Ernst, es geht Ihnen gut, seriöse Betriebssysteme wurden speziell entwickelt, um viele Routen zu bewältigen und die Suche zu optimieren.

Außerdem wollten Sie zunächst eine Datenbank über der Routing-Tabelle verwenden, bei der es sich um eine andere Art von Datenbank handelt. Halte es einfach. Auf BGP-Servern werden viele Routen aus politischen / finanziellen Gründen ausgewählt / bevorzugt. Jeder ISP / jede Organisation kann dies und alle fügen zu diesem Zweck bestimmte Routen hinzu. Die Kosten für den Transit oder eine gerichtliche Anordnung sind häufig die Ursache für solche Maßnahmen.

Aki
quelle