È possibile eseguire script in BIND in base alla ricerca


9

È possibile impostare BIND come server DNS sulla mia rete locale ed eseguire script di esecuzione quando ottiene una ricerca?

Vorrei eseguire uno script Python o Bash, basato sulla ricerca DNS in arrivo, come posso risolverlo?

Se possibile in Bind, per favore dimmi come, e in caso contrario, dimmi se è possibile in altre implementazioni di server DNS, che girano su Ubuntu.

Grazie mille.


1
Mi sembra un po 'strano, posso chiederti cosa stai cercando di ottenere?
sabato

Potrebbe essere strano;) Quello che sto cercando di fare è cercare nel mio database, se l'IP di destinazione della ricerca è in un determinato paese straniero, e se lo è, voglio impostare un percorso sul mio server, che funge anche da router, per un ISP specifico o in alcuni casi una connessione VPN. Ho provato a impostare molti percorsi, il 99% non verrà mai utilizzato e le prestazioni sono pessime. Se posso farlo su richiesta, le prestazioni del DNS saranno pessime, ma nel mio caso, ciò non ha alcuna influenza.
Gunnar,

Hmm, questo potrebbe fallire orribilmente se, diciamo, il sito web ungherese utilizza Google Ad-blah, non è vero? (Ma non ho neanche un'idea alternativa, scusa.)
sr_

Sono piuttosto curioso di ciò che stai cercando di realizzare poiché ciò che dovrà accadere riceverai una richiesta da un IP che dovrai confrontare con una posizione geografica, che potrebbe essere falsa e quindi impostare un percorso sul tuo DNS server per rispondere a quell'IP tramite un determinato percorso, il che non ha senso dal momento che la richiesta è già entrata in BIND?
Karlson,

Se la mia ipotesi su ciò che stai cercando di ottenere è corretta (instradare determinate connessioni tramite gateway non standard), BIND non è il posto sbagliato per farlo? Hai esaminato il routing delle politiche e / o iptables?
Alexios

Risposte:


1

Posso pensare a due opzioni aggiuntive che non richiedono l'analisi dei log BIND o l'interferenza con BIND.

1) Mirroring delle porte: pacchetti duplicati e invio a una porta separata in cui un'applicazione è in ascolto, analizza le richieste DNS e agisce. dpkto scapyo librerie simili di creazione di pacchetti ti aiuteranno ad analizzare le richieste non elaborate.

2) Utilizzare un tipo di libreria di sniffing dei pacchetti per monitorare passivamente le richieste. Ecco un esempio usando 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)

Ovviamente, questo è solo un esempio primitivo. Stampa solo il nome del dominio a cui è stata eseguita la query, ma ovviamente puoi aggiungere molta logica. Se fai riferimento alla documentazione di Scapy, scoprirai che tutti i campi della richiesta DNS sono prontamente disponibili.


Questo sembra interessante. Lo esaminerò. Grazie :-)
Gunnar

0

È possibile farlo monitorando il registro del bind-server (la registrazione delle query deve essere attivata). In bocca al lupo...


Si noti che la registrazione di tutte le query di bind è un grave drenaggio delle prestazioni. Non lo consiglierei su nessun server autorevole a livello di produzione.
Shadur,

Dipende dal carico di quel bind-server. E si potrebbe anche scrivere i log su un ram-disk /dev/shm.
Nils,

accedere e quindi eseguire swatcho OSSEC nei registri per chiamare lo script. non è una buona idea a lungo termine, in entrambi i casi.
Jodie C,

0

Nessuna cosa come gli eventi sono implementati in bind, non ne ha bisogno.

È possibile esaminare i firewall applicativi, utilizzati in alcune organizzazioni per limitare l'accesso ad alcuni utenti. Lì avresti maggiori possibilità di ottenere ciò che desideri.

Anche l'impostazione dei percorsi sembra una buona idea, alla fine anche ciò che si desidera ottenere con il bind e l'esecuzione dello script attivata sarà inefficiente: è necessario:

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

L'impostazione di un sacco di percorsi non è un problema e non influirà in modo evidente sulle prestazioni. Quanti percorsi ritieni abbiano i router aziendali? centinaia? non del tutto ... E non hanno necessariamente una configurazione hardware sofisticata. Seriamente, stai bene, i sistemi operativi seri sono specificamente progettati per gestire molti percorsi e ottimizzare la ricerca.

Oltre a ciò che volevi fare in primo luogo è l'utilizzo di un database in cima alla tabella di routing, che sarebbe un altro tipo di database. Mantienilo semplice. Sui server BGP, molte rotte sono effettivamente selezionate / preferite per motivi politici / finanziari, ogni ISP / organizzazione può farlo e tutti aggiungono rotte specifiche per questo scopo. Il costo del transito o un'ingiunzione del tribunale sono spesso la causa di tali misure.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.