Firewalld 防火牆指令
基本指令
啟動 firewalld 服務
systemctl start firewalld
停止 firewalld 服務
systemctl stop firewalld
重新啟動 firewalld 服務
service firewalld restart
檢查 firewalld 服務狀態
systemctl status firewalld
設定開機自動啟動
systemctl enable firewalld
列出指定的區域與內容
暫時開放的port
sudo firewall-cmd --zone=public --list-all
永久設定值
sudo firewall-cmd --zone=public --list-all --permanent
列出預先定義的服務名稱
firewall-cmd --get-services
將服務新增至 public 區域
這裡以 http 服務為例
暫時性 ( 重開就沒了 )
sudo firewall-cmd --zone=public --add-service=http
永久性
sudo firewall-cmd --zone=public --permanent --add-service=http
自訂開啟連接埠
這裡以 tcp 的 8080 連接埠為例
暫時性 ( 重開就沒了 )
sudo firewall-cmd --zone=public --add-port=8080/tcp
永久性
sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
開通多個連接埠
這裡以 udp 的 4990 至 4999 連接埠為例
暫時性 ( 重開就沒了 )
sudo firewall-cmd --zone=public --add-port=4990-4999/udp
永久性
sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
移除服務
若要將指定的服務從某個區域中移除,可以執行以下指令
這裡以 http 服務為例
暫時移除
sudo firewall-cmd --zone=public --remove-service=http
永久移除
sudo firewall-cmd --zone=public --permanent --remove-service=http
如果是要移除自訂的通訊協定與埠號,則執行以下指令
這裡以 tcp 的 8080 連接埠為例
暫時關閉
sudo firewall-cmd --zone=public --remove-port=8080/tcp
永久關閉
sudo firewall-cmd --zone=public --permanent --remove-port=8080/tcp
新增服務名稱
除了直接指定通訊協定與埠號之外,我們也可以自訂新的服務名稱
加入 firewalld 的服務名稱清單中
這樣就可以使用服務名稱的方式來設定開啟的服務
這樣做的好處是可以讓防火牆的設定看起來更容易理
不會搞不清楚某些奇怪埠號的用途。
若要新增服務名稱
可參考 /usr/lib/firewalld/services/ 中的範例
例如 http.xml 就是定義 http 服務的設定檔
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>WWW (HTTP)</short>
<description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
<port protocol="tcp" port="80"/>
</service>
參考這些範例後,撰寫自己的服務設定檔(若需要開啟多個連接埠,可以自己新增,或是參考其他的範例檔),然後另外儲存成一個新的檔案,檔名要設定為服務的名稱加上 XML 的附檔名,例如 my_service.xml,接著讓 firewalld 重新載入設定
重新載入設定
sudo firewall-cmd --reload
重新查詢一次支援的服務名稱,應該就可以看到新加入的 my_service 服務了
列出預先定義的服務名稱
firewall-cmd --get-services