CentOS 8 - 네임서버(PowerDNS 4.X) - 로그[Logging] 설정

준비물 - PowerDNS 4.3.X 설치 서버 [포스팅 참고]

공식 홈페이지 [로그 관련 문서] - Logging to syslog 부분 참고

 

PowerDNS 설치 후 기본적으로 로그가 쌓이지 않게 되어있습니다. 로그 설정을 위해 유닉스(리눅스) syslog를 이용합니다. CentOS를 설치하였다면 기본적으로 경로 [/etc/rsyslog.conf 또는 /etc/syslog.conf]에 설정 파일이 존재합니다. 만약 설치되어있지 않다면 다음과 같이 설치를 진행합니다.

 

[root@localhost log]# yum install rsyslog

Package rsyslog-8.1911.0-3.el8.x86_64 is already installed.  [이미 설치되어 있을 경우 넘어감]
Dependencies resolved.

진행순서


 

STEP01 → PowerDNS 로깅을 위해 먼저 다음과 같이 설정 [logging-facility=0]

[root@localhost ~]# vi /etc/pdns/pdns.conf  [수정 후 저장]

    320 #################################
    321 # logging-facility      Log under a specific facility
    322 #
    323 # logging-facility=

    323 logging-facility=0  [라인추가]

 

STEP02 → Syslog 설정하기

※ 그냥 하면 [/var/log/messages] 같이 쌓이기 때문에 로그를 분리할 필요가 있습니다.

[root@localhost log]# vi /etc/rsyslog.conf [수정 후 저장]

 

#### RULES #### [아래 추가 위치는 상관없음]

# PowerDNS LOG
local0.info                       -/var/log/pdns.info

local0.warn                       -/var/log/pdns.warn

local0.err                        /var/log/pdns.err

 

STEP03 → 재시작하기 전 pdns 로그를 적용하기 위한 실행파일 수정

※ PowerDNS 4.X 경우는 위와 같이 해도 syslog 전달이 되지 않아 로그파일이 생성되지 않습니다.

다음과 같이 데몬 구동을 확인해보면 그 이유를 알 수가 있습니다.

[root@localhost log]# ps -ef |grep pdns

pdns 1880 1 0 01:46 ?  00:00:00 /usr/sbin/pdns_server --guardian=no --daemon=no

--disable-syslog --log-timestamp=no --write-pid=no

처음 데몬을 구동할 때 [ --disable-syslog ] 작동 안 되도록 기본 옵션으로 들어가 있습니다.
구동될 때 해당 옵션이 들어가지 않도록 systemctl 등록되어있는 pdns 서비스 파일을 수정할 필요가 있습니다.

[root@localhost log]# vi /usr/lib/systemd/system/pdns.service  [수정 후 저장]

[Service]
ExecStart=/usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog(제거) --log-timestamp=no --write-pid=no

수정[ExecStart=/usr/sbin/pdns_server --guardian=no --daemon=no --log-timestamp=no --write-pid=no]
User=pdns
Group=pdns
Type=notify
Restart=on-failure
RestartSec=1
StartLimitInterval=0
RuntimeDirectory=pdns

◇ 서비스 파일 설정 수정 시 꼭 데몬 리로드를 해줄 것

[root@localhost log]# systemctl daemon-reload

 

STEP04 → 적용을 위해 [pdns/Syslog] 서비스 재시작

◇ PowerDNS 재시작

[root@localhost log]# systemctl restart pdns

 

◇ syslog 재시작

[root@localhost log]# systemctl restart rsyslog

 

◇ 재기동 후 [--disable-syslog] 옵션이 제거된 것을 확인

이후부터 정상적으로 LOCAL SYSLOG 전달을 하게 됩니다.

[root@localhost log]# ps -ef |grep pdns
pdns 1959 1 0 01:56 ? 00:00:00 /usr/sbin/pdns_server --guardian=no --daemon=no --log-timestamp=no --write-pid=no

 

STEP05 → pdns 로그 생성 파일 확인

[root@localhost log]# ls -al /var/log/ | grep pdns
-rw-------   1 root   root       344  7월 27 01:56 pdns.err

-rw-------   1 root   root      1332  7월 27 01:56 pdns.info

-rw-------   1 root   root      1332  7월 27 01:56 pdns.warn

◇ [pdns.info/pdns.warn] 기록

[root@localhost log]# tail -f /var/log/pdns.info

Jul 27 02:10:41 localhost pdns[2206]: Loading '/usr/lib64/pdns/libgmysqlbackend.so'

Jul 27 02:10:41 localhost pdns[2206]: This is a standalone pdns

Jul 27 02:10:41 localhost pdns[2206]: Listening on controlsocket in '/var/run/pdns/pdns.controlsocket'

Jul 27 02:10:41 localhost pdns[2206]: UDP server bound to 0.0.0.0:53
Jul 27 02:10:41 localhost pdns[2206]: UDP server bound to [::]:53
Jul 27 02:10:41 localhost pdns[2206]: TCP server bound to 0.0.0.0:53
Jul 27 02:10:41 localhost pdns[2206]: TCP server bound to [::]:53
Jul 27 02:10:41 localhost pdns[2206]: PowerDNS Authoritative Server 4.3.0 (C) 2001-2020 PowerDNS.COM BV
Jul 27 02:10:41 localhost pdns[2206]: Using 64-bits mode. Built using gcc 8.3.1 20190507 (Red Hat 8.3.1-4) on Apr  6 2020 14:04:39 by root@ac02bef68d2f.
Jul 27 02:10:41 localhost pdns[2206]: PowerDNS comes with ABSOLUTELY NO WARRANTY.

This is free software, and you are welcome to redistribute it according to the terms of the GPL version 2.
Jul 27 02:10:41 localhost pdns[2206]: Polled security status of version 4.3.0 at startup, no known issues reported: OK
Jul 27 02:10:41 localhost pdns[2206]: Creating backend connection for TCP
Jul 27 02:10:41 localhost pdns[2206]: About to create 3 backend threads for UDP
Jul 27 02:10:41 localhost pdns[2206]: Done launching threads, ready to distribute questions

◇ pdns.err 기록

[root@localhost ~]# tail -f  /var/log/pdns.err

Jul 27 02:04:32 localhost pdns[2145]: UDP server bound to 0.0.0.0:53
Jul 27 02:04:32 localhost pdns[2145]: UDP server bound to [::]:53
Jul 27 02:04:32 localhost pdns[2145]: TCP server bound to 0.0.0.0:53
Jul 27 02:04:32 localhost pdns[2145]: TCP server bound to [::]:53
Jul 27 02:04:32 localhost pdns[2145]: Creating backend connection for TCP

 

STEP06 → 네임서버 도메인 질의를 했을 때 남는 쿼리 로그는 다음 옵션을 적용합니다.

[root@localhost log]# vi /etc/pdns/pdns.conf


    476 #################################
    477 # query-logging Hint backends that queries should be logged
    478 #
    479 # query-logging=no
    480 query-logging=yes [라인 추가]

 

    305 #################################
    306 # log-dns-details       If PDNS should log DNS non-erroneous details
    307 # [DNS에 잘못된 세부 정보를 기록해야 하는 경우]
    308 # log-dns-details=no
    309 log-dns-details=yes  [라인 추가]

 

    311 #################################
    312 # log-dns-queries       If PDNS should log all incoming DNS queries
    313 # [들어오는 모든 DNS 쿼리 로그를 남길 경우]
    314 # log-dns-queries=no
    315 log-dns-queries=yes  [라인 추가]

 

※ 기본적으로 query-logging 만 적용해도 됩니다.

※ log-dns-details / log-dns-queries 로그는 꼭 필요할 경우만 적용

들어오는 모든 DNS 쿼리 정보를 기록하기 때문에 로그 용량이 엄청나게 쌓이므로 상황에 따라 적용할 것

◇ Config 수정 후 재시작

[root@localhost log]# systemctl restart pdns

 

STEP07 → DNS 질의 후 로그 확인해 보기

[root@localhost log]# dig @localhost test.test-2.com

;; ANSWER SECTION:
test.test-2.com.        86400   IN      A       111.111.111.111

 

◇ 쿼리 로그 확인

[root@localhost log]# tail -f /var/log/pdns.info

Jul 27 03:28:45 localhost pdns[2342]: Query 139650257668400: 301 total usec to last row
Jul 27 03:28:45 localhost pdns[2342]: Query 139650257668656:SELECTcontent,ttl,prio,type,domain_id,disabled,name,auth

FROM records WHERE disabled=0 and type=? and name=? and domain_id=?
Jul 27 03:28:45 localhost pdns[2342]: Query 139650257668656: 223 usec to execute
Jul 27 03:28:45 localhost pdns[2342]: Query 139650257668656: 267 total usec to last row

Jul 27 03:28:45 localhost pdns[2342]: Query 139650257702032: select content from domains,

domainmetadata where domainmetadata.domain_id=domains.id and name=? and domainmetadata.kind=?

Jul 27 03:28:45 localhost pdns[2342]: Query 139650257702032: 188 usec to execute
Jul 27 03:28:45 localhost pdns[2342]: Query 139650257702032: 212 total usec to last row

Jul 27 03:28:45 localhost pdns[2342]: Query 139650257669056: SELECT content,ttl,prio,type,domain_id,

disabled,name,auth FROM records WHERE disabled=0 and name=? and domain_id=?
Jul 27 03:28:45 localhost pdns[2342]: Query 139650257669056: 216 usec to execute
Jul 27 03:28:45 localhost pdns[2342]: Query 139650257669056: 250 total usec to last row

 

테스트서버라 로컬에서만 확인을 하다보니 위와같이 ? 나오지만 실서버를 적용하였다면 도메인이나 쿼리 응답정보가 나옵니다. 참고하시기 바랍니다.

Designed by JB FACTORY