nftables 状态检测机制:理解 TCP 三次握手过滤逻辑

老枫姑娘_5845

老枫姑娘_5845

2026-06-19

951人浏览

原创

nftables本身不解析tcp报文或校验三次握手合法性,仅依赖conntrack提供l4连接状态标签;ct state established/related/invalid/new等状态由conntrack预计算,nftables仅匹配这些标记实现快速过滤与策略执行。

nftables 状态检测机制:理解 tcp 三次握手过滤逻辑

nftables 本身不解析 TCP 报文字段,也不校验三次握手的合法性(比如 SYN 后是否收到 SYN-ACK、ACK 是否合法),它依赖内核 conntrack 子系统提供连接状态标签。真正的“状态检测”发生在连接跟踪层,nftables 只是读取并匹配这些预计算好的状态标记。

conntrack 提供的 L4 状态是核心依据

conntrack 在连接生命周期中为每个数据包打上状态标签,nftables 直接使用这些标签做快速决策:

  • ct state established:表示该连接已完成三次握手(对 TCP)或已有双向通信(对 UDP)。这是最常用、最可靠的放行条件,能自然过滤掉未完成握手的 SYN 包。
  • ct state related:匹配由主连接触发的辅助流,例如 FTP 数据连接、ICMP 错误报文、DNS 响应等。它依赖 conntrack 的协议辅助模块(如 nf_conntrack_ftp)识别关联关系。
  • ct state invalid:表示该包无法归属到任何已知连接,通常因校验失败、序列号异常、无对应连接条目等。建议默认丢弃,是防御扫描和畸形包的第一道防线。
  • ct state new:仅匹配连接的第一个包(通常是 TCP SYN 或 UDP 首包)。但需谨慎使用——它不能区分合法服务请求和恶意扫描,常配合源 IP 限速或白名单使用。

为什么不能靠 nftables 单独实现“握手合法性”过滤

TCP 三次握手的语义规则(如 SYN 必须无 ACK、SYN-ACK 必须同时置位、ACK 序号必须等于 SYN 序号+1)属于协议状态机逻辑,需逐包解析 TCP 头部字段并维护上下文。nftables 规则引擎不支持这种有状态的字段组合判断和跨包关联。这类深度检测必须交由:

智谱清言
智谱清言

智谱清言是一款AI工具,智谱推出的全能AI助手。

下载
  • eBPF 程序在内核态实时解析并标记可疑握手行为;
  • 用户态守护进程(如 suricata、custom TCP monitor)结合 libpcap 分析流量,再通过 netlink 或 socket 向 nftables 注入动态规则或标记。

实际策略中如何合理利用 ct state

典型安全策略不是“只允许三次握手完成后的包”,而是分层控制:

  • 入口链(input)默认 drop,显式放行 ct state established,related;
  • 对需要对外提供服务的端口(如 22、80、443),额外允许 tcp dport {22,80,443} ct state new,但应搭配速率限制(limit rate 5/minute)防 SYN 洪水;
  • 显式丢弃 ct state invalid,避免异常包绕过规则;
  • 若部署了 DNAT,可结合 ct status dnat 区分外网进来的连接与内网主动发起的连接,便于做不同策略。

排查握手失败时,别只盯 nftables

当客户端卡在 SYN_SENT,常见原因不在 nftables 规则本身,而在更底层:

  • 服务端未监听目标端口(ss -tlnp | grep :端口);
  • SYN 包被防火墙静默丢弃(检查 nft list ruleset 中 input 链是否意外 DROP 了 new 状态);
  • 服务端 SYN 队列满(ss -s | grep synrecv),此时 conntrack 可能根本未创建条目,nftables 也就无状态可查;
  • 云平台安全组或中间设备拦截,SYN 根本未到达服务器网卡。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 网络安全
Java 网络安全

本专题聚焦 Java 在网络安全与加密通信中的应用,系统讲解常见加密算法(MD5、SHA、AES、RSA)、数字签名、HTTPS证书配置、令牌认证(JWT、OAuth2)及常见安全漏洞防护(XSS、SQL注入、CSRF)。通过实战项目(如安全登录系统、加密文件传输工具),帮助学习者掌握 Java 安全开发与加密技术的实战能力。

2025.10.13

4285

12

PHP 安全与防护
PHP 安全与防护

本专题聚焦于PHP开发中的安全问题与防御措施,详细讲解SQL注入、XSS攻击、CSRF攻击、文件包含漏洞等常见安全风险及其修复方法。通过结合实际案例,帮助开发者理解漏洞成因,掌握输入验证、会话安全、加密存储与安全编码规范,全面提升PHP网站的安全防护水平。

2025.11.04

395

21

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3750

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3233

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2333

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5610

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5262

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3113

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2625

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习