Firewalld 學習筆記

2024-11-21 linux firewalld

以下是 firewalld 學習筆記

firewall 網路來源優先

  1. 有設定 IP source 優先
  2. 有設定 網卡 優先
  3. 預設區域

區域簡介

firewalld 的區域(zone)可用來設定網路連線、介面等所處的運作環境,對內使用的區域其防火牆規則會較為寬鬆,反之若是對外的區域其規則會較為嚴謹。

一條網路連線或介面只能隸屬於一個區域,我們可以自訂區域的設定,也可以直接從 firewalld 預設的幾個區域中選擇:

區域 描述
drop 任何往內的封包都會被丟棄,只允許往外傳送的封包。
block 任何來自於外部的連線都會被阻擋,只允許自己系統主動建立的連線。
public 公開區域,預設不信任其他電腦與網路,只有被允許的連線才能進入。通常大部分的連線設定都會放在這裡。
external 公開區域,適用於 NAT 網路環境。
dmz 非軍事區域(demilitarized zone,有點像是放在外頭的危險區域),允許外部的連線進入,但其對內的連線則有限制,只有被允許的連線才能連進內部網路。
work 公司內部等工作區域,在此區域中不應該會有惡意的攻擊者。只有被允許的連線可以進入。
home 家裡頭的網路區域,在此區域中不應該會有惡意的攻擊者。只有被允許的連線可以進入。
internal 內部網路區域,在此區域中不應該會有惡意的攻擊者。只有被允許的連線可以進入。
trusted 完全信任的區域,接受所有連線。
libvirt KVM 主機介面
docker docker 網路介面

firewall-cmd命令中使用的參數以及作用

參數 作用
–get-default-zone 查訪默認的區域名稱
–set-default-zone=<區域名稱> 設置默認的區域,使其永久生效
–get-zones 顯示可用的區域
–get-services 顯示預定義的服務
–get-active-zones 顯示當前正在使用的區域、來源地址和網卡名稱
–add-source= 將源自此IP或子網的流量導向指定的區域
–remove-source= 不再將源自此IP或子網的流量導向這個區域
–add-interface=<網卡名稱> 將源自該網卡的所有流量都導向某個指定區域
–change-interface=<網卡名稱> 將某個網卡與區域進行關聯
–list-all 顯示當前區域的網卡配置參數、資源、端口以及服務等信息
–list-all-zones 顯示所有區域的網卡配置參數、資源、端口以及服務等信息
–add-service=<服務名> 設置默認區域允許該服務的流量
–add-port=<端口號/協議> 設置默認區域允許該端口的流量
–remove-service=<服務名> 設置默認區域不再允許該服務的流量
–remove-port=<端口號/協議> 設置默認區域不再允許該端口的流量
–reload 讓“永久生效”的配置規則立即生效,並覆蓋當前的配置規則
–panic-on 開啟應急狀況模式
–panic-off 關閉應急狀況模式

遷移網卡到別的區域

  1. 查詢網卡名稱
sudo ifconfig
  1. 移除網卡原有區域
  2. 新增至目標區域
sudo firewall-cmd --permanent --zone=public --change-interface=ens160
sudo firewall-cmd  --permanent --zone=trusted --change-interface=virbr1
sudo firewall-cmd  --permanent --zone=internal --change-interface=eth1

查詢那協正在運作的 zone

sudo firewall-cmd --get-active-zones

規則

開放特定 port

sudo firewall-cmd --permanent --zone=public --add-port=10010/tcp
sudo firewall-cmd --permanent --zone=public --add-port=10020/tcp
sudo firewall-cmd --permanent --zone=libvirt --add-port=33899/tcp

設定IP 只通哪個Port

sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.56.1" accept'

允許特定IP/網段

sudo firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="172.18.17.0/24" accept'

注意事項

  • 設定完需要重新讀取設定
## 重新讀取設定
sudo firewall-cmd --reload

檢查默認區域設置

sudo firewall-cmd --list-all
sudo firewall-cmd --list-internal
  • 檢查永久設置
firewall-cmd --zone=work --list-all --permanent

查看指定區域設置

sudo firewall-cmd --zone=trusted --list-all   

查詢版本

sudo firewall-cmd --version

查看firewalld的運行狀態

firewall-cmd --state

參考資料

CentOS 7 Firewalld 防火牆說明介紹

firewall direct rules

firewall-cmd

firewalld.richlanguage

How to Open Port for a Specific IP Address in Firewalld