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