Розбіжності
Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія Наступна ревізія | Попередня ревізія | ||
debian:powerdns [23/04/2025 11:36] – відновлено стару ревізію (23/04/2025 09:54) Method | debian:powerdns [25/04/2025 10:02] (поточний) – [DNSDist SNMP] Method | ||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
- | {{tag> | ||
====== PowerDNS AIO ====== | ====== PowerDNS AIO ====== | ||
+ | {{tag> | ||
В цій статті опишу встановлення комплексу для обслуговування DNS, в неї входить: | В цій статті опишу встановлення комплексу для обслуговування DNS, в неї входить: | ||
- | * [[debian: | + | * [[# |
- | * [[debian: | + | * [[# |
- | * [[debian: | + | * [[# |
- | * [[debian: | + | * [[# |
- | * [[debian: | + | * [[# |
- | * [[debian: | + | * [[# |
- | * [[debian: | + | * [[# |
- | * [[debian: | + | * [[# |
- | * [[debian: | + | * [[# |
+ | * [[# | ||
Рядок 43: | Рядок 44: | ||
</ | </ | ||
- | ===== PowerDNS Recursor ===== | + | {{anchor: |
- | {{anchor: | + | |
<WRAP center round info 80%> | <WRAP center round info 80%> | ||
Рядок 169: | Рядок 169: | ||
apt-get install -y pdns-server pdns-backend-mysql | apt-get install -y pdns-server pdns-backend-mysql | ||
cp -r / | cp -r / | ||
+ | rm / | ||
</ | </ | ||
+ | |||
Налаштуємо конфігурацію pdns.conf | Налаштуємо конфігурацію pdns.conf | ||
Рядок 176: | Рядок 178: | ||
setgid=pdns | setgid=pdns | ||
setuid=pdns | setuid=pdns | ||
- | local-address=127.0.0.1 | ||
- | local-port=53 | ||
include-dir=/ | include-dir=/ | ||
launch= | launch= | ||
- | EOF | + | EOT |
+ | </ | ||
+ | |||
+ | Налаштуємо конфігурацію прослуховування pdns.d/ | ||
+ | <code bash> | ||
+ | cat <<EOT > / | ||
+ | local-address=127.0.0.1 | ||
+ | local-port=53 | ||
+ | EOT | ||
+ | </ | ||
+ | |||
+ | Налаштуємо конфігурацію тюнінгу pdns.d/ | ||
+ | <code bash> | ||
+ | cat <<EOT > / | ||
+ | allow-axfr-ips=127.0.0.1/ | ||
+ | cache-ttl=60 | ||
+ | control-console=no | ||
+ | default-ttl=3600 | ||
+ | disable-axfr=no | ||
+ | log-dns-queries=yes | ||
+ | logging-facility=0 | ||
+ | loglevel=4 | ||
+ | max-queue-length=5000 | ||
+ | max-tcp-connections=50 | ||
+ | EOT | ||
</ | </ | ||
Рядок 365: | Рядок 389: | ||
Встановимо необхідні пакети | Встановимо необхідні пакети | ||
<code bash> | <code bash> | ||
- | apt install python3-dev python3-venv | + | apt install python3-dev python3-venv libpq-dev default-libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv build-essential curl jq |
</ | </ | ||
Рядок 576: | Рядок 600: | ||
===== Додаткові можливості ===== | ===== Додаткові можливості ===== | ||
- | ==== Чорний список DNSDist ==== | + | {{anchor: |
- | {{anchor: | + | |
<WRAP center round info 80%> | <WRAP center round info 80%> | ||
Рядок 1008: | Рядок 1031: | ||
Коментуємо рядок "mibs :" для snmp-mibs-downloader | Коментуємо рядок "mibs :" для snmp-mibs-downloader | ||
<code bash> | <code bash> | ||
- | nano / | + | sudo sed -i ' |
</ | </ | ||
- | Налаштовуємо snmpd agentx | + | Вмикаємо snmpd agentx |
<code bash> | <code bash> | ||
- | nano / | + | cat <<EOT > / |
+ | master | ||
+ | EOT | ||
</ | </ | ||
- | Правимо конфігурацію snmpd | + | Конфігурація snmpd agentx для dnsdist |
<code bash> | <code bash> | ||
- | master | + | cat <<EOT > / |
agentxperms 0700 0700 _dnsdist _dnsdist | agentxperms 0700 0700 _dnsdist _dnsdist | ||
rocommunity dnsdist42 | rocommunity dnsdist42 | ||
+ | EOT | ||
+ | </ | ||
+ | |||
+ | Вказуємо IP, на яких буде слухати snmp agentx. | ||
+ | <code bash> | ||
+ | cat <<EOT > / | ||
+ | agentaddress 127.0.0.1, | ||
+ | EOT | ||
</ | </ | ||
Рядок 1129: | Рядок 1162: | ||
</ | </ | ||
та змінити параметр agentaddress в / | та змінити параметр agentaddress в / | ||
+ | |||
+ | |||
+ | {{anchor: | ||
+ | } ==== Логування запитів DNSDist ==== | ||
+ | |||
+ | <WRAP center round info> | ||
+ | Логування запитів DNSDist дозволяє перенаправити всі DNS-запити на віддалений syslog сервер | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info> | ||
+ | інформаційний блок | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | apt install lua-socket | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | nano / | ||
+ | </ | ||
+ | |||
+ | <code lua> | ||
+ | -- apt install lua-socket | ||
+ | -- Спроба підключити luasocket | ||
+ | local socket_ok, socket = pcall(require, | ||
+ | |||
+ | -- UDP сокет для syslog | ||
+ | local udp | ||
+ | if socket_ok then | ||
+ | udp = socket.udp() | ||
+ | | ||
+ | | ||
+ | end | ||
+ | |||
+ | -- Функція для декодування qtype у рядок | ||
+ | function qtype_to_string(qtype) | ||
+ | if not qtype then return nil end -- Якщо qtype не вказано, | ||
+ | local names = { | ||
+ | [1]=" | ||
+ | [14]=" | ||
+ | [25]=" | ||
+ | [36]=" | ||
+ | [47]=" | ||
+ | [57]=" | ||
+ | [99]=" | ||
+ | [109]=" | ||
+ | } | ||
+ | | ||
+ | end | ||
+ | |||
+ | -- Формат часу з мікросекундами (UTC ISO8601) | ||
+ | local function timestamp_us() | ||
+ | local t = os.date(" | ||
+ | local usec = math.floor(socket.gettime() * 1e6) % 1e6 | ||
+ | | ||
+ | t.year, t.month, t.day, t.hour, t.min, t.sec, usec) | ||
+ | end | ||
+ | |||
+ | -- Логер | ||
+ | function myFuncLoger(dq) | ||
+ | local ip = dq.remoteaddr: | ||
+ | local ip_version = dq.remoteaddr: | ||
+ | local qname = dq.qname: | ||
+ | local qtype = qtype_to_string(dq.qtype) | ||
+ | local protocol = dq: | ||
+ | local time = timestamp_us() | ||
+ | |||
+ | -- Побудова JSON | ||
+ | local json = string.format( | ||
+ | ' | ||
+ | time, ip_version, ip, protocol, qtype, qname | ||
+ | ) | ||
+ | |||
+ | -- Лог в консоль dnsdist | ||
+ | -- infolog(" | ||
+ | |||
+ | -- Відправка | ||
+ | if udp then | ||
+ | udp: | ||
+ | else | ||
+ | local fifo = io.open("/ | ||
+ | if fifo then | ||
+ | | ||
+ | | ||
+ | | ||
+ | end | ||
+ | end | ||
+ | |||
+ | | ||
+ | end | ||
+ | |||
+ | if udp then | ||
+ | | ||
+ | else | ||
+ | | ||
+ | end | ||
+ | |||
+ | addAction(NetmaskGroupRule(recursive_ips), | ||
+ | </ | ||