手搓一个 DNS 域名防火墙
原创
hyang0
hyang0
生有可恋
2026年7月29日 05:59
湖北
在小说阅读器读本章
去阅读
一次偶然的机会发现Windows下的火绒有拦截挖矿木马的功能,当时灵光乍现:可以把火绒当成域名防火墙呀。
原理:在 Windows 下实现一个 DNS 转发程序,自身不提供 DNS 服务,只负责转发到上级服务器,比如:114.114.114.114、8.8.8.8
在转发DNS请求的过程中,如果火绒发现域名中含挖矿木马地址就会拦截请求。
火绒效果如下:
十几分钟已经拦截了七八个盗号木马的域名,这些请求都是来自医院内的电脑的,并发有两万多,使用负载均衡设备分了两千多的流量给我做测试。
这个udp转发程序的提示词如下:
❯ 使用Go语言实现一个跨平台的UDP转发的程序。可以配置上游转发地址,比如 8.8.8.8:53 要求实现并发。当部分请求被拦截时,不影响其他的请求。比如请求的DNS域名被火绒等杀毒软件拦截,不应该影响正常的域名解析。被拦截的直接放弃。
尽量使用更聪明的模型去实现,以前也写过类似的程序,但火绒上来就把进程杀掉了。或者火绒一拦截,程序就卡住了,连正常的 DNS 请求都不响应了。
在正式使用前,又用 AI 写了一个 DNS 压测工具,测试高并发下的请求质量。
使用了其中一个木马域名进行压测,看能否都防下来,实际效果不错,30秒300个请求全被拦下来了。正常请求的 QPS 能达到 1700,P50 在10ms 左右。
通过做压测了解到 QPS、P50、P95、P99 等指标的意义。QPS 表示每秒响应的请求数,QPS 2000 表示1秒可以响应2000次请求。QPS这个指标很重要,目前我们医院全网的 DNS 并发是两万,也就是需要10台DNS服务器分摊负载才能顶得住。
P50、P95、P99 是延迟分位数(Percentile)指标,用于衡量请求响应时间的分布情况。
- P50 表示:50%的请求响应时间≤此值 ,它反映的是\"典型用户体验\"。
- P95 表示:95%的请求响应时间≤此值 ,它反映的是长尾上限,多数慢请求的边界。
- P99 表示:99%的请求响应时间≤此值,它反映的是极端长尾,最慢 1% 请求的边界。
不用平均值的原因是平均值会被极端值拉高,掩盖真实分布。比如 100 次请求中 99 次 10ms,1 次 10s,平均值 ≈ 110ms——这个数字对评估用户体验毫无意义,而 P50=10ms 准确反映了绝大多数用户的实际感受。
P50 + P99 兼顾典型体验与极端长尾
P95 :SLA / SLO 中常见的承诺阈值(如\"95% 请求在 100ms 内\")
经过半天的拦截,火绒拦截到的木马地址如下:
提取过滤加去重后,木马网址清单如下:
AI 时代到来,分享代码意义已经不大。这里仅分享思路,权当抛砖引玉。
全文完。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论