目? ? ? ? ?錄
一、要求
二、解決方案
(一)解決思路
(二)方案
三、腳本程序實現
(一)腳本代碼和解釋
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 基本一樣,也可以刪除端口列表,也可以刪除端口范圍。具體實例就不累述了。