준비물 - 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
테스트서버라 로컬에서만 확인을 하다보니 위와같이 ? 나오지만 실서버를 적용하였다면 도메인이나 쿼리 응답정보가 나옵니다. 참고하시기 바랍니다.
'◈『Open(Source) Solution』 > 네임서버(DNS)' 카테고리의 다른 글
PowerAdmin(PowerDNS) - 네임서버 레코드 종류 (0) | 2020.08.03 |
---|---|
CentOS 8 네임서버(PowerDNS) - MariaDB(Replication) 이용한 1차 / 2차 네임서버 구성 (0) | 2020.07.29 |
CentOS 8 - 네임서버(PowerDNS) 구축(With MariaDB, PowerAdmin) (0) | 2020.07.24 |