# Отслеживание изменений всех типов DNS-записей для домена ## Описание Набор скриптов для мониторинга изменений в DNS для любого количества доменов. Отслеживаются все записи представленные в БД DNS. Проверку можно осуществлять как просто в консоли, запуская скрипты, так и в интеграции с zabbix. Запуск сервиса может производиться как локально в системе (при помощи cron) так и ввиде docker-контейнера. В состав сервиса входит: - zabbix_create_host.sh - позволяет создать в zabbix группу узлов, шаблон, узел. В случае если объект уже есть, то будет получен его идентификатор. Используется Zabbix JSON RPC. - zabbix_dns_records_check.sh - опрос DNS и получение всех типов записей с добавлением их в zabbix. - run.sh - для запуска полного цикла проверки - zabbix_jrpc_files - каталог содержит JSON-файлы с описанием процедур по взаимодействия с zabbix - zabbix_templates - шаблоны zabbix ## Использование Получения всех типов записей и создание элементов (items) в zabbix: ```zabbix_dns_records_check.sh read-json-discover``` Для получения данных по конкретному домену: ```zabbix_dns_records_check.sh domain.name.ru``` Для получения данных по конкретному домену и конкретному типу записи (A, MX, NS и т.д.): ```zabbix_dns_records_check.sh domain.name.ru MX``` Так как сервис заточен под работу с zabbix, то вышеозначенная операция сработает только в случае выставления переменной ```ZABBIX_AGENT="TRUE"```. Если значение данной переменной "FALSE", проверка будет производится сразу по всем записям и результат не будет выведен в консоль а будет отправлен в zabbix (при помощи zabbix-sender). Это правило верно и для режима "read-json-discover". Получение всех записей для домена: ```zabbix_zimbra_domain_status.sh get-domain-records domain.name.ru``` Получение списка всех типов записей для домена: ```zabbix_zimbra_domain_status.sh get-domain-records-type domain.name.ru``` ### Настройка переменных окружения для zabbix_zimbra_domain_status.sh Список переменных с значениями по умолчанию: ``` BIN_DIR=/usr/local/bin ETC_DIR=/usr/local/etc # Адрес ДНС сервера EXT_DNS=8.8.8.8 # Список доменов DOMAIN_LIST="domain.1 domain.2 domain.n" # Временные файлы FILE_ZIMBRA_DOMAIN_STATUS='/tmp/domain_status' FILE_ZIMBRA_DOMAIN_LIST='/tmp/domain_list' # конфигурация заббикс-агента ZABBIX_AGENT=FALSE ZABBIX_SENDER=/usr/bin/zabbix_sender ZABBIX_AGENT_CONFIG=/etc/zabbix/zabbix_agentd.conf # имя узла в zabbix ZABBIX_HOST="DNS records check" ``` ### Настройка переменных окружения для zabbix_create_host.sh и значения по умолчанию ``` BIN_DIR=/usr/local/bin ETC_DIR=/usr/local/etc LIB_DIR=/usr/local/lib # адрес zabbix сервера ZABBIX_SERVER='http://zabbix.example.com' # пользователь и пароль для доступа к zabbix-API # по умолчанию не определены ZABBIX_USER= ZABBIX_PASSWORD= # Название группы узлов в заббикс ZABBIX_HOST_GROUP='Virtual Hosts' # название узла в заббикс ZABBIX_HOST="DNS records check" # имя шаблона для прикрепления к узлу ZABBIX_TEMPLATE_NAME="Template_DNS_Check" ``` ### Запуск в Docker-контейнере Предварительно требуется создать файл .env куда прописать имя и пароль пользователя для zabbix: ``` ZABBIX_USER=user ZABBIX_PASSWORD=password ``` Если требуется переопеределить значения переменных то их можно либо прописать в этом-же файле либо в docker-compose.yml Сборка контейнера в локальном репозитории: ```docker build --rm -t dns_records_check .``` Запуск осуществляется при помощи docker-compose: ```docker-compose up``` При первых запусках (2-3, связано с таймаутами в zabbix при создании новых элементов) в случае отсутствия в zabbix будут созданы: группа узлов, шаблон, узел, прикреплен к узлу шаблон. При каждом запуске будет производится автоопределение типов DNS-записей и создание требуемых ключей (items) в заббикс (автообнаружение) для каждого домена. Контейнер будет перезапускаться каждые 10 минут (настройка в файле run.sh).