Centos7-----firewalld詳解python
概述:
Filewalld(動態防火牆)做爲redhat7系統中變動對於netfilter內核模塊的管理工具;
iptables service 管理防火牆規則的模式(靜態):用戶將新的防火牆規則添加進 /etc/sysconfig/iptables 配置文件當中,
再執行命令 /etc/init.d/iptables reload 使變動的規則生效。在這整個過程的背後,iptables service 首先對舊的防火牆規則進行了清空,
而後從新完整地加載全部新的防火牆規則,若是加載了防火牆的模塊,須要在從新加載後進行手動加載防火牆的模塊;
firewalld 管理防火牆規則的模式(動態):任何規則的變動都不須要對整個防火牆規則列表進行從新加載,只須要將變動部分保存並更新到運行中的 iptables 便可。
還有命令行和圖形界面配置工具,它僅僅是替代了 iptables service 部分,其底層仍是使用 iptables 做爲防火牆規則管理入口。
firewalld 使用 python 語言開發,在新版本中已經計劃使用 c++ 重寫 daemon 部分。c++
便於理解:
相較於傳統的防火牆管理配置工具,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/ : 默認區域配置文件,配置文件中指定了編寫完成的規則(規則中的服務名必須與上述文件名一致);
分爲多個文件的優勢 :
第一,經過服務名字來管理規則更加人性化,
第二,經過服務來組織端口分組的模式更加高效,若是一個服務使用了若干個網絡端口,則服務的配置文件就至關於提供了到這些端口的規則管理的批量操做快捷方式;tcp
命令語法:firewall-cmd [--zone=zone] 動做 [--permanent]
注:若是不指定--zone選項,則爲當前所在的默認區域,--permanent選項爲是否將改動寫入到區域配置文件中ide
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 ##端口轉發xml
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‘##開啓SNATfirewall-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'