上次我从NFOservers.com的DDoS通知器得到关于DNS放大攻击的警告
2015-12-30 23:28:52.609178 IP (tos 0x0, ttl 54, id 42635, offset 0, flags [+], proto UDP (17), length 1500) my.dns.ip.addr.53 > 63.251.20.x.18150: 41159| 20/0/1 cpsc.gov. MX hormel.cpsc.gov. 5, cpsc.gov.[|domain] 2015-12-30 23:28:52.609632 IP (tos 0x0, ttl 54, id 42636, offset 0, flags [+], proto UDP (17), length 1500) my.dns.ip.addr.53 > 63.251.20.x.18150: 41159| 20/0/1 cpsc.gov. MX stagg.cpsc.gov. 5, cpsc.gov.[|domain] .. 2015-12-30 23:28:52.610109 IP (tos 0x0, ttl 54, id 42637, offset 0, flags [+], proto UDP (17), length 1500) my.dns.ip.addr.53 > 63.251.20.x.18150: 41159| 20/0/1 cpsc.gov. MX hormel.cpsc.gov. 5, cpsc.gov.[|domain]
有关信息
my.dns.ip.addr.53 – 我的VIP – 外部IP DNS地址
63.251.20.x.18150 – 不知道这个IP地址范围是什么
我的服务器必须为我在bind9部分configuration的内部公司networking提供recursion查询:
acl "trusted" { 172.16.0.0/16; localhost; localnets; }; options { ... allow-query { any; }; allow-recursion { trusted; }; allow-query-cache { trusted; }; ... }
我也configuration了RRL – 响应速率限制:
rate-limit { responses-per-second 5; window 5; };
看起来像我的DNS服务器(bind9)拒绝像日志中的错误查询: http : //pastebin.com/A3XGwh04
但我想通过iptables阻止这样的查询。 我会做一些研究,发现IPTABLES块:
iptables -A INPUT -p udp -m udp --dport 53 -m string --from 50 --algo bm --hex-string '|0000FF0001|' -m recent --set --name dnsanyquery --rsource iptables -A INPUT -p udp -m udp --dport 53 -m string --from 50 --algo bm --hex-string "|0000FF0001|" -m recent --name dnsanyquery --rcheck --seconds 10 --hitcount 1 -j DROP
但是当我testing我的服务器从testing机器与命令: dig + nocmd @ my.ip.dsn.addr domain.com任何+ multiline + noall +答案我没有得到任何答案,而且在日志中仍然充满了查询与cpsc.gov所以我决定支持我的默认iptablesconfiguration
接下来的研究,我发现conntrack所做的裁决,但可能会导致NAT问题。 我的DNS是NAT的
当使用另一个在这里发现其他话题soultion:
iptables -A INPUT -p udp --port 53 -m hashlimit --hashlimit 1/minute --hashlimit-burst 5 -j ACCEPT iptables -A INPUT -p udp --port 53 -j DROP
得到了nagios warrings – SOA同步问题,域从未find等
我的下一个尝试:
iptables --insert INPUT -p udp --dport 53 -m string --from 40 --to 56 --algo bm --hex-string '|637073632e676f76|' -j DROP -m comment --comment "DROP DNS Q cpsc.gov" iptables --insert INPUT -p udp --dport 53 -m string --from 40 --to 50 --algo bm --hex-string '|6370736303676f763f|' -j DROP -m comment --comment "DROP DNS Q cpsc.gov" -A INPUT -p udp -m udp --dport 53 -m string --string "cpsc.gov" --algo bm --from 40 --to 50 -m comment --comment "DROP DNS Q cpsc.gov" -j DROP
但仍然在日志中查询
我仍然在研究解决scheme,但也许这里的任何人都有这样的攻击经验丰富,可以帮助我阻止像cpsc.gov这样的查询
query-errors: info: client 93.48.40.139#54822 (cpsc.gov): rate limit drop REFUSED error response to 93.48.40.0/24
任何帮助表示赞赏。
非常重要:即使我禁用ALL的recursion,我的日志充满了像速率限制下降 REFUSED 错误响应这就是为什么我想阻止它的iptables的warings。
老实说,它看起来像你的ACL正在按预期工作:
查询错误:信息:客户端93.48.40.139#54822(cpsc.gov):速率限制下降拒绝错误响应93.48.40.0/24
您仍然收到查询,但您拒绝提供答案。 正在调用速率限制代码,因为查询仍然在数量上,不得不被名称服务器拒绝。
至于其余的几件事:
rate-limit
。 它不打算用于recursion名称服务器,并生成这些不必要的日志消息。 这解决了日志垃圾邮件。 iptables
是不是真的会帮助这个。 如果你的目标是让它到达软件从未看到查询的地方,即使这些查询被拒绝,反正被拒绝,但这是善意的,但却被误导了。 无论哪种方式你的服务器不得不处理查询。 一个是让内核丢掉stream量,另一个是让软件丢弃stream量。 防止软件查看虚假查询的价值大多是审美的。 大多数DNSpipe理员不会浪费内核周期来完成软件已经在做的事情。 无论您是使用防火墙还是丢弃stream量,还是发送REFUSED数据包,都会将您的服务器置于开放式parsing程序列表中,僵尸networking不太可能停止向您发送stream量。
如果您确实希望这种stream量消失,强烈build议您不要在仅为您的设备提供服务的recursion服务器上提供面向互联网的侦听器。 这样你的DNS服务器不必浪费用户空间CPU拒绝stream量或内核CPU丢弃stream量。
即使您将此作为一个学习练习,或者目标是不发送任何回复数据包,这是一个不能缩放的解决scheme。 这些攻击中使用的DNSlogging每天都在变化,IP地址也经常被欺骗。
你已经向那些“经历过这种攻击”的人征求意见,并且不断拒绝未经请求的stream量对于面向互联网的DNS服务器来说是非常正常的。 对于一个以前是开放的parsing器的人来说,这样做是双重的。 这种types的解决scheme是那些pipe理员通常不会做的,尽pipe我希望你们都一样。