一、FirewallD簡(jiǎn)介
FirewallD 提供了支持網(wǎng)絡(luò)/防火墻區(qū)域(zone)定義網(wǎng)絡(luò)鏈接以及接口安全等級(jí)的動(dòng)態(tài)防火墻管理工具。它支持 IPv4, IPv6 防火墻設(shè)置以及以太網(wǎng)橋接,并且擁有運(yùn)行時(shí)配置和永久配置選項(xiàng)。它也支持允許服務(wù)或者應(yīng)用程序直接添加防火墻規(guī)則的接口。 以前的 system-config-firewall/lokkit 防火墻模型是靜態(tài)的,每次修改都要求防火墻完全重啟。這個(gè)過程包括內(nèi)核 netfilter 防火墻模塊的卸載和新配置所需模塊的裝載等。而模塊的卸載將會(huì)破壞狀態(tài)防火墻和確立的連接。
相反,firewall daemon 動(dòng)態(tài)管理防火墻,不需要重啟整個(gè)防火墻便可應(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 請(qǐng)求啟用一個(gè)防火墻特性。特性可以是預(yù)定義的防火墻功能,如:服務(wù)、端口和協(xié)議的組合、端口/數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)、偽裝、ICMP 攔截或自定義規(guī)則等。該功能可以啟用確定的一段時(shí)間也可以再次停用。
通過所謂的直接接口,其他的服務(wù)(例如 libvirt )能夠通過 iptables 變?cè)?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)程”同時(shí)使用。用戶或者管理員可以決定使用哪一種方案。
在軟件安裝,初次啟動(dòng)或者是首次聯(lián)網(wǎng)時(shí),將會(huì)出現(xiàn)一個(gè)選擇器。通過它你可以選擇要使用的防火墻方案。其他的解決方案將保持完整,可以通過更換模式啟用。
firewall daemon 獨(dú)立于 system-config-firewall,但二者不能同時(shí)使用。區(qū)域
網(wǎng)絡(luò)區(qū)域定義了網(wǎng)絡(luò)連接的可信等級(jí)。這是一個(gè)一對(duì)多的關(guān)系,這意味著一次連接可以僅僅是一個(gè)區(qū)域的一部分,而一個(gè)區(qū)域可以用于很多連接。預(yù)定義服務(wù)
服務(wù)是端口和/或協(xié)議入口的組合。備選內(nèi)容包括 netfilter 助手模塊以及 IPv4、IPv6地址。端口和協(xié)議
定義了 tcp 或 udp 端口,端口可以是一個(gè)端口或者端口范圍。ICMP阻塞
可以選擇 Internet 控制報(bào)文協(xié)議的報(bào)文。這些報(bào)文可以是信息請(qǐng)求亦可是對(duì)信息請(qǐng)求或錯(cuò)誤條件創(chuàng)建的響應(yīng)。偽裝
私有網(wǎng)絡(luò)地址可以被映射到公開的IP地址。這是一次正規(guī)的地址轉(zhuǎn)換。端口轉(zhuǎn)發(fā)
端口可以映射到另一個(gè)端口以及/或者其他主機(jī)。哪個(gè)區(qū)域可用?
由firewalld 提供的區(qū)域按照從不信任到信任的順序排序。丟棄
任何流入網(wǎng)絡(luò)的包都被丟棄,不作出任何響應(yīng)。只允許流出的網(wǎng)絡(luò)連接。阻塞
任何進(jìn)入的網(wǎng)絡(luò)連接都被拒絕,并返回 IPv4 的 icmp-host-prohibited 報(bào)文或者 IPv6 的 icmp6-adm-prohibited 報(bào)文。只允許由該系統(tǒng)初始化的網(wǎng)絡(luò)連接。公開
用以可以公開的部分。你認(rèn)為網(wǎng)絡(luò)中其他的計(jì)算機(jī)不可信并且可能傷害你的計(jì)算機(jī)。只允許選中的連接接入。外部
用在路由器等啟用偽裝的外部網(wǎng)絡(luò)。你認(rèn)為網(wǎng)絡(luò)中其他的計(jì)算機(jī)不可信并且可能傷害你的計(jì)算機(jī),只允許選中的連接接入。隔離區(qū)(dmz)
用以允許隔離區(qū)(dmz)中的電腦有限地被外界網(wǎng)絡(luò)訪問。只接受被選中的連接。工作
用在工作網(wǎng)絡(luò)。你信任網(wǎng)絡(luò)中的大多數(shù)計(jì)算機(jī)不會(huì)影響你的計(jì)算機(jī)。只接受被選中的連接。家庭
用在家庭網(wǎng)絡(luò)。你信任網(wǎng)絡(luò)中的大多數(shù)計(jì)算機(jī)不會(huì)影響你的計(jì)算機(jī)。只接受被選中的連接。內(nèi)部
用在內(nèi)部網(wǎng)絡(luò)。你信任網(wǎng)絡(luò)中的大多數(shù)計(jì)算機(jī)不會(huì)影響你的計(jì)算機(jī)。只接受被選中的連接。受信任的
允許所有網(wǎng)絡(luò)連接。我應(yīng)該選用哪個(gè)區(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 將配置文件所述連接對(duì)應(yīng)的網(wǎng)絡(luò)接口告訴 firewalld 。如果在配置文件中沒有配置區(qū)域,接口將配置到 firewalld 的默認(rèn)區(qū)域。如果網(wǎng)絡(luò)連接使用了不止一個(gè)接口,所有的接口都會(huì)應(yīng)用到 fiwewalld。接口名稱的改變也將由 NetworkManager 控制并應(yīng)用到firewalld。由腳本控制的網(wǎng)絡(luò)
對(duì)于由網(wǎng)絡(luò)腳本控制的連接有一條限制:沒有守護(hù)進(jìn)程通知 firewalld 將連接增加到區(qū)域。這項(xiàng)工作僅在 ifcfg-post 腳本進(jìn)行。因此,此后對(duì)網(wǎng)絡(luò)連接的重命名將不能被應(yīng)用到firewalld。同樣,在連接活動(dòng)時(shí)重啟 firewalld 將導(dǎo)致與其失去關(guān)聯(lián)?,F(xiàn)在有意修復(fù)此情況。最簡(jiǎn)單的是將全部未配置連接加入默認(rèn)區(qū)域。
- 使用firewalld
圖形界面工具:firewall-config
firewall-cmd命令行工具:firewall-cmd
三、FirewallD配置
- Firewalld命令:
#進(jìn)程與狀態(tài)相關(guān)
systemctl start firewalld.service #啟動(dòng)防火墻
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 #查看活動(dòng)區(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ū)域?yàn)閐efault
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)
注:如果某個(gè)接口不屬于任何Zone,那么這個(gè)接口的所有數(shù)據(jù)包使用默認(rèn)的Zone的規(guī)則。
命令含義:
--zone #作用域
--add-port=80/tcp #添加端口,格式為:端口/通訊協(xié)議
--permanent #永久生效,沒有此參數(shù)重啟后失效Systemctl命令:
systemctl start firewalld.service #啟動(dòng)服務(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ī)時(shí)啟用服務(wù)
systemctl disable firewalld.service #在開機(jī)時(shí)禁用服務(wù)
systemctl is-enabled firewalld.service #查看服務(wù)是否開機(jī)啟動(dòng)
systemctl list-unit-files|grep enabled #查看已啟動(dòng)的服務(wù)列表
systemctl --failed #查看啟動(dòng)失敗的服務(wù)列表
- 關(guān)閉CentOS7自帶Firewall啟用iptables:
yum install iptables-services #安裝iptables
systemctl stop firewalld.service #停止firewalld
systemctl mask firewalld.service #禁止自動(dòng)和手動(dòng)啟動(dòng)firewalld
systemctl start iptables.service #啟動(dòng)iptables
systemctl start ip6tables.service #啟動(dòng)ip6tables
systemctl enable iptables.service #設(shè)置iptables自啟動(dòng)
systemctl enable ip6tables.service #設(shè)置ip6tables自啟動(dòng)
注:靜態(tài)防火墻規(guī)則配置文件是 /etc/sysconfig/iptables 以及 /etc/sysconfig/ip6tables