iptables

核心概念

内核态的Netfilter用户态的iptables两部分组成
Netfilter:工作在Linux内核空间,是防火墙的“核心引擎”。能对TCP/IP数据包进行过滤、地址转换等操作。
iptables:工作在用户空间,是我们直接操作的“管理工具”。位于/sbin/iptables目录下,能帮我们轻松添加、修改、删除防火墙规则。

iptables是包过滤防火墙,主要工作在网络层,针对IP数据包的地址、端口等信息做处理。

四表五链

iptables使用“表”和“链”的结构来组织规则,就像“文件夹”和“文件”的关系——表里有链,链里有规则。

四表:按规则用途分类

表名核心作用包含的链适用场景
raw决定是否对数据包做状态跟踪OUTPUT、PREROUTING很少用,主要用于特殊场景(如避免跟踪某些数据包)
mangle修改数据包内容(如打标记)、流量整形INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING较少用,一般用于复杂的流量管理
nat网络地址转换(修改源/目标IP/端口)OUTPUT、PREROUTING、POSTROUTING常用!比如内网主机通过公网IP上网(SNAT)、外网访问内网服务器(DNAT)
filter过滤数据包(决定是否放行)INPUT、FORWARD、OUTPUT最常用!日常的“允许/拒绝某个端口访问”都在这里配置
重点掌握filter表(过滤)和nat表(地址转换)

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

链名处理时机适用场景
INPUT处理入站数据包(目标IP是本机)控制外部主机访问本机服务(如禁止ping本机)
OUTPUT处理出站数据包(从本机发往外部)一般不建议在这里配置规则,避免影响本机对外访问
FORWARD处理转发数据包(流经本机但目标不是本机)当Linux作为网关时,控制是否转发内网数据包
PREROUTING路由选择前处理数据包修改目标地址(DNAT),比如把外网访问的80端口映射到内网服务器
POSTROUTING路由选择后处理数据包修改源地址(SNAT),比如内网主机通过公网IP上网

数据包的匹配流程:规则生效的顺序

表的应用顺序

数据包会按这个顺序经过不同的表:raw → mangle → nat → filter(filter表最后生效,因为过滤是最终决策)。

链的匹配顺序

不同类型的数据包(入站、出站、转发)会走不同的链路径:

  • 主机型防火墙(数据包直接到本机)

    • 入站:PREROUTING → INPUT → 本机应用(如浏览器、Apache)
    • 出站:本机应用 → OUTPUT → POSTROUTING
  • 网络型防火墙(数据包需要转发)

    • 转发:PREROUTING → FORWARD → POSTROUTING
链内规则的匹配顺序

链内的规则是从上到下依次检查,遵循“匹配即停止”原则(除了LOG规则,它只记录日志,不中断匹配)。如果找不到匹配的规则,就按链的“默认策略”处理(默认是允许,即policy ACCEPT)。

安装启动配置iptables 防火墙

通过 yum 包管理器安装 iptables 核心组件及服务管理工具

yum -y install iptables iptables-services #安装 iptables
systemctl start iptables.service #启动 iptables 服务
systemctl enable iptables.service #配置 iptables 开机自启

语法与数据包控制类型

基本语法

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

iptables -t filter -A INPUT -p icmp -j REJECT #通过拒绝 ICMP 协议实现禁止 ping

各参数含义说明:

  • 表名:iptables 内置 3 张核心表(未指定时默认使用 filter 表):

    • filter:用于过滤数据包(默认表,主要控制数据包的“允许/拒绝”)。
    • nat:用于网络地址转换(如 SNAT、DNAT,实现内网访问外网、端口映射等)。
    • mangle:用于修改数据包标记(如 TOS、TTL,较少用于常规场景)。
  • 管理选项:表示对规则的操作(如添加、删除、查看等,下文详细说明)。
  • 链名:表内预设的规则链(如 INPUT、OUTPUT、FORWARD,对应数据包的不同流向)。
  • 匹配条件:指定需处理的数据包特征(如协议、端口、IP 地址等,不指定则匹配所有数据包)。
  • 控制类型:数据包匹配后的处理动作(如允许、丢弃、拒绝等,需大写)。

语法注意事项

  1. 未指定表名时,默认操作 filter 表;未指定链名时,默认操作表内所有链。
  2. 除非设置链的“默认策略”,否则必须指定“匹配条件”(否则规则无意义)。
  3. 管理选项、链名、控制类型需使用大写字母(如 -A、INPUT、ACCEPT),其余参数为小写。

数据包常见控制类型

控制类型决定了数据包匹配后的处理方式,常用类型如下(需全部大写)

控制类型英文含义功能说明
ACCEPT允许允许数据包通过,继续向下传递。
DROP丢弃直接丢弃数据包,不向发送端返回任何响应(如 ping 时显示“请求超时”)。
REJECT拒绝拒绝数据包通过,并向发送端返回“拒绝响应”(如 ping 时显示“目标不可达”)。
LOG日志在 /var/log/messages 文件中记录数据包日志,不影响数据包后续处理(需配合其他控制类型使用)。
SNAT源地址转换修改数据包的源 IP(如内网主机通过网关的公网 IP 访问外网)。
DNAT目的地址转换修改数据包的目的 IP(如将公网 IP 的某个端口映射到内网主机)。
MASQUERADE地址伪装类似 SNAT,但适用于公网 IP 不固定的场景(如 ADSL 拨号网络)。
注:LOG 是“辅助动作”,不会终止数据包的匹配流程(即“匹配即停止”规则对 LOG 不生效),数据包会继续匹配下一条规则。

iptables 规则管理:添加、查看、删除与默认策略

常用管理选项速查表

管理选项功能描述用法示例
-A在指定链的末尾追加一条规则iptables -A INPUT -p tcp --dport 80 -j ACCEPT(允许 80 端口 TCP 访问)
-I在指定链的指定位置插入一条规则(默认插在第 1 位)iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT(在 INPUT 链第 2 位插入 22 端口规则)
-P设置链的默认策略(仅支持 ACCEPT/DROP)iptables -P INPUT DROP(INPUT 链默认丢弃所有数据包)
-D删除指定链中的一条规则(支持“按序号”或“按内容”删除)iptables -D INPUT 5(删除 INPUT 链第 5 条规则)
-R修改指定链中的一条规则(按序号替换)iptables -R INPUT 3 -p udp --dport 53 -j ACCEPT(替换 INPUT 链第 3 条规则为允许 53 端口 UDP)
-L查看指定链或表的规则列表iptables -L INPUT(查看 INPUT 链规则)
-n以数字形式显示地址和端口(避免 DNS 解析,加快查询速度)iptables -nL INPUT(数字形式查看 INPUT 链规则)
-v查看规则时显示详细信息(如匹配的数据包数量、字节数)iptables -vnL INPUT(详细查看 INPUT 链规则)
--line-number查看规则时显示规则序号(便于按序号删除/修改规则)iptables -L INPUT --line-numbers(显示 INPUT 链规则序号)
-F清空指定链或表的所有规则(不影响默认策略)iptables -F INPUT(清空 INPUT 链所有规则)
-X清空自定义链的规则(不影响系统预设链)iptables -X(清空所有自定义链)
-Z重置链的计数器(清零匹配的数据包数量、字节数)iptables -Z INPUT(重置 INPUT 链计数器)
-S查看链的规则(以“命令行格式”显示,便于复制复用)iptables -t nat -S POSTROUTING(查看 nat 表 POSTROUTING 链规则)

规则列表字段解读

使用 iptables -L 或 iptables -vnL 查看规则时,输出结果包含多个字段

字段名含义说明
pkts该规则匹配到的数据包总数量
bytes该规则匹配到的数据包总字节数
target规则匹配后的处理动作(即“控制类型”,如 ACCEPT、DROP)
prot规则适用的网络协议(如 tcp、udp、icmp)
opt规则的扩展选项(如 state 表示连接状态)
in数据包流入的网卡(如 eth0,any 表示所有网卡)
out数据包流出的网卡(如 eth0,any 表示所有网卡)
source数据包的源 IP 或网段(如 192.168.1.0/24 表示内网网段)
destination数据包的目的 IP 或网段(如 10.0.0.1 表示目标主机)

image-20250904162235920
image-20250904162235920

添加新规则

添加规则使用 -A(追加到末尾)或 -I(插入到指定位置),需结合“匹配条件”(如协议、端口、IP)和“控制类型”

  • 示例 1:禁止所有主机 ping 本主机
# 在 filter 表 INPUT 链末尾添加规则,拒绝 ICMP 协议数据包
iptables -t filter -A INPUT -p icmp -j REJECT
如果使用-A且规则已经允许了icmp通行则不生效,因为匹配到accept就不会匹配后面的reject,使用-I则可以,因为会插入到第一条。
  • 示例 2:允许 22 端口(SSH)访问
# 在 INPUT 链第 2 位插入规则,允许 TCP 协议 22 端口访问
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT
  • 示例 3:允许所有 TCP/UDP 协议访问(不推荐生产环境)
# 允许所有 TCP 协议数据包进入
iptables -t filter -A INPUT -p tcp -j ACCEPT
# 允许所有 UDP 协议数据包进入
iptables -I INPUT -p udp -j ACCEPT

查看规则列表

查看规则是验证配置是否正确的关键步骤,结合 -n(数字显示)、-v(详细信息(pkts/bytes))、--line-number(规则序号)可提升查看效率

  • 用法一:查看指定链规则并显示序号
# 查看 filter 表 INPUT 链规则,显示规则序号
iptables -L INPUT --line-numbers

image-20250904164441854
image-20250904164441854

  • 用法 2:数字形式查看详细规则
# 数字形式(IP/端口不解析)、详细信息(pkts/bytes)查看 INPUT 链规则
iptables -vnL INPUT

image-20250904164724083
image-20250904164724083

删除与清空规则

当规则配置错误或需更新时,需删除或清空规则,操作需谨慎(尤其是远程服务器,避免误删 SSH 端口规则导致无法连接)

删除单条规则

支持两种删除方式:按规则序号(推荐,更精准)和按规则内容

  • 序号删除:先通过 iptables -L INPUT --line-numbers 查看序号,再删除
# 删除 INPUT 链第 2 条规则
iptables -D INPUT 2
  • 内容删除:需完整匹配规则的“表名、链名、匹配条件、控制类型”
# 删除 filter 表 INPUT 链中“拒绝 ICMP 协议”的规则
iptables -t filter -D INPUT -p icmp -j REJECT
清空所有规则

使用 -F 清空指定表或链的规则,需注意:-F 仅清空规则,不影响默认策略(如 INPUT 链默认 DROP 仍会生效)。

  • 清空指定链规则
# 清空 INPUT 链所有规则
iptables -F INPUT
  • 清空指定表所有规则
# 清空 filter 表所有链规则(默认表)
iptables -F
# 清空 nat 表所有链规则
iptables -t nat -F
# 清空 mangle 表所有链规则    
iptables -t mangle -F
清空规则注意事项
  1. 若规则存在多条相同内容,按内容删除仅删除序号最小的一条。
  2. 按序号删除时,需确保序号不超过当前链的规则总数,否则报错。
  3. 若 INPUT 链默认策略为 DROP,清空规则前需确保已保留 SSH 端口(22)规则,否则会导致远程连接断开(无物理机权限时无法恢复)。

设置默认策略

默认策略是链的“最后一道防线”:当数据包未匹配任何规则时,将执行默认策略。生产环境中推荐将默认策略设为 DROP(白名单模式,仅允许指定规则的数据包通过)

基本语法

iptables [-t 表名] -P <链名> <控制类型>  # 控制类型仅支持 ACCEPT 或 DROP

常见示例

# 设置 INPUT 链默认策略为 DROP(拒绝所有未匹配规则的入站数据包)
iptables -P INPUT DROP

# 设置 FORWARD 链默认策略为 DROP(防火墙默认不转发数据包)
iptables -t filter -P FORWARD DROP

# 设置 OUTPUT 链默认策略为 ACCEPT(允许所有出站数据包,便于服务器主动访问外部)
iptables -P OUTPUT ACCEPT

默认策略注意事项

  1. 默认策略一旦设置立即生效,无需重启 iptables 服务。
  2. filter 表的 INPUT、OUTPUT、FORWARD 链默认策略初始为 ACCEPT,nat 表和 mangle 表默认策略为 ACCEPT。
  3. 修改默认策略后,需及时添加“允许必要服务”的规则(如 SSH、HTTP、DNS 等),避免影响业务正常运行。

推荐文章

修改网站字体为霞鹜文楷

逛博客时发现了一个好看的字体-霞鹜文楷下载地址字体预览...

七牛云对象储存实现图床和服务器资源自动备份

配合picgo实现个人图床搭建七牛云对象存储新建存储空...

评论区(3条评论)

我要评论

昵称
邮箱
网址
0/200
24-хи4ао-web LV1

膜拜老学长

四川
Android
Chrome
ikn0w1T 博主
回复 @ 24-хи4ао-web :

不用膜拜哈哈,学长很普通,一起加油,看好你们新一代。

广东
Windows
Edge
zeph LV1

继续学习

广东
Android
Chrome
可按 ESC 键退出搜索

0 篇文章已搜寻到~