Apakah mungkin untuk mengeksekusi skrip di BIND berdasarkan pencarian

9

Apakah mungkin, untuk mengatur BIND sebagai server DNS di jaringan lokal saya, dan membuat skrip eksekusi ketika mendapat pencarian?

Saya ingin menjalankan skrip Python atau Bash, berdasarkan pencarian DNS yang masuk, bagaimana saya bisa menyelesaikan ini?

Jika memungkinkan di Bind, tolong beri tahu saya caranya, dan jika tidak, beri tahu saya apakah mungkin di implementasi server DNS lain, yang berjalan di Ubuntu.

Terima kasih banyak.

Gunnar
sumber
1
Ini nampak sedikit aneh bagi saya, bolehkah saya bertanya apa yang ingin Anda capai?
sr_
Mungkin agak aneh;) Apa yang saya coba lakukan, adalah mencari di database saya, jika IP tujuan pencarian adalah di negara asing tertentu, dan jika ya, saya ingin mengatur rute pada saya server, yang juga bertindak sebagai router, ke ISP tertentu, atau dalam beberapa kasus koneksi VPN. Saya sudah mencoba mengatur banyak rute, 99% tidak akan pernah digunakan, dan kinerjanya sangat buruk. Jika saya bisa melakukannya berdasarkan permintaan, kinerja DNS akan buruk, tetapi dalam kasus saya, ini tidak memiliki pengaruh apa pun.
Gunnar
Hmm, ini mungkin gagal total jika, katakanlah, situs web Hungaria menggunakan Google Ad-blah, bukan? (Tapi saya juga tidak punya ide alternatif, maaf.)
sr_
Saya agak penasaran dengan apa yang ingin Anda capai karena apa yang harus terjadi Anda akan mendapatkan permintaan dari IP yang harus Anda cocokkan dengan lokasi geografis, yang mungkin salah dan kemudian mengatur rute pada DNS Anda server untuk menanggapi IP itu melalui rute tertentu, yang tidak masuk akal karena permintaan sudah membuatnya menjadi BIND?
Karlson
Jika tebakan saya tentang apa yang ingin Anda capai adalah benar (merutekan koneksi tertentu melalui gateway non-standar), bukankah BIND tempat yang salah untuk melakukannya? Sudahkah Anda melihat perutean kebijakan dan / atau iptables?
Alexios

Jawaban:

1

Saya bisa memikirkan dua opsi tambahan yang tidak memerlukan parsing log BIND atau mengganggu BIND sama sekali.

1) Port mirroring - paket duplikat dan mengirimkannya ke port terpisah di mana aplikasi mendengarkan, mem-parsing permintaan DNS, dan mengambil tindakan. dpktatau scapyatau pustaka kerajinan paket serupa akan membantu Anda menguraikan permintaan mentah.

2) Gunakan beberapa jenis pustaka paket sniffing untuk secara pasif memonitor permintaan. Berikut ini contoh menggunakan 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)

Jelas, ini hanyalah contoh primitif. Itu hanya mencetak nama domain yang diminta, tetapi Anda tentu saja dapat menambahkan banyak logika. Jika Anda merujuk dokumentasi yang tidak lengkap Anda akan menemukan bahwa semua bidang dari permintaan DNS sudah tersedia.

kwarrick
sumber
Ini terlihat menarik. Saya akan melihat ini. Terima kasih :-)
Gunnar
0

Anda bisa melakukannya dengan memantau log server-bind (logging kueri harus dinyalakan). Semoga berhasil...

Nils
sumber
Perhatikan bahwa mencatat semua kueri bind adalah penguras kinerja yang parah . Saya tidak akan merekomendasikan ini pada setiap server produksi tingkat otoritatif.
Shadur
Tergantung pada beban server-mengikat itu. Dan seseorang dapat menulis log ke ram-disk misalnya /dev/shmjuga.
Nils
log lalu jalankan swatchatau OSSEC pada log untuk memanggil skrip Anda. bukan ide yang sangat bagus dalam jangka panjang.
Jodie C
0

Tidak ada hal-hal seperti acara yang diimplementasikan dalam bind, tidak perlu itu.

Anda dapat melihat-lihat firewall aplikatif, yang digunakan di beberapa organisasi untuk membatasi akses ke beberapa pengguna. Di sana Anda akan memiliki lebih banyak peluang untuk mencapai apa yang Anda inginkan.

Menyiapkan rute juga tampaknya ide yang bagus, pada akhirnya apa yang ingin Anda capai dengan bind dan memicu eksekusi skrip akan menjadi tidak efisien juga: Anda harus:

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

Menyiapkan banyak rute bukanlah masalah dan tidak akan memengaruhi kinerja dengan cara yang nyata. Menurut Anda, berapa rute yang dimiliki router perusahaan? ratusan? tidak cukup ... Dan mereka tidak harus memiliki konfigurasi perangkat keras yang mewah. Serius, Anda baik-baik saja, sistem operasi serius dirancang khusus untuk menangani banyak rute dan mengoptimalkan tampilan.

Selain apa yang ingin Anda lakukan di tempat pertama adalah menggunakan database di atas tabel routing, yang akan menjadi jenis database lain. Tetap sederhana. Pada server BGP, banyak rute sebenarnya dipilih / dipilih karena alasan politik / keuangan, masing-masing ISP / organisasi dapat melakukan itu dan mereka semua menambahkan rute spesifik untuk tujuan ini. Biaya transit atau perintah pengadilan seringkali menjadi penyebab tindakan tersebut.

Aki
sumber