目 录
一、要求
二、解决方案
(一)解决思路
(二)方案
三、脚本程序实现
(一)脚本代码和解释
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]#
四、扩展
在实际使用中, 可能还要添加其他端口,直接在脚本文件添加即可;可以添加一些udp、tcp的端口列表,也可以添加udp、tcp的端口范围。
另外,也可以采用firewall-cmd --remove-port来删除端口,语法和firewall-cmd --add-port 基本一样,也可以删除端口列表,也可以删除端口范围。具体实例就不累述了。