nf_conntrack 的 ctstate

ctstate

ctstate 是 conntrack 对“当前报文相对连接跟踪条目”的分类标签(用于规则匹配),主要依据:

  • 是否绕过跟踪(raw 表 NOTRACK / nftables bypass)

  • 是否命中 conntrack 条目(original/reply 方向)

  • 是否已见 reply(常见关键位:SEEN_REPLY

  • 是否命中 expectation 或可被关联(helper / ICMP 错误嵌套头)

  • 协议跟踪器是否接受该报文(否则可能是 INVALID

ctstate 含义(策略视角) 典型判定要点
NEW 新流量/新建条目 查表未命中但允许创建;或条目存在但尚未见 reply(UDP 常见)
ESTABLISHED 已有双向迹象 命中条目且已见 reply(常见依据:SEEN_REPLY=1
RELATED 与既有连接相关 命中 expectation(helper 预告)或 ICMP 错误可关联回已有条目
INVALID 无法可靠追踪/归属 解析失败/状态机不接受/分片校验问题/不可匹配等
UNTRACKED 明确不走 conntrack raw 表命中 NOTRACK 或 nftables bypass

iptables/ebtables 示例

iptables:

1
2
3
4
5
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

nftables:

1
2
3
4
5
6
7
8
# 如果你的系统还没有 filter 表/INPUT 链
nft add table inet filter
nft 'add chain inet filter input { type filter hook input priority 0; policy accept; }'

# 添加规则
nft add rule inet filter input ct state established,related accept
nft add rule inet filter input ct state invalid drop
nft add rule inet filter input tcp dport 22 ct state new accept

快速验证

  • conntrack -L:看是否存在条目/超时

  • conntrack -E:实时看是否创建、何时出现 reply

  • /proc/net/nf_conntrack:内核导出

ctstate vs ctstatus

ctstate:对当前报文的分类 ctstatus:条目内部标志位(如 SEEN_REPLYEXPECTED 等),ctstate 通常由这些标志位综合得出

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计