debian:powerdns

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версій Попередня ревізія
Наступна ревізія
Попередня ревізія
debian:powerdns [23/04/2025 17:27] Methoddebian:powerdns [25/04/2025 10:02] (поточний) – [DNSDist SNMP] Method
Рядок 3: Рядок 3:
  
 В цій статті опишу встановлення комплексу для обслуговування DNS, в неї входить: В цій статті опишу встановлення комплексу для обслуговування DNS, в неї входить:
-  * [[debian:powerdns#prepare|Підготовка]] - базове налаштування системи та встановлення необхідних компонентів +  * [[#prepare|Підготовка]] - базове налаштування системи та встановлення необхідних компонентів 
-  * [[debian:powerdns#install_powerdns_recursor|PowerDNS-Recursor]] - для обслуговування DNS-запитів клієнтів. Відповідає за рекурсивне вирішення DNS-запитів +  * [[#install_powerdns_recursor|PowerDNS-Recursor]] - для обслуговування DNS-запитів клієнтів. Відповідає за рекурсивне вирішення DNS-запитів 
-  * [[debian:powerdns#install_powerdns_server|PowerDNS-Authoritative]] - для обслуговування DNS-запитів регуляторів та тримання власних DNS-зон. Відповідає за авторитарне вирішення DNS-запитів +  * [[#install_powerdns_server|PowerDNS-Authoritative]] - для обслуговування DNS-запитів регуляторів та тримання власних DNS-зон. Відповідає за авторитарне вирішення DNS-запитів 
-  * [[debian:powerdns#install_dnsdist|DNSDist]] - високопродуктивний балансувальник DNS-запитів (теж від команди PowerDNS). Забезпечує балансування навантаження та захист від DDoS-атак +  * [[#install_dnsdist|DNSDist]] - високопродуктивний балансувальник DNS-запитів (теж від команди PowerDNS). Забезпечує балансування навантаження та захист від DDoS-атак 
-  * [[debian:powerdns#install_powerdns_admin|PowerDNS-Admin]] - веб-інтерфейс для керування PowerDNS-Authoritative +  * [[#install_powerdns_admin|PowerDNS-Admin]] - веб-інтерфейс для керування PowerDNS-Authoritative 
-  * [[debian:powerdns#additional_features|Додаткові можливості]] - Додаткові можливості для покращення продуктивності та функціоналу +  * [[#additional_features|Додаткові можливості]] - Додаткові можливості для покращення продуктивності та функціоналу 
-    * [[debian:powerdns#configure_dnsdist_snmp|DNSDist SNMP]] - для моніторингу станів серверів +    * [[#configure_dnsdist_snmp|DNSDist SNMP]] - для моніторингу станів серверів 
-    * [[debian:powerdns#configure_dnsdist_black_list|Чорний список DNSDist]] - для блокування шкідливого трафіку +    * [[#configure_dnsdist_black_list|Чорний список DNSDist]] - для блокування шкідливого трафіку 
-    * [[debian:powerdns#configure_dnsdist_logger|Логування запитів DNSDist]] - для відстеження на запити спецслужб +    * [[#configure_dnsdist_logger|Логування запитів DNSDist]] - для відстеження на запити спецслужб 
-  * [[debian:powerdns#notes|Нотатки]] - додаткові посилання та інформація+  * [[#notes|Нотатки]] - додаткові посилання та інформація
  
  
Рядок 44: Рядок 44:
 </code> </code>
  
-===== PowerDNS Recursor ===== +{{anchor:install_powerdns_recursor}} ===== PowerDNS Recursor =====
-{{anchor:install_powerdns_recursor}}+
  
 <WRAP center round info 80%> <WRAP center round info 80%>
Рядок 390: Рядок 389:
 Встановимо необхідні пакети Встановимо необхідні пакети
 <code bash> <code bash>
-apt install python3-dev python3-venv apt install libpq-devgit 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+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
 </code> </code>
  
Рядок 601: Рядок 600:
 ===== Додаткові можливості ===== ===== Додаткові можливості =====
  
-==== Чорний список DNSDist ==== +{{anchor:configure_dnsdist_black_list}} ==== Чорний список DNSDist ====
-{{anchor:configure_dnsdist_black_list}}+
  
 <WRAP center round info 80%> <WRAP center round info 80%>
Рядок 1033: Рядок 1031:
 Коментуємо рядок "mibs :" для snmp-mibs-downloader Коментуємо рядок "mibs :" для snmp-mibs-downloader
 <code bash> <code bash>
-nano /etc/snmp/snmp.conf+sudo sed -i 's/^mibs\s*:/#mibs :/' /etc/snmp/snmp.conf
 </code> </code>
  
-Налаштовуємо snmpd agentx для dnsdist+Вмикаємо snmpd agentx
 <code bash> <code bash>
-nano /etc/snmp/snmpd.conf+cat <<EOT > /etc/snmp/snmpd.conf.d/00_agent.conf 
 +master  agentx 
 +EOT
 </code> </code>
  
-Правимо конфігурацію snmpd+Конфігурація snmpd agentx для dnsdist
 <code bash> <code bash>
-master  agentx+cat <<EOT > /etc/snmp/snmpd.conf.d/10_dnsdist.conf
 agentxperms 0700 0700 _dnsdist _dnsdist agentxperms 0700 0700 _dnsdist _dnsdist
 rocommunity dnsdist42 rocommunity dnsdist42
 +EOT
 +</code>
 +
 +Вказуємо IP, на яких буде слухати snmp agentx.
 +<code bash>
 +cat <<EOT > /etc/snmp/snmpd.conf.d/99_bind_address.conf
 +agentaddress 127.0.0.1,[::1], 172.16.0.16
 +EOT
 </code> </code>
  
Рядок 1155: Рядок 1163:
 та змінити параметр agentaddress в /etc/snmp/snmpd.conf з 127.0.0.1 на іп адресу, за якою можна звернутись до хоста з мережі, або на 0.0.0.0 для глобального досупу та змінити параметр agentaddress в /etc/snmp/snmpd.conf з 127.0.0.1 на іп адресу, за якою можна звернутись до хоста з мережі, або на 0.0.0.0 для глобального досупу
  
-configure_dnsdist_logger+ 
 +{{anchor:configure_dnsdist_logger
 +} ==== Логування запитів DNSDist ==== 
 + 
 +<WRAP center round info> 
 +Логування запитів DNSDist дозволяє перенаправити всі DNS-запити на віддалений syslog сервер 
 +</WRAP> 
 + 
 +<WRAP center round info> 
 +інформаційний блок 
 +</WRAP> 
 + 
 +<code bash> 
 +apt install lua-socket 
 +</code> 
 + 
 +<code bash> 
 +nano /etc/dnsdist/conf.d/00_logger.lua 
 +</code> 
 + 
 +<code lua> 
 +-- apt install lua-socket 
 +-- Спроба підключити luasocket 
 +local socket_ok, socket = pcall(require, "socket"
 + 
 +-- UDP сокет для syslog 
 +local udp 
 +if socket_ok then 
 +   udp = socket.udp() 
 +   udp:settimeout(0) 
 +   udp:setpeername("172.16.0.48", 514) 
 +end 
 + 
 +-- Функція для декодування qtype у рядок 
 +function qtype_to_string(qtype) 
 +   if not qtype then return nil end -- Якщо qtype не вказано, повертаємо nil 
 +   local names = { 
 +      [1]="A",[2]="NS",[3]="MD",[4]="MF",[5]="CNAME",[6]="SOA",[7]="MB",[8]="MG",[9]="MR",[10]="NULL",[11]="WKS",[12]="PTR",[13]="HINFO", 
 +      [14]="MINFO",[15]="MX",[16]="TXT",[17]="RP",[18]="AFSDB",[19]="X25",[20]="ISDN",[21]="RT",[22]="NSAP",[23]="NSAP-PTR",[24]="SIG", 
 +      [25]="KEY",[26]="PX",[27]="GPOS",[28]="AAAA",[29]="LOC",[30]="NXT",[31]="EID",[32]="NIMLOC",[33]="SRV",[34]="ATMA",[35]="NAPTR", 
 +      [36]="KX",[37]="CERT",[38]="A6",[39]="DNAME",[40]="SINK",[41]="OPT",[42]="APL",[43]="DS",[44]="SSHFP",[45]="IPSECKEY",[46]="RRSIG", 
 +      [47]="NSEC",[48]="DNSKEY",[49]="DHCID",[50]="NSEC3",[51]="NSEC3PARAM",[52]="TLSA",[53]="SMIMEA",[55]="HIP",[56]="NINFO", 
 +      [57]="RKEY",[58]="TALINK",[59]="CDS",[60]="CDNSKEY",[61]="OPENPGPKEY",[62]="CSYNC",[63]="ZONEMD",[64]="SVCB",[65]="HTTPS", 
 +      [99]="SPF",[100]="UINFO",[101]="UID",[102]="GID",[103]="UNSPEC",[104]="NID",[105]="L32",[106]="L64",[107]="LP",[108]="EUI48", 
 +      [109]="EUI64",[249]="TKEY",[250]="TSIG",[255]="ANY",[256]="URI",[257]="CAA",[258]="AVC",[259]="TA",[260]="DLV" 
 +   } 
 +   return names[qtype] or "TYPE"..tostring(qtype) -- Якщо qtype не відповідає жодному з визначених типів, повертаємо "TYPE" + рядок qtype 
 +end 
 + 
 +-- Формат часу з мікросекундами (UTC ISO8601) 
 +local function timestamp_us() 
 +   local t = os.date("!*t"
 +   local usec = math.floor(socket.gettime() * 1e6) % 1e6 
 +   return string.format("%04d-%02d-%02dT%02d:%02d:%02d.%06dZ", 
 +      t.year, t.month, t.day, t.hour, t.min, t.sec, usec) 
 +end 
 + 
 +-- Логер 
 +function myFuncLoger(dq) 
 +   local ip = dq.remoteaddr:toString() 
 +   local ip_version = dq.remoteaddr:isIPv6() and "IPv6" or "IPv4" 
 +   local qname = dq.qname:toStringNoDot() 
 +   local qtype = qtype_to_string(dq.qtype) 
 +   local protocol = dq:getProtocol() 
 +   local time = timestamp_us() 
 + 
 +   -- Побудова JSON 
 +   local json = string.format( 
 +      '{"timestamp":"%s","ip_version":"%s","client_ip":"%s","protocol":"%s","query_type":"%s","query_name":"%s"}', 
 +      time, ip_version, ip, protocol, qtype, qname 
 +   ) 
 + 
 +   -- Лог в консоль dnsdist 
 +   -- infolog("[LOG JSON] " .. json) 
 + 
 +   -- Відправка 
 +   if udp then 
 +      udp:send(json) 
 +   else 
 +      local fifo = io.open("/var/run/dnsdist_query_log.fifo", "w"
 +      if fifo then 
 +         fifo:write(json .. "\n"
 +         fifo:flush() 
 +         fifo:close() 
 +      end 
 +   end 
 + 
 +   return DNSAction.None 
 +end 
 + 
 +if udp then 
 +   infolog "[LOGGER] Logger initialized: SYSLOG-UDP" 
 +else 
 +   infolog "[LOGGER] Logger initialized: FIFO fallback" 
 +end 
 + 
 +addAction(NetmaskGroupRule(recursive_ips), LuaAction(myFuncLoger)) 
 +</code>
  
  
  • debian/powerdns.1745429226.txt.gz
  • Востаннє змінено: 23/04/2025 17:27
  • повз Method