Можно ли выполнять сценарии в BIND на основе поиска

9

Возможно ли настроить BIND в качестве DNS-сервера в моей локальной сети и выполнить сценарии выполнения, когда он получит поиск?

Я хотел бы выполнить сценарий Python или Bash на основе входящего поиска DNS, как я могу решить это?

Если возможно в Bind, скажите мне, как, а если нет, скажите, возможно ли это в других реализациях DNS-серверов, которые работают в Ubuntu.

Большое спасибо.

Гуннар
источник
1
Это немного странно для меня, могу я спросить, чего вы пытаетесь достичь?
Sr -
Это может показаться странным;) То, что я пытаюсь сделать, - это поиск в моей базе данных, если IP-адрес назначения для поиска находится в определенной зарубежной стране, и если это так, я хочу настроить маршрут на моем сервер, который также выступает в качестве маршрутизатора, для определенного интернет-провайдера или, в некоторых случаях, VPN-соединения. Я пытался настроить много маршрутов, 99% никогда не будут использоваться, и производительность очень плохая. Если я смогу сделать это по требованию, производительность DNS будет плохой, но в моем случае это никак не повлияет.
Гуннар
Хм, это может ужасно провалиться, если, скажем, венгерский сайт использует Google Ad-blah, не так ли? (Но у меня нет альтернативы, извините.)
sr_
Мне довольно любопытно, что вы пытаетесь выполнить, так как то, что должно произойти, вы получите запрос от IP-адреса, который вам нужно будет сопоставить с географическим местоположением, которое может быть ложным, а затем настроите маршрут на вашем DNS сервер, чтобы ответить на этот IP через определенный маршрут, что не имеет смысла, так как запрос уже превратил его в BIND?
Карлсон
Если мои предположения о том, чего вы пытаетесь достичь, верны (маршрутизируйте определенные соединения через нестандартные шлюзы), не является ли BIND неправильным местом для этого? Вы изучили политику маршрутизации и / или iptables?
Алексиос

Ответы:

1

Я могу подумать о двух дополнительных опциях, которые не требуют синтаксического анализа журналов BIND или вообще никакого вмешательства в BIND.

1) Зеркалирование портов - дублируйте пакеты и отправляйте их на отдельный порт, где приложение прослушивает, анализирует запросы DNS и предпринимает действия. dpktили scapyаналогичные библиотеки создания пакетов помогут вам разобрать необработанные запросы.

2) Используйте некоторый тип библиотеки для отслеживания пакетов для пассивного мониторинга запросов. Вот пример использования 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)

Очевидно, это всего лишь примитивный пример. Он печатает только имя домена, который был запрошен, но вы, конечно, можете добавить много логики. Если вы обратитесь к документации scapy, то обнаружите, что все поля из DNS-запроса легко доступны.

kwarrick
источник
Это выглядит интересно. Я посмотрю на это. Спасибо :-)
Гуннар
0

Вы можете сделать это, наблюдая за журналом bind-сервера (регистрация запросов должна быть включена). Удачи...

Nils
источник
Обратите внимание, что ведение журнала всех запросов на привязку сильно снижает производительность. Я не рекомендовал бы это на любом авторитетном сервере производственного уровня.
Шадур
Зависит от загрузки этого bind-сервера. И можно записывать логи на ram-диск, например /dev/shm, тоже.
Нильс
log, а затем запустите swatchили OSSEC в журналах, чтобы вызвать ваш скрипт. не очень хорошая идея в долгосрочной перспективе, в любом случае.
Джоди С
0

Нет таких вещей, как события, реализованные в связке, это не нужно.

Вы можете осмотреть аппликативные брандмауэры, которые используются в некоторых организациях для ограничения доступа для некоторых пользователей. Там у вас будет больше шансов достичь того, чего вы хотите.

Настройка маршрутов также кажется хорошей идеей, в конце концов то, что вы хотите достичь с помощью bind и запуска триггера, также будет неэффективным: вам необходимо:

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

Настройка загрузки маршрутов не является проблемой и не окажет заметного влияния на производительность. Как вы думаете, сколько маршрутов есть у корпоративных маршрутизаторов? сотни? не совсем ... И они не обязательно имеют причудливую аппаратную конфигурацию. Серьезно, у вас все хорошо, серьезные операционные системы специально разработаны для обработки множества маршрутов и оптимизации поиска.

Помимо того, что вы хотели сделать в первую очередь, это использовать базу данных поверх таблицы маршрутизации, которая была бы другим типом базы данных. Будь проще. На серверах BGP многие маршруты фактически выбираются / предпочитаются по политическим / финансовым причинам, каждый провайдер / организация может сделать это, и все они добавляют специальные маршруты для этой цели. Стоимость транзита или судебного решения часто является причиной таких мер.

Aki
источник