RPZ (Response Policy Zone)
방식을 활용하여 특정 도메인에 대한 응답을 0.0.0.0
으로 반환하는 것은 DNS 서버에서 특정 도메인이나 악성 사이트에 대한 접속을 차단할 때 사용하는 방법입니다. RPZ
는 도메인 이름을 기반으로 응답 정책을 설정할 수 있는 기능을 제공하며, 이를 통해 특정 도메인에 대한 DNS 응답을 의도적으로 수정할 수 있습니다.
아래는 BIND DNS 서버에서 RPZ
를 설정하여 특정 도메인에 대해 0.0.0.0
으로 응답하도록 설정하는 방법입니다.
1. BIND 서버에 RPZ 설정을 적용하기 위한 기본 준비
BIND 서버가 이미 설치되어 있어야 하며, RPZ
기능을 사용할 수 있도록 설정 파일을 수정해야 합니다.
BIND 설치 (CentOS/Ubuntu 기준)
# CentOS
yum install bind bind-utils -y
# Ubuntu
apt-get install bind9 bind9utils -y
2. RPZ 구역 파일 생성
RPZ 구역 파일은 차단할 도메인 리스트와 정책을 설정하는 곳입니다. 예를 들어, rpz.zone
파일을 생성하여 설정을 추가할 수 있습니다.
RPZ 구역 파일 (rpz.zone)
$TTL 60
@ IN SOA localhost. root.localhost. (
2023102401 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
60 ) ; Minimum TTL
IN NS localhost.
; 차단할 도메인 목록
maliciousdomain.com. CNAME .
badsite.com. A 0.0.0.0
exampleblock.com. A 0.0.0.0
이 설정 파일에서 maliciousdomain.com
에 대해 CNAME
을 비워놓는 방식으로 NXDOMAIN을 반환할 수 있으며, badsite.com
과 exampleblock.com
에 대해서는 A
레코드로 0.0.0.0
을 반환하도록 설정했습니다.
3. BIND 설정 파일 수정 (named.conf)
BIND의 설정 파일에 RPZ
구역을 포함시키는 단계입니다. named.conf
파일을 수정하여 RPZ 구역을 로드하고 활성화합니다.
named.conf 수정
// RPZ 구역 추가
zone "rpz" {
type master;
file "/etc/named/rpz.zone"; # RPZ 구역 파일의 위치
};
// 옵션 섹션에 RPZ 활성화
options {
response-policy { zone "rpz"; };
};
이 설정은 BIND 서버가 RPZ
구역을 참조하여 정책을 적용하도록 하는 설정입니다.
4. BIND 서비스 재시작
구성 파일을 저장한 후 BIND 서비스를 다시 시작하여 변경 사항을 적용합니다.
# CentOS
systemctl restart named
# Ubuntu
systemctl restart bind9
5. 테스트
정상적으로 설정되었는지 확인하기 위해 도메인에 대한 쿼리를 실행하여 응답을 확인할 수 있습니다.
dig @localhost badsite.com
# 응답 예시:
;; ANSWER SECTION:
badsite.com. 60 IN A 0.0.0.0
이와 같이 설정하면 badsite.com
과 같은 특정 도메인에 대해 0.0.0.0
IP 주소를 반환하는 것을 확인할 수 있습니다. 이러한 방식으로 BIND 서버에서 RPZ
를 설정하여 특정 도메인에 대해 0.0.0.0
을 반환하게 할 수 있으며, 이를 통해 원치 않는 도메인으로의 접근을 효과적으로 차단할 수 있습니다.
NXDOMAIN
은 "Non-Existent Domain"의 약자로, DNS 서버가 특정 도메인에 대한 질의를 처리했을 때 해당 도메인이 존재하지 않는다는 응답을 의미합니다. 즉, DNS 클라이언트가 어떤 도메인에 대한 IP 주소를 요청했을 때, 해당 도메인이 DNS 서버에서 확인되지 않으면 NXDOMAIN
응답이 반환됩니다. 이는 도메인이 실제로 존재하지 않거나, DNS 서버에서 해당 도메인 정보를 제공하지 않는 경우 발생합니다.
NXDOMAIN 반환의 작동 방식
DNS 클라이언트(예: 웹 브라우저)가 도메인(예: nonexistentdomain.com
)에 대한 IP 주소를 요청하면, DNS 서버는 해당 도메인에 대한 정보가 있는지 확인합니다. 만약 그 도메인이 DNS 시스템에 등록되어 있지 않다면, DNS 서버는 다음과 같은 형식의 응답을 보냅니다.
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 12345
status: NXDOMAIN
부분이 도메인이 존재하지 않음을 나타내며, 클라이언트는 이 응답을 통해 도메인이 없다는 사실을 알게 됩니다.
NXDOMAIN 반환을 활용하는 경우
DNS 서버에서 NXDOMAIN
을 반환하도록 설정하면, 클라이언트가 해당 도메인에 접근할 수 없게 됩니다. 예를 들어, 특정 도메인에 대해 의도적으로 NXDOMAIN
응답을 설정하여 해당 도메인으로의 접근을 차단할 수 있습니다.
예시
BIND RPZ를 활용하여 특정 도메인에 대해 NXDOMAIN
응답을 반환하려면, CNAME
레코드를 비워둠으로써 다음과 같이 설정할 수 있습니다.
maliciousdomain.com. CNAME .
이 설정은 DNS 서버가 maliciousdomain.com
에 대한 질의를 받았을 때 NXDOMAIN
을 반환하게 만듭니다. 이를 통해 악성 도메인에 대한 접근을 차단할 수 있습니다. 이처럼 NXDOMAIN
응답은 도메인이 존재하지 않는다는 정보를 제공하여 사용자가 해당 도메인에 접근하지 못하도록 할 수 있습니다.
특정 도메인에 대해서만 허용하고, 그 외의 모든 도메인에 대해 NXDOMAIN
을 반환하도록 설정하는 것은 "화이트리스트" 방식의 DNS 필터링을 의미합니다. 이를 위해 BIND DNS 서버에서 RPZ (Response Policy Zone)
를 활용할 수 있으며, 설정 방식은 기본적으로 모든 도메인에 대해 NXDOMAIN
을 반환하도록 하고, 특정 허용된 도메인만 예외로 설정하는 방식으로 진행할 수 있습니다.
BIND를 이용한 whitelist 방식 설정
1. RPZ 구역 파일 생성
모든 도메인에 대해 기본적으로 NXDOMAIN
을 반환하고, 특정 도메인에 대해서만 정상적으로 응답하도록 하려면 RPZ 구역 파일을 생성하고 설정해야 합니다.
RPZ 구역 파일 예시 (rpz.zone)
$TTL 60
@ IN SOA localhost. root.localhost. (
2023102401 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
60 ) ; Minimum TTL
IN NS localhost.
; 기본적으로 모든 도메인에 대해 NXDOMAIN 반환
* CNAME .
; whitelist 도메인 목록 - 정상 응답을 허용할 도메인
gooddomain.com. CNAME rpz-passthru.
alloweddomain.net. CNAME rpz-passthru.
* CNAME .
은 모든 도메인에 대해NXDOMAIN
을 반환하도록 설정하는 부분입니다.- 특정 도메인(
gooddomain.com
,alloweddomain.net
)에 대해서는CNAME rpz-passthru.
를 설정하여 해당 도메인은 정상적인 DNS 응답을 허용하도록 설정합니다.
2. named.conf에서 RPZ 구역 추가
BIND의 설정 파일인 named.conf
에 RPZ 구역을 추가하여 적용해야 합니다.
named.conf 설정
zone "rpz" {
type master;
file "/etc/named/rpz.zone"; # RPZ 구역 파일의 경로
};
options {
response-policy { zone "rpz"; };
};
위 설정은 rpz.zone
파일에서 정의된 정책을 기반으로 DNS 응답을 제어하도록 하는 설정입니다.
3. BIND 서비스 재시작
구성 파일을 수정한 후, BIND DNS 서비스를 재시작하여 설정을 적용합니다.
# CentOS
systemctl restart named
# Ubuntu
systemctl restart bind9
4. 설정 확인 및 테스트
설정이 제대로 적용되었는지 확인하기 위해 특정 도메인에 대해 DNS 질의를 수행하여 응답을 확인할 수 있습니다.
정상 허용 도메인 테스트
dig @localhost gooddomain.com
# 응답 예시:
;; ANSWER SECTION:
gooddomain.com. 60 IN A 192.168.1.100
NXDOMAIN 반환 도메인 테스트
dig @localhost baddomain.com
# 응답 예시:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 12345
위와 같이 허용된 도메인(gooddomain.com
, alloweddomain.net
)은 정상적으로 응답을 반환하고, 그 외의 모든 도메인은 NXDOMAIN
을 반환하는 것을 확인할 수 있습니다.
추가 고려사항
- Wildcard 사용:
*
문자는 모든 도메인을 의미하며, 이를 활용하여 기본적으로 모든 도메인을 차단하고, 필요한 도메인만 허용할 수 있습니다. - Whitelist 관리: 허용할 도메인은 RPZ 구역 파일에 직접 추가하거나 외부 파일을 참조하여 쉽게 관리할 수 있습니다.
- TTL 설정: RPZ 구역에서 설정하는
TTL
값은 서버 성능에 영향을 줄 수 있으니 적절한 값으로 설정하는 것이 중요합니다.
이 방식은 DNS 서버 수준에서 네트워크 접근을 관리할 수 있는 매우 강력한 방법입니다. 필요에 따라 특정 도메인을 쉽게 추가하거나 제거할 수 있습니다.
댓글