网络安全入门实战:用tshark在Linux上快速排查‘可疑流量’与端口扫描
2026/6/8 8:17:56 网站建设 项目流程

网络安全入门实战:用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 wireshark

Debian/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 基础网络诊断准备

开始捕获前,需要明确几个关键信息:

  1. 监控网卡:通过ip a确认网卡名称(如eth0、ens18)
  2. 可疑IP线索:检查系统日志/防火墙记录中的异常IP
  3. 典型攻击特征
    • 端口扫描:高频SYN包
    • DDoS攻击:同一目标的密集请求
    • 暴力破解:重复认证尝试

记录这些信息将帮助后续过滤规则编写。建议同时打开两个终端窗口:一个用于tshark捕获,另一个用于验证分析结果。

2. 实战流量捕获与分析

2.1 基础捕获命令

最简单的实时捕获命令(按Ctrl+C停止):

tshark -i eth0

但这会显示所有流量,实际排查中需要配合过滤规则。常用参数组合:

参数作用示例
-c限制抓包数量-c 100
-w保存到文件-w suspect.pcap
-fBPF过滤语法-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:来源IP
  • tcp.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,3389

3.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.8

4. 自动化监控方案

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.sh

4.2 数据持久化分析

长期监控建议采用以下架构:

  1. 捕获层:定时运行tshark保存pcap文件
    tshark -i eth0 -w /var/capture/hourly/$(date +\%Y\%m\%d-\%H).pcap -a filesize:100000
  2. 分析层:使用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包数量
  3. 可视化层:通过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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询