当前位置: 首页 > news >正文

iptables 防火墙核心知识梳理(附实操指南)

目录

一、核心概念:Netfilter 与 iptables 的关系

二、核心结构:四表五链(规则的组织方式)

2.1 四表:按规则功能划分

2.2 五链:按数据包处理时机划分

2.3 数据包流转流程(核心必记)

三、实操基础:安装与基本语法

3.1 安装 iptables(CentOS 7 环境)

3.2 基本语法格式

3.3 常用控制类型(动作)

四、核心操作:规则的增删改查与默认策略

4.1 查看规则(高频)

4.2 添加规则(高频)

示例:

4.3 删除 / 清空规则

1. 删除单条规则(2 种方式)

2. 清空规则(-F)

4.4 设置默认策略(-P)

五、规则匹配条件(核心:精准过滤)

5.1 通用匹配(无需额外模块,直接使用)

示例:

5.2 隐含匹配(依赖 -p 协议,无需额外模块)

1. 端口匹配(tcp/udp 协议专用)

示例:

2. ICMP 类型匹配(icmp 协议专用)

5.3 显式匹配(需通过 -m 模块 明确指定)

1. 多端口匹配(-m multiport)

2. IP 范围匹配(-m iprange)

3. 状态匹配(-m state,高频且重要)

示例:仅允许已建立 / 相关连接的入站流量(生产环境推荐)

六、实操误区与注意事项(总结)


一、核心概念:Netfilter 与 iptables 的关系

iptables 并非独立防火墙,而是 Netfilter(内核态)+ iptables(用户态) 的组合体系,二者分工明确:

组件工作空间作用运维关注点
Netfilter内核态集成于 Linux 内核,提供数据包过滤、地址转换、标记等底层功能,是规则的 “执行者”无需直接操作
iptables用户态命令行工具,用于管理 Netfilter 的规则(增 / 删 / 改 / 查),是规则的 “管理者”核心操作对象

注:iptables 本质是 “规则管理工具”,所有规则最终由内核的 Netfilter 生效,且规则配置后立即生效,无需重启服务。

二、核心结构:四表五链(规则的组织方式)

iptables 通过 “表(功能分类)→ 链(时机分类)→ 规则(具体动作)” 的层级结构管理数据包,需先理解 “四表”“五链” 的定位和优先级。

2.1 四表:按规则功能划分

四表优先级:raw → mangle → nat → filter(数据包会按此顺序经过不同表的处理)

表名核心功能包含链应用场景
raw关闭数据包的状态跟踪(仅对需要跳过跟踪的场景使用,如高并发服务)PREROUTING、OUTPUT极少用
mangle修改数据包标记(如给数据包打标签,用于后续流量整形)五链全包含(INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING)流量控制、QoS 相关
nat网络地址转换(修改源 / 目的 IP / 端口)PREROUTING(DNAT)、OUTPUT、POSTROUTING(SNAT)内网访问公网(SNAT)、公网访问内网服务(DNAT)
filter数据包过滤(允许 / 拒绝 / 丢弃)INPUT(入站)、OUTPUT(出站)、FORWARD(转发)最常用,主机 / 网络防火墙核心

重点:日常运维中 filter 表(过滤) 和 nat 表(地址转换) 是高频操作对象,raw/mangle 表极少涉及。

2.2 五链:按数据包处理时机划分

“链” 是数据包在流转过程中 “必经的检查点”,不同链对应不同的处理阶段:

链名处理时机典型场景
PREROUTING数据包进入内核后,路由选择前(先修改地址,再决定发往哪里)DNAT(公网→内网服务地址映射)
INPUT数据包目标地址是本机,路由选择后进入本机应用前控制外部访问本机服务(如 SSH、Web)
FORWARD数据包需经过本机转发(目标地址非本机),路由选择后转发前网络防火墙(如路由器转发控制)
OUTPUT本机应用发送的数据包,路由选择前控制本机访问外部服务(极少配置)
POSTROUTING数据包转发 / 出站前,路由选择后(最后一步修改地址)SNAT(内网→公网地址伪装)

2.3 数据包流转流程(核心必记)

不同场景下,数据包会经过不同的 “链”,这是编写规则的前提:

  1. 主机型防火墙(数据包目标是本机)
    入站:PREROUTING → 路由选择 → INPUT → 本机应用
    出站:本机应用 → OUTPUT → 路由选择 → POSTROUTING

  2. 网络型防火墙(数据包需转发)
    转发:PREROUTING → 路由选择 → FORWARD → POSTROUTING

三、实操基础:安装与基本语法

3.1 安装 iptables(CentOS 7 环境)

CentOS 7 默认用 firewalld,需先关闭并替换为 iptables

# 1. 关闭 firewalld 并禁止开机启动
systemctl stop firewalld
systemctl disable firewalld# 2. 安装 iptables 及服务管理工具
yum -y install iptables iptables-services# 3. 启动 iptables 并设置开机启动
systemctl start iptables
systemctl enable iptables

3.2 基本语法格式

iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

字段说明注意事项
-t 表名指定操作的表(默认 filter 表)不指定则默认操作 filter 表
管理选项规则操作(如 -A 追加、-I 插入、-D 删除、-L 查看、-P 设置默认策略)选项需大写(如 -A 而非 -a
链名指定操作的链(如 INPUT、POSTROUTING)不指定则操作表内所有链
匹配条件数据包的特征(如源 IP、端口、协议)除默认策略外,必须指定匹配条件
-j 控制类型匹配后的动作(如 ACCEPT、DROP)动作需大写

3.3 常用控制类型(动作)

控制类型作用区别与场景
ACCEPT允许数据包通过正常放行合法流量
DROP直接丢弃数据包,不回复任何信息隐蔽性强(如防扫描),不推荐对普通服务使用
REJECT拒绝数据包,回复 “不可达” 信息明确告知对方 “被拒绝”,适合普通过滤场景
LOG记录日志(/var/log/messages),不影响数据包流转(需配合其他动作)用于审计或排查问题
SNAT修改数据包源地址(如内网 IP → 公网 IP)内网共享公网出口
DNAT修改数据包目的地址(如公网 IP → 内网服务 IP)公网访问内网服务(如 Web、数据库)
MASQUERADE动态 SNAT(适用于公网 IP 不固定的场景,如拨号上网)路由器 / 网关常用

四、核心操作:规则的增删改查与默认策略

4.1 查看规则(高频)

命令作用
iptables -L [链名]查看指定链的规则(默认 filter 表,地址显示为域名 / 服务名)
iptables -nL [链名]数字形式显示(IP 为 0.0.0.0/0 而非 anywhere,端口为数字)
iptables -vnL [链名] --line-numbers显示详细信息(包数、字节数)+ 规则序号(删除 / 修改规则必备)
iptables -t nat -L查看 nat 表的规则

示例:查看 filter 表 INPUT 链的详细规则(带序号)

iptables -vnL INPUT --line-numbers

4.2 添加规则(高频)

  • -A 链名:在链的末尾追加规则(按顺序匹配,末尾优先级最低)
  • -I 链名 [序号]:在链的指定位置插入规则(默认插入到第 1 位,优先级最高)
示例:
  1. 禁止所有主机 ping 本机(ICMP 协议,filter 表 INPUT 链末尾追加)
    iptables -A INPUT -p icmp -j REJECT
    
  2. 允许 192.168.80.0/24 网段访问本机 SSH(22 端口,插入到 INPUT 链第 1 位)
    iptables -I INPUT 1 -s 192.168.80.0/24 -p tcp --dport 22 -j ACCEPT
    

4.3 删除 / 清空规则

1. 删除单条规则(2 种方式)
  • 规则序号删除(推荐,需先通过 --line-numbers 查看序号)
    # 删除 filter 表 INPUT 链的第 3 条规则
    iptables -D INPUT 3
    
  • 规则内容删除(需完全匹配)
    # 删除“拒绝 ICMP 协议”的规则
    iptables -D INPUT -p icmp -j REJECT
    
2. 清空规则(-F
# 清空 filter 表所有链的规则(默认表)
iptables -F# 清空 nat 表所有链的规则
iptables -t nat -F# 清空 filter 表 INPUT 链的规则
iptables -F INPUT

警告:

 
  1. -F 仅清空规则,不影响默认策略(如 INPUT 链默认策略为 DROP 时,清空后仍会拒绝所有入站流量);
  2. 若默认策略为 DROP,清空规则前务必保留 SSH 允许规则(否则会导致远程连接断开,需物理机恢复)。

4.4 设置默认策略(-P

默认策略是 “所有规则都不匹配时” 的最终动作,仅支持 ACCEPT 或 DROP

# 设置 filter 表 INPUT 链默认策略为 DROP(拒绝所有未匹配的入站流量)
iptables -P INPUT DROP# 设置 filter 表 FORWARD 链默认策略为 DROP(网络防火墙常用,拒绝默认转发)
iptables -P FORWARD DROP# 设置 filter 表 OUTPUT 链默认策略为 ACCEPT(允许本机出站流量)
iptables -P OUTPUT ACCEPT

生产环境推荐:默认策略设为 DROP,再通过 “白名单” 放行合法流量(最小权限原则,更安全)。

五、规则匹配条件(核心:精准过滤)

匹配条件是规则的 “筛选器”,只有符合条件的数据包才会执行指定动作。分为三类:通用匹配、隐含匹配、显式匹配。

5.1 通用匹配(无需额外模块,直接使用)

匹配条件说明示例
-p 协议匹配数据包协议(tcp/udp/icmp/all)-p tcp(匹配 TCP 协议)
-s 源地址匹配数据包源 IP / 网段(! -s 表示 “非”)-s 192.168.80.10(匹配源 IP 为 10 的主机)
-d 目的地址匹配数据包目的 IP / 网段-d 192.168.80.0/24(匹配目的网段)
-i 入站网卡匹配数据包流入的网卡(如 ens33)-i ens33(仅匹配从 ens33 网卡进来的流量)
-o 出站网卡匹配数据包流出的网卡-o ens37(仅匹配从 ens37 网卡出去的流量)
示例:

拒绝 192.168.80.10 主机通过 ens33 网卡访问本机 TCP 服务:

iptables -A INPUT -i ens33 -s 192.168.80.10 -p tcp -j REJECT

5.2 隐含匹配(依赖 -p 协议,无需额外模块)

需先指定 -p 协议(如 tcp/udp/icmp),再使用对应的端口、标记等匹配条件。

1. 端口匹配(tcp/udp 协议专用)
匹配条件说明示例
--sport 源端口匹配源端口(支持单个端口、范围:1000:3000:3000(≤3000)、1000:(≥1000))-p tcp --sport 22(匹配源端口 22)
--dport 目的端口匹配目的端口-p tcp --dport 80(匹配目的端口 80,即 Web 服务)
示例:

允许所有主机访问本机的 FTP(20/21 端口)和 Web(80 端口)服务:

iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. ICMP 类型匹配(icmp 协议专用)
ICMP 类型(字符串 / 代码)含义示例
Echo-Request(8)ping 请求(对方 ping 本机)-p icmp --icmp-type 8 -j DROP(禁止 ping)
Echo-Reply(0)ping 回复(本机 ping 对方)-p icmp --icmp-type 0 -j ACCEPT(允许回复)

5.3 显式匹配(需通过 -m 模块 明确指定)

需额外加载扩展模块(-m 模块名),支持更复杂的匹配(如多端口、IP 范围、状态)。

1. 多端口匹配(-m multiport

一次匹配多个端口(避免重复写多条规则):

# 允许访问本机的 22(SSH)、80(Web)、21(FTP)、53(DNS)端口(TCP 协议)
iptables -A INPUT -p tcp -m multiport --dport 22,80,21,53 -j ACCEPT
2. IP 范围匹配(-m iprange

匹配连续的 IP 范围:

# 拒绝 192.168.80.100-192.168.80.200 范围的主机访问本机(UDP 协议)
iptables -A INPUT -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j REJECT
3. 状态匹配(-m state,高频且重要)

基于 TCP 连接状态 匹配,是 “智能过滤” 的核心(避免放行无效连接):

连接状态含义
NEW新连接请求(如首次发起的 SSH 握手)
ESTABLISHED已建立的连接(如 SSH 连接成功后的数据传输)
RELATED与已建立连接相关的连接(如 FTP 被动模式的数据连接)
INVALID无效连接(如伪造的数据包)
示例:仅允许已建立 / 相关连接的入站流量(生产环境推荐)
# 允许已建立连接或相关连接的 TCP 流量(避免重复放行后续数据包)
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT# 仅允许新的 SSH 连接请求(配合上面的规则,实现“只放行合法 SSH 连接”)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT# 设置 INPUT 链默认策略为 DROP(拒绝所有未匹配的流量)
iptables -P INPUT DROP

六、实操误区与注意事项(总结)

  1. 规则顺序影响生效结果:链内规则按 “自上而下” 匹配,匹配即停止(LOG 除外)。例如:若 “拒绝所有 TCP 流量” 的规则在 “允许 SSH 流量” 之前,SSH 规则会失效。
  2. 默认策略为 DROP 时的风险:设置 iptables -P INPUT DROP 后,务必先放行 SSH(22 端口)和必要服务,否则远程连接会直接断开。
  3. 规则不持久化的问题iptables 规则默认保存在内存中,重启后会丢失。需执行 service iptables save 或 iptables-save > /etc/sysconfig/iptables 保存到配置文件。
  4. 区分 SNAT 与 DNAT
    • SNAT(POSTROUTING 链):内网→公网(修改源 IP);
    • DNAT(PREROUTING 链):公网→内网(修改目的 IP)。

通过以上梳理,你可以快速掌握 iptables 的核心逻辑和实操方法。建议结合实际场景练习(如搭建主机防火墙、配置内网 NAT 转发),加深对 “表链结构” 和 “匹配流程” 的理解。

http://www.xdnf.cn/news/1358533.html

相关文章:

  • 【文献阅读】Land degradation drivers of anthropogenic sand and dust storms
  • 《一次高并发场景下疑难Bug的深度排查与复盘》
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十七)设置主题
  • AI代码生成器全面评测:六个月、500小时测试揭示最强开发助手
  • CI/CD持续集成及持续交付详解
  • 户外广告牌识别误报率↓79%!陌讯多模态融合算法在城市广告合规监测的实战解析
  • TEE-可信执行环境
  • 程序里的依赖和中间件的依赖冲突,怎么解决
  • C++20: std::span
  • 多线程下单例如何保证
  • elasticsearch 7.x elasticsearch是查询的数据量大于10000分页有问题还是es的库总量大于10000分页有?
  • 【软件安全】ARM64、x86、32 位与 64 位架构的区别、定义、应用背景
  • 安装gitlab
  • Dify 从入门到精通(第 53/100 篇):Dify 的分布式架构(进阶篇)
  • 线程整理文档
  • git学习
  • Wagtail CRX 的 Latest Pages Block 高级设置 模版v3.0 以后被阉割了
  • Vue vs React:前端框架的差异与选择
  • 【SpringBoot集成篇】SpringBoot 深度集成 Elasticsearch 搜索引擎指南
  • 代码性能测试——benchmark库
  • 基于Spring Boot与Redis的电商场景面试问答解析
  • Python训练营打卡 DAY 46 通道注意力(SE注意力)
  • 【数据结构】排序算法全解析
  • Linux服务实验
  • [论文阅读] 软件工程 | GPS算法:用“路径摘要”当向导,软件模型检测从此告别“瞎找bug”
  • Kaggle项目:一次 Uber 出行数据分析的完整思路
  • 【机器学习】 11 Mixture models and the EM algorithm
  • 如何捕获组件的异常情况
  • Node.js依赖管理与install及run命令详解
  • Redis实战-缓存的解决方案(一)