网络安全入门实战:用tshark在Linux上快速排查‘可疑流量’与端口扫描
当你发现服务器响应变慢、日志中出现异常连接记录,或是监控系统频繁报警时,第一反应往往是"是否遭遇了网络攻击?"。作为运维人员或开发者,掌握快速识别异常流量的能力至关重要。本文将带你使用tshark这款轻量级工具,像网络安全专家一样高效排查可疑活动。
tshark作为Wireshark的命令行版本,无需图形界面即可完成专业级流量分析。它特别适合在服务器环境快速部署使用,能精准捕获SYN洪水、端口扫描等常见攻击特征。与依赖复杂安全设备的企业级方案不同,tshark让基础安全分析变得触手可及。
1. 环境准备与工具安装
1.1 安装tshark组件
主流Linux发行版可通过包管理器快速安装。对于基于RHEL的系统:
# 添加EPEL仓库(CentOS/RHEL 7) sudo yum install -y epel-release # 安装Wireshark套件 sudo yum install -y wiresharkDebian/Ubuntu用户则使用:
sudo apt update && sudo apt install -y tshark安装后验证版本:
tshark -v # 输出示例:TShark 3.6.8 (Git commit ...)注意:默认安装会启用非root用户抓包限制,建议通过以下命令临时授权:
sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
1.2 基础网络诊断准备
开始捕获前,需要明确几个关键信息:
- 监控网卡:通过
ip a确认网卡名称(如eth0、ens18) - 可疑IP线索:检查系统日志/防火墙记录中的异常IP
- 典型攻击特征:
- 端口扫描:高频SYN包
- DDoS攻击:同一目标的密集请求
- 暴力破解:重复认证尝试
记录这些信息将帮助后续过滤规则编写。建议同时打开两个终端窗口:一个用于tshark捕获,另一个用于验证分析结果。
2. 实战流量捕获与分析
2.1 基础捕获命令
最简单的实时捕获命令(按Ctrl+C停止):
tshark -i eth0但这会显示所有流量,实际排查中需要配合过滤规则。常用参数组合:
| 参数 | 作用 | 示例 |
|---|---|---|
-c | 限制抓包数量 | -c 100 |
-w | 保存到文件 | -w suspect.pcap |
-f | BPF过滤语法 | -f "tcp port 22" |
-Y | 显示过滤器 | -Y "http.request" |
2.2 识别端口扫描活动
端口扫描通常表现为短时间内对多个端口发送SYN包。以下命令可捕获这类行为:
tshark -i eth0 -f "tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0" -c 50关键字段解析:
tcp.flags.syn==1:SYN标志位tcp.flags.ack==0:非ACK响应ip.src:来源IPtcp.dstport:目标端口
典型输出示例:
1 0.000000 192.168.1.100 → 10.0.0.1 TCP 74 54321 → 22 [SYN] Seq=0 Win=1024 Len=0 2 0.001234 192.168.1.100 → 10.0.0.1 TCP 74 54321 → 80 [SYN] Seq=0 Win=1024 Len=0 3 0.002345 192.168.1.100 → 10.0.0.1 TCP 74 54321 → 443 [SYN] Seq=0 Win=1024 Len=0发现同一IP在极短时间内尝试连接不同端口,基本可判定为扫描行为。
2.3 检测SYN洪水攻击
SYN洪水通过发送大量SYN包耗尽服务器资源。检测命令:
tshark -i eth0 -q -z "io,stat,1,tcp.flags.syn==1 and tcp.flags.ack==0"输出统计示例:
=================================================================== IO Statistics Interval: 1.000 secs Column #0: |1 | Time |frames | ----------------------------------------------------------- 0-1 |1256 | <-- 每秒1256个SYN包 1-2 |1342 | 2-3 |1421 |正常情况SYN包频率应保持稳定,若持续高位且来自分散IP,很可能遭遇攻击。
3. 高级分析技巧
3.1 组合过滤条件
通过逻辑运算符组合多种条件:
# 捕获来自特定IP的SSH暴力破解尝试 tshark -i eth0 -Y "tcp.port==22 and ip.src==192.168.1.100 and frame.time_delta < 1.0"常用过滤模式:
http.request.method==POST:HTTP POST请求dns.qry.name contains 'example.com':特定DNS查询icmp.type==8:ICMP ping请求
3.2 关键字段提取
使用-T fields提取特定字段,便于后续分析:
tshark -i eth0 -Y "tcp.flags.syn==1" -T fields -e ip.src -e tcp.dstport -E separator=,输出CSV格式:
192.168.1.100,22 192.168.1.100,80 10.0.0.15,33893.3 与系统工具联动
将tshark输出传递给其他工具处理:
# 统计源IP出现的频率 tshark -i eth0 -Y "tcp.flags.syn==1" -T fields -e ip.src | sort | uniq -c | sort -nr输出示例:
142 192.168.1.100 23 10.0.0.15 5 172.16.0.84. 自动化监控方案
4.1 简易告警脚本
保存以下脚本为monitor_scan.sh:
#!/bin/bash THRESHOLD=50 # 每分钟SYN包阈值 count=$(tshark -i eth0 -a duration:60 -q -z "io,stat,0,tcp.flags.syn==1 and tcp.flags.ack==0" | grep -P "\d+ →" | awk '{print $3}') if [ "$count" -gt "$THRESHOLD" ]; then echo "$(date): Possible port scan detected! SYN count: $count" >> /var/log/scan_alert.log # 可添加邮件或API告警 fi通过cron每分钟执行:
* * * * * /path/to/monitor_scan.sh4.2 数据持久化分析
长期监控建议采用以下架构:
- 捕获层:定时运行tshark保存pcap文件
tshark -i eth0 -w /var/capture/hourly/$(date +\%Y\%m\%d-\%H).pcap -a filesize:100000 - 分析层:使用Python等语言解析pcap
from pyshark import FileCapture cap = FileCapture('/path/to/file.pcap', display_filter='tcp.flags.syn==1') print(len([pkt for pkt in cap])) # 统计SYN包数量 - 可视化层:通过Grafana等工具展示趋势
4.3 性能优化技巧
大规模流量捕获时需注意:
- 使用
-b参数实现环形缓冲:tshark -i eth0 -b filesize:100000 -w /var/capture/rotation.pcap - 限制捕获长度节约资源:
tshark -i eth0 -s 96 # 只捕获每个包的前96字节 - 禁用反向DNS解析提升速度:
tshark -i eth0 -n