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

DNSCookies是一种用于防止DDoS和放大攻击的安全机制,它通过在DNS查询和回答中添加OPTRR记录和使用DNSClient的EDNScookie进行验证。DNS服务器和客户端需要支持此机制,并且服务器会定期更新密钥以生成Cookie。配置示例展示了如何启用和定制DNSCookies的参数。此外,通过dig命令和Wireshark可以观察到DNSCookie的交互过程。
806





