É possível executar scripts no BIND com base na pesquisa

9

É possível configurar o BIND como servidor DNS na minha rede local e criar scripts de execução quando ele for consultado?

Gostaria de executar um script Python ou Bash, com base na pesquisa de DNS recebida, como posso resolver isso?

Se possível no Bind, diga-me como, e se não, diga-me se é possível em outras implementações de servidor DNS, executadas no Ubuntu.

Muito obrigado.

Gunnar
fonte
11
Isso me parece um pouco estranho, posso perguntar o que você está tentando alcançar?
sr_
Pode ser meio estranho;) O que estou tentando fazer é procurar no meu banco de dados, se o IP de destino da pesquisa estiver em um determinado país estrangeiro e, se estiver, quero configurar uma rota no meu servidor, que também atua como roteador, para um ISP específico ou, em alguns casos, uma conexão VPN. Tentei configurar várias rotas, 99% nunca serão usadas e o desempenho é muito ruim. Se eu puder fazer isso sob demanda, o desempenho do DNS será ruim, mas no meu caso, isso não tem nenhuma influência.
Gunnar
Hmm, isso pode falhar terrivelmente se, digamos, o site húngaro usar o Google Ad-blah, não é? (Mas eu não tenho nenhuma idéia alternativa seja, desculpe.)
sr_
Estou bastante curioso para saber o que você está tentando realizar, pois, o que terá que acontecer, você receberá uma solicitação de um IP que precisará corresponder a uma localização geográfica, que pode ser falsa, e então definir uma rota no seu DNS servidor para responder a esse IP através de uma rota específica, o que não faz sentido, já que a solicitação já entrou no BIND?
Karlson
Se meu palpite sobre o que você está tentando alcançar está correto (rotear certas conexões por meio de gateways não padrão), o BIND não é o lugar errado para fazer isso? Você analisou o roteamento de políticas e / ou tabelas de ip?
Alexios

Respostas:

1

Posso pensar em duas opções adicionais que não exigem a análise de logs BIND ou interferem com o BIND.

1) Espelhamento de porta - duplique pacotes e envie-os para uma porta separada em que um aplicativo esteja ouvindo, analisando as solicitações de DNS e tomando medidas. dpktou scapybibliotecas de criação de pacotes semelhantes ajudarão a analisar as solicitações brutas.

2) Use algum tipo de biblioteca de detecção de pacotes para monitorar passivamente as solicitações. Aqui está um exemplo 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)

Obviamente, este é apenas um exemplo primitivo. Ele apenas imprime o nome do domínio que foi consultado, mas é claro que você pode adicionar uma grande quantidade de lógica. Se você fizer referência à documentação scapy, verá que todos os campos da solicitação DNS estão prontamente disponíveis.

kwarrick
fonte
Isso parece interessante. Eu vou olhar para isso. Obrigado :-)
Gunnar
0

Você pode fazer isso monitorando o log do servidor de ligação (o log de consultas deve estar ativado). Boa sorte...

Nils
fonte
Observe que o registro de todas as consultas de ligação é uma perda significativa de desempenho. Eu não recomendaria isso em nenhum servidor autoritário em nível de produção.
Shadur
Depende da carga desse servidor de ligação. E pode-se gravar os logs em um disco ram, por exemplo /dev/shm, também.
Nils
log e, em seguida, execute swatchou OSSEC nos logs para chamar seu script. não é uma idéia muito boa a longo prazo, de qualquer forma.
Jodie C
0

Não existem eventos implementados no bind, não é necessário.

Você pode procurar firewalls aplicativos, usados ​​em algumas organizações para restringir o acesso a alguns usuários. Lá você teria mais chances de conseguir o que deseja.

A configuração de rotas também parece uma boa ideia; no final, o que você deseja obter com a execução de scripts de ligação e acionada também será ineficiente: você deve:

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

Configurar cargas de rotas não é um problema e não afeta o desempenho de maneira perceptível. Quantas rotas você acha que os roteadores corporativos possuem? centenas? não exatamente ... E eles não necessariamente têm uma configuração de hardware sofisticada. Sério, você está bem, os sistemas operacionais sérios são projetados especificamente para lidar com muitas rotas e otimizar a pesquisa.

Além do que você queria fazer, estava usando um banco de dados em cima da tabela de roteamento, que seria outro tipo de banco de dados. Mantenha simples. Nos servidores BGP, muitas rotas são realmente selecionadas / preferidas por razões políticas / financeiras, cada ISP / organização pode fazer isso e todas elas adicionam rotas específicas para esse fim. O custo do trânsito ou uma ordem judicial geralmente é a causa de tais medidas.

Aki
fonte