특정 클라이언트를 위한 DNS Server가 필요하게 되었습니다.
모든 DNS Query를 차단하고 white list에 지정해 놓은 URL만 해당 URL로 포워드 해줘야 합니다.
white list에 지정할 URL은 google.com 같은 public URL이라서 외부 DNS와 같은 응답을 줄 수 있게 recursion yes
를 셋팅해야하고
클라이언트는 IP가 수시로 변경되어 acl 설정을 할 수 없고 allow-query { any; }
로 설정 해야합니다.
즉, 외부에서의 query와 recursion 모두 허가하고 white list에 있는 URL만 허용하는 DNS가 필요했습니다.
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; };
};
$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.
$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