Linux下使用tcpdump捕获攻击流量实战教程
# Linux下使用tcpdump捕获攻击流量实战教程
## 简介
`tcpdump` 是 Linux 系统中最强大的命令行网络抓包工具之一。它能够实时捕获网络接口上的数据包,并支持灵活的过滤规则,非常适合用于分析网络攻击流量、排查异常连接和进行安全取证。本文将通过具体示例,演示如何使用 `tcpdump` 捕获常见的攻击流量,包括端口扫描、DoS 攻击、SQL 注入等,并给出防御建议。
## 基础用法
### 安装 tcpdump
大多数 Linux 发行版默认已安装 `tcpdump`。若未安装,可使用以下命令:
# Debian/Ubuntu
sudo apt-get install tcpdump
# CentOS/RHEL
sudo yum install tcpdump
### 基本抓包语法
sudo tcpdump -i eth0 -nn -X- `-i eth0`:指定监听的网络接口(可用 `ip a` 查看)。
- `-nn`:不解析域名和端口名,显示原始 IP 和端口号,提高性能。
- `-X`:以十六进制和 ASCII 形式显示数据包内容。
## 捕获攻击流量实战
### 1. 捕获端口扫描流量
攻击者常使用 `nmap` 进行端口扫描。我们可以通过捕获 SYN 包来发现扫描行为。
sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0'**说明**:
- 该命令仅捕获 TCP SYN 包(不包含 ACK),即连接请求的第一个包。
- 大量来自同一 IP 的 SYN 包可能表示端口扫描。
**示例输出**:
22:15:30.123456 IP 192.168.1.100.54321 > 10.0.0.1.80: Flags [S], seq 123456789, win 65535, length 0
22:15:30.123457 IP 192.168.1.100.54321 > 10.0.0.1.443: Flags [S], seq 123456790, win 65535, length 0**注意事项**:
- 忽略自身发起的连接,可使用 `and not src host 你的IP`。
- 对于 SYN 扫描,可进一步统计同一源 IP 的 SYN 包数量。
### 2. 捕获 DoS/DDoS 攻击流量
DoS 攻击通常表现为大量数据包涌向目标。以下命令捕获目标 IP 为 `10.0.0.1` 的所有流量:
sudo tcpdump -i eth0 -nn 'dst host 10.0.0.1'更精确地,针对 SYN Flood 攻击,捕获大量 SYN 包:
sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0 and dst host 10.0.0.1'**防御建议**:
- 使用防火墙限制单位时间内来自同一 IP 的连接数。
- 部署专业的 DDoS 防护设备或云服务。
### 3. 捕获 SQL 注入尝试
SQL 注入通常通过 HTTP 请求中的特殊字符实现。我们可以捕获 80 端口的 HTTP 请求,并过滤出包含 SQL 关键字的包:
sudo tcpdump -i eth0 -nn -A 'tcp port 80 and (dst host 你的Web服务器IP)' | grep -i -E 'select|union|drop|insert|delete|update|--'**说明**:
- `-A`:以 ASCII 格式显示包内容,便于查看 HTTP 数据。
- `grep` 过滤常见 SQL 关键词。
**示例输出**:
GET /index.php?id=1 UNION SELECT username,password FROM users -- HTTP/1.1**防御建议**:
- 使用参数化查询或预编译语句。
- 部署 Web 应用防火墙(WAF)。
### 4. 捕获暴力破解尝试
暴力破解通常表现为大量登录请求。以下命令捕获 SSH 端口的连接尝试:
sudo tcpdump -i eth0 -nn 'tcp port 22 and (tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0)'然后统计每个源 IP 的 SYN 包数量:
sudo tcpdump -i eth0 -nn -c 10000 'tcp port 22 and (tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0)' 2>/dev/null | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -nr | head -10**防御建议**:
- 使用 `fail2ban` 等工具自动封禁可疑 IP。
- 修改 SSH 默认端口,使用密钥认证。
## 保存和分析捕获的数据
将捕获的数据保存到文件,便于后续分析:
sudo tcpdump -i eth0 -nn -w attack.pcap使用 `-r` 读取文件:
tcpdump -r attack.pcap -nn也可用 Wireshark 等工具进行图形化分析。
## 常见错误及解决
### 错误1:权限不足
tcpdump: no suitable device found**解决**:使用 `sudo` 或以 root 用户运行。
### 错误2:过滤表达式错误
tcpdump: syntax error**解决**:检查过滤表达式,确保括号匹配,关键字正确。例如,`host` 和 `port` 后需跟具体值。
### 错误3:捕获不到任何包
**可能原因**:
- 接口名称错误:使用 `ip a` 确认接口名。
- 过滤条件过于严格:先使用 `-i eth0` 不加过滤测试。
- 网卡未开启混杂模式:`tcpdump` 会自动设置,但某些环境需手动开启 `ip link set eth0 promisc on`。
## 总结
`tcpdump` 是网络安全的瑞士军刀。通过本文的实战示例,你可以捕获端口扫描、DoS 攻击、SQL 注入和暴力破解等常见攻击流量。记住,捕获只是第一步,结合日志分析、防火墙规则和入侵检测系统才能构建全面的防御体系。
在安全事件响应中,`tcpdump` 的快速部署和精确过滤能力无可替代。建议在日常运维中定期使用 `tcpdump` 监控网络异常,防患于未然。

