当前位置:首页 > 技术知识 > 正文内容

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

maynowei2周前 (08-23)技术知识7


前言

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规则的关机自动保存和开机自动加载。

相关文章

验证码,除了 12306,我还没有服过谁

为了防止暴力注册或爬虫爬取等机器请求,需要验证操作者是人还是机器,便有了验证码这个设计。本文作者主要介绍了如何使用 Axure 来设计一个动态的图形验证码,一起来学习一下吧。在软件设计中,为了防止暴力...

Objective-C :Category(category什么意思)

Category 引入在日常的开发中,可能会碰到这样的需求:给某个类增加方法。比如说,需要给NSString类增加一个打印的方法。当然,我们可以新建一个类比如TestString,并继承NSStrin...

IT博物馆之Objective-C诞生(micro博物馆)

1984年,Objective-C诞生。设计者:布莱德·考克斯(Brad Cox)、汤姆·洛夫(Tom Love)Objective-C是面向对象的通用、高级编程语言。它扩展了标准的 ANSI C,将...

Xamarin.Android使用教程:列表视图和适配器(2)

昨天我们已经一起学习了第1部分,这是探索Xamarin.Android的列表视图和适配器的的第2部分。在今天的文章中我们将探讨列表视图项排列使用BaseAdapter,还有自定义布局。让我们深入到代码...

C# 中的多线程同步机制:lock、Monitor 和 Mutex 用法详解

在多线程编程中,线程同步是确保多个线程安全地访问共享资源的关键技术。C# 提供了几种常用的同步机制,其中 lock、Monitor 和 Mutex 是最常用的同步工具。本文将全面介绍这三种同步机制的用...

CPU「离奇」飙到 100%!开发者挖出 Linux 内核 16 年老 Bug:这么多年竟无人发现?

【CSDN 编者按】每一次对旧设备的升级都仿佛是一场跨越时代的冒险。本文作者致力于将基于 PXA166 的 Chumby 8 设备从 Linux 2.6.28 版本升级到现代 6.x 版本,然而,在看...