我注意到我管理的一台服务器在 nethog 上显示来自外部 IP 的流量 - 昨天有好几个来自意大利,今天有好几个来自韩国。我关闭了服务器上所有应该产生外部流量的服务,但它们仍然显示出来。然而经过进一步检查,我在 netstat 中找不到连接。
下面经过编辑,显示 1.1.1.0/24 网络上的服务器 IP 1.1.1.1。
nethogs 看起来像这样:
PID USER PROGRAM DEV SENT RECEIVED
12345 root /user/bin/php eth0 7266 25921 B
12346 me sshd: me@pts/1 0 22200 B
? root 1.1.1.1:443-112.175.124.2:42910 0.0 4320 B
And a few others to devices on the LAN that I expect to be present...
但是当我运行时netstat -antpeu
它看起来像这样:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 0 780385 28327/cupsd
tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 0 780488 28385/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 0 13072 2492/master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 0 732393 23099/openvpn
tcp 0 0 0.0.0.0:3551 0.0.0.0:* LISTEN 0 12007 2256/apcupsd
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 27 12857 2397/mysqld
tcp 0 0 0.0.0.0:58380 0.0.0.0:* LISTEN 29 10990 1973/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 0 10741 1913/rpcbind
tcp 0 0 1.1.1.1:1234 1.1.1.112:50248 ESTABLISHED 0 749495 24300/sshd
tcp 0 0 ::1:631 :::* LISTEN 0 780384 28327/cupsd
tcp 0 0 :::1234 :::* LISTEN 0 780490 28385/sshd
tcp 0 0 ::1:25 :::* LISTEN 0 13073 2492/master
tcp 0 0 :::444 :::* LISTEN 0 13725 2605/httpd
tcp 0 0 :::47266 :::* LISTEN 29 10996 1973/rpc.statd
tcp 0 0 :::111 :::* LISTEN 0 10744 1913/rpcbind
tcp 0 0 :::80 :::* LISTEN 0 13721 2605/httpd
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.1:34570 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.31:55578 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.31:55584 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.35:58086 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.35:58084 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.35:58088 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.35:58080 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.31:55576 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.31:55582 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.1:34568 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.31:55580 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.31:55586 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.35:58082 TIME_WAIT 0 0 -
tcp 0 0 ::ffff:1.1.1.1:80 ::ffff:1.1.1.35:58090 TIME_WAIT 0 0 -
udp 0 0 0.0.0.0:44358 0.0.0.0:* 29 10987 1973/rpc.statd
udp 0 0 127.0.0.1:877 0.0.0.0:* 0 10982 1973/rpc.statd
udp 0 0 0.0.0.0:111 0.0.0.0:* 0 10739 1913/rpcbind
udp 0 0 0.0.0.0:631 0.0.0.0:* 0 780388 28327/cupsd
udp 0 0 10.8.0.1:123 0.0.0.0:* 38 732403 2243/ntpd
udp 0 0 1.1.1.1:123 0.0.0.0:* 0 11996 2243/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 0 11995 2243/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 0 11988 2243/ntpd
udp 0 0 0.0.0.0:816 0.0.0.0:* 0 10740 1913/rpcbind
udp 0 0 :::34521 :::* 29 10993 1973/rpc.statd
udp 0 0 :::111 :::* 0 10742 1913/rpcbind
udp 0 0 fe80::21a:a0ff:fe56:5d2:123 :::* 0 11999 2243/ntpd
udp 0 0 ::1:123 :::* 0 11998 2243/ntpd
udp 0 0 :::123 :::* 0 11989 2243/ntpd
udp 0 0 :::816 :::* 0 10743 1913/rpcbind
那么这里发生了什么?1) 服务器被入侵了吗?看起来好像有什么东西正在向外部产生不应该产生的流量... 我也很怀疑,因为当我通过防火墙和路由器阻止其中一个 IP 时,又出现了一个新的 IP。
2) 为什么 netstat 中没有显示与外部 IP 的连接?
3) 有什么方法可以追踪它们来自哪个 PID?nethogs 没有显示它,iftop 也没有。
编辑:我应该提到它显示的2个端口是443和4040。即使我尝试在iptables中关闭这些端口,连接仍然会显示出来。
答案1
如果服务器的端口 (443) 上没有任何监听,Linux 仍会使用 RST、ACK 来响应传入的 TCP SYN 数据包,表示“此端口上没有任何内容,滚开”。该 TCP 响应由 nethogs 记录。您可以使用 iptables 日志记录(例如 ufw)或 tcpdump 来验证这一点。
与 nethogs 不同,netstat 不会报告 TCP 连接,这些连接从未超过传入的 SYN,因此从未建立(从服务器的角度来看)。也没有 pid,因为连接从未进入用户空间。
如果您的 Web 服务器位于公共互联网上,您将不断收到尝试连接到随机端口的机器人流,并且您的 nethogs 输出将令人担忧。最好在防火墙处阻止传入的 TCP 连接以避免这种噪音。
答案2
查找 PID 的另一种方法是使用“lsof”命令,即:lsof -i :443
另一种方法是使用“ss”命令,即:ss -o '( sport = :443 )',使用“dport”作为目标端口,“sport”作为源端口
或“fuser”命令,即:“fuser tcp/443”
您是否尝试过查看 IP?识别此连接可能指向的另一端的任何可能服务?SRC/DST 端口是否相同?
您可以启动 tcpdump 或 wireshark 并开始收集数据包捕获,然后阻止已经建立的连接以强制打开新的连接,就像之前所做的那样。
我预计流量是 SSL (443),但您只有检查后才能真正知道。如果它是 SSL,并且您真的想看看它是什么,您可以尝试执行 MITM 捕获。