Czy możliwe jest wykonywanie skryptów w BIND na podstawie wyszukiwania?


9

Czy to możliwe, aby skonfigurować BIND jako serwer DNS w mojej sieci lokalnej i wykonywać skrypty, gdy zostanie wyszukany?

Chciałbym wykonać skrypt Python lub Bash, w oparciu o przychodzące wyszukiwanie DNS, jak mogę to rozwiązać?

Jeśli to możliwe w Bind, powiedz mi, jak to zrobić, a jeśli nie, powiedz, czy jest to możliwe w innych implementacjach serwera DNS, które działają na Ubuntu.

Dziękuję Ci bardzo.


1
Wydaje mi się to trochę dziwne, czy mogę zapytać, co próbujesz osiągnąć?
— sr_

To może być trochę dziwne;) Staram się wyszukać w mojej bazie danych, jeśli docelowy adres IP wyszukiwania znajduje się w pewnym obcym kraju, a jeśli tak, to chcę ustawić trasę na moim serwer, który działa również jako router, do konkretnego usługodawcy internetowego lub w niektórych przypadkach połączenie VPN. Próbowałem ustawić wiele tras, 99% nigdy nie zostanie wykorzystane, a wydajność jest bardzo zła. Jeśli mogę to zrobić na żądanie, wydajność DNS będzie niska, ale w moim przypadku nie ma to żadnego wpływu.
— Gunnar

Hmm, może to zawieść okropnie, jeśli, powiedzmy, węgierska strona korzysta z Google Ad-blah, prawda? (Przepraszam, nie mam też innego pomysłu)
— sr_

Jestem raczej ciekawy, co próbujesz osiągnąć, ponieważ co będzie musiało się wydarzyć, otrzymasz żądanie z adresu IP, które będziesz musiał dopasować do lokalizacji geograficznej, która może być fałszywa, a następnie skonfiguruj trasę w systemie DNS serwer, który odpowiada na ten adres IP konkretną trasą, co nie ma sensu, ponieważ żądanie zostało już przesłane do BIND?
— Karlson,

Jeśli moje przypuszczenie, co próbujesz osiągnąć, jest prawidłowe (kieruj określone połączenia za pośrednictwem niestandardowych bram), czy BIND nie jest złym miejscem do zrobienia tego? Czy sprawdziłeś routing zasad i / lub iptables?
— Alexios

Odpowiedzi:


1

Mogę wymyślić dwie dodatkowe opcje, które w ogóle nie wymagają analizy dzienników BIND ani ingerowania w BIND.

1) Mirroring portów - duplikuj pakiety i wysyłaj je do osobnego portu, na którym aplikacja nasłuchuje, analizuje żądania DNS i podejmuje działania. dpktlub scapypodobne biblioteki do tworzenia pakietów pomogą parsować nieprzetworzone żądania.

2) Użyj jakiegoś rodzaju biblioteki wąchania pakietów, aby pasywnie monitorować żądania. Oto przykład z użyciem 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)

Oczywiście jest to tylko prymitywny przykład. Drukuje tylko nazwę domeny, której dotyczy zapytanie, ale można oczywiście dodać sporo logiki. Jeśli odwołujesz się do dokumentacji scapy, przekonasz się, że wszystkie pola z żądania DNS są łatwo dostępne.


To wygląda interesująco. Przyjrzę się temu. Dzięki :-)
— Gunnar,

0

Można to zrobić, monitorując dziennik serwera powiązań (rejestrowanie zapytań musi być włączone). Powodzenia...


Należy pamiętać, że rejestrowanie wszystkich zapytań o powiązanie powoduje znaczne obniżenie wydajności. Nie poleciłbym tego na żadnym wiarygodnym serwerze na poziomie produkcyjnym.
— Shadur

Zależy od obciążenia tego serwera powiązań. Można też np. Zapisać dzienniki na dysku RAM /dev/shm.
— Nils,

zaloguj się, a następnie uruchom swatchlub OSSEC w dziennikach, aby wywołać skrypt. w każdym razie niezbyt dobry pomysł na dłuższą metę.
— Jodie C

0

Żadne takie rzeczy jak zdarzenia nie są zaimplementowane w bind, nie potrzebuje tego.

Możesz rozejrzeć się za aplikacyjnymi zaporami ogniowymi, które są używane w niektórych organizacjach w celu ograniczenia dostępu do niektórych użytkowników. Tam masz większe szanse na osiągnięcie tego, co chcesz.

Konfigurowanie tras również wydaje się dobrym pomysłem, w końcu to, co chcesz osiągnąć dzięki wiązaniu i uruchamianiu skryptów, również będzie nieefektywne: musisz:

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

Konfiguracja mnóstwa tras nie stanowi problemu i nie wpłynie znacząco na wydajność. Jak myślisz, ile tras ma router korporacyjny? setki? niezupełnie ... I niekoniecznie mają fantazyjną konfigurację sprzętową. Poważnie, wszystko w porządku, poważne systemy operacyjne są specjalnie zaprojektowane do obsługi wielu tras i optymalizacji wyszukiwania.

Poza tym przede wszystkim chciałbyś użyć bazy danych na szczycie tabeli routingu, która byłaby innym rodzajem bazy danych. Nie komplikuj. Na serwerach BGP wiele tras jest faktycznie wybieranych / preferowanych ze względów politycznych / finansowych, każdy ISP / organizacja może to zrobić i wszystkie dodają w tym celu określone trasy. Koszt tranzytu lub orzeczenia sądowego jest często przyczyną takich środków.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.