一、FirewallD簡介
FirewallD 提供了支持網(wǎng)絡(luò)/防火墻區(qū)域(zone)定義網(wǎng)絡(luò)鏈接以及接口安全等級的動態(tài)防火墻管理工具逼龟。它支持 IPv4, IPv6 防火墻設(shè)置以及以太網(wǎng)橋接评凝,并且擁有運(yùn)行時配置和永久配置選項。它也支持允許服務(wù)或者應(yīng)用程序直接添加防火墻規(guī)則的接口腺律。 以前的 system-config-firewall/lokkit 防火墻模型是靜態(tài)的奕短,每次修改都要求防火墻完全重啟。這個過程包括內(nèi)核 netfilter 防火墻模塊的卸載和新配置所需模塊的裝載等匀钧。而模塊的卸載將會破壞狀態(tài)防火墻和確立的連接翎碑。
相反,firewall daemon 動態(tài)管理防火墻之斯,不需要重啟整個防火墻便可應(yīng)用更改日杈。因而也就沒有必要重載所有內(nèi)核防火墻模塊了。不過吊圾,要使用 firewall daemon 就要求防火墻的所有變更都要通過該守護(hù)進(jìn)程來實(shí)現(xiàn)达椰,以確保守護(hù)進(jìn)程中的狀態(tài)和內(nèi)核里的防火墻是一致的。另外项乒,firewall daemon 無法解析由 ip*tables 和 ebtables 命令行工具添加的防火墻規(guī)則啰劲。
守護(hù)進(jìn)程通過 D-BUS 提供當(dāng)前激活的防火墻設(shè)置信息,也通過 D-BUS 接受使用 PolicyKit 認(rèn)證方式做的更改檀何。
二蝇裤、FirewallD特性
守護(hù)進(jìn)程
應(yīng)用程序括袒、守護(hù)進(jìn)程和用戶可以通過 D-BUS 請求啟用一個防火墻特性拣凹。特性可以是預(yù)定義的防火墻功能桃犬,如:服務(wù)隧土、端口和協(xié)議的組合、端口/數(shù)據(jù)報轉(zhuǎn)發(fā)藕甩、偽裝施敢、ICMP 攔截或自定義規(guī)則等。該功能可以啟用確定的一段時間也可以再次停用狭莱。
通過所謂的直接接口僵娃,其他的服務(wù)(例如 libvirt )能夠通過 iptables 變元(arguments)和參數(shù)(parameters)增加自己的規(guī)則。
amanda 腋妙、ftp 默怨、samba 和 tftp 服務(wù)的 netfilter 防火墻助手也被“守護(hù)進(jìn)程”解決了,只要它們還作為預(yù)定義服務(wù)的一部分。附加助手的裝載不作為當(dāng)前接口的一部分骤素。由于一些助手只有在由模塊控制的所有連接都關(guān)閉后才可裝載匙睹。因而,跟蹤連接信息很重要济竹,需要列入考慮范圍痕檬。靜態(tài)防火墻(system-config-firewall/lokkit)
使用 system-config-firewall 和 lokkit 的靜態(tài)防火墻模型實(shí)際上仍然可用并將繼續(xù)提供,但卻不能與“守護(hù)進(jìn)程”同時使用规辱。用戶或者管理員可以決定使用哪一種方案谆棺。
在軟件安裝栽燕,初次啟動或者是首次聯(lián)網(wǎng)時罕袋,將會出現(xiàn)一個選擇器。通過它你可以選擇要使用的防火墻方案碍岔。其他的解決方案將保持完整浴讯,可以通過更換模式啟用。
firewall daemon 獨(dú)立于 system-config-firewall蔼啦,但二者不能同時使用榆纽。區(qū)域
網(wǎng)絡(luò)區(qū)域定義了網(wǎng)絡(luò)連接的可信等級。這是一個一對多的關(guān)系捏肢,這意味著一次連接可以僅僅是一個區(qū)域的一部分奈籽,而一個區(qū)域可以用于很多連接。預(yù)定義服務(wù)
服務(wù)是端口和/或協(xié)議入口的組合鸵赫。備選內(nèi)容包括 netfilter 助手模塊以及 IPv4衣屏、IPv6地址。端口和協(xié)議
定義了 tcp 或 udp 端口辩棒,端口可以是一個端口或者端口范圍狼忱。ICMP阻塞
可以選擇 Internet 控制報文協(xié)議的報文膨疏。這些報文可以是信息請求亦可是對信息請求或錯誤條件創(chuàng)建的響應(yīng)。偽裝
私有網(wǎng)絡(luò)地址可以被映射到公開的IP地址钻弄。這是一次正規(guī)的地址轉(zhuǎn)換佃却。端口轉(zhuǎn)發(fā)
端口可以映射到另一個端口以及/或者其他主機(jī)。哪個區(qū)域可用?
由firewalld 提供的區(qū)域按照從不信任到信任的順序排序窘俺。丟棄
任何流入網(wǎng)絡(luò)的包都被丟棄饲帅,不作出任何響應(yīng)。只允許流出的網(wǎng)絡(luò)連接瘤泪。阻塞
任何進(jìn)入的網(wǎng)絡(luò)連接都被拒絕洒闸,并返回 IPv4 的 icmp-host-prohibited 報文或者 IPv6 的 icmp6-adm-prohibited 報文。只允許由該系統(tǒng)初始化的網(wǎng)絡(luò)連接均芽。公開
用以可以公開的部分丘逸。你認(rèn)為網(wǎng)絡(luò)中其他的計算機(jī)不可信并且可能傷害你的計算機(jī)。只允許選中的連接接入掀宋。外部
用在路由器等啟用偽裝的外部網(wǎng)絡(luò)深纲。你認(rèn)為網(wǎng)絡(luò)中其他的計算機(jī)不可信并且可能傷害你的計算機(jī),只允許選中的連接接入劲妙。隔離區(qū)(dmz)
用以允許隔離區(qū)(dmz)中的電腦有限地被外界網(wǎng)絡(luò)訪問湃鹊。只接受被選中的連接。工作
用在工作網(wǎng)絡(luò)镣奋。你信任網(wǎng)絡(luò)中的大多數(shù)計算機(jī)不會影響你的計算機(jī)币呵。只接受被選中的連接。家庭
用在家庭網(wǎng)絡(luò)侨颈。你信任網(wǎng)絡(luò)中的大多數(shù)計算機(jī)不會影響你的計算機(jī)余赢。只接受被選中的連接。內(nèi)部
用在內(nèi)部網(wǎng)絡(luò)哈垢。你信任網(wǎng)絡(luò)中的大多數(shù)計算機(jī)不會影響你的計算機(jī)妻柒。只接受被選中的連接。受信任的
允許所有網(wǎng)絡(luò)連接耘分。我應(yīng)該選用哪個區(qū)域?
例如举塔,公共的 WIFI 連接應(yīng)該主要為不受信任的,家庭的有線網(wǎng)絡(luò)應(yīng)該是相當(dāng)可信任的求泰。根據(jù)與你使用的網(wǎng)絡(luò)最符合的區(qū)域進(jìn)行選擇央渣。由NetworkManager控制的網(wǎng)絡(luò)連接
防火墻不能夠通過 NetworkManager 顯示的名稱來配置網(wǎng)絡(luò)連接,只能配置網(wǎng)絡(luò)接口渴频。因此在網(wǎng)絡(luò)連接之前 NetworkManager 將配置文件所述連接對應(yīng)的網(wǎng)絡(luò)接口告訴 firewalld 芽丹。如果在配置文件中沒有配置區(qū)域,接口將配置到 firewalld 的默認(rèn)區(qū)域枉氮。如果網(wǎng)絡(luò)連接使用了不止一個接口志衍,所有的接口都會應(yīng)用到 fiwewalld暖庄。接口名稱的改變也將由 NetworkManager 控制并應(yīng)用到firewalld。由腳本控制的網(wǎng)絡(luò)
對于由網(wǎng)絡(luò)腳本控制的連接有一條限制:沒有守護(hù)進(jìn)程通知 firewalld 將連接增加到區(qū)域楼肪。這項工作僅在 ifcfg-post 腳本進(jìn)行培廓。因此,此后對網(wǎng)絡(luò)連接的重命名將不能被應(yīng)用到firewalld春叫。同樣肩钠,在連接活動時重啟 firewalld 將導(dǎo)致與其失去關(guān)聯(lián)。現(xiàn)在有意修復(fù)此情況暂殖。最簡單的是將全部未配置連接加入默認(rèn)區(qū)域价匠。
- 使用firewalld
圖形界面工具:firewall-config
firewall-cmd命令行工具:firewall-cmd
三、FirewallD配置
- Firewalld命令:
#進(jìn)程與狀態(tài)相關(guān)
systemctl start firewalld.service #啟動防火墻
systemctl stop firewalld.service #停止防火墻
firewall-cmd --state #查看防火墻狀態(tài)
firewall-cmd --reload #更新防火墻規(guī)則
firewall-cmd --state #查看防火墻狀態(tài)
firewall-cmd --reload #重載防火墻規(guī)則
firewall-cmd --list-ports #查看所有打開的端口
firewall-cmd --list-services #查看所有允許的服務(wù)
firewall-cmd --get-services #獲取所有支持的服務(wù)
#區(qū)域相關(guān)
firewall-cmd --list-all-zones #查看所有區(qū)域信息
firewall-cmd --get-active-zones #查看活動區(qū)域信息
firewall-cmd --set-default-zone=public #設(shè)置public為默認(rèn)區(qū)域
firewall-cmd --get-default-zone #查看默認(rèn)區(qū)域信息
firewall-cmd --zone=public --add-interface=eth0 #將接口eth0加入?yún)^(qū)域public
#接口相關(guān)
firewall-cmd --zone=public --remove-interface=eth0 #從區(qū)域public中刪除接口eth0
firewall-cmd --zone=default --change-interface=eth0 #修改接口eth0所屬區(qū)域為default
firewall-cmd --get-zone-of-interface=eth0 #查看接口eth0所屬區(qū)域
#端口控制
firewall-cmd --add-port=80/tcp --permanent #永久添加80端口例外(全局)
firewall-cmd --remove-port=80/tcp --permanent #永久刪除80端口例外(全局)
firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局)
firewall-cmd --zone=public --add-port=80/tcp --permanent #永久添加80端口例外(區(qū)域public)
firewall-cmd --zone=public --remove-port=80/tcp --permanent #永久刪除80端口例外(區(qū)域public)
firewall-cmd --zone=public --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(區(qū)域public)
注:如果某個接口不屬于任何Zone呛每,那么這個接口的所有數(shù)據(jù)包使用默認(rèn)的Zone的規(guī)則踩窖。
命令含義:
--zone #作用域
--add-port=80/tcp #添加端口,格式為:端口/通訊協(xié)議
--permanent #永久生效晨横,沒有此參數(shù)重啟后失效Systemctl命令:
systemctl start firewalld.service #啟動服務(wù)
systemctl stop firewalld.service #關(guān)閉服務(wù)
systemctl reloadt firewalld.service #重載配置
systemctl restart firewalld.service #重啟服務(wù)
systemctl status firewalld.service #顯示服務(wù)的狀態(tài)
systemctl enable firewalld.service #在開機(jī)時啟用服務(wù)
systemctl disable firewalld.service #在開機(jī)時禁用服務(wù)
systemctl is-enabled firewalld.service #查看服務(wù)是否開機(jī)啟動
systemctl list-unit-files|grep enabled #查看已啟動的服務(wù)列表
systemctl --failed #查看啟動失敗的服務(wù)列表
- 關(guān)閉CentOS7自帶Firewall啟用iptables:
yum install iptables-services #安裝iptables
systemctl stop firewalld.service #停止firewalld
systemctl mask firewalld.service #禁止自動和手動啟動firewalld
systemctl start iptables.service #啟動iptables
systemctl start ip6tables.service #啟動ip6tables
systemctl enable iptables.service #設(shè)置iptables自啟動
systemctl enable ip6tables.service #設(shè)置ip6tables自啟動
注:靜態(tài)防火墻規(guī)則配置文件是 /etc/sysconfig/iptables 以及 /etc/sysconfig/ip6tables