CentOS7下Firewall防火墻配置用法詳解
centos 7中防火墻是一個非常的強(qiáng)大的功能了,但對于centos 7中在防火墻中進(jìn)行了升級了收擦,
下面我們一起來詳細(xì)的看看關(guān)于centos 7中防火墻使用方法。
FirewallD 提供了支持網(wǎng)絡(luò)/防火墻區(qū)域(zone)定義網(wǎng)絡(luò)鏈接以及接口安全等級的動態(tài)防火墻管理工具甘邀。
它支持 IPv4, IPv6 防火墻設(shè)置以及以太網(wǎng)橋接雁仲,并且擁有運行時配置和永久配置選項。
它也支持允許服務(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)程來實現(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)證方式做的更改造烁。
“守護(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)防火墻模型實際上仍然可用并將繼續(xù)提供稿湿,但卻不能與“守護(hù)進(jìn)程”同時使用铅匹。
用戶或者管理員可以決定使用哪一種方案。
軟件安裝饺藤,初次啟動或者是首次聯(lián)網(wǎng)時包斑,將會出現(xiàn)一個選擇器。通過它你可以選擇要使用的防火墻方案涕俗。
其他的解決方案將保持完整舰始,可以通過更換模式啟用。
firewall daemon 獨立于 system-config-firewall咽袜,但二者不能同時使用丸卷。
使用iptables和ip6tables的靜態(tài)防火墻規(guī)則
如果你想使用自己的 iptables 和 ip6tables 靜態(tài)防火墻規(guī)則, 那么請安裝 iptables-services 并且禁用 firewalld ,啟用 iptables 和ip6tables:
yum install iptables-services
systemctl mask firewalld.service
systemctl enable iptables.service
systemctl enable ip6tables.service
靜態(tài)防火墻規(guī)則配置文件是 /etc/sysconfig/iptables 以及 /etc/sysconfig/ip6tables .
注: iptables 與 iptables-services 軟件包不提供與服務(wù)配套使用的防火墻規(guī)則.
這些服務(wù)是用來保障兼容性以及供想使用自己防火墻規(guī)則的人使用的.
你可以安裝并使用 system-config-firewall 來創(chuàng)建上述服務(wù)需要的規(guī)則.
為了能使用 system-config-firewall, 你必須停止 firewalld.
為服務(wù)創(chuàng)建規(guī)則并停用 firewalld 后询刹,就可以啟用 iptables 與 ip6tables 服務(wù)了:
systemctl stop firewalld.service
systemctl start iptables.service
systemctl start ip6tables.service
什么是區(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ī)。只允許選中的連接接入耳璧。(You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.)
外部
用在路由器等啟用偽裝的外部網(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)行選擇组去。
如何配置或者增加區(qū)域?
你可以使用任何一種 firewalld 配置工具來配置或者增加區(qū)域,以及修改配置步淹。工具有例如 firewall-config 這樣的圖形界面工具从隆, firewall-cmd 這樣的命令行工具,以及D-BUS接口缭裆〖耄或者你也可以在配置文件目錄中創(chuàng)建或者拷貝區(qū)域文件。 @PREFIX@/lib/firewalld/zones 被用于默認(rèn)和備用配置幼驶,/etc/firewalld/zones 被用于用戶創(chuàng)建和自定義配置文件分蓖。
如何為網(wǎng)絡(luò)連接設(shè)置或者修改區(qū)域
區(qū)域設(shè)置以 ZONE= 選項 存儲在網(wǎng)絡(luò)連接的ifcfg文件中饼疙。如果這個選項缺失或者為空湿痢,firewalld 將使用配置的默認(rèn)區(qū)域群嗤。
如果這個連接受到 NetworkManager 控制,你也可以使用 nm-connection-editor 來修改區(qū)域氏淑。
由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ò)連接將被用作與區(qū)域的關(guān)系止潮。
如果一個接口斷開了,NetworkManager也將告訴firewalld從區(qū)域中刪除該接口钞楼。
當(dāng)firewalld由systemd或者init腳本啟動或者重啟后询件,firewalld將通知NetworkManager把網(wǎng)絡(luò)連接增加到區(qū)域雳殊。
由腳本控制的網(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ū)域澳厢。
區(qū)域定義了本區(qū)域中防火墻的特性:
使用firewalld
你可以通過圖形界面工具 firewall-config 或者命令行客戶端 firewall-cmd 啟用或者關(guān)閉防火墻特性剩拢。
使用firewall-cmd
命令行工具 firewall-cmd 支持全部防火墻特性徐伐。對于狀態(tài)和查詢模式呵晨,命令只返回狀態(tài),沒有其他輸出谓罗。
一般應(yīng)用
獲取 firewalld 狀態(tài)
firewall-cmd --state
此舉返回 firewalld 的狀態(tài)檩咱,沒有任何輸出刻蚯〈缎冢可以使用以下方式獲得狀態(tài)輸出:
firewall-cmd --state && echo "Running" || echo "Not running"
在 Fedora 19 中, 狀態(tài)輸出比此前直觀:
# rpm -qf $( which firewall-cmd )
firewalld-0.3.3-2.fc19.noarch# firewall-cmd --state
not running
在不改變狀態(tài)的條件下重新加載防火墻:
firewall-cmd --reload
如果你使用–complete-reload讨便,狀態(tài)信息將會丟失霸褒。
這個選項應(yīng)當(dāng)僅用于處理防火墻問題時盈蛮,例如,狀態(tài)信息和防火墻規(guī)則都正常衰倦,但是不能建立任何連接的情況耿币。
獲取支持的區(qū)域列表
firewall-cmd --get-zones
這條命令輸出用空格分隔的列表。
獲取所有支持的服務(wù)
firewall-cmd --get-services
這條命令輸出用空格分隔的列表叛溢。
獲取所有支持的ICMP類型
firewall-cmd --get-icmptypes
這條命令輸出用空格分隔的列表楷掉。
列出全部啟用的區(qū)域的特性
firewall-cmd --list-all-zones
輸出格式是:
<zone>
interfaces: <interface1> ..
services: <service1> ..
ports: <port1> ..
forward-ports: <forward port1> ..
icmp-blocks: <icmp type1> ....
輸出區(qū)域 <zone> 全部啟用的特性烹植。如果生略區(qū)域草雕,將顯示默認(rèn)區(qū)域的信息墩虹。
firewall-cmd [--zone=<zone>] --list-all
獲取默認(rèn)區(qū)域的網(wǎng)絡(luò)設(shè)置
firewall-cmd --get-default-zone
設(shè)置默認(rèn)區(qū)域
firewall-cmd --set-default-zone=<zone>
流入默認(rèn)區(qū)域中配置的接口的新訪問請求將被置入新的默認(rèn)區(qū)域诫钓。當(dāng)前活動的連接將不受影響菌湃。
獲取活動的區(qū)域
firewall-cmd --get-active-zones
這條命令將用以下格式輸出每個區(qū)域所含接口:
<zone1>: <interface1> <interface2> ..<zone2>: <interface3> ..
根據(jù)接口獲取區(qū)域
firewall-cmd --get-zone-of-interface=<interface>
這條命令將輸出接口所屬的區(qū)域名稱惧所。
將接口增加到區(qū)域
firewall-cmd [--zone=<zone>] --add-interface=<interface>
如果接口不屬于區(qū)域纯路,接口將被增加到區(qū)域寞忿。如果區(qū)域被省略了,將使用默認(rèn)區(qū)域辖佣。接口在重新加載后將重新應(yīng)用卷谈。
修改接口所屬區(qū)域
firewall-cmd [--zone=<zone>] --change-interface=<interface>
這個選項與 –add-interface 選項相似世蔗,但是當(dāng)接口已經(jīng)存在于另一個區(qū)域的時候污淋,該接口將被添加到新的區(qū)域寸爆。
從區(qū)域中刪除一個接口
firewall-cmd [--zone=<zone>] --remove-interface=<interface>
查詢區(qū)域中是否包含某接口
firewall-cmd [--zone=<zone>] --query-interface=<interface>
返回接口是否存在于該區(qū)域赁豆。沒有輸出魔种。
列舉區(qū)域中啟用的服務(wù)
firewall-cmd [ --zone=<zone> ] --list-services
啟用應(yīng)急模式阻斷所有網(wǎng)絡(luò)連接务嫡,以防出現(xiàn)緊急狀況
firewall-cmd --panic-on
禁用應(yīng)急模式
firewall-cmd --panic-off
應(yīng)急模式在 0.3.0 版本中發(fā)生了變化
在 0.3.0 之前的 FirewallD版本中, panic 選項是 –enable-panic 與 –disable-panic.
查詢應(yīng)急模式
firewall-cmd --query-panic
此命令返回應(yīng)急模式的狀態(tài)心铃,沒有輸出去扣∮淅猓可以使用以下方式獲得狀態(tài)輸出:
firewall-cmd --query-panic && echo "On" || echo "Off"
處理運行時區(qū)域
運行時模式下對區(qū)域進(jìn)行的修改不是永久有效的奔滑。重新加載或者重啟后修改將失效朋其。
啟用區(qū)域中的一種服務(wù)
firewall-cmd [--zone=<zone>] --add-service=<service> [--timeout=<seconds>]
此舉啟用區(qū)域中的一種服務(wù)梅猿。如果未指定區(qū)域袱蚓,將使用默認(rèn)區(qū)域喇潘。
如果設(shè)定了超時時間响蓉,服務(wù)將只啟用特定秒數(shù)哨毁。如果服務(wù)已經(jīng)活躍扼褪,將不會有任何警告信息话浇。
例: 使區(qū)域中的ipp-client服務(wù)生效60秒:
firewall-cmd --zone=home --add-service=ipp-client --timeout=60
例: 啟用默認(rèn)區(qū)域中的http服務(wù):
firewall-cmd --add-service=http
禁用區(qū)域中的某種服務(wù)
firewall-cmd [--zone=<zone>] --remove-service=<service>
此舉禁用區(qū)域中的某種服務(wù)食店。如果未指定區(qū)域吉嫩,將使用默認(rèn)區(qū)域嗅定。
例: 禁止home區(qū)域中的http服務(wù):
firewall-cmd --zone=home --remove-service=http
區(qū)域種的服務(wù)將被禁用渠退。如果服務(wù)沒有啟用姊扔,將不會有任何警告信息梅誓。
查詢區(qū)域中是否啟用了特定服務(wù)
firewall-cmd [--zone=<zone>] --query-service=<service>
如果服務(wù)啟用,將返回1,否則返回0共虑。沒有輸出信息妈拌。
啟用區(qū)域端口和協(xié)議組合
firewall-cmd [--zone=<zone>] --add-port=<port>[-<port>]/<protocol> [--timeout=<seconds>]
此舉將啟用端口和協(xié)議的組合。端口可以是一個單獨的端口 <port> 或者是一個端口范圍 <port>-<port> 培愁。協(xié)議可以是 tcp 或 udp定续。
禁用端口和協(xié)議組合
firewall-cmd [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
查詢區(qū)域中是否啟用了端口和協(xié)議組合
firewall-cmd [--zone=<zone>] --query-port=<port>[-<port>]/<protocol>
如果啟用私股,此命令將有返回值倡鲸。沒有輸出信息峭状。
啟用區(qū)域中的IP偽裝功能
firewall-cmd [--zone=<zone>] --add-masquerade
此舉啟用區(qū)域的偽裝功能优床。私有網(wǎng)絡(luò)的地址將被隱藏并映射到一個公有IP羔巢。這是地址轉(zhuǎn)換的一種形式竿秆,常用于路由幽钢。由于內(nèi)核的限制匪燕,偽裝功能僅可用于IPv4帽驯。
禁用區(qū)域中的IP偽裝
firewall-cmd [--zone=<zone>] --remove-masquerade
查詢區(qū)域的偽裝狀態(tài)
firewall-cmd [--zone=<zone>] --query-masquerade
如果啟用尼变,此命令將有返回值嫌术。沒有輸出信息割按。
啟用區(qū)域的ICMP阻塞功能
firewall-cmd [--zone=<zone>] --add-icmp-block=<icmptype>
此舉將啟用選中的Internet控制報文協(xié)議(ICMP)報文進(jìn)行阻塞适荣。ICMP報文可以是請求信息或者創(chuàng)建的應(yīng)答報文束凑,以及錯誤應(yīng)答。
禁止區(qū)域的ICMP阻塞功能
firewall-cmd [--zone=<zone>] --remove-icmp-block=<icmptype>
查詢區(qū)域的ICMP阻塞功能
firewall-cmd [--zone=<zone>] --query-icmp-block=<icmptype>
如果啟用谈秫,此命令將有返回值拟烫。沒有輸出信息硕淑。
例: 阻塞區(qū)域的響應(yīng)應(yīng)答報文:
firewall-cmd --zone=public --add-icmp-block=echo-reply
在區(qū)域中啟用端口轉(zhuǎn)發(fā)或映射
firewall-cmd [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
端口可以映射到另一臺主機(jī)的同一端口,也可以是同一主機(jī)或另一主機(jī)的不同端口拇囊。端口號可以是一個單獨的端口 <port> 或者是端口范圍 <port>-<port> 寥袭。協(xié)議可以為 tcp 或udp 传黄。目標(biāo)端口可以是端口號 <port> 或者是端口范圍 <port>-<port> 膘掰。目標(biāo)地址可以是 IPv4 地址炭序。受內(nèi)核限制惭聂,端口轉(zhuǎn)發(fā)功能僅可用于IPv4辜纲。
禁止區(qū)域的端口轉(zhuǎn)發(fā)或者端口映射
firewall-cmd [--zone=<zone>] --remove-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
查詢區(qū)域的端口轉(zhuǎn)發(fā)或者端口映射
firewall-cmd [--zone=<zone>] --query-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
如果啟用见剩,此命令將有返回值苍苞。沒有輸出信息羹呵。
例: 將區(qū)域home的ssh轉(zhuǎn)發(fā)到127.0.0.2
firewall-cmd --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2
處理永久區(qū)域
永久選項不直接影響運行時的狀態(tài)冈欢。這些選項僅在重載或者重啟服務(wù)時可用凑耻。為了使用運行時和永久設(shè)置香浩,需要分別設(shè)置兩者。
選項 –permanent 需要是永久設(shè)置的第一個參數(shù)镜盯。
獲取永久選項所支持的服務(wù)
firewall-cmd --permanent --get-services
獲取永久選項所支持的ICMP類型列表
firewall-cmd --permanent --get-icmptypes
獲取支持的永久區(qū)域
firewall-cmd --permanent --get-zones
啟用區(qū)域中的服務(wù)
firewall-cmd --permanent [--zone=<zone>] --add-service=<service>
此舉將永久啟用區(qū)域中的服務(wù)速缆。如果未指定區(qū)域艺糜,將使用默認(rèn)區(qū)域破停。
禁用區(qū)域中的一種服務(wù)
firewall-cmd --permanent [--zone=<zone>] --remove-service=<service>
查詢區(qū)域中的服務(wù)是否啟用
firewall-cmd --permanent [--zone=<zone>] --query-service=<service>
如果服務(wù)啟用毅臊,此命令將有返回值管嬉。此命令沒有輸出信息蚯撩。
例: 永久啟用 home 區(qū)域中的 ipp-client 服務(wù)
firewall-cmd --permanent --zone=home --add-service=ipp-client
永久啟用區(qū)域中的一個端口-協(xié)議組合
firewall-cmd --permanent [--zone=<zone>] --add-port=<port>[-<port>]/<protocol>
永久禁用區(qū)域中的一個端口-協(xié)議組合
firewall-cmd --permanent [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
查詢區(qū)域中的端口-協(xié)議組合是否永久啟用
firewall-cmd --permanent [--zone=<zone>] --query-port=<port>[-<port>]/<protocol>
如果服務(wù)啟用,此命令將有返回值呀癣。此命令沒有輸出信息浦辨。
例: 永久啟用 home 區(qū)域中的 https (tcp 443) 端口
firewall-cmd --permanent --zone=home --add-port=443/tcp
永久啟用區(qū)域中的偽裝
firewall-cmd --permanent [--zone=<zone>] --add-masquerade
此舉啟用區(qū)域的偽裝功能流酬。私有網(wǎng)絡(luò)的地址將被隱藏并映射到一個公有IP芽腾。這是地址轉(zhuǎn)換的一種形式摊滔,常用于路由。由于內(nèi)核的限制,偽裝功能僅可用于IPv4廉侧。
永久禁用區(qū)域中的偽裝
firewall-cmd --permanent [--zone=<zone>] --remove-masquerade
查詢區(qū)域中的偽裝的永久狀態(tài)
firewall-cmd --permanent [--zone=<zone>] --query-masquerade
如果服務(wù)啟用段誊,此命令將有返回值。此命令沒有輸出信息烟瞧。
永久啟用區(qū)域中的ICMP阻塞
firewall-cmd --permanent [--zone=<zone>] --add-icmp-block=<icmptype>
此舉將啟用選中的 Internet 控制報文協(xié)議 (ICMP) 報文進(jìn)行阻塞参滴。 ICMP 報文可以是請求信息或者創(chuàng)建的應(yīng)答報文或錯誤應(yīng)答報文。
永久禁用區(qū)域中的ICMP阻塞
firewall-cmd --permanent [--zone=<zone>] --remove-icmp-block=<icmptype>
查詢區(qū)域中的ICMP永久狀態(tài)
firewall-cmd --permanent [--zone=<zone>] --query-icmp-block=<icmptype>
如果服務(wù)啟用锻弓,此命令將有返回值砾赔。此命令沒有輸出信息。
例: 阻塞公共區(qū)域中的響應(yīng)應(yīng)答報文:
firewall-cmd --permanent --zone=public --add-icmp-block=echo-reply
在區(qū)域中永久啟用端口轉(zhuǎn)發(fā)或映射
firewall-cmd --permanent [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
端口可以映射到另一臺主機(jī)的同一端口青灼,也可以是同一主機(jī)或另一主機(jī)的不同端口暴心。端口號可以是一個單獨的端口 <port> 或者是端口范圍 <port>-<port> 。協(xié)議可以為 tcp 或udp 专普。目標(biāo)端口可以是端口號 <port> 或者是端口范圍 <port>-<port> 。目標(biāo)地址可以是 IPv4 地址弹沽。受內(nèi)核限制檀夹,端口轉(zhuǎn)發(fā)功能僅可用于IPv4。
永久禁止區(qū)域的端口轉(zhuǎn)發(fā)或者端口映射
firewall-cmd --permanent [--zone=<zone>] --remove-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
查詢區(qū)域的端口轉(zhuǎn)發(fā)或者端口映射狀態(tài)
firewall-cmd --permanent [--zone=<zone>] --query-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
如果服務(wù)啟用策橘,此命令將有返回值炸渡。此命令沒有輸出信息。
例: 將 home 區(qū)域的 ssh 服務(wù)轉(zhuǎn)發(fā)到 127.0.0.2
firewall-cmd --permanent --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2
直接選項
直接選項主要用于使服務(wù)和應(yīng)用程序能夠增加規(guī)則丽已。 規(guī)則不會被保存蚌堵,在重新加載或者重啟之后必須再次提交。傳遞的參數(shù) <args> 與 iptables, ip6tables 以及 ebtables 一致。
選項–direct需要是直接選項的第一個參數(shù)吼畏。
將命令傳遞給防火墻督赤。參數(shù) <args> 可以是 iptables, ip6tables 以及 ebtables 命令行參數(shù)。
firewall-cmd --direct --passthrough { ipv4 | ipv6 | eb } <args>
為表 <table> 增加一個新鏈 <chain> 宫仗。
firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb } <table> <chain>
從表 <table> 中刪除鏈 <chain> 够挂。
firewall-cmd --direct --remove-chain { ipv4 | ipv6 | eb } <table> <chain>
查詢 <chain> 鏈?zhǔn)欠翊嬖谂c表 <table>. 如果是,返回0,否則返回1.
firewall-cmd --direct --query-chain { ipv4 | ipv6 | eb } <table> <chain>
如果啟用藕夫,此命令將有返回值孽糖。此命令沒有輸出信息。
獲取用空格分隔的表 <table> 中鏈的列表毅贮。
firewall-cmd --direct --get-chains { ipv4 | ipv6 | eb } <table>
為表 <table> 增加一條參數(shù)為 <args> 的鏈 <chain> 办悟,優(yōu)先級設(shè)定為 <priority>。
firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
從表 <table> 中刪除帶參數(shù) <args> 的鏈 <chain>滩褥。
firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb } <table> <chain> <args>
查詢帶參數(shù) <args> 的鏈 <chain> 是否存在表 <table> 中. 如果是病蛉,返回0,否則返回1.
firewall-cmd --direct --query-rule { ipv4 | ipv6 | eb } <table> <chain> <args>
如果啟用,此命令將有返回值瑰煎。此命令沒有輸出信息铺然。
獲取表 <table> 中所有增加到鏈 <chain> 的規(guī)則,并用換行分隔酒甸。
firewall-cmd --direct --get-rules { ipv4 | ipv6 | eb } <table> <chain>
當(dāng)前的firewalld特性
D-BUS接口
D-BUS 接口提供防火墻狀態(tài)的信息魄健,使防火墻的啟用、停用或查詢設(shè)置成為可能插勤。
區(qū)域
網(wǎng)絡(luò)或者防火墻區(qū)域定義了連接的可信程度沽瘦。firewalld 提供了幾種預(yù)定義的區(qū)域。區(qū)域配置選項和通用配置信息可以在firewall.zone(5)的手冊里查到农尖。
服務(wù)
服務(wù)可以是一系列本讀端口析恋、目的以及附加信息,也可以是服務(wù)啟動時自動增加的防火墻助手模塊盛卡。預(yù)定義服務(wù)的使用使啟用和禁用對服務(wù)的訪問變得更加簡單助隧。服務(wù)配置選項和通用文件信息在 firewalld.service(5) 手冊里有描述。
ICMP類型
Internet控制報文協(xié)議 (ICMP) 被用以交換報文和互聯(lián)網(wǎng)協(xié)議 (IP) 的錯誤報文滑沧。在 firewalld 中可以使用 ICMP 類型來限制報文交換喇颁。 ICMP 類型配置選項和通用文件信息可以參閱 firewalld.icmptype(5) 手冊。
直接接口
直接接口主要用于服務(wù)或者應(yīng)用程序增加特定的防火墻規(guī)則嚎货。這些規(guī)則并非永久有效,并且在收到 firewalld 通過 D-Bus 傳遞的啟動蔫浆、重啟殖属、重載信號后需要重新應(yīng)用。
運行時配置
運行時配置并非永久有效瓦盛,在重新加載時可以被恢復(fù)洗显,而系統(tǒng)或者服務(wù)重啟外潜、停止時,這些選項將會丟失挠唆。
永久配置
永久配置存儲在配置文件種处窥,每次機(jī)器重啟或者服務(wù)重啟、重新加載時將自動恢復(fù)玄组。
托盤小程序
托盤小程序 firewall-applet 為用戶顯示防火墻狀態(tài)和存在的問題滔驾。它也可以用來配置用戶允許修改的設(shè)置。
圖形化配置工具
firewall daemon 主要的配置工具是 firewall-config 俄讹。它支持防火墻的所有特性(除了由服務(wù)/應(yīng)用程序增加規(guī)則使用的直接接口)哆致。 管理員也可以用它來改變系統(tǒng)或用戶策略。
命令行客戶端
firewall-cmd是命令行下提供大部分圖形工具配置特性的工具患膛。
對于ebtables的支持
要滿足libvirt daemon的全部需求摊阀,在內(nèi)核 netfilter 級上防止 ip*tables 和 ebtables 間訪問問題,ebtables 支持是需要的踪蹬。由于這些命令是訪問相同結(jié)構(gòu)的胞此,因而不能同時使用。
/usr/lib/firewalld中的默認(rèn)/備用配置
該目錄包含了由 firewalld 提供的默認(rèn)以及備用的 ICMP 類型跃捣、服務(wù)漱牵、區(qū)域配置。由 firewalld 軟件包提供的這些文件不能被修改枝缔,即使修改也會隨著 firewalld 軟件包的更新被重置布疙。 其他的 ICMP 類型、服務(wù)愿卸、區(qū)域配置可以通過軟件包或者創(chuàng)建文件的方式提供灵临。
/etc/firewalld中的系統(tǒng)配置設(shè)置
存儲在此的系統(tǒng)或者用戶配置文件可以是系統(tǒng)管理員通過配置接口定制的,也可以是手動定制的趴荸。這些文件將重載默認(rèn)配置文件儒溉。
為了手動修改預(yù)定義的 icmp 類型,區(qū)域或者服務(wù)发钝,從默認(rèn)配置目錄將配置拷貝到相應(yīng)的系統(tǒng)配置目錄顿涣,然后根據(jù)需求進(jìn)行修改。
如果你加載了有默認(rèn)和備用配置的區(qū)域酝豪,在 /etc/firewalld下的對應(yīng)文件將被重命名為 <file>.old 然后啟用備用配置涛碑。
正在開發(fā)的特性
富語言
富語言特性提供了一種不需要了解iptables語法的通過高級語言配置復(fù)雜 IPv4 和 IPv6 防火墻規(guī)則的機(jī)制。
Fedora 19 提供了帶有 D-Bus 和命令行支持的富語言特性第2個里程碑版本孵淘。第3個里程碑版本也將提供對于圖形界面 firewall-config 的支持蒲障。
對于此特性的更多信息,請參閱: firewalld Rich Language
鎖定
鎖定特性為 firewalld 增加了鎖定本地應(yīng)用或者服務(wù)配置的簡單配置方式。它是一種輕量級的應(yīng)用程序策略揉阎。
Fedora 19 提供了鎖定特性的第二個里程碑版本庄撮,帶有 D-Bus 和命令行支持。第3個里程碑版本也將提供圖形界面 firewall-config 下的支持毙籽。
更多信息請參閱: firewalld Lockdown
永久直接規(guī)則
這項特性處于早期狀態(tài)洞斯。它將能夠提供保存直接規(guī)則和直接鏈的功能。通過規(guī)則不屬于該特性坑赡。更多關(guān)于直接規(guī)則的信息請參閱Direct options烙如。
從ip*tables和ebtables服務(wù)遷移
這項特性處于早期狀態(tài)。它將盡可能提供由iptables,ip6tables 和 ebtables 服務(wù)配置轉(zhuǎn)換為永久直接規(guī)則的腳本垮衷。此特性在由firewalld提供的直接鏈集成方面可能存在局限性厅翔。
此特性將需要大量復(fù)雜防火墻配置的遷移測試。
計劃和提議功能
防火墻抽象模型
在 ip*tables 和 ebtables 防火墻規(guī)則之上添加抽象層使添加規(guī)則更簡單和直觀搀突。要抽象層功能強(qiáng)大刀闷,但同時又不能復(fù)雜,并不是一項簡單的任務(wù)仰迁。為此甸昏,不得不開發(fā)一種防火墻語言。使防火墻規(guī)則擁有固定的位置徐许,可以查詢端口的訪問狀態(tài)施蜜、訪問策略等普通信息和一些其他可能的防火墻特性。
對于conntrack的支持
要終止禁用特性已確立的連接需要 conntrack 雌隅。不過翻默,一些情況下終止連接可能是不好的,如:為建立有限時間內(nèi)的連續(xù)性外部連接而啟用的防火墻服務(wù)恰起。
用戶交互模型
這是防火墻中用戶或者管理員可以啟用的一種特殊模式修械。應(yīng)用程序所有要更改防火墻的請求將定向給用戶知曉,以便確認(rèn)和否認(rèn)检盼。為一個連接的授權(quán)設(shè)置一個時間限制并限制其所連主機(jī)肯污、網(wǎng)絡(luò)或連接是可行的。配置可以保存以便將來不需通知便可應(yīng)用相同行為吨枉。 該模式的另一個特性是管理和應(yīng)用程序發(fā)起的請求具有相同功能的預(yù)選服務(wù)和端口的外部鏈接嘗試蹦渣。服務(wù)和端口的限制也會限制發(fā)送給用戶的請求數(shù)量。
用戶策略支持
管理員可以規(guī)定哪些用戶可以使用用戶交互模式和限制防火墻可用特性貌亭。
端口元數(shù)據(jù)信息(由 Lennart Poettering 提議)
擁有一個端口獨立的元數(shù)據(jù)信息是很好的柬唯。當(dāng)前對 /etc/services 的端口和協(xié)議靜態(tài)分配模型不是個好的解決方案,也沒有反映當(dāng)前使用情況圃庭。應(yīng)用程序或服務(wù)的端口是動態(tài)的权逗,因而端口本身并不能描述使用情況美尸。
元數(shù)據(jù)信息可以用來為防火墻制定簡單的規(guī)則。下面是一些例子:
允許外部訪問文件共享應(yīng)用程序或服務(wù)
允許外部訪問音樂共享應(yīng)用程序或服務(wù)
允許外部訪問全部共享應(yīng)用程序或服務(wù)
允許外部訪問 torrent 文件共享應(yīng)用程序或服務(wù)
允許外部訪問 http 網(wǎng)絡(luò)服務(wù)
這里的元數(shù)據(jù)信息不只有特定應(yīng)用程序斟薇,還可以是一組使用情況。例如:組“全部共享”或者組“文件共享”可以對應(yīng)于全部共享或文件共享程序(如:torrent 文件共享)恕酸。這些只是例子堪滨,因而,可能并沒有實際用處蕊温。
這里是在防火墻中獲取元數(shù)據(jù)信息的兩種可能途徑:
第一種是添加到 netfilter (內(nèi)核空間)袱箱。好處是每個人都可以使用它,但也有一定使用限制义矛。還要考慮用戶或系統(tǒng)空間的具體信息发笔,所有這些都需要在內(nèi)核層面實現(xiàn)。
第二種是添加到 firewall daemon 中凉翻。這些抽象的規(guī)則可以和具體信息(如:網(wǎng)絡(luò)連接可信級了讨、作為具體個人/主機(jī)要分享的用戶描述、管理員禁止完全共享的應(yīng)歸則等)一起使用制轰。
第二種解決方案的好處是不需要為有新的元數(shù)據(jù)組和納入改變(可信級前计、用戶偏好或管理員規(guī)則等等)重新編譯內(nèi)核。這些抽象規(guī)則的添加使得 firewall daemon 更加自由垃杖。即使是新的安全級也不需要更新內(nèi)核即可輕松添加男杈。
sysctld
現(xiàn)在仍有 sysctl 設(shè)置沒有正確應(yīng)用。一個例子是调俘,在 rc.sysinit 正運行時伶棒,而提供設(shè)置的模塊在啟動時沒有裝載或者重新裝載該模塊時會發(fā)生問題。
另一個例子是 net.ipv4.ip_forward 彩库,防火墻設(shè)置肤无、libvirt 和用戶/管理員更改都需要它。如果有兩個應(yīng)用程序或守護(hù)進(jìn)程只在需要時開啟 ip_forwarding 侧巨,之后可能其中一個在不知道的情況下關(guān)掉服務(wù)舅锄,而另一個正需要它,此時就不得不重啟它司忱。
sysctl daemon 可以通過對設(shè)置使用內(nèi)部計數(shù)來解決上面的問題皇忿。此時,當(dāng)之前請求者不再需要時坦仍,它就會再次回到之前的設(shè)置狀態(tài)或者是直接關(guān)閉它鳍烁。
防火墻規(guī)則
netfilter 防火墻總是容易受到規(guī)則順序的影響,因為一條規(guī)則在鏈中沒有固定的位置繁扎。在一條規(guī)則之前添加或者刪除規(guī)則都會改變此規(guī)則的位置幔荒。 在靜態(tài)防火墻模型中糊闽,改變防火墻就是重建一個干凈和完善的防火墻設(shè)置,且受限于 system-config-firewall / lokkit 直接支持的功能爹梁。也沒有整合其他應(yīng)用程序創(chuàng)建防火墻規(guī)則右犹,且如果自定義規(guī)則文件功能沒在使用 s-c-fw / lokkit 就不知道它們。默認(rèn)鏈通常也沒有安全的方式添加或刪除規(guī)則而不影響其他規(guī)則姚垃。
動態(tài)防火墻有附加的防火墻功能鏈念链。這些特殊的鏈按照已定義的順序進(jìn)行調(diào)用,因而向鏈中添加規(guī)則將不會干擾先前調(diào)用的拒絕和丟棄規(guī)則积糯。從而利于創(chuàng)建更為合理完善的防火墻配置掂墓。
下面是一些由守護(hù)進(jìn)程創(chuàng)建的規(guī)則,過濾列表中啟用了在公共區(qū)域?qū)?ssh , mdns 和 ipp-client 的支持:
*filter
:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]:FORWARD_ZONES - [0:0]:FORWARD_direct - [0:0]:INPUT_ZONES - [0:0]:INPUT_direct - [0:0]:IN_ZONE_public - [0:0]:IN_ZONE_public_allow - [0:0]:IN_ZONE_public_deny - [0:0]:OUTPUT_direct - [0:0]-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct
-A INPUT -j INPUT_ZONES
-A INPUT -p icmp -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -j FORWARD_direct
-A FORWARD -j FORWARD_ZONES
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -j OUTPUT_direct
-A IN_ZONE_public -j IN_ZONE_public_deny
-A IN_ZONE_public -j IN_ZONE_public_allow
-A IN_ZONE_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A IN_ZONE_public_allow -d 224.0.0.251/32 -p udp -m udp --dport 5353 -m conntrack --ctstate NEW -j ACCEPT
-A IN_ZONE_public_allow -p udp -m udp --dport 631 -m conntrack --ctstate NEW -j ACCEPT
使用 deny/allow 模型來構(gòu)建一個清晰行為(最好沒有沖突規(guī)則)看成。例如: ICMP塊將進(jìn)入 IN_ZONE_public_deny 鏈(如果為公共區(qū)域設(shè)置了的話)君编,并將在 IN_ZONE_public_allow 鏈之前處理。
該模型使得在不干擾其他塊的情況下向一個具體塊添加或刪除規(guī)則而變得更加容易川慌。