在 Linux 系统中,conntrack
是一个用于查看和管理网络连接跟踪的工具。它与 Netfilter 和 iptables 配合使用,主要用于处理 NAT(网络地址转换)和防火墙规则中的连接状态信息。
conntrack
(Connection Tracking)是 Linux 内核的一个子系统,用于跟踪网络连接的状态。每个连接都被视为一个会话,并且其状态会被记录下来。这对于实现状态防火墙、NAT 转换等功能非常重要。
大多数 Linux 发行版都自带了 conntrack-tools
包,如果没有安装,可以通过以下命令进行安装:
# 对于 Debian/Ubuntu 系统
sudo apt-get install conntrack
# 对于 CentOS/RHEL 系统
sudo yum install conntrack-tools
使用 conntrack -L
命令可以列出当前所有的连接跟踪条目。
conntrack -L
输出示例:
tcp 6 431997 ESTABLISHED src=192.168.1.10 dst=192.168.1.1 sport=56789 dport=80 src=192.168.1.1 dst=192.168.1.10 sport=80 dport=56789 [ASSURED] mark=0 use=1
字段解释:
tcp
:协议类型。6
:协议号(TCP 为 6,UDP 为 17)。431997
:超时时间(以秒为单位)。ESTABLISHED
:连接状态。src
和 dst
:源 IP 和目标 IP。sport
和 dport
:源端口和目标端口。可以使用 -p
参数按协议过滤连接。例如,只显示 TCP 连接:
conntrack -L -p tcp
可以使用 --src
或 --dst
参数按特定 IP 地址过滤连接。例如,只显示来自 192.168.1.10 的连接:
conntrack -L --src 192.168.1.10
可以使用 conntrack -D
命令删除特定的连接。例如,删除来自 192.168.1.10 的 TCP 连接:
conntrack -D -p tcp --src 192.168.1.10
如果需要删除所有连接跟踪条目,可以使用以下命令:
conntrack -F
注意:此操作会清除所有连接跟踪条目,可能导致现有连接中断。
sudo apt-get install conntrack
conntrack -L
conntrack -L -p tcp
conntrack -D -p tcp --src 192.168.1.10
conntrack -F
Linux 内核对 conntrack 表的大小有默认限制。可以通过以下命令查看当前限制:
cat /proc/sys/net/netfilter/nf_conntrack_max
如果需要增加限制,可以修改该值:
echo 100000 > /proc/sys/net/netfilter/nf_conntrack_max
内核会自动清理过期的连接条目。可以通过以下命令查看超时设置:
sysctl -a | grep net.netfilter.nf_conntrack_tcp_timeout_established
如果需要调整超时时间,可以修改对应的值:
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=86400