lsof -i -P -n 是识别后门木马外联最有效轻量方式,可精准关联进程与连接;配合 grep 排除本地回环、筛选 ESTABLISHED/SYN_SENT 状态,并检查可疑 PID 的路径、启动参数及行为时序,再通过 iptables 封禁并留存内存与网络证据。

直接用 lsof -i -P -n 查看所有网络连接,是识别后门木马外联行为最有效、最轻量的方式——它不依赖可能被篡改的 netstat,也不需要额外安装工具,且能精准关联进程与连接。
快速定位对外异常连接
执行以下命令,筛掉本地回环和已知服务连接,聚焦风险目标:
- lsof -i -P -n | grep -v "127.0.0.1\|::1":排除本机通信,只看真正对外的连接
- 配合 grep -E "(ESTABLISHED|SYN_SENT)" 突出活跃外联,避免被大量 LISTEN 掩盖真实回传行为
- 重点关注目标 IP 不在业务白名单内、端口非常规(如 31337、4242、8443、3128)的条目
确认连接归属进程是否可疑
对上一步发现的可疑 PID,深入验证其合法性:
-
ls -la /proc/[PID]/exe:若显示 (deleted),或路径指向
/tmp、/dev/shm、/var/tmp,基本可判定为内存马或落地木马 -
cat /proc/[PID]/cmdline | tr '\0' '\n':检查启动参数。含 base64 字符串、
curl -sL、wget -qO-、python -c "exec("等模式,高度可疑 - 若
/proc/[PID]/cmdline为空或全是不可见字符,可用 hexdump -C /proc/[PID]/cmdline | head 辅助判断是否被清空或混淆
结合连接时间与行为交叉验证
单次连接未必代表持续回传,需观察行为持续性与上下文:
- 用 ps -o lstart= -p [PID] 查进程启动时间,再查该时刻前后 5 分钟的 journalctl --since "2 hours ago" | grep execve,确认是否由异常脚本拉起
- 运行 ss -tulpn | grep :[PORT] 对比监听端口与 lsof 输出是否一致——若 lsof 显示某进程占用了 4257,但 ss 查不到对应监听,说明可能是短连接回传型木马(如 DNS 隧道、HTTP 心跳)
- 对高频建立又断开的连接(如每 30 秒连一次陌生 IP 的 80 或 443),用 lsof -iTCP -sTCP:ESTABLISHED -P -n 每 10 秒抓一次快照,观察 PID 是否轮换,判断是否在规避 kill
阻断并留证,避免直接 kill 失效
很多后门进程 kill -9 后会立即复活。先隔离再清理更稳妥:
- 用 iptables -A OUTPUT -d [恶意IP] -j DROP 封禁外联目标,切断数据回传链路
- 同时用 iptables -A OUTPUT -m state --state NEW -m owner ! --uid-owner root -j LOG --log-prefix "OUTBOUND-UNKNOWN: " 记录非 root 用户发起的新连接,便于溯源
- 保留进程内存镜像(如 gcore [PID])和网络包(tcpdump -i any -w malware.pcap host [恶意IP]),供后续分析


















