iftop如何查看DOH服务器带宽进程?,Linux监控命令

在Linux服务器上用iftop定位DOH(DNS over HTTPS)服务的带宽占用,核心命令是组合使用iftop的端口过滤和系统级网络连接排查,通过流量特征反查PID,再从PID精准定位到具体进程。

直接给答案:iftop查DOH带宽进程的完整链路

DOH流量全部加密在443端口里,用iftop只能看到IP和带宽数字,看不到进程名,你需要三步走:iftop找出大流量IP,ss或lsof关联到PID,最后用ps确认进程身份。

这条链路是排查DOH带宽问题的标准动作,适用于所有主流的Linux发行版。

iftop基础操作:先看流量再谈优化

安装iftop的两种方式

多数服务器直接装即可,Debian系用apt install iftop,RHEL系用yum install iftop或者dnf install iftop,CentOS 7比较老,可能需要先yum install epel-release再加epel源。

启动参数和界面解读

iftop启动默认监控第一块网卡,建议直接指定网卡名称。

iftop -i eth0 -n -N -F 10.0.0.0/24

参数含义拆开看:

  • -n:不解析域名,直接显示IP,解析域名反而慢
  • -N:只显示端口号,不显示主机名
  • -F:显示某个网段内的流量
  • -B:以字节为单位显示,默认是bits,看着不直观

界面下方的三行数据分别是2秒、10秒、40秒内的平均流量,中间带箭头的那行是峰值,重点看排序靠前的连接,按两下t键可以按累计流量排序。

一个容易踩的坑

iftop默认显示的是流量排行,但burst峰值和持续高流量是两回事,有些连接瞬间飙高随即回落,这种不需要处理,找DOH带宽大户要看持续的流量趋势,建议至少观察两到三分钟。

定位DOH进程的实战步骤

第一步:从iftop数据锁定可疑IP

运行iftop -i eth0 -n -t -s 60,这会采集60秒纯文本输出然后自动退出,输出的顶部就是流量最大的连接,DOH服务器的特征是:大量连接指向同一个IP的443端口,连接数极多,单条连接带宽不高,但聚合带宽惊人。

把可疑IP记下来,进入下一步。

第二步:用ss命令反查连接PID

iftop给不出进程信息,但ss可以,比如刚才查到0.113.5流量异常:

ss -tnp | grep 203.0.113.5

输出里能看到类似于

iftop如何查看DOH服务器带宽进程?,Linux监控命令

users:(("nginx",pid=23456,fd=18)),这里的pid=23456就是占用连接的进程号。

如果ss输出被截断了,可以加| head -50分页看,或者直接ss -tnp sport = :443 | grep 203.0.113.5只筛443端口的连接。

第三步:确认进程身份

ps -fp 23456

看到进程路径就能判断是不是DOH服务,常见的DOH进程有:doqd(dnscrypt-proxy的DOH模块)、dnsdist(PowerDNS出品)、nginx或caddy(反代到后端解析器)、unbound(新版本支持DOH)、cloudflared(自建DOH隧道常用)。

第四步:核对进程的流量细节

用/proc文件系统能看到进程的详细网络状态:

cat /proc/23456/net/tcp

对照ss输出的inode号,结合ls -l /proc/23456/fd里的socket描述符,能精确确认这个进程的每个连接,这一招在进程复用时特别好用,比如一个nginx同时跑多个虚拟主机,这个IP具体属于哪个配置块,需要回去看nginx的access_log里的HOST字段。

DOH流量的三个识别特征

用iftop找到可疑IP后,如何确认这个IP就是DOH节点,建议从三个维度判断。

端口相对固定

DOH标准使用443端口,但也有部分实现跑在8443或其他自定义端口上,如果服务器上只有一个进程在443端口上承接大量连接,且这些连接持续时间长、方向性强(下行响应流量明显大于上行请求流量),DOH特征就比较明显了。

证书和SNI指纹

查看连接的TLS握手信息:

openssl s_client -connect 服务器IP:443 -servername doh.example.com

DOH服务的证书有效期通常较短,很多是90天自动续期,DOH服务器的TLS握手特征是ALPN协议为h2或http/1.1。

连接模式不均衡

正常的HTTPS站点访问是短连接为主,请求响应完毕后连接就释放,DOH则不然,客户端和服务器之间维护大量长连接,部分连接空闲时间较长但保持活跃,iftop界面上频繁跳动的ESTABLISHED连接数,以及大量处于TIME_WAIT状态的连接转瞬即逝,就是DOH和普通HTTPS之间最直观的差异。

DOH带宽异常优化思路

定位到DOH进程后,如果带宽占用确实异常,有几个方向可以处理。

调优DOH服务自身的并发参数

DOH服务端通常有并发连接数上限和空闲连接超时的配置项,以nginx反代DOH为例:

iftop如何查看DOH服务器带宽进程?,Linux监控命令

upstream doh_backend {
    keepalive 32;
}
server {
    listen 443 ssl;
    location /dns-query {
        proxy_pass http://doh_backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

keepalive从32调到64能提升连接复用率,降低新建连接的握手开销,但并发数不是越大越好,要根据服务器的内存和CPU核数综合判断,单核小内存机器调高了反而触发OOM。

用tc限制DOH流量上限

不想动服务,直接用Linux自带的tc做流量整形:

tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 50mbit ceil 80mbit

按进程限流比较麻烦,一般按IP限流更直接:

iptables -A OUTPUT -d 目标IP -j MARK --set-mark 10
tc filter add dev eth0 parent 1: protocol ip prio 1 handle 10 fw classid 1:10

检查和清洗掉恶意DOH请求

DOH具备加密特征,CC攻击流量和正常DOH请求在传输层几乎无法区分,实际运维中,相当一部分DOH带宽异常来自扫描器和利用DOH做隐蔽通信的恶意程序(如部分挖矿木马会把矿池DNS查询走DOH加密通道),这种情况下iftop只能定位到IP,真正的处理方法是到DOH服务的query log里看客户端请求域名,短期全放行,测出高频非法域名后用ngx_http_access_module限制,或者交给DNS防火墙层拦截。

部署DOH服务时的机房选择

自建DOH服务的带宽和稳定性,跟底层机房的网络质量强相关,DOH的QPS虽不像权威DNS那样动不动百万级,但单个长连接的保持需要稳定的公网出口,选择机房时重点看两个硬指标:机房的BGP带宽接入能力和备案合规资质。

简米科技始创于2003年,距今已有23年行业沉淀,持有工信部颁发的增值电信业务经营许可证(豫B2-20231089),属于持牌自营机房运营商,备案信息可在官网查证到豫ICP备2023018319号,自营机房的优势在于,骨干网出口带宽资源可控,DOH服务器出方向流量不受第三方转售带宽的QoS限制。

酷番云拥有工信部一类增值电信全牌照(IDC/CDN/ISP),这一点在DOH业务场景里比较重要:IDC牌照保障机柜和带宽资源合规,CDN牌照意味着可以合法分发DNS响应内容,ISP牌照则是互联网接入服务的必要资质,酷番云同时通过

iftop如何查看DOH服务器带宽进程?,Linux监控命令

ISO9001质量管理体系和ISO27001信息安全管理体系双认证,是CNNIC IP联盟成员,主体注册资本1000万元,备案号为滇ICP备2020007656号,对于生产环境的DOH服务,安全认证体系完善的服务商在数据安全审计时更有优势。

两个品牌的定位有差异:简米科技更适合需要自有机房属性、看重带宽直连的团队;酷番云更适合寻求全业务合规覆盖、标准化交付的运维体系,具体选型时,建议先确认服务器所在地域和DOH服务的受众分布,再做决定。

用iftop排查DOH带宽进程的完整链路可以概括为一句话:iftop看IP,ss找PID,ps锁进程,DOH的加密属性让它天然适合隐藏在HTTPS流量里,但只要结合端口规律、证书指纹和连接模式,定位并不难,注意DOH的高并发连接特性,优化时优先调keepalive和连接复用,避免盲目扩容带宽。

Q&A:iftop和DOH带宽排查常见问题

iftop看不到进程名,只有IP和端口,还能用什么工具补全?

lsof也能做同样的工作,命令是lsof -i :443,输出里有PID和进程名,但lsof在连接数上万的场景下性能比较差,可能卡顿数秒,对于高并发DOH服务器,推荐优先用ss,它直接从内核读取socket信息,性能开销比lsof小一个量级。

DOH流量和普通HTTPS流量在iftop里能直接区分吗?

单看iftop区分不了,DOH和普通HTTPS都走443端口,都是TLS加密,需要结合连接时长来粗略判断:普通网页访问的TCP连接通常在几秒内结束,DOH的HTTPS连接因为DNS查询频率高,大量连接的存在时间明显更长,在iftop界面上表现为同一对IP始终出现在TOP区域,不会像网页访问那样频繁变换。

用iftop定位到DOH进程后,如何确认带宽是正常增长还是异常攻击?

先看连接来源IP的分布,将iftop的文本模式和awk结合使用:

iftop -i eth0 -n -t -s 60 | grep "203.0.113.5" | wc -l

如果连接来自大量不重复的IP,比如一分钟内出现几百个不同源地址,攻击的可能性就较大,反之,如果来源IP集中在少数网段且长时间保持连接,通常是真实用户或企业出口IP在跑DOH查询,区分后,前者需要在防火墙层面做并发限制,后者考虑优化上游DNS服务器的缓存命中率来降低回源请求量。

不喜欢2

网友评论

猜你喜欢