2020年3月5日 星期四

firewall-cmd - 防火牆基礎管理指令

各版的型的 Linux 系統, 如 CentOS 7 版開始, 已將運行多年的 iptables 防火牆進行更換, 相信許多老手的 Linux 管理者或多或少都有些不慣, 其實 Baymax 也是一樣的, 但每一個作業系統更版都是因為在修正前一版的缺點或加強前一版可能無法達到的優點, 那當然只能在重新學習一次新的 Linux 的防火牆應用了.

Firewalld 與 iptables 的比較
● Firewalld 可以動態修改單條規則, 動態管理規則集, 允許更新規則而不破壞現有通訊和連線. 而 iptalbes, 在修改了規則後必須全部刷新才可以生效.
● Firewalld 使用區域和服務而不是鏈式規則.
● Firewalld默認是拒絕的, 需要設定以後才能放行. 而 iptables 默認是允許的, 需要拒絕的才去限制.
● firewalld自身並不具備防火牆的功能, 它的作用都是用於維護維則, 而真正使用規則運行的是核心(Kernel)的 netfilter. 只不過 firewalld 和 iptables 的結果似及使用方法不一樣!

其實 filewalld 可算是 iptables 的一個封裝管理套件, 可讓管理者更容易管理 iptalbes 規刪, 它並非是 iptables 的替代品, 雖然 iptables 指令以然可以使用 firewalld, 但因為 firewalld 已為管理預先設定安全拒絕為優先下, 避免一時管理操作忘了進行拒絕定義, 而行成危害.

不過相信還是有管理者真的不太想再接擉這新管理方法, 是否有可以只回到原有的 iptables 管理模式, 其實是可以的, 將會在另一個篇章中再做記錄說明.

firewalld 安裝
一般常態下, 各版類型 Linux 較為近期的版本, 安裝完成後, firewalld 套件已是預設安裝, 除非意外狀況, 因此還是記錄一下安裝, 為求方便性, 建議採用 YUM 進行安裝, 可以安裝到的也許還會較光碟中的 firewalld 版本更新.
PS. Baymax 長久已習慣指令環境, 所以後續該篇記錄文章, 多為指令式進行操作.

[root@local ~]# yum  install  firewalld  firewall-config

firewalld 服務管理
較新的版本 Linux 各類版, 在各服務的管理已多數改版, 不在使用 CentOS 7 之前的

[root@local ~]# /etc/init.d/service name action 

[root@local ~]# service service name action



改為新的應用指令 systemctl , 為主要管理操作, 有關 systemctl 操作應用記錄篇章, 將會在另一章中再做記錄.此篇只先記錄操作動作

firewalld 服務狀態操作
[root@local ~]# systemctl start | stop | status | restart  firewalld
PS. start : 啟動, stop : 停止, status : 目前狀態, restart : 重新啟動, 上述指行為中 | 符號只是代表或的意思, 依據操作要求服務進行何動行為之意.

filewalld 服務主機初始化預設狀態
就是當主機重新開機, 或是主機開機後預設載入啟用的服務項目是否要 filewalld 也載入, 預設是載入(enable).
[root@local ~]# systemctl enable | disable firewalld
PS. enable : 開啟, disable : 關閉

網域防火牆區域
在 firewalld 的模式下, 會將主機中的網路環境區域進行定義, 分別有以下幾個區域.
阻塞區域(block)任何傳入的網路資料包都將被阻止.
工作區域(work)相信網路上的其他計算機,不會損害你的計算機.
家庭區域(home)任何傳入的網路資料包都將被阻止.
公共區域(public)不相信網路上的任何計算機,只有選擇接受傳入的網路連線.
隔離區域(dmz)也稱為非軍事區域,內外網路之間增加的一層網路,起到緩衝作用。對於隔離區域,只有選擇接受傳入的網路連線.
信任區域(trueted)所有網路連線都可以接受.
丟棄區域(drop)任何傳入的網路連線都被拒絕.
內部區域(internal)信任網路上的其他計算機,不會損害你的計算機。只選擇接受傳入的網路連線.
外部區域(external)不相信網路上的其他計算機,不會損害你的計算機。只選擇接受傳入的網路連線.

一般在預設的初始下所使用的區域是 public, 所以不在許可定義下的定義, 全數連線皆會被拒絕. 在 Linux 類型的作業系統是一個自由軟體發佈, 所以初始化的系統所定義的區域是否可以自已經進行編輯初始化, 其實是可以的, 但不會很建議一定要去直接改寫檔案, 相關檔案如下:
/usr/lib/firewalld儲存預設配置,非必要避免修改.
/etc/firewalld儲存系統配置檔案,這些文佳你將覆蓋預設配置.
/usr/lib/firewalld/zone/上述九各區域各別定義XML檔案.



firewalld 管理及配制方法 - firewall-cmd
一再強調非必須要直接修改檔案, 那 firewalld 又該如何管理, 最基本上可分為 firewall-conf (圖形化工具) 、 firewall-cmd (命令式工具)及非建議的 XML 檔案修改. 接續記錄將firewall-cmd 為主的進行記錄編寫.
firewall-cmd 為管理 firewalld daemon 為主, 可進行定義預設的網域類型, 時效性規則條件, 永久性規則條件等. 並且可以時效性規則轉換為永久性動態功能.
● 指令下達原則
[root@local ~]# firewall-cmd [options....]

● 相關 Options 項目如下
Ⅰ. 一般 Option
OptionDescription
-h, --help輸出所有 firewall-cmd 系統中說明資訊(此資訊只有英文說明).
[root@local ~]# firewall-cmd --help
-V, --version輸出目前使用中的 firewall-cmd 版本.
[root@local ~]# firewall-cmd -V
-q, --quiet輸出目前 firewall-cmd 狀態資訊.
[root@local ~]# firewall-cmd -q
--state輸出目前 firewall-cmd 執行狀態, 是否運行中等.
[root@local ~]# firewall-cmd --state
--reload重新載入 firewall 規則,但不會將其載入至永久性設定中.
[root@local ~]# firewall-cmd --reload
--complete-reload重新載入 firewall 規則,並且為永久性設定.
[root@local ~]# firewall-cmd --complete-reload

Ⅱ. 永久(常駐-Permanent) Option
OptionDescription
--permanent將所定義之相關規則採用永久生效為主的參數,只需在所定義的規則最後加上此參數, 並再執行一次 --complete-reload 參數.
[root@local ~]# firewall-cmd --zone=public --add-service=http --permanent


Ⅲ. 區域 Option
OptionDescription
--get-default-zone取得預設防火牆執行區域.
[root@local ~]# firewall-cmd --get-default-zone
--set-default-zone=zone設定預設防火牆區域.
[root@local ~]# firewall-cmd --set-default-zone=trueted
--get-active-zone於 get-defulat-zone 相似, 但可多得相關網路介面資訊.
[root@local ~]# firewall-cmd --set-active-zone


Ⅳ. 編輯及查詢功能的 Option
[--permanent] [--zone=zone] --list-all
顯示指定或未指定區域定義相關規格.
● 顯示預設的區域相關規格.
[root@local ~]# firewall-cmd --list-all
● 顯示公共區域相關規格.
[root@local ~]# firewall-cmd --list-all --zone=public
● 顯示公共區域且為永遠型的區域相關規格.
[root@local ~]# firewall-cmd --list-all --zone=public --permanent
[--permanent] [--zone=zone] --list-services
顯示指定或未指定區域定義開放相關服務.
● 顯示預設的區域相關服務.
[root@local ~]# firewall-cmd --list-services
● 顯示公共區域相關服務.
[root@local ~]# firewall-cmd --list-services --zone=public
● 顯示公共區域且為永遠型的區域相關服務.
[root@local ~]# firewall-cmd --list-services --zone=public --permanent
[--permanent] [--zone=zone] --add-service=service [--timeout=timeval]
新增許可開放的服務通訊, 在此所進行管理的服務, 為系統預設為即有的服務, 如有額外需求自定服務, 需管理者自至 /usr/lib/firewalld/zone 定義後才可至定義設定.
● 修改新增動態許可服務, 以預設區域為主, 非永久型.
[root@local ~]# firewall-cmd --add-service=http
● 簡單修改新增動態許可服務, 以預設區域為主, 非永久型, 並定義有效時間.
如未在時間上加上(h(小時)、m(分鐘))時,即以秒為主.
[root@local ~]# firewall-cmd --add-service=http --timeout=2h
● 新增動態許可服務, 並為永久型及指定在 public 區.
[root@local ~]# firewall-cmd --add-service=http --zone=public --permanent
[--permanent] [--zone=zone] --remove-service=service [--timeout=timeval]
刪除開放服務訊, 雷同新增開放服務通訊操作
● 刪除新增動態許可服務, 以預設區域為主, 非永久型.
[root@local ~]# firewall-cmd --remove-service=http
● 刪除增動態許可服務, 以預設區域為主, 非永久型, 並定義為 public 區域.
[root@local ~]# firewall-cmd --remove-service=http --zone=public
● 刪除動態許可服務, 並為永久型及指定在 public 區.
[root@local ~]# firewall-cmd --remove-service=http --zone=public --permanent
--get-service
取得 firewalld 系統中即有的所有已定義服務列表, 可便於管理者確認是否已有定義的服務存在, 如不在即需另要新增.而新增定義服務,將另外採用新增如透過 --add-ports 進行定義.
[root@local ~]# firewall-cmd --get-services
[--permanent] [--zone=zone] --list-ports
查詢定義開放的通訊埠
[root@local ~]# firewall-cmd --list-ports
[--permanent] [--zone=zone] --add-ports=portid[-portid]/protocol | [--timeout=timeval]
新增許可通訊埠/通訊埠類型, 同時可以在非永遠型的狀況下, 可額外定義限制時間.
● 即時新增許可發通訊埠, 未定義區域下為預設區域, 非永久型.
[root@local ~]# firewall-cmd --add-ports=80/tcp
● 即時新增許可發通訊埠, 並設定限制時間, 未定義區域下為預設區域, 非永久型.
[root@local ~]# firewall-cmd --add-ports=80/tcp --timeout=30m
● 即時新增許可連續通訊埠, 未定義區域下為預設區域, 非永久型.
[root@local ~]# firewall-cmd --add-ports=80-100/tcp
● 即時新增指定區域許可通訊埠, 非永久型.
[root@local ~]# firewall-cmd --add-ports=80/tcp --zone=public
● 新增指定區域及永久型許可通訊埠.
[root@local ~]# firewall-cmd --add-ports=80/tcp --zone=public --permanent
[--permanent] [--zone=zone] --remove-ports=portid[-portid]/protocol
刪除許可通訊埠/通訊埠類型, 雷同新增相似操作程序.
● 即時刪除許可發通訊埠, 未定義區域下為預設區域, 非永久型.
[root@local ~]# firewall-cmd --remove-ports=80/tcp
[--permanent] [--zone=zone] --list-ports
查詢定義開放的來源通訊埠
[root@local ~]# firewall-cmd --list-source-ports
[--permanent] [--zone=zone] --add-source-ports=portid[-portid]/protocol | [--timeout=timeval]
新增許可來源通訊埠/通訊埠類型, 同時可以在非永遠型的狀況下, 也可額外定義限制時間.
● 即時新增來源許可發通訊埠, 未定義區域下為預設區域, 非永久型.
[root@local ~]# firewall-cmd --add-source-ports=80/tcp
● 即時新增來源許可發通訊埠, 並設定限制時間, 未定義區域下為預設區域, 非永久型.
[root@local ~]# firewall-cmd --add-source-ports=80/tcp --timeout=30m
● 即時新增來源許可連續通訊埠, 未定義區域下為預設區域, 非永久型.
[root@local ~]# firewall-cmd --add-source-ports=80-100/tcp
● 即時新增來源指定區域許可通訊埠, 非永久型.
[root@local ~]# firewall-cmd --add-source-ports=80/tcp --zone=public
● 新增指定區域及永久型許可來源通訊埠.
[root@local ~]# firewall-cmd --add-source-ports=80/tcp --zone=public --permanent
[--permanent] [--zone=zone] --remove-srouce-ports=portid[-portid]/protocol
刪除許可來源通訊埠/通訊埠類型, 雷同新增相似操作程序.
● 即時刪除許可發通訊埠, 未定義區域下為預設區域, 非永久型.
[root@local ~]# firewall-cmd --remove-source-ports=80/tcp
[--permanent] [--zone=zone] --list-icmp-blocks
查詢定義封鎖的 ICMP 通訊, 未定區域下,以預設區域為主進行查詢.
[root@local ~]# firewall-cmd --list-icmp-blocks
[--permanent] [--zone=zone] --add-icmp-block=icmptype [--timeout=timeval]
新增封鎖 ICMP 類型
● 新增動態封鎖 ICMP 類型, 未定為區域, 以預設區域及非永久型為主.
[root@local ~]# firewall-cmd --add-icmp-block=echo-request
● 新增動態封鎖 ICMP 類型, 並設定限制時間, 未定為區域, 以預設區域及非永久型為主.
[root@local ~]# firewall-cmd --add-icmp-block=echo-request --timeout=30m
● 新增動態封鎖 ICMP 類型, 區域為public, 及設定為永久型.
[root@local ~]# firewall-cmd --add-icmp-block=echo-request --zone=public --permanent
[--permanent] [--zone=zone] --remove-icmp-block=icmptype
刪除封鎖 ICMP 類型 ● 刪除動態封鎖 ICMP 類型, 未定為區域, 以預設區域及非永久型為主.
[root@local ~]# firewall-cmd --remove-icmp-block=echo-request
● 刪除動態封鎖 ICMP 類型, 區域為public, 及設定為永久型.
[root@local ~]# firewall-cmd --remove-icmp-block=echo-request --zone=public --permanent
[--permanent] [--zone=zone] --get-icmptypes
查詢 firewalld 內即有的定義的 icmp 類型
[root@local ~]# firewall-cmd --get-icmptypes
[--permanent] [--zone=zone] --add-rich-rule='rule' [--timeout=timeval]
自定新增複雜性規則, 用於可定義較細項的 IP 或 通訊埠等規則定義, 規則定義包含 accept(許可)、drop(放棄)、reject(拒絕)等.
● 設定一個來源網站許可連線至指定的service(http、https、SSH等)
[root@local ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=220.220.220.228/24 service name=services accept'
● 設定一個來源網站許可連線至指定的 port
[root@local ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=220.220.220.228/24 port port=80 protocol=tcp accept'
[--permanent] [--zone=zone] --remove-rich-rule='rule' [--timeout=timeval]
刪除自定複雜性規則.
● 刪除指定的自定複雜性規則, 因自定採用比較式的刪除在新增 rule , 所以刪除時也必須完全和新增時的 rule 相同, 否將無法刪除程工, 故然在刪除前也可透過 --list-all 依區域中取得完整的 rich rules 進行刪除.
[root@local ~]# firewall-cmd --remove-rich-rule='rule family=ipv4 source address=220.220.220.228/24 port port=80 protocol=tcp accept'


至此最基型態的防火牆基硬管理已記錄完成, 接續階段操作及應用如 NAT 或 流量控制等, 將會再其他篇章中另專記錄 By Baymax

測試文章

1 of 2 2 of 2 1 of 3 2 of 3 3 of 3