¿Es posible ejecutar scripts en BIND en función de la búsqueda?

9

¿Es posible configurar BIND como servidor DNS en mi red local y ejecutar scripts cuando se realiza una búsqueda?

Me gustaría ejecutar un script Python o Bash, basado en la búsqueda de DNS entrante, ¿cómo puedo resolver esto?

Si es posible en Bind, dígame cómo, y si no, dígame si es posible en otras implementaciones de servidores DNS que se ejecutan en Ubuntu.

Muchas gracias.

Gunnar
fuente
1
Esto me parece un poco extraño, ¿puedo preguntar qué estás tratando de lograr?
sr_
Puede ser un poco extraño;) Lo que estoy tratando de hacer es buscar en mi base de datos, si la IP de destino de la búsqueda está en un determinado país extranjero, y si lo está, quiero configurar una ruta en mi servidor, que también actúa como enrutador, a un ISP específico, o en algunos casos una conexión VPN. He intentado configurar muchas rutas, nunca se utilizará el 99% y el rendimiento es muy malo. Si puedo hacerlo a pedido, el rendimiento del DNS será malo, pero en mi caso, esto no tiene ninguna influencia.
Gunnar
Hmm, esto podría fallar horriblemente si, por ejemplo, el sitio web húngaro usa Google Ad-bla, ¿no? (Pero tampoco tengo una idea alternativa, lo siento).
sr_
Tengo curiosidad por saber qué está tratando de lograr, ya que lo que tendrá que suceder recibirá una solicitud de una IP que deberá comparar con una ubicación geográfica, que puede ser falsa y luego establecer una ruta en su DNS servidor para responder a esa IP a través de una ruta en particular, lo que no tiene sentido ya que la solicitud ya llegó a BIND?
Karlson
Si mi suposición de lo que está tratando de lograr es correcta (enrutar ciertas conexiones a través de puertas de enlace no estándar), ¿no es BIND el lugar incorrecto para hacerlo? ¿Has estudiado el enrutamiento de políticas y / o iptables?
Alexios

Respuestas:

1

Puedo pensar en dos opciones adicionales que no requieren analizar los registros de BIND o interferir en absoluto con BIND.

1) Duplicación de puertos: paquetes duplicados y envíelos a un puerto separado donde una aplicación está escuchando, analizando las solicitudes de DNS y tomando medidas. dpkto las scapybibliotecas de creación de paquetes similares lo ayudarán a analizar las solicitudes sin procesar.

2) Use algún tipo de biblioteca de rastreo de paquetes para monitorear pasivamente las solicitudes. Aquí hay un ejemplo 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 es solo un ejemplo primitivo. Solo imprime el nombre del dominio que se consultó, pero, por supuesto, puede agregar una gran cantidad de lógica. Si hace referencia a documentación escasa, encontrará que todos los campos de la solicitud de DNS están fácilmente disponibles.

kwarrick
fuente
Esto se ve interesante. Voy a mirar en esto. Gracias :-)
Gunnar
0

Puede hacerlo supervisando el registro del servidor de enlace (el registro de consultas debe estar activado). Buena suerte...

Nils
fuente
Tenga en cuenta que registrar todas las consultas de enlace es una pérdida de rendimiento severa . No recomendaría esto en ningún servidor autorizado de nivel de producción.
Shadur
Depende de la carga de ese servidor de enlace. Y uno podría escribir los registros en un disco RAM, por ejemplo /dev/shm, también.
Nils
iniciar sesión y luego ejecutar swatcho OSSEC en los registros para llamar a su secuencia de comandos. No es una muy buena idea a largo plazo, de cualquier manera.
Jodie C
0

No se implementan eventos como Bind, no es necesario.

Puede buscar firewalls aplicativos, que se utilizan en algunas organizaciones para restringir el acceso a algunos usuarios. Allí tendrías más posibilidades de lograr lo que quieres.

La configuración de rutas también parece una buena idea, al final, lo que desea lograr con la ejecución de script enlazado y activado también será ineficiente: debe:

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 rutas no es un problema y no afectará el rendimiento de una manera notable. ¿Cuántas rutas crees que tienen los enrutadores corporativos? cientos? no del todo ... Y no necesariamente tienen una configuración de hardware elegante. En serio, estás bien, los sistemas operativos serios están diseñados específicamente para manejar muchas rutas y optimizar la búsqueda.

Además de lo que quería hacer en primer lugar es usar una base de datos en la parte superior de la tabla de enrutamiento, que sería otro tipo de base de datos. Mantenlo simple. En los servidores BGP, muchas rutas se seleccionan / prefieren realmente por razones políticas / financieras, cada ISP / organización puede hacer eso y todos agregan rutas específicas para este propósito. El costo de tránsito o una orden judicial a menudo es la causa de tales medidas.

Aki
fuente