新闻资讯

iptables 到底是什么?核心作用有哪些?

2025-11-24

iptables 全称为netfilter/iptables,是 Linux 系统自带的开源包过滤防火墙工具,本质是通过预设规则对网络数据包进行 “筛选、修改、转发” 的管理系统。它的核心作用体现在三方面:一是流量过滤,允许或阻断特定 IP、端口的数据包;二是地址转换,通过 SNAT、DNAT 实现内网访问外网、外网访问内网的地址映射;三是端口转发,这也是 iptables 的高频用法,可将外部请求转发到内网服务端口。即便现代 Linux 系统多预装 firewalld、ufw 等工具,Docker 等容器环境仍直接依赖 iptables 实现网络隔离,可见其核心地位。当用 iptables 实现端口转发时,若服务器无固定公网 IP,可搭配花生壳解决动态 IP 问题,从官网https://hsk.oray.com/download 下载软件后,即可通过动态域名稳定访问转发服务。
图片alt

iptables 的 “表” 和 “链” 是什么?核心结构解析

iptables 的规则基于 “表 - 链 - 规则” 三层结构,理解这一框架是用好 iptables 的关键:
- 四张核心表:不同表负责不同功能,是规则的 “功能分类夹”。
1、filter 表:默认表,负责数据包过滤(允许 / 拒绝),日常防火墙配置多在此表操作。
2、nat 表:重点用于地址转换,如端口转发时的 DNAT(目标地址转换)、源地址伪装的 SNAT/MASQUERADE 均依赖此表。
3、mangle 表:用于修改数据包属性(如打标记),较少用于基础操作。
4、raw 表:关闭连接跟踪机制,提升高并发场景性能。
- 五条默认链:链是数据包在系统中的 “必经路线”,规则按顺序匹配执行。
1、INPUT:处理进入服务器本机的数据包(如访问本机 80 端口的请求)。
2、OUTPUT:处理服务器本机发出的数据包(如本机访问外网)。
3、FORWARD:处理经过服务器转发的数据包,端口转发必须放行此链流量。
4、PREROUTING:数据包进入时先经过此链,常用于 DNAT(端口转发前修改目标地址)。
5、POSTROUTING:数据包转发 / 发出前最后经过此链,常用于 SNAT(伪装源地址)。

新手必学的 iptables 基础命令有哪些?实操步骤来了

1. 如何安装与查看 iptables 状态?
-安装:Ubuntu 执行sudo apt install iptables,CentOS 执行sudo yum install iptables。
-查看版本:iptables -V,确认 iptables 已正确安装。
-查看规则:iptables -t 表名 -L -n,-t指定表(默认 filter 表),-n显示 IP 而非域名,例如iptables -t nat -L -n可查看端口转发相关规则。
2. 如何添加 iptables 过滤规则?以放行 80 端口为例
在 filter 表 INPUT 链添加规则,允许外部访问本机 80 端口(HTTP 服务):
sudo iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
命令解析:-A INPUT表示在 INPUT 链尾部加规则,-p tcp指定 TCP 协议,--dport 80锁定目标端口 80,-j ACCEPT表示匹配后允许通过。这是 iptables 最基础的防火墙配置,规则顺序至关重要,拒绝规则需放在允许规则前才生效。
3. 如何配置 iptables 端口转发?核心规则示例
以将外部 8080 端口转发到内网 192.168.1.50 的 80 端口为例,需在 nat 表配置:

# 1. 开启IP转发(端口转发前提)
sudo sysctl -w net.ipv4.ip_forward=1
# 2. 添加DNAT规则(修改目标地址)
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.50:80
# 3. 放行转发流量(FORWARD链)
sudo iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
# 4. 添加SNAT规则(伪装源地址)
sudo iptables -t nat -A POSTROUTING -d 192.168.1.50 -j MASQUERADE

完成后,外部访问服务器公网 IP:8080 即可直达内网服务。若公网 IP 动态变化,打开已安装的花生壳客户端,用其动态域名替代公网 IP,无需频繁修改 iptables 规则。
4. 如何删除与保存 iptables 规则?
-删除规则:按序号删除iptables -t 表名 -D 链名 序号(如iptables -t filter -D INPUT 1删除 filter 表 INPUT 链第一条规则)。
-清空规则:iptables -t 表名 -F(谨慎使用,会删除所有规则)。
-保存规则:Ubuntu 执行sudo iptables-save > /etc/iptables/rules.v4,CentOS 执行sudo service iptables save,避免重启后规则丢失。

iptables 与 firewalld、ufw 有何区别?该选哪个?

iptables 是 Linux 防火墙的 “底层引擎”,而 firewalld(CentOS 默认)、ufw(Ubuntu 默认)是基于 iptables 的 “图形化 / 简化工具”。区别主要在操作复杂度:iptables 需手动编写命令规则,灵活性极高但门槛高;firewalld 支持动态规则更新,无需重启服务,适合新手;ufw 语法更简洁(如ufw allow 80/tcp放行 80 端口)。但涉及端口转发、容器网络等复杂场景时,仍需直接操作 iptables 规则。若用 iptables 实现外网访问内网服务,搭配花生壳的动态域名解析,可兼顾 iptables 的灵活性与访问的稳定性。

用 iptables 时常见错误有哪些?怎么解决?

1. 规则添加后不生效:未开启 IP 转发,执行sudo sysctl -p激活net.ipv4.ip_forward=1配置;或规则顺序错误,将允许规则移到拒绝规则前。
2. 端口转发失败:FORWARD 链默认策略为 DROP,需添加放行规则;或未配置 SNAT/MASQUERADE,导致回程流量无法返回。
3. 重启后规则丢失:未保存规则,按对应系统命令保存 iptables 配置;或搭配花生壳,用域名访问避免依赖 IP 相关规则。
4. 动态 IP 导致访问失效:无需修改 iptables 规则,打开花生壳客户端确认域名解析状态正常,外网通过花生壳域名访问即可。


拓展阅读

1. iptables 中的 “-j ACCEPT” 和 “-j REJECT” 有什么区别?
-j ACCEPT允许数据包通过且不返回信息;-j REJECT拒绝数据包并返回错误信息(如 “连接被拒绝”)。拦截恶意流量常用DROP(静默丢弃),调试时用REJECT更易定位问题。

2. 花生壳如何增强 iptables 的使用体验?
花生壳解决了 iptables 依赖固定公网 IP 的痛点:其动态域名解析功能可将变动的公网 IP 与固定域名绑定,外网通过域名访问 iptables 转发的服务;若服务器在内网无公网 IP,花生壳内网穿透可直接替代复杂的 iptables 转发配置,操作更简单。

3. iptables 的 “连接跟踪” 是什么?有什么用?
连接跟踪是 iptables 记录数据包会话状态的机制(如 TCP 三次握手状态),支持-m state --state ESTABLISHED,RELATED等规则,可放行已建立连接的回程流量,无需重复配置入站规则,能提升 iptables 规则的安全性与效率。

新闻资讯
热门专题
最新专题
友情链接