Linux脚本批量开放防火墙端口

 
 

说明:
   提前设置开放端口的列表,执行sh文件就会把设置未开放的端口,绿色打印出来,已经开放的端口会跳过,有打印提醒,开放完端口会打印已经开放的端口列表,并且会重启防火墙的服务。
   使用管理员账号运行脚本比较好。

在Redhat Linux9上面跑过,其他版本的可能需要修改下使用防火墙的指令。

脚本执行展示

Linux脚本打印展示
 

脚本文件 open_ports.sh

#!/bin/bash
echo off > /dev/null

# 需要开放的端口列表
# 端口说明:
# 	22:开放访问端口
# 	2881|2883:oceanbase数据库端口
# 	3306:mysql数据库端口
# 	80|8080:tomcat端口
# 	8848:nacos端口
ports=(22 80-90 2881 2883 3306 8080 8848)

# 确保firewalld正在运行
systemctl is-active firewalld || { echo -e "\e[31mfirewalld服务未启动,请先使用指令:systemctl start firewalld 启动。\e[0m"; exit 1; } > /dev/null

#定义之前已经添加过端口的集合
addedList=()

# 为每个端口添加规则
for port in "${ports[@]}"; do
    state=`firewall-cmd --query-port=${port}/tcp`
    if [ "$state" != "yes" ]; then
        firewall-cmd --permanent --add-port=${port}/tcp > /dev/null
        firewall-cmd --reload > /dev/null
        #绿色输出,添加的端口
        echo -e "\033[32m添加端口为${port}的规则成功!!\033[0m"
    else
        addedList=(${addedList[*]} ${port})
        continue
    fi
done
if [ -n "#addedList[@]" ]; then
        #黄色输出,定义的端口中已经添加过的端口
        echo -e "\e[33m提醒消息,定义的端口中已经添加过的端口为:${addedList[*]}\e[0m"
fi

# 打印当前的开放的端口列表
firewall-cmd --list-ports > /dev/null
# 重启防火墙
firewall-cmd --reload > /dev/null

#注释:
#	> /dev/null:忽略linux命令的执行结果
#	echo off:忽略打印的执行结果

执行脚本指令

#新建文件,放任意位置
touch open_ports.sh
#编辑文件
vim open_ports.sh

......

#设置脚本文件可以执行
chmod +x open_ports.sh
#执行批量添加端口的脚本文件
./open_ports.sh
#删除开放的端口:91,需要重启防火墙
#sudo firewall-cmd --permanent --zone=public --remove-port=91/tcp
# 重启防火墙
#sudo firewall-cmd --reload

控制台打印颜色转义码

参考地址:linux环境中打印有颜色字体

\e[0m:默认
\e[31m:红色
\e[32m:绿色
\e[33m:黄色
\e[34m:蓝色
\e[35m:紫色
\e[36m:青色
\e[37m:白色

说明:
   \e[0m 和 \033[0m 是一样的。
   echo需要增加 -e 指令。
   转义码需要一个默认颜色的结尾,否则后续打印都是设置的颜色。

问题

windows上传sh文件,赋予权限后不能执行

报错信息:linux 解释器错误: 没有那个文件或目录
原因:windows的换行符和Linux的换行符不一样
解决方式:
    方式1、sed -i ‘s/\r$//’ open_ports.sh
    方式2、进入指令模式,:set ff=unix
参考地址:linux报错 /bin/bash^M:解释器错误:没有那个文件或目录

使用XTerminal登录普通用户上传文件报错

报错信息:没权限
解决方式:使用root登录

注:切换用户依然不能上传,需要连接SSH的账号为root用户。

推荐

SSH连接工具:Xterminal

说明:
   确实挺好用的。
   可以白嫖,也可以vip个性化设置。
   可以连接SSH、可视化上传/下载 文件、指令保存、AI小易辅助、指令历史记录等。


结尾

   感谢参考过的文章,很多都没写出来,谢谢!!(◕ᴗ◕✿)

### 批量添加多个端口规则 为了在 Linux 防火墙批量添加多个端口规则,可以利用 `firewall-cmd` 命令配合特定参数实现高效配置。对于一次性操作大量端口的需求,推荐使用脚本化方式来简化命令输入。 #### 使用单条命令批量开放端口范围 可以直接通过指定端口范围的方式,在一条命令中完成连续端口区间的开放: ```bash sudo firewall-cmd --zone=public --add-port=3000-3100/tcp --permanent ``` 这条命令会永久性地向 public 区域内的防火墙策略里加入 3000 到 3100 的 TCP 协议端口[^1]。 #### 脚本批量处理不连续端口列表 当面对的是非连续性的多组端口号时,则可以通过编写简单的 shell script 来逐一执行每项端口的增加动作。下面是一个例子展示如何创建并运行这样一个批处理脚本来管理不同协议类型的离散端口集合: ```bash #!/bin/bash # 定义要打开的TCP端口数组 tcp_ports=(8080 9090 7070) for port in "${tcp_ports[@]}"; do sudo firewall-cmd --zone=public --add-port=$port/tcp --permanent done # 对UDP端口同样适用,只需更改协议类型即可 udp_ports=(53 67 68) for port in "${udp_ports[@]}"; do sudo firewall-cmd --zone=public --add-port=$port/udp --permanent done # 最后记得重载配置让改动即时生效 sudo firewall-cmd --reload ``` 上述脚本定义了两个数组分别存储需要开启的 TCP 和 UDP 类型的具体端口号,并循环调用 `firewall-cmd` 添加这些端口到公共区域下的长期规则集中去;最后一步是刷新整个防火墙设定使得所有新增加的规则立即起作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值