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