Centos7-----firewalld詳解

Centos7-----firewalld詳解

概述:
Filewalld(動態防火牆)作爲redhat7系統中變更對於netfilter內核模塊的管理工具;
iptables service 管理防火牆規則的模式(靜態):用戶將新的防火牆規則添加進 /etc/sysconfig/iptables 配置文件當中,
再執行命令 /etc/init.d/iptables reload 使變更的規則生效。在這整個過程的背後,iptables service 首先對舊的防火牆規則進行了清空,
然後重新完整地加載所有新的防火牆規則,如果加載了防火牆的模塊,需要在重新加載後進行手動加載防火牆的模塊;
firewalld 管理防火牆規則的模式(動態):任何規則的變更都不需要對整個防火牆規則列表進行重新加載,只需要將變更部分保存並更新到運行中的 iptables 即可。
還有命令行和圖形界面配置工具,它僅僅是替代了 iptables service 部分,其底層還是使用 iptables 作爲防火牆規則管理入口。
firewalld 使用 python 語言開發,在新版本中已經計劃使用 c++ 重寫 daemon 部分。

便於理解:
相較於傳統的防火牆管理配置工具,firewalld支持動態更新技術並加入了區域(zone)的概念。
簡單來說,區域就是firewalld預先準備了幾套防火牆策略集合(策略模板),用戶可以根據生產場景的不同而選擇合適的策略集合,
從而實現防火牆策略之間的快速切換。例如,我們有一臺筆記本電腦,每天都要在辦公室、咖啡廳和家裏使用。
按常理來講,這三者的安全性按照由高到低的順序來排列,應該是家庭、公司辦公室、咖啡廳。
當前,我們希望爲這檯筆記本電腦指定如下防火牆策略規則:在家中允許訪問所有服務;
在辦公室內僅允許訪問文件共享服務;在咖啡廳僅允許上網瀏覽。
在以往,我們需要頻繁地手動設置防火牆策略規則,而現在只需要預設好區域集合,
然後只需輕點鼠標就可以自動切換了,從而極大地提升了防火牆策略的應用效率。
firewalld中常見的區域名稱(默認爲public);

區域:
firewalld將網卡對應到不同的區域(zone),zone 默認共有9個:block(拒絕)
block(拒絕) dmz(非軍事化) drop(丟棄) external(外部) home(家庭) internal(內部) public(公開) trusted(信任) work(工作區).
不同的區域之間的差異是其對待數據包的默認行爲不同,firewalld的默認區域爲public;

文件:
/usr/lib/firewalld/services/ :firewalld服務默認在此目錄下定義了70+種服務供我們使用,格式:服務名.xml;
/etc/firewalld/zones/ : 默認區域配置文件,配置文件中指定了編寫完成的規則(規則中的服務名必須與上述文件名一致);
分爲多個文件的優點 :
第一,通過服務名字來管理規則更加人性化,
第二,通過服務來組織端口分組的模式更加高效,如果一個服務使用了若干個網絡端口,則服務的配置文件就相當於提供了到這些端口的規則管理的批量操作快捷方式;

命令語法:firewall-cmd [--zone=zone] 動作 [--permanent] 
注:如果不指定--zone選項,則爲當前所在的默認區域,--permanent選項爲是否將改動寫入到區域配置文件中

firewall的狀態:
--state ##查看防火牆的狀態
--reload ##重新加載防火牆,中斷用戶的連接,將臨時配置清掉,加載配置文件中的永久配置
--complete-reload ##重新加載防火牆,不中斷用戶的連接(防火牆出嚴重故障時使用)
--panic-on ##緊急模式,強制關閉所有網絡連接,--panic-off是關閉緊急模式

動作中查看操作:
--get-icmptypes ##查看支持的所有ICMP類型
--get-zones ##查看所有區域
--get-default-zone ##查看當前的默認區域
--get-active-zones ##查看當前正在使用的區域
--get-services ##查看當前區域支持的服務
--list-services ##查看當前區域開放的服務列表
--list-all ##查看此區域內的所有配置,類似與iptables -L -n

更改區域操作:
--set-default-zone=work ##更改默認的區域

新建--add或刪除--remove規則:
--add-interface=eth0 ##將網絡接口添加到默認的區域內
--add-port=12222/tcp --permanent ##添加端口到區域開放列表中
--add-port=5000-10000/tcp --permanent ##將端口範圍添加到開放列表中;
--add-service=ftp --permanent ##添加服務到區域開放列表中(注意服務的名稱需要與此區域支持的服務列表中的名稱一致)
--add-source=192.168.1.1 ##添加源地址的流量到指定區域
--remove-source=192.168.1.1 ##刪除源地址的流量到指定區域
--change-interface=eth1 ##改變指定的接口到其他區域
--remove-service=http ##在home區域內將http服務刪除在開放列表中刪除
--add-masquerade ##開啓SNAT(源地址轉換)
--query-masquerade ##查詢SNAT的狀態
--remove-interface=eth0 ##將網絡接口在默認的區域內刪除
--query-interface=eth0 ##確定該網卡接口是否存在於此區域 
--add-forward-port=port=513:proto=tcp:toport=22:toaddr=192.168.100.101 ##端口轉發

Rich規則:
當基本firewalld語法規則不能滿足要求時,可以使用以下更復雜的規則
.rich-rules 富規則,功能強,表達性語言,查看幫助:man 5 firewalld.richlanguage
.rich規則比基本的firewalld語法實現更強的功能,不僅實現允許/拒絕,還可以實現日誌syslog和auditd,也可以實現端口轉發,僞裝和限制速率
rich規則實施順序有以下四點
a.該區域的端口轉發,僞造規則
b.該區域的日誌規則
c.該區域的允許規則
d.該區域的拒絕規則
每個匹配的規則都生效,所有規則都不匹配,該區域默認規則生效;

Rich規則語法:

Rich規則選項:
--add-rich-rule=’rule’ ##新建rich規則
--remove-rich-rule=’rule’ ##刪除rich規則
--query-rich-rule=’rule’ ##查看單條rich規則
--list-rich-rules ##查看rich規則列表

Rich規則示例:
#拒絕從192.168.0.11的所有流量
firewall-cmd --permanent --zone=cla***oom --add-rich-rule=‘rule family=ipv4 source address=192.168.0.11/32 reject‘
#限制每分鐘只有兩個連接到ftp服務
firewall-cmd --add-rich-rule=’rule service name=ftp limitvalue=2/m accept’
#拋棄esp協議的所有數據包
firewall-cmd --permanent --add-rich-rule=‘rule protocol value=esp drop‘
#接受所有192.168.1.0/24子網端口範置7900-7905的TCP流量
firewall-cmd --permanent --zone=vnc --add-rich-rule=‘rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept‘
##開啓SNAT
firewall-cmd --permanent --add-rich-rule=‘rule family=ipv4 source address=192.168.0.0/24 masquerade‘
##使用rule規則實現端口轉發,to-addr選項如果不指定默認轉發到本機
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.100.0/24 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.100.100'

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章