1. firewalld 是什麼
-
CentOS中默認是有 firewalld, iptables, etablesd
-
firewalld 是 CentOS7/RadHat7 中默認的防火牆管理工具.
-
firewalld 工具用來管理裏netfilter, 不過底層還是調用的還是 iptables, 應爲這幾種的
-
firlewalld 提供了支持網絡/防火牆區域(zone) 定義網絡了鏈接以及接口安全等級的防火牆管理工具, 用於配置和永久配置項, 也支持允許服務或應用程序直接天啊及防火牆規則的接口, 以前的system-config-firewall 防火牆模型的靜態的, 每次修改後都需要完全重啓, 這個過程包含內核 netfilter 防火牆模塊 的寫在和新配置所需要模塊的 寫在和新配置需要模塊的裝載, 相反 firewall daemon 動態管理防火牆, 不需要重啓整個防火牆便可以更改應用更改, 因此沒必要重啓內核防火牆模塊.
2. firewalld 的區域概念
所謂的 zone 表示主機位於什麼網絡環境, 需要社會中那些規則, firewall的 裏面共有7 個zones .
- public
- 公開區域, 不信任網絡內所有請求, 只有被允許的請求才可訪問, 默認允許 ssh和 dhcpv6-client 區域缺省是 zone.
- external
- 公開場所, 應用的 IP是 NAT 的網絡, 外部網絡上使用, 特別作爲路由器啓用僞裝, 不信任網絡上其他計算機, 只接受選定的傳入連接
- dmz
- (Demilitarized Zone) 隔離區域, 如果想要允許部分服務能被外部訪問, 可以在 DMZ 區域中定義, 擁有隻通過選中連接的特性, 即ssh
- work
- 用於工作區域, 信任大部分網絡上的其他計算機, 只接受特定傳入連接
- home
- 區域用於家庭環境, 同樣只允許備選中的連接, 即ssh, ipp-client, mdns, sumba
- internal
- 內部網絡, 應該在 NAT 設定時的對內網網絡, 信任網絡中大部分其他計算機, 只接受選中的傳入連接
- trusted
- 接受所有的連接
- drop
- 所有的包都被丟棄, 只允許往外的連接是 允許的.
- block
- 阻塞區域 會拒絕進入網絡的連接, 並且會返回 icmp-host-prohibited, 只有服務器已建立連接會被通過即只允許由該系統初始化的網絡連接。
3. 配置文件
-
主配置目錄, 被用於創建的自定義配置文件
/etc/firewalld/
-
主配置文件, 被用於用戶創建和自定義配置文件
/etc/firewalld/firewalld.conf
-
服務類型配置文件目錄, 被用於用戶創建和自定義配置文件
/etc/firewall/services/
-
區域配置目錄, 用於用戶創建和自定義配置文件
/etc/firewalld/zone
-
預設置配置路徑(xml 格式), 子目錄與主配置目錄結構相同, 用於默認和備用配置(庫文件)
/usr/lib/firewalld/
4. firewalld 常用命令
- 獲取firewalld 的狀態
firewall-cmd --state
- 不改變狀態的情況下重新加載防火牆
firewall-cmd --reload
- 獲取區域列表
firewall-cmd --get-zones
- 獲取所有支持的服務
firewall-cmd --get-services
- 這個服務都是 firewalld 相關的端口和選項還有規則的集合, 也就是說把服務看成 firewalld 的某一個選項或端口的集合, 被啓動的服務會在firewalld 開啓時, 運行自動加載
查看所有的服務
ls /usr/lib/firewalld/services/
如果想創建自己的服務, 就需要在該目錄下創建對應文件.
- 獲取所有支持的 ICMP 類型
firewall-cmd --get-icmptype
- 列出全部啓用的區域防火牆策略
-
firewall-cmd --list-all-zones
-
會列出服務, 端口, 協議的組合, 端口, 數據包轉發, 僞裝, ICMP 攔截或者自定義規則
- 輸出區域全部啓用的防火牆策略, 如果是默認值, 會顯示默認區域
-
firewall-cmd --list-all
-
輸出指定區域的防火牆策略
- 查看默認區域
-
firewall-cmd --get-default-zone
-
public 默認區域是在 /etc/firewalld/firewalld.conf 文件中定義成 DefaultZone=public.
- 設置默認區域
firewall-cmd --set-default-zone=drop
流入默認去區域中的配置的接口的訪問請求將被置入新的默認區域, 當前活動的連接請求不受影響.
- 獲取活動的區域
firewall-cmd --get-active-zones
- 查看某個接口是否屬於哪個區域
firewall-cmd --get-znoe-of-interface=ens33
- 將接口(網卡)添加到區域中
firewall-cmd --zone=public --add-interface=ens33
- 如果接口不屬於區域, 將被添加到區域中, 如果省略了, 將使用默認區域, 接口在重新加載後後將重新應用
- 修改接口所屬區域
-
firewall-cmd --zone=public -Change-interface=ens33
-
這個 選項和
--add-interface
相似, 當接口已存在其他區域, 該接口會被添加到新的區域
- 從區域中刪除一個接口
-
firewall-cmd -zone=public -remove-interface=ens33
-
如果接口不屬於任何區域, 那麼接口所有的數據包使用默認的區域(zone)規則。
- 查詢區域中包含某個接口
-
firewall-cmd --zone=drop --query-interface=ens33
-
如果區域別省略, 將使用默認區域
- 列出區域中啓用的服務
-
firewall-cmd --zone=public --list-services
-
如果區域被省略, 將使用默認值
- 啓用, 禁用及查詢應急模式阻斷所有網絡連接, 防止出現緊急狀況
firewall-cmd --panic-on
firewall-cmd --panic-off
firewall-cmd --query-panic
5. 處理運行時區域
- 運行時模式下對區域進行的修改不是永久有效的, 重新加載重啓後將失效
- 給指定區域開啓服務
firewall-cmd --zone=public --add-service=SERVER_NAME --timeout=60
- 配置給默認區域開啓 SERVER_NAME服務名, 如果不指定區域, 會使默認區域, 如果設置了超時時間, 服務會請用特定秒數, 生效 60秒
- 禁用某個區域中的某個服務
firewall-cmd --zone=public --remove-service=SERVICE_NAME
- 禁用指定服務名的 服務
- 查詢服務區域中是否啓用特定的服務.
firewall-cmd --zone=public --query-service=SERVICE_NAME
yes 表示啓用了, no 表示沒有啓用
- 啓用區域端口和協議組合
firewall-cmd -zone=public --add-port=8080/tcp
firewall-cmd -zone=public --add-port=25-80/tcp
- 上面命令啓用端口和協議, 端口可以是單獨的端口或者是一個範圍
- 禁用區域端口和協議組合
firewall-cmd --zone-public --remove-port=8080/tcp
- 查詢區域中是否啓用了 端口和協議組合
firewall-cmd --zone=public --query-port=8080/tcp
END