Linux系统运维脚本:一键添加防火墙规则(开启服务和网络端口)

目         录

一、要求

二、解决方案

(一)解决思路

(二)方案

三、脚本程序实现

(一)脚本代码和解释

1、脚本代码

2、代码解释

(二)脚本验证

1、脚本编辑

2、给予执行权限

3、运行脚本,查看效果

四、扩展


一、要求

        在部署一个linux应用程序后,经常发现某个服务没有开放、某个端口没有开放,这就需要一个个开放这些服务或者端口,非常麻烦。有时候若忘了某个端口,还要走一些弯路来查问题、解决问题,花费不少时间。有没有办法,一键添加这些防火墙规则,开放相关的所有服务、和网络端口呢?

二、解决方案

(一)解决思路

       Linux系统有 firewall-cmd 命令可以增加服务和网络端口到防火墙规则里面,我们可以通过在bash脚本中,调用这个命令,来实现一键添加防火墙规则。

(二)方案

       (1)定义要开放的服务列表;

       (2)定义要开放的TCP和UDP端口列表;

       (3)遍历这些列表,一次调用firewall-cmd来进行开放,并设置永久生效;

       (4)重新装载防火墙;

       (5)查看定义的服务和端口是否正确开放。

三、脚本程序实现

        直接把脚本写出来,分享给大家。

(一)脚本代码和解释

1、脚本代码

由于我的环境是centos7.9,编写如下bash代码,可以在centos7以后得版本运行,如下:

#!/bin/bash
#适⽤于RHEL7系列、centos系列
#firewall-cmd --get-services #可以查看firewall⽀持哪些服务
#cat /etc/services #可以查看服务、端⼝的对应表services="ftp" #设置服务
tcpports="21 7060 8083 26088 26089 54389"
udpports="7060"# 定义UDP端口范围
udpport_start=25100
udpport_end=26100#循环将每个服务添加到防⽕墙规则中
for service in $services
do
echo "添加 $service 服务到防火墙"
firewall-cmd --add-service=${service}
done#循环将每个tcp端⼝添加到防火墙规则中
for port in $tcpports
doecho "添加 $port 端到 防火墙"sudo firewall-cmd --add-port=${port}/tcp
done#循环将每个udp端⼝添加到防火墙规则中
for port in $udpports
doecho "添加 $port 端到 防火墙"sudo firewall-cmd --add-port=${port}/udp
done# 将udp端口范围添加到防火墙规则中
sudo firewall-cmd --add-port=$udpport_start-$udpport_end/udp#将以上设置的临时防⽕墙规则,转换为永久有效的规则(确保重启后有效)
sudo firewall-cmd --runtime-to-permanent

2、代码解释

         脚本的目的是将指定的服务、TCP端口、UDP端口以及一个UDP端口范围添加到firewalld的防火墙规则中,并确保这些规则在系统重启后仍然有效。 解释如下:

(1)services="ftp":定义一个变量services,并为其分配一个值,即要添加到防火墙的服务名称(在这里是FTP)。

(2)tcpports 和 udpports:分别定义了要添加到防火墙的TCP和UDP端口列表。

(3)udpport_start 和 udpport_end:定义了要添加到防火墙的UDP端口范围。

(4)第一个for循环:遍历services变量中的每个服务,并使用 firewall-cmd命令将其添加到防火墙规则中。

(5)第二个for循环:遍历tcpports变量中的每个TCP端口,并使用sudo firewall-cmd命令将其添加到防火墙规则中。这里使用了sudo,因为更改防火墙规则通常需要超级用户权限。

(6)第三个for循环:遍历udpports变量中的每个UDP端口,并将其添加到防火墙规则中。

(7)sudo firewall-cmd --add-port=$udpport_start-$udpport_end/udp:这条命令将之前定义的UDP端口范围添加到防火墙规则中,由于这个范围比较多,一个个添加不方便。

(8)最后一个命令:sudo firewall-cmd --runtime-to-permanent。这条命令将当前的运行时防火墙规则转换为永久规则。这意味着即使系统重新启动,这些规则也会保持有效。

(二)脚本验证

1、脚本编辑

        使用编辑器,比如vi,把代码输入进去;

        保存这个脚本到一个文件中,比add-firewall-rules.sh

2、给予执行权限

      chmod +x add-firewall-rules.sh

3、运行脚本,查看效果

     可以运行这个脚本来检查进程的运行情况,如下:

[root@localhost home]#
[root@localhost home]# firewall-cmd --list-services
dhcpv6-client ssh[root@localhost home]#
[root@localhost home]# [root@localhost home]# firewall-cmd --list-ports
22/tcp
[root@localhost home]#
[root@localhost home]# sh add_firewall_rules-1.sh
添加 ftp 服务到防火墙
添加 21 端到 防火墙
success
添加 7060 端到 防火墙
success
添加 8083 端到 防火墙
success
添加 26088 端到 防火墙
success
添加 26089 端到 防火墙
success
添加 54389 端到 防火墙
success
添加 7060 端到 防火墙
success
success
success
[root@localhost home]# firewall-cmd --list-services
dhcpv6-client ssh ftp
[root@localhost home]# firewall-cmd --list-ports
22/tcp 23/tcp 7060/tcp 8083/tcp 26088/tcp 26089/tcp 54389/tcp 7060/udp 25100-26100/udp
[root@localhost home]#
[root@localhost home]#

四、扩展

        在实际使用中, 可能还要添加其他端口,直接在脚本文件添加即可;可以添加一些udptcp的端口列表,也可以添加udptcp的端口范围。

      另外,也可以采用firewall-cmd --remove-port来删除端口,语法和firewall-cmd --add-port 基本一样,也可以删除端口列表,也可以删除端口范围。具体实例就不累述了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NumPy数据处理详解的笔记2

NumPy数据处理详解的笔记2 第1章NumPy基础 NumPy是用于处理多维数组的数值运算库,不仅可用于 机器学习,还可以用于图像处理,语言处理等任务。 1.2 多维数据结构ndarray的基础 在学习NumPy的过程中,只要理解了ndarray的相关知识…

java 关于 Object 类中的 wait 和 notify 方法。(生产者和消费者模式!)

4、关于 Object 类中的 wait 和 notify 方法。(生产者和消费者模式!) 第一:wait 和 notify 方法不是线程对象的方法,是 java 中任何一个 java 对象都有的方法,因为这两个方法是 Object 类中自带的。 wait 方…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的停车位检测系统(Python+PySide6界面+训练代码)

摘要:开发停车位检测系统对于优化停车资源管理和提升用户体验至关重要。本篇博客详细介绍了如何利用深度学习构建一个停车位检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并结合了YOLOv7、YOLOv6、YOLOv5的性能对比&#xf…

HarmonyOS端云体化开发—创建端云一体化开发工程

云开发工程模板 DevEco Studio目前提供了两种云开发工程模板:通用云开发模板和商城模板。您可根据工程向导轻松创建端云一体化开发工程,并自动生成对应的代码和资源模板。在创建端云一体化开发工程前,请提前了解云开发工程模板的相关信息。 …

前端学习之HTML(第一天)

什么是HTML HTML是一种用来描述网页的一种语言&#xff0c;HTML不是一种编程语言&#xff0c;而是一种标记语言。 HTML标签 HTML 标签是由尖括号包围的关键词&#xff0c;比如 <html> HTML 标签通常是成对出现的&#xff0c;比如 <b> 和 </b> 标签对中的…

ROS 2基础概念#3:主题(Topic)| ROS 2学习笔记

在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;主题&#xff08;Topics&#xff09;是实现节点之间通信的主要机制之一。节点&#xff08;Node&#xff09;可以发布&#xff08;publish&#xff09;消息到话题&#xff0c;或者订阅&#xff08;subscribe&…

市场复盘总结 20240304

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 20% 最常用的…

格两例12345

osu/Lucky Roll gaming 周末osu有道题&#xff1a;lcg已知低位 def lcg(s, a, b, p):return (a * s b) % pp getPrime(floor(72.7)) a randrange(0, p) b randrange(0, p) seed randrange(0, p) print(f"{p }") print(f"{a }") print(f"{b …

幂等性设计

目录 前言 幂等性设计 幂等性设计处理流程 HTTP 幂等性 消息队列幂等性 基于kafka 前言 幂等性设计&#xff0c;就是说&#xff0c;一次和多次请求某一个资源应该具有同样的副作用。为什么我们要有幂等性操作&#xff1f;说白了&#xff0c;就两点&#xff1a;1、网络的…

LeetCode第125场双周赛个人题解

目录 100231. 超过阈值的最少操作数 I 原题链接 思路分析 AC代码 100232. 超过阈值的最少操作数 II 原题链接 思路分析 AC代码 100226. 在带权树网络中统计可连接服务器对数目 原题链接 思路分析 AC代码 100210. 最大节点价值之和 原题链接 思路分析 AC代码 10023…

大话C++之:对象内存模型

一般继承(无虚函数覆盖) 只有一个虚指针&#xff0c;指向一个虚表&#xff0c;虚函数按顺序从祖先节点开始插入到虚表上。字段按顺序从祖先节点开始插入到对象内存上 一般继承(有虚函数覆盖) 只有一个虚指针&#xff0c;指向一个虚表&#xff0c;虚函数按顺序从祖先节点开始&a…

桂院校园导航 静态项目 二次开发教程 2.0

Gitee代码仓库&#xff1a;桂院校园导航小程序 GitHub代码仓库&#xff1a;GLU-Campus-Guide 静态项目 2.0版本 升级日志 序号 板块 详情 1 首页 重做了首页&#xff0c;界面更加高效和美观 2 校园页 新增了 “校园指南” 功能&#xff0c;可以搜索和浏览校园生活指南…

【金三银四】每日一点面试题(Java--JVM篇)

1、说一下 JVM 的主要组成部分及其作用&#xff1f; JVM&#xff08;Java虚拟机&#xff09;是Java程序运行的核心组件&#xff0c;它负责将Java字节码翻译成底层操作系统能够执行的指令。JVM由以下几个主要组成部分构成&#xff1a; 类加载器&#xff08;Class Loader&#…

Modbus协议详细解析与案例分享

目录 Modbus协议详细解析与案例分享1. Modbus协议简介2. Modbus RTU和Modbus TCP的区别3. Modbus帧结构4. Modbus协议示例5. Modbus应用场景结语 Modbus协议详细解析与案例分享 1. Modbus协议简介 Modbus是一种串行通信协议&#xff0c;用于实现工业自动化设备之间的通信。它…

消息中间件|初识消息队列

文章目录 消息队列是什么&#xff1f;消息队列关键概念消息队列优点消息队列的应用场景异步处理应用解耦流量削峰消息通讯 常用消息队列中间件的对比 消息队列是什么&#xff1f; 消息队列&#xff08;Message Queue&#xff09;是一种用于在软件系统之间传递消息的通信机制。…

spring boot概述

SpringBoot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。 通过这种方式&#xff0c;SpringBoot致力于在蓬勃发展的快速应用开发…

实时抓取SKU商品属性详细信息API数据接口(淘宝,某音)

item_sku-获取sku详细信息 taobao.item_sku详细信息 API公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_sku 名称类型必须描述keyString是调用key&#xff08;演示示例&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地…

设计模式学习笔记 - 设计原则 - 3.里氏替换原则,它和多态的区别是什么?

前言 今天来学习 SOLID 中的 L&#xff1a;里氏替换原则。它的英文翻译是 Liskov Substitution Principle&#xff0c;缩写为 LSP。 英文原话是&#xff1a; Functions that use points of references of base classes must be able to use objects of derived classes withou…

python-分享篇-生成仿微信公众号推广的个性二维码(支持动态)

代码 生成仿微信公众号推广的个性二维码&#xff08;支持动态&#xff09;from MyQR import myqr # 要生成动态二维码&#xff0c;只需要将piture参数和save_name参数设置gif动图即可 myqr.run(wordshttps://blog.csdn.net/stqer/article/details/135553200, # 指定二维码包含…

JVM(内存区域划分)

JVM JVM - Java虚拟机 我们编写的 Java 程序, 是不能够被 OS 直接识别的 JVM 充当翻译官的角色, 负责把我们写的的 Java 程序 ,翻译给 OS “听”, 让 OS 能够识别我们所写的 Java 代码 JVM 内存区域划分 JVM 是一个应用程序, 在启动的时候, 会从 操作系统 申请到一整块很大的内…