conntrack 是一个功能强大的命令行工具,用于在 Linux 系统上查看、修改和删除内核中的 Netfilter 连接跟踪表(Connection Tracking Table, 简称 conntrack 或 conntrack table),这个表是防火墙(如 iptables、nftables)和状态检测功能的核心,它记录了所有经过网络堆栈的、符合规则的活动的网络连接状态。

什么是连接跟踪?
在深入命令之前,先理解它的作用至关重要。
想象一下,你的 Linux 服务器是一个繁忙的港口,每一个网络数据包(比如一个 SYN 包)就像一艘试图进港的船,连接跟踪系统就是港口的“调度中心”和“登记处”。
- 建立连接:当一艘船(SYN 包)进港时,调度中心记录下它的信息:来自哪个国家(源 IP)、开往哪个国家(目的 IP)、船的类型(协议,如 TCP/UDP)、货物是什么(端口),这就像创建了一个新的连接条目。
- 跟踪状态:调度中心会跟踪这艘船的状态,它是在等待靠岸(
SYN_SENT)、已经靠岸卸货(ESTABLISHED)、准备离港(FIN_WAIT)还是已经离港(TIME_WAIT)?对于 TCP,ESTABLISHED,RELATED,NEW,INVALID等状态。 - 允许返回流量:最关键的一点是,调度中心知道哪些船是合法的,如果一个港口的船(服务器)给外国(客户端)发了一箱货(一个 HTTP 响应),那么当外国船的返程船(客户端的 ACK 包)回来时,调度中心会认出:“哦,这是我们港口出去的船,让它回来。” 这就是所谓的“状态检测防火墙”的基础,没有连接跟踪,防火墙就只能基于 IP 和端口做简单的“允许/禁止”,而无法智能地识别“这个响应是允许的,因为它是由我们主动发起的请求引起的”。
conntrack 命令的基本使用
conntrack 命令通常需要 root 权限才能执行。
查看帮助
conntrack -h # 或者 man conntrack
这是学习命令选项最快的方式。

查看所有连接条目
这是最常用的功能,用于诊断当前系统上所有的网络活动。
sudo conntrack -L
输出示例解读:
ipv origin destination proto status
src=192.168.1.100 dst=8.8.8.8 sport=54321 dport=53 src=8.8.8.8 dst=192.168.1.100 sport=53 dport=54321 udp UNREPLIED src=192.168.1.100 dst=8.8.8.8 sport=54321 dport=53 src=8.8.8.8 dst=192.168.1.100 sport=53 dport=54321 udp ASSURED
src=10.0.0.5 dst=1.2.3.4 sport=12345 dport=80 src=1.2.3.4 dst=10.0.0.5 sport=80 dport=54321 tcp ESTABLISHED
- ipv:IP 版本 (ipv4 或 ipv6)。
- src/dst:源/目的 IP 地址。
- sport/dport:源/目的端口号。
- proto:协议 (tcp, udp, icmp 等)。
- status:连接状态,这是最重要的信息,常见状态有:
ESTABLISHED:连接已建立,数据可以双向传输。NEW:连接的第一个包,如 TCP 的 SYN 包。RELATED:与一个已存在的连接相关的新连接,FTP 的数据连接(控制端口是 21,数据端口是 20)RELATED 连接。UNREPLIED:已发送请求,但尚未收到响应。ASSURED:连接被认为是合法的,可以保证返回流量被允许。INVALID:无法识别或不符合预期的包,通常会被丢弃。
查看特定连接条目
当连接很多时,全量查看不现实,我们可以使用 -j 或 --dump 选项,结合 grep 来过滤。
示例 1:查看与某个 IP 的所有连接

# 查看 IP 192.168.1.100 的所有连接 sudo conntrack -L | grep 192.168.1.100
示例 2:查看特定端口的连接
# 查看 80 端口的所有 TCP 连接 sudo conntrack -L --proto tcp --dport 80
示例 3:查看特定状态的连接
# 查看所有已建立的连接 sudo conntrack -L --state ESTABLISHED
删除连接条目
当连接状态异常(半开连接过多导致性能下降),或者需要手动终止某个特定连接时,删除条目非常有用。
警告: 错误地删除连接可能会导致应用程序通信中断,请谨慎操作。
根据 ID 删除(最精确)
找到连接的 ID,然后用 -D 删除。
# 1. 找到目标连接的 ID sudo conntrack -L | grep "src=1.2.3.4 dst=5.6.7.8" # 假设输出是: # ipv4 1.2.3.9678 5.6.7.880 tcp ESTABLISHED src=1.2.3.4 54321 dst=5.6.7.8 80 src=5.6.7.8 80 dst=1.2.3.4 54321 ESTABLISHED # ID 1.2.3.9678 # 2. 使用 ID 删除 sudo conntrack -D 1.2.3.9678
根据规则删除(批量删除)
使用 -F (flush) 或 -D 加上过滤条件。
# 删除所有来自 192.168.1.100 的连接 sudo conntrack -D --src 192.168.1.100 # 删除所有到 10.0.0.5 的 UDP 连接 sudo conntrack -D --dst 10.0.0.5 --proto udp # 清空整个连接跟踪表(非常危险!) sudo conntrack -F
创建新的连接条目
这个功能比较高级,通常用于测试或模拟场景,你可以手动创建一个条目,让防火墙认为某个连接已经存在,从而允许后续的流量通过。
# 手动创建一个 TCP 连接条目 # 格式: conntrack -I [options] sudo conntrack -I --proto tcp --src 192.168.1.100 --dst 8.8.8.8 --sport 12345 --dport 80 --state ESTABLISHED
更新连接条目
可以修改现有连接的某些属性,例如超时时间。
# 更新连接条目 1.2.3.9678 的超时时间为 600 秒 sudo conntrack -U --id 1.2.3.9678 --timeout 600
conntrack 与 iptables 的关系
conntrack 是 iptables 的幕后英雄,当你设置一条 iptables 状态检测规则时,iptables 内部会去查询或操作 conntrack 表。
示例:
# 允许所有已建立的、以及与已建立连接相关的流量进入 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
这条规则的工作原理是:
- 当一个数据包进入
INPUT链时,iptables的state模块会检查这个数据包。 - 如果这个数据包是
ESTABLISHED或RELATED状态(即conntrack表中存在对应条目),iptables就允许它通过。 - 如果数据包是
NEW状态(如一个新的 TCP SYN 请求),并且没有被其他规则拒绝,iptables会允许它,conntrack会自动为它创建一个新的条目。
conntrack-tools 服务
除了命令行工具,还有一个名为 conntrackd 的守护进程,它是 conntrack-tools 包的一部分,它主要用于高可用性集群环境,keepalived 或 pacemaker,它的作用是同步主备防火墙之间的连接跟踪表,确保当一个节点故障时,另一个节点能无缝接管所有活动的连接,避免用户断线。
在单机服务器上,通常只需要安装 conntrack 命令行工具即可。
如何安装
在基于 Debian/Ubuntu 的系统上:
sudo apt-get update sudo apt-get install conntrack
在基于 RHEL/CentOS/Fedora 的系统上:
sudo yum install conntrack # 或者对于较新版本 sudo dnf install conntrack
| 功能 | 命令 | 用途 |
|---|---|---|
| 查看帮助 | conntrack -h |
了解所有可用选项。 |
| 全量查看 | conntrack -L |
查看当前所有连接跟踪条目。 |
| 过滤查看 | conntrack -L \| grep ... 或 conntrack -L --proto ... --dport ... |
快速定位特定连接。 |
| 精确删除 | conntrack -D <id> |
根据连接 ID 安全删除单个连接。 |
| 批量删除 | conntrack -D --src ... 或 conntrack -F |
根据条件删除多个或全部连接(需谨慎)。 |
| 手动创建 | conntrack -I ... |
用于测试或模拟场景。 |
| 更新条目 | conntrack -U ... |
修改现有连接的属性,如超时时间。 |
掌握 conntrack 命令是 Linux 网络和防火墙排障的必备技能,它能让你直观地看到网络连接的“全貌”,从而快速定位和解决网络问题。
