Ubuntu 上使用 Dumpcap 进行网络安全审计
一 环境准备与权限配置
sudo apt update && sudo apt install -y wireshark dumpcapsudo setcap 'cap_net_raw,cap_net_admin+eip' /usr/bin/dumpcapsudo usermod -aG wireshark $USERsudo mkdir -p /var/log/dumpcap && sudo chown $USER:$USER /var/log/dumpcap二 捕获策略与常用命令
dumpcap -i eth0 -w /var/log/dumpcap/eth0_$(date +%F_%H%M%S).pcapdumpcap -i eth0 -f "tcp port 80 or tcp port 443 or udp port 53" -w web_dns.pcapdumpcap -i eth0 -f "src net 192.168.1.0/24 and dst host 192.168.1.10 and (tcp port 22 or tcp port 3389)" -w admin_access.pcapdumpcap -i eth0 -w /var/log/dumpcap/audit.pcap -a filesize:100000 -a files:10dumpcap -i eth0 -i wlan0 -w multi_if.pcapdumpcap -i eth0 -w - | wireshark -r -dumpcap -i eth0 -s 0 -B 1048576 -w full_eth0.pcapdumpcap -i eth0 -t ad -v -w ts_verbose.pcap-i <iface>:指定接口(如 eth0;any 为所有接口)-f "<bpf>":捕获过滤器(BPF 语法)-w <file>:输出文件(- 表示标准输出)-a filesize:<KB> / -a files:<N>:环形文件大小与数量-s <len>:快照长度(0 为完整)-B <KB>:内核缓冲区大小-t ad / -v:时间格式与详细模式。三 审计场景与 BPF 过滤器示例
| 审计目标 | BPF 过滤器示例 | 说明 |
|---|---|---|
| 可疑主机外联 | host 203.0.113.45 |
聚焦与特定外部 IP 的双向通信 |
| 内网横向移动 | src net 192.168.1.0/24 and dst net 192.168.1.0/24 and not host 192.168.1.1 |
内网互访,排除网关/安全设备 |
| 暴力登录尝试 | tcp dst port 22 and (tcp[tcpflags] & tcp-syn != 0) and (tcp[tcpflags] & tcp-ack == 0) |
仅 SYN 探测,定位 SSH 扫描 |
| HTTP 可疑访问 | tcp port 80 and (http.host contains "admin" or http.request.uri contains "cmd.php") |
结合显示过滤器在 Wireshark/tshark 中细化 |
| DNS 隧道/异常查询 | udp port 53 and (dns.qry.name contains "i2p" or dns.qry.name matches "\\.onion$") |
发现非常规域名与 .onion 查询 |
| 明文凭证泄露 | tcp port 21 or (tcp port 23 and data-text-lines contains "password") or (tcp port 3306 and data-text-lines contains "SELECT") or (tcp port 1433 and data-text-lines contains "SELECT") |
抓取常见明文协议与关键字(示例,需结合显示过滤器复核) |
| 可疑 SMB 行为 | tcp port 445 and (smb.cmd == 0x72 or smb2.cmd == 5) |
创建/打开文件等可疑操作(建议用显示过滤器复核) |
| 可疑 ICMP 隧道 | icmp and (icmp[4:4] > 100 or icmp[4:4] < 8) |
非标准 ICMP 载荷长度,需结合上下文研判 |
说明:上表的 BPF 为“捕获过滤器”,只影响抓什么;如需更细粒度分析,可在 Wireshark/tshark 中使用“显示过滤器”(如 http.request.method == "GET"、dns.qry.name contains "example")。 |
四 自动化与长期运行
0 * * * * /usr/bin/dumpcap -i eth0 -w /var/log/dumpcap/audit_$(date +\%F_\%H).pcap -a filesize:100000 -a files:24ExecStart=/usr/bin/dumpcap -i any -w /var/log/dumpcap/service_capture.pcap -a filesize:100000 -a files:10User=your_audit_user(该用户应属于 wireshark 组或具备相应能力)sudo systemctl daemon-reload && sudo systemctl enable --now dumpcap.service五 分析与取证工作流
tshark -r capture.pcap -T fields -e frame.number -e frame.time -e ip.src -e ip.dst | headtshark -r capture.pcap -qz io,stat,0tshark -r capture.pcap -Y "http.request.method == 'GET' || http.request.method == 'POST'" -T fields -e http.host -e http.request.uritshark -r capture.pcap -Y "dns.qry.name contains 'onion' || dns.qry.name matches '\\.i2p$'" -T fields -e dns.qry.nametshark -r capture.pcap -q -z ip_hosts,treetshark -r capture.pcap -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0" -T fields -e ip.src -e tcp.dstport | sort | uniq -c | sort -nr | head