tcpdump可审计ftp和ssh流量,但ftp明文可读命令与路径,ssh仅能分析连接行为与元数据;抓ftp需捕获端口21及pasv范围,抓ssh则聚焦syn统计、版本协商等非加密信息。

tcpdump 可以有效审计 FTP 和 SSH 的数据流量,但二者在可读性与分析难度上有本质区别:FTP(明文)的命令和文件名能直接看到,SSH(加密)只能看到连接行为和元数据,无法解密内容。
抓取 FTP 流量:看清明文指令与传输路径
FTP 默认使用端口 21(控制连接)和随机高位端口(数据连接),控制通道全程明文。用以下命令可捕获完整交互过程:
- 基础抓包:`sudo tcpdump -i eth0 -nn port 21 -w ftp_ctrl.pcap` —— 保存控制流,含 USER、PASS、CWD、RETR、STOR 等命令及响应
- 同时捕获数据流:`sudo tcpdump -i eth0 -nn 'port 21 or portrange 20000-21000' -w ftp_full.pcap` —— 若 FTP 使用被动模式(PASV),需配合常见 PASV 端口范围;也可用 `tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0 and port 21'` 快速定位新建连接
- 实时查看命令:`sudo tcpdump -i eth0 -nn -A port 21 | grep -i "user\|pass\|retr\|stor\|cwd"` —— `-A` 以 ASCII 显示载荷,适合快速筛查敏感操作
抓取 SSH 流量:聚焦连接行为与异常模式
SSH 流量本身加密,tcpdump 无法还原密码、命令或文件内容,但可审计连接来源、频率、时长、端口、协议版本等关键行为指标:
- 标准抓包:`sudo tcpdump -i eth0 -nn port 22 -c 500 -w ssh_basic.pcap` —— 限制 500 包,避免日志爆炸;`-nn` 防止反向 DNS 查询拖慢捕获
- 识别高频登录尝试:`sudo tcpdump -i eth0 -nn -c 1000 'port 22 and tcp[tcpflags] & tcp-syn != 0' | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -nr` —— 统计 SYN 包源 IP,辅助发现暴力破解迹象
- 区分 SSH 版本协商(非加密部分):`sudo tcpdump -i eth0 -nn -A port 22 | grep "SSH-"` —— 初始 TCP 握手后,双方会明文交换 SSH 协议标识(如 SSH-2.0-OpenSSH_8.9),可用于资产识别与合规检查
后续分析建议:pcap 文件不只用来“看”
单独用 tcpdump 输出屏幕信息效率低、难追溯。推荐保存为 pcap 后交由专业工具深度处理:
- 用 Wireshark 打开 `.pcap` 文件,应用显示过滤器如 `ftp.request.command == "RETR"` 或 `ssh.direction == "client_to_server"` 提升定位效率
- 对 SSH 流量,可用 tshark 提取统计维度:`tshark -r ssh_basic.pcap -q -z conv,tcp,ip.src==192.168.1.100` 查看某客户端所有会话汇总
- FTP 抓包中若含 `PASV` 响应,Wireshark 可自动关联对应的数据连接(需开启 “Decode As → FTP-DATA”),还原完整文件传输上下文
注意事项与限制
审计有效性依赖部署位置与权限配置:
- 必须在流量经过的路径上运行(如服务器本地、网关、镜像端口),不能跨网络段盲抓
- SSH 加密不可绕过:即使获得私钥,tcpdump 也无法解密已建立的会话(需用 OpenSSL 或 OpenSSH 的调试日志等更底层方式)
- FTP over TLS(FTPS)或 SFTP(基于 SSH)同样加密,上述明文分析方法失效,仅剩连接层元数据可审
- 长期审计建议结合 `vnstat` 或 `iftop` 做带宽基线比对,再用 tcpdump 定向深挖异常时段流量











