![我如何确定我的 CentOS 机器上的哪个特定进程/服务正在生成过多的 DNS 查询?](https://linux22.com/image/681245/%E6%88%91%E5%A6%82%E4%BD%95%E7%A1%AE%E5%AE%9A%E6%88%91%E7%9A%84%20CentOS%20%E6%9C%BA%E5%99%A8%E4%B8%8A%E7%9A%84%E5%93%AA%E4%B8%AA%E7%89%B9%E5%AE%9A%E8%BF%9B%E7%A8%8B%2F%E6%9C%8D%E5%8A%A1%E6%AD%A3%E5%9C%A8%E7%94%9F%E6%88%90%E8%BF%87%E5%A4%9A%E7%9A%84%20DNS%20%E6%9F%A5%E8%AF%A2%EF%BC%9F.png)
CentOS 5.x
我的一台 CentOS 服务器生成了过多的 DNS 查询(我的 DNS 管理员注意到了这一点)。遗憾的是,从服务日志中无法确定服务器上的哪个进程导致了此问题。
我原本以为只需查看查询本身即可找到线索,但它们是针对热门 IP 的反向 DNS 查询——因此我无法根据搜索条件轻松识别查询的来源。
是否有一个命令或方法可以用来确定哪个进程/服务正在发出查询?
答案1
通过记录传出 DNS 查询的用户 ID 来帮助iptables
您缩小范围。
iptables -I OUTPUT -m tcp -p tcp --dport 53 -m state --state NEW -j LOG --log-prefix "DNS traffic: " --log-uid
iptables -I OUTPUT -m udp -p udp --dport 53 -m state --state NEW -j LOG --log-prefix "DNS traffic: " --log-uid
这是您能做的最好的事情了iptables
,但了解发起流量的 uid 可能有助于缩小其来源范围。
答案2
iptables -I OUTPUT -p UDP --dport 53 -m 字符串 --algo bm --string foobar.su -j LOG --log-uid --log-prefix FOOBAR_MATCH
journalctl -t 内核 -f | perl -ne'/FOOBAR_MATCH/&&/SPT=(\d+)/&&系统("lsof -i udp:$1")'