kno DNS 03 Tips - DNS Cookies
DNS cookies (RFC7873)是一种针对DDoS拒绝服务和放大攻击的轻量级安全机制,其主要思路是是过在Query/Answer 包中增加 OPT RR
,在Query第一次交互时,通过 DNS Client 请求中 EDNS cookie
来验证 DNS Client 的真实性。
DNS Server & Client 都需要支持 DNS Cookies 机制;
DNS Server & Client 支持双向认证Cookie ;
DNS Server 会定期维护一个密匙(Server Secret
),该值用于生成 Cookie
& 响应 OPT RR
给 DNS Client;
knot mod-cookies
mod-cookies:
- id: STR
secret-lifetime: TIME
badcookie-slip: INT
secret: STR|HEXSTR
示例
全局启用DNS Cookie
& 使用默认参数;
template:
- id: default
global-module: mod-cookies # 全局启用
全局启用DNS Cookie
& 30 小时更新一次密匙(Server Secret) & 每3个DNS请求响应一次 Cookie;
mod-cookies:
- id: default
secret-lifetime: 30h # 每30小时更新一次 Server Secret
badcookie-slip: 3 # 每3个DNS请求响应一次 Cookie
template:
- id: default
global-module: mod-cookies/default # 全局启用
DNS Cookie
使用固定密匙(Server Secret), 长度必须等于16字节或32个16进制字符;
mod-cookies:
- id: default
secret: 0xdeadbeefdeadbeefdeadbeefdeadbeef
dig 验证
cookie
dig www.cnddos.com @127.0.0.1
注:
dig
包含在bind-utils
工具包,bind
版本需使用9.11
以上版本才可以支持DNS Cookies
;dig
默认启用+badcookie
, 接收到OPT RR
后设置EDNS cookie
重新发起DNS Query
;
通过 tcpdump
抓包可以看到实际发生了 2
次 DNS Query 交互:
- 第一次Query 返回
OPT RR
&Cookie
; - 第二次Query 返回
A
记录;
Wireshark
详细展示:
nobadcookie
dig www.cnddos.com @127.0.0.1 +nobadcookie
参考
https://www.knot-dns.cz/docs/2.7/html/modules.html
https://tools.ietf.org/html/rfc7873