编程技术分享平台

网站首页 > 技术教程 正文

Linux系统iptables配置持久化的技巧

xnh888 2025-08-06 23:46:25 技术教程 7 ℃ 0 评论


前言

iptables是Linux系统传统的防火墙配置工具,在老版本的RHEL/Centos6及以前的版本默认安装有iptables-services服务可以方便的进行iptables配置持久化,能在系统启动时自动加载 iptables 规则。但是到了RHEL/Centos7及以后的版本中并没有默认安装该服务,而且默认使用的防火墙配置工具变成了firewalld或者xftables,在这种新版linux环境如果你还是用iptables,是没有办法实现配置的持久化(重启后配置会消失)。

本文主要分享在现代linux系统(采用systemd)中,通过systemd自定义服务实现iptables配置持久化的一个技巧。如果你的环境
RHEL/Centos7/Rockylinux/Almalinux、ubuntu22.04及以后等新版本的linux,同时还希望使用iptables这种传统防火墙管理工具,本文分享的内容就比较适合你;但如果你在新版linux环境使用的firewalld、ufw、nft等现代防火墙工具就可以略过此文。

配置思路

本文使用的环境是Centos 7

因在Centos 7系统环境里,iptables的规则配置都是在内存中保留,一旦重启系统规则配置就会丢失。如果希望在系统重启后规则仍然自动生效,可以按如下思路:

1. 将iptables规则手动保存在自定义的文本文件中。

2. 编写自定义的一个关于iptabls配置保存和自启动的systemd服务,该服务配置为开启自启动。

配置方法

先进行iptables规则的配置(关于iptables的规则请结合实际场景配置),比如我的系统配置了如下规则:

将iptables规则保存到root目录下的iptables.txt文件(文件名称请结合实际配置)

重点来了,本文的重点!开始我们的关于iptables规则持久化的systemd服务编写,在/usr/lib/systemd/system目录下创建名为iptables.service的文件(请注意,要是后缀.service的文件),自定义systemd服务的内容写入iptables.service文件。

请注意,如果你不更改规则保存文件名称,可以直接复制以下我编写的服务文件内容即可。

cat > /usr/lib/systemd/system/iptables.service << EOF

[Unit]

Description= iptables #描述服务名称

After=network.target #表示在网络服务启动后启动此服务

[Service]

Type=oneshot #服务类型为 oneshot,表示该服务是一次启动任务

ExecStart=/bin/bash -c '
/usr/sbin/iptables-restore < /root/iptables.txt' # 启动加载规则文件内容

ExecStop=/bin/bash -c '/usr/sbin/iptables-save > /root/iptables.txt' #关机或者重启时自动保存规则到文件

RemainAfterExit=yes #适配 oneshot 类型服务管理需求

[Install]

WantedBy=multi-user.target #多用户模式启动时会加载 iptables 服务

EOF


最后配置服务自启动及查看服务运行状态

systemctl enable iptables.service #配置服务开机自启动

systemctl start iptables.service #启动服务

systemctl status iptables.service #查看服务运行状态

通过定义的systemd服务,实现的功能就是在系统关机时自动保存iptables规则到文件;系统开机时会自动加载规则文件的规则到内存运行。这样就实现了通过systemd服务方式对iptables规则的关机自动保存和开机自动加载。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表