0

0

Linux iptables 防火墙规则匹配机制解析

冷炫風刃

冷炫風刃

发布时间:2026-01-28 18:31:07

|

562人浏览过

|

来源于php中文网

原创

iptables规则按顺序逐条匹配,满足即执行动作且不再检查后续规则;顺序错误、模块依赖、网络路径差异及连接跟踪状态是四大常见问题根源。

linux iptables 防火墙规则匹配机制解析

iptables 规则匹配是顺序执行的,不匹配就跳下一条

iptables 不会“智能选择”最合适的规则,而是从链(如 INPUT、FORWARD)的第一条规则开始逐条比对,一旦某条规则的条件全部满足,就立即执行其 -j 目标动作(比如 ACCEPTDROP),后续规则不再检查。这意味着规则顺序直接决定行为结果。

常见错误现象:iptables -A INPUT -p tcp --dport 22 -j ACCEPT 加在最后,但前面已有 -j DROP,导致 SSH 连接被拦。

  • 新增规则用 iptables -I 插入开头,比 -A 追加更可控
  • 调试时用 iptables -L -n --line-numbers 查看编号和匹配计数,确认哪条规则生效了
  • 默认策略(POLICY)是兜底逻辑,它只在所有规则都不匹配时才触发

匹配条件是“与”关系,多个 -m 模块可叠加但需注意加载顺序

一条规则里的所有匹配项(如 -s--dport-m state --state ESTABLISHED)必须同时成立,才算匹配成功。但不同扩展模块(-m)之间有隐含依赖:比如 -m conntrack 需要连接跟踪子系统已启用,-m iprange 不能和 -s 同时用于源地址限定。

使用场景:封禁某 IP 段的非 ESTABLISHED 连接,但放行已建立的回包。

  • -m state --state NEW 已被弃用,应改用 -m conntrack --ctstate NEW
  • -m multiport 只支持单个 --dports--sports,不能混用
  • 内核未加载对应模块(如 xt_conntrack)时,含 -m conntrack 的规则会报错或静默忽略

内置链的触发时机由内核网络路径决定,不是所有包都走同一链

一个 TCP SYN 包进入本机,走的是 INPUT 链;但若该机器开启转发且目标是另一台主机,则走 FORWARD 链;而本机发出的包走 OUTPUT 链。很多人误以为“所有进来的包都进 INPUT”,忽略了 DNAT 或转发场景。

Voicenotes
Voicenotes

Voicenotes是一款简单直观的多功能AI语音笔记工具

下载

典型陷阱:做了 DNAT(PREROUTING-j DNAT)后,目的 IP 已改变,后续匹配基于新地址,但 INPUT 链看到的是修改后的地址 —— 这容易导致规则写错目标端口或 IP。

  • PREROUTINGPOSTROUTING 属于 rawmanglenat 表,filter 表没有它们
  • DNAT 后的包在 INPUT 链中匹配的是“转换后的目的地址”,不是原始地址
  • 本地进程发往 127.0.0.1 的包不经过 FORWARDPREROUTING,只走 OUTPUTINPUT(环回)

规则不生效?先查 conntrack 状态和 raw 表干扰

很多看似“写了规则却没效果”的问题,根源不在 filter 表本身,而在连接跟踪或早期表(raw)提前截断了流程。例如 raw 表中的 -j NOTRACK 会让包跳过连接状态判断,导致 -m conntrack 规则永远不匹配。

性能影响:开启 nf_conntrack 会带来一定开销,高并发短连接场景下可能成为瓶颈;而关闭它又会让状态类规则失效。

  • 检查是否启用了 raw 表规则:iptables -t raw -L -n
  • 查看当前连接跟踪条目:conntrack -L | head -20,确认状态是否符合预期(如 ESTABLISHEDINVALID
  • 临时清空连接跟踪表:conntrack -F(慎用,会中断现有连接)
规则顺序、模块依赖、网络路径、连接跟踪 —— 这四个点串起来,基本覆盖了 iptables 匹配机制里最容易卡住人的地方。实际调规则时,别急着改 filter,先跑一遍 iptables -t raw -L -nconntrack -L,往往比重写十遍 -A INPUT 更快定位问题。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

396

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

575

2023.08.10

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

185

2023.11.24

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

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

1394

2023.06.21

如何安装LINUX
如何安装LINUX

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

706

2023.06.29

linux find
linux find

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

295

2023.06.30

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

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

779

2023.07.05

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

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

575

2023.07.06

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

141

2026.01.28

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号