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

9

É possível configurar o BIND como servidor DNS na minha rede local e executar scripts quando ele procura?

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

Se possível no Bind, por favor me diga como, e se não, me diga se é possível em outras implementações de servidores DNS, que rodam no Ubuntu.

Muito obrigado.

    
por Gunnar 01.02.2012 / 10:59

3 respostas

1

Eu posso pensar em duas opções adicionais que não exigem a análise de logs do BIND ou a interferência no BIND.

1) Espelhamento de porta - duplique pacotes e envie-os para uma porta separada onde um aplicativo está escutando, analisando as solicitações de DNS e realizando ações. dpkt ou scapy ou bibliotecas de criação de pacotes semelhantes ajudarão você a analisar as solicitações brutas.

2) Use algum tipo de biblioteca de sniffing 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. 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 da scapy, verá que todos os campos da solicitação de DNS estão prontamente disponíveis.

    
por 08.04.2012 / 09:38
0

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

    
por 01.02.2012 / 22:23
0

Nenhuma coisa como eventos são implementados em bind, não é necessário.

Você pode procurar em firewalls de 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 é uma boa ideia. No final, o que você deseja alcançar com a execução de scripts de ligação e acionados também será ineficiente: você precisa:

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 afetará o desempenho de maneira notável. Quantas rotas você acha que os roteadores corporativos têm? centenas? não é bem assim ... E eles não necessariamente têm uma configuração sofisticada de hardware. Sério, você está bem, sistemas operacionais sérios são projetados especificamente para lidar com muitas rotas e otimizar a pesquisa.

Além do que você queria fazer, em primeiro lugar está usando um banco de dados no topo 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 eles all adicionam rotas específicas para essa finalidade. O custo do trânsito ou de uma ordem judicial é frequentemente a causa de tais medidas.

    
por 07.02.2012 / 21:45