About Author

json
blog: https://kr1json.github.io
twitter: @kr1json
github: kr1json
facebook: kr1json

잊기전에 써봅니다.

About this Article

Date Released:
Wednesday, January 2, 2019 4:23 PM

특정 클라이언트를 위한 DNS Server가 필요하게 되었습니다.

모든 DNS Query를 차단하고 white list에 지정해 놓은 URL만 해당 URL로 포워드 해줘야 합니다.

white list에 지정할 URL은 google.com 같은 public URL이라서 외부 DNS와 같은 응답을 줄 수 있게 recursion yes를 셋팅해야하고

클라이언트는 IP가 수시로 변경되어 acl 설정을 할 수 없고 allow-query { any; }로 설정 해야합니다.

즉, 외부에서의 queryrecursion 모두 허가하고 white list에 있는 URL만 허용하는 DNS가 필요했습니다.

/etc/bind/named.conf

options {
	recursion yes;              # localhost에 설정되지 않은 DNS도 찾아서 응답해줍니다. 
	allow-query { any; };       # 모든 쿼리를 허용합니다.
	response-policy {           # RPZ 설정
		zone "rpz.whitelist";   
		zone "rpz";
	};
};

zone "rpz.whitelist" {
    type master;
    file "/etc/bind/db.rpz.whitelist";
    allow-query { localhost; };
    allow-transfer { none; };
};

zone "rpz" {
    type master;
    file "/etc/bind/db.rpz";
    allow-query { localhost; };
    allow-transfer { none; };
};

/etc/bind/db.rpz.whitelist

$TTL 604800
@            IN    SOA  localhost. root.localhost.  (
                      2018122401   ; serial
                      360  ; refresh
                      360  ; retry
                      1W  ; expiry
                      3H) ; minimum

                      IN     NS      localhost.

google.com                 CNAME   rpz-passthru. # 여기서 설정한 DNS는 해당 DNS로 포워딩됩니다.  
*.google.com               CNAME   rpz-passthru.

/etc/bind/db.rpz

$TTL 604800
@            IN    SOA  localhost. root.localhost.  (
                     2018122401   ; serial
                     360  ; refresh
                     1H  ; retry
                     1W  ; expiry
                     3H) ; minimum

             IN      NS    localhost.

*   A   1.1.1.1 # 나의 DNS Server IP
참조

tags : linux  bind  dns  server 

blog comments powered by Disqus