最近读了ISC关于DNS RPZ的一个草案,做一些笔记。
概述
DNS RPZ也和其他的普通区域一样,是一个区域文件,区域文件中的内容也有SOA记录和NS记录,SOA记录用于区域传输,NS没有太大的意义,主要用于占位。
RPZ中的记录也是由owner name,type和rdata组成。只是RPZ区域不会用于接收用户发起的请求,只在用户发起的请求时会匹配RPZ定义的规则。RPZ规则中owner name用于定义触发器,rdata用于定义动作,即满足触发器的请求会按照策略执行相应的动作。
触发器
触发器一共有五种类型,分别是:
Client IP Address,owner name为:以.rpz-client-ip结尾。用于匹配发起请求的客户端的IP地址,双栈均可支持。定义IPv4地址段的客户端时,如B1.B2.B3.B4/prefix,在RPZ策略规则的书写规则中应当写成prefix.B4.B3.B2.B1;定义IPv6地址段的客户端时,如B1:B2:B3:B4:B5:B6:B7:B8/prefix,在RPZ策略规则的书写格式中应当写成prefix.B8.B7.B6.B5.B4.B3.B2.B1。如同IPv6地址可以使用双冒号缩写,此处的IPv6地址可以相应的使用zz替代。如2001::6:180/128可写成128.180.6.zz.2001。
QDNAME,owner name 为:正常域名,可带通配符。用于匹配发起请求包或应答包中请求域名字段的域名。
Response IP Address,owner name为:以.rpz-ip结尾。用于匹配应答记录中的的IP地址,双栈均可支持。IP地址段的编写格式与Client IP Address中描述的一致。
NSDNAME,owner name 为:以.rpz-nsdname结尾。用于匹配应答记录中NS的名字,可以在回答部分,授权部分。
NSIP,owner name 为:以.rpz-nsip结尾。用于匹配应答记录中NS名字对应的IP地址(A或AAAA的数据),可以在回答部分,附加部分。
执行动作
动作一共有六种类型,分别是:
NXDOMAIN,rdata为:. 。动作为回复NXDOMAIN类型的应答。
NODATA,rdata为:*. 。动作为回复NODATA类型(rcode为noerror但是answer个数为0)的应答。
PASSTHRU,rdata为:rpz-passthru. 。动作为透传,即RPZ白名单,不走RPZ策略规则。
DROP,radata为:rpz-drop. 。动作为丢弃,即不做应答。
TCP-ACTION,rdata为:rpz-tcp-only. 。动作为将应答中的TC标志置1,强制用户发起TCP的DNS请求,用于攻击防护。
LOCAL DATA,rdata为:正常域名 。动作为回复指定预先配置好的解析结果。
策略优先级
触发器有优先级,优先级顺序为:Client IP Address > QNAME > Response IP Address > NSIP > NSDNAME
执行的动作中PASSTHRU的优先级最高。
域名遵循最长label优先。
IP地址遵循前缀长度细化优先。
其他:按照顺序匹配,遇到disabled的策略会执行下一条,否则根据匹配中的策略给用户做回复。
详情见:《DNS Response Policy Zones (RPZ) draft-ietf-dnsop=dns-rpz-00》