BIND 로깅 구성으로 DNS 쿼리 정보를 syslog 서버에 전달
CentOS 환경에서 BIND를 설치하고, 모든 DNS 요청 로그를 원격 syslog 수집 서버로 전송하는 방법을 설명합니다. 이를 통해 네트워크 내 DNS 활동을 중앙에서 모니터링할 수 있습니다.
BIND 설정 파일 수정
BIND의 주요 설정 파일인
/etc/named.conf를 편집하여 로깅 채널과 카테고리를 정의합니다.
logging {
channel dns_query_log {
syslog local1;
severity debug;
print-time yes;
print-category yes;
print-severity yes;
};
category queries { dns_query_log; };
category client { dns_query_log; };
category resolver { dns_query_log; };
};
// 특정 도메인에 대한 포워딩 설정
zone "baidu.com" {
type forward;
forwarders { 10.127.1.8; };
forward only;
};
zone "qq.cn" {
type forward;
forwarders { 10.127.1.8; };
forward only;
};
여기서는
local1 로컬 시스로그 facility를 사용해
queries,
client,
resolver 카테고리의 로그를 시스로그로 출력하도록 지정했습니다.
BIND 서비스 재시작
설정 반영을 위해 named 서비스를 재시작합니다.
systemctl reload named
systemctl restart named
rndc flush
rsyslog를 통한 원격 전송 설정
BIND가 생성한 로그를 원격 로그 수집 서버(예:
10.5.5.5:514)로 전송하기 위해
/etc/rsyslog.conf 파일 하단에 다음 라인을 추가합니다.
# BIND 로그를 원격 서버로 전송
local1.* @@10.5.5.5:514
이 설정은
local1 facility를 사용하는 모든 로그 메시지를 TCP 기반으로
10.5.5.5의 514번 포트로 전달합니다. UDP 전송을 원할 경우
@@ 대신
@를 사용하면 됩니다.
rsyslog 서비스 재시작
변경된 설정을 적용하기 위해 rsyslog 서비스를 재시작합니다.
systemctl restart rsyslog
BIND 로깅 카테고리 설명
BIND는 다양한 유형의 이벤트를 카테고리로 분류하여 로그 출력을 제어할 수 있습니다.
- queries: 클라이언트의 DNS 조회 요청 기록
- client: 클라이언트 연결 및 세션 처리 관련 이벤트
- resolver: 외부 도메인을 해석하기 위한 재귀 조회 과정
- default: 명시적으로 지정되지 않은 기타 로그 메시지
각 카테고리는 하나 이상의 채널에 할당될 수 있으며, 필요에 따라 별도의 파일 또는 시스로그 경로로 라우팅 가능합니다.
사용자 정의 로그 형식 예시
필요 시 로그 출력 형식을 커스터마이징할 수 있습니다. 예를 들어 아래와 같이 채널 내
format 옵션을 사용해 구조화된 로그를 생성할 수 있습니다.
channel formatted_dns_log {
file "/var/log/bind/queries.log" versions 5 size 50m;
severity info;
print-time yes;
print-category yes;
format "%time% | %category% | %client% | %msg%";
};
이 방식은 로컬 저장소에도 구조화된 로그를 유지하면서 동시에 원격 syslog로 중복 전송하는 하이브리드 운영에 적합합니다.