1. 前言 本文將會詳細(xì)介紹CentOS 7 firewalld的來由、功能、常用命令、常用的案例及使用方法。希望能幫助讀者全面了解firewalld,并能正確配置和使用它。 centos7 firewalld 2. firewalld與iptables的關(guān)系 在RHEL7里有幾種防火墻共存:firewalld、iptables、ebtables,默認(rèn)是使用firewalld來管理netfilter子系統(tǒng),不過底層調(diào)用的命令仍然是iptables等。firewalld跟iptables比起來,不好的地方是每個(gè)服務(wù)都需要去設(shè)置才能放行,因?yàn)槟J(rèn)是拒絕。而iptables里默認(rèn)是每個(gè)服務(wù)是允許,需要拒絕的才去限制。 firewalld與iptables的關(guān)系 firewalld跟iptables比起來至少有兩大好處: 1、firewalld可以動態(tài)修改單條規(guī)則,而不需要像iptables那樣,在修改了規(guī)則后必須得全部刷新才可以生效; 2、firewalld在使用上要比iptables人性化很多,即使不明白“五張表五條鏈”而且對TCP/IP協(xié)議也不理解也可以實(shí)現(xiàn)大部分功能。 firewalld自身并不具備防火墻的功能,而是和iptables一樣需要通過內(nèi)核的netfilter來實(shí)現(xiàn),也就是說firewalld和 iptables一樣,他們的作用都是用于維護(hù)規(guī)則,而真正使用規(guī)則干活的是內(nèi)核的netfilter,只不過firewalld和iptables的結(jié)構(gòu)以及使用方法不一樣罷了。 一個(gè)重要的概念:區(qū)域管理 firewalld將網(wǎng)卡對應(yīng)到不同的區(qū)域(zone),zone 默認(rèn)共有9個(gè),block dmz drop external home internal public trusted work. 不同的區(qū)域之間的差異是其對待數(shù)據(jù)包的默認(rèn)行為不同,根據(jù)區(qū)域名字我們可以很直觀的知道該區(qū)域的特征,在CentOS7系統(tǒng)中,默認(rèn)區(qū)域被設(shè)置為public. 在最新版本的fedora(fedora21)當(dāng)中隨著 server 版和 workstation 版的分化則添加了兩個(gè)不同的自定義 zone FedoraServer 和 FedoraWorkstation 分別對應(yīng)兩個(gè)版本。 通過將網(wǎng)絡(luò)劃分成不同的區(qū)域,制定出不同區(qū)域之間的訪問控制策略來控制不同程序區(qū)域間傳送的數(shù)據(jù)流。例如,互聯(lián)網(wǎng)是不可信任的區(qū)域,而內(nèi)部網(wǎng)絡(luò)是高度信任的區(qū)域。網(wǎng)絡(luò)安全模型可以在安裝,初次啟動和首次建立網(wǎng)絡(luò)連接時(shí)選擇初始化。該模型描述了主機(jī)所連接的整個(gè)網(wǎng)絡(luò)環(huán)境的可信級別,并定義了新連接的處理方式。有如下幾種不同的初始化區(qū)域:
firewalld默認(rèn)提供了九個(gè)zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他們都保存在“/usr/lib/firewalld/zones/”目錄下。 默認(rèn)情況下,在/etc/firewalld/zones下面只有一個(gè)public.xml。如果給另外一個(gè)zone做一些改動,并永久保存,那么會自動生成對應(yīng)的配置文件,比如,給work zone增加一個(gè)端口: firewall-cmd --permanent --zone=work --add-port=1000/tcp 此時(shí)就會生成一個(gè)work.xml的配置文件 查看XX區(qū)域的永久配置文件: [root@zcwyou ~]# cat /etc/firewalld/zones/XX.xml 注意:防火墻配置文件也可以手動修改,修改后記得reload防火墻 配置方法 firewalld的配置方法主要有三種:firewall-config、firewall-cmd和直接編輯xml文件,其中 firewall-config是圖形化工具,firewall-cmd是命令行工具,而對于linux來說大家應(yīng)該更習(xí)慣使用命令行方式的操作,所以 firewall-config我們就不給大家介紹了。 firewalld默認(rèn)配置文件有兩個(gè): /usr/lib/firewalld/ (系統(tǒng)配置,盡量不要修改) /etc/firewalld/ (用戶配置地址) 3. 什么是服務(wù)? 在 /usr/lib/firewalld/services/ 目錄中,還保存了另外一類配置文件,每個(gè)文件對應(yīng)一項(xiàng)具體的網(wǎng)絡(luò)服務(wù),如 ssh 服務(wù)等. 與之對應(yīng)的配置文件中記錄了各項(xiàng)服務(wù)所使用的 tcp/udp 端口,在最新版本的 firewalld 中默認(rèn)已經(jīng)定義了 70+ 種服務(wù)供我們使用. 當(dāng)默認(rèn)提供的服務(wù)不夠用或者需要自定義某項(xiàng)服務(wù)的端口時(shí),我們需要將 service 配置文件放置在 /etc/firewalld/services/ 目錄中. service 配置的好處顯而易見: 第一,通過服務(wù)名字來管理規(guī)則更加人性化, 第二,通過服務(wù)來組織端口分組的模式更加高效,如果一個(gè)服務(wù)使用了若干個(gè)網(wǎng)絡(luò)端口,則服務(wù)的配置文件就相當(dāng)于提供了到這些端口的規(guī)則管理的批量操作快捷方式。 假如你服務(wù)器的ftp不使用默認(rèn)端口,默認(rèn)ftp的端口21改為1121,但想通過服務(wù)的方式操作防火墻,代碼如下: 復(fù)制模版到/etc,以便修改和調(diào)用 [root@zcwyou ~]# cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/ 修改模版配置 [root@zcwyou ~]# vim /etc/firewalld/services/ftp.xml 把21改為1121 [root@zcwyou ~]# vim /etc/firewalld/zones/public.xml public為默認(rèn)zone,所以要編輯這個(gè),增加一行,以下內(nèi)容 <service name='ftp'/> 重新加載防火墻配置 [root@zcwyou ~]# firewall-cmd --reload 4. 安裝、啟用、關(guān)閉firewalld 4.1 安裝firewalld [root@zcwyou ~]# yum install firewalld firewall-config 4.2 啟動服務(wù) [root@zcwyou ~]# systemctl start firewalld 4.3 開機(jī)自動啟動服務(wù) [root@zcwyou ~]# systemctl enable firewalld 4.4 查看狀態(tài) [root@zcwyou ~]# systemctl status firewalld[root@zcwyou ~]# firewall-cmd --state 4.5 關(guān)閉服務(wù) [root@zcwyou ~]# systemctl stop firewalld 4.6 取消開機(jī)啟動 [root@zcwyou ~]# systemctl disable firewalld 4.7 棄用FirewallD防火墻,改用iptables 你也可以關(guān)閉目前還不熟悉的FirewallD防火墻,而使用iptables,但不建議: [root@zcwyou ~]# yum install iptables-services[root@zcwyou ~]# systemctl start iptables[root@zcwyou ~]# systemctl enable iptables 4.8 查看版本 [root@zcwyou ~]# firewall-cmd --version 4.9 查看幫助 [root@zcwyou ~]# firewall-cmd --help 4.10 顯示狀態(tài) [root@zcwyou ~]# firewall-cmd --state 4.11 查看活動區(qū)域信息 [root@zcwyou ~]# firewall-cmd --get-active-zones 4.12 查看XX接口所屬區(qū)域 [root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX 4.13 拒絕所有包 [root@zcwyou ~]# firewall-cmd --panic-on 4.14 取消拒絕狀態(tài) [root@zcwyou ~]# firewall-cmd --panic-off 4.15 查看是否拒絕 [root@zcwyou ~]# firewall-cmd --query-panic 4.16 查看firewalld是否開啟 [root@zcwyou ~]# systemctl is-enabled firewalld 4.17 重啟加載防火墻 以 root 身份輸入以下命令,重新加載防火墻,并不中斷用戶連接,即不丟失狀態(tài)信息: [root@zcwyou ~]# firewall-cmd --reload 4.18 完全重啟防火墻 以 root 身份輸入以下命令,重新加載防火墻并中斷用戶連接,即丟棄狀態(tài)信息: [root@zcwyou ~]# firewall-cmd --complete-reload 注意:通常在防火墻出現(xiàn)嚴(yán)重問題時(shí),這個(gè)命令才會被使用。比如,防火墻規(guī)則是正確的,但卻出現(xiàn)狀態(tài)信息問題和無法建立連接。 firewall-cmd --reload與firewall-cmd --complete-reload兩者的區(qū)別就是第一個(gè)無需斷開連接,就是firewalld特性之一動態(tài)添加規(guī)則,第二個(gè)需要斷開連接,類似重啟服務(wù) 4.19 顯示默認(rèn)區(qū)域 [root@zcwyou ~]# firewall-cmd --get-default-zone 4.20 添加接口到區(qū)域 將接口添加到XX區(qū)域,如果不指定區(qū)域,則添加到默認(rèn)區(qū)域 [root@zcwyou ~]# firewall-cmd --zone=XX --add-interface=eth0 永久生效再加上--permanent 然后reload防火墻 4.21 設(shè)置默認(rèn)區(qū)域,立即生效無需重啟 [root@zcwyou ~]# firewall-cmd --set-default-zone=XX 4.22 查看XX區(qū)域打開的端口 [root@zcwyou ~]# firewall-cmd --zone=XX --list-ports 4.23 查看XX區(qū)域加載的服務(wù) [root@zcwyou ~]# firewall-cmd --zone=XX --list-services 4.24 臨時(shí)加一個(gè)端口到XX區(qū)域 [root@zcwyou ~]# firewall-cmd --zone=XX --add-port=8080/tcp 若要永久生效方法加參數(shù)--permanent 4.25 打開一個(gè)服務(wù),類似于將端口可視化,服務(wù)需要在配置文件中添加,/etc/firewalld 目錄下有services文件夾,查看其它的xml文件以及參考前面說方法 [root@zcwyou ~]# firewall-cmd --zone=work --add-service=smtp 4.26 移除服務(wù) [root@zcwyou ~]# firewall-cmd --zone=work --remove-service=smtp 4.27 顯示支持的區(qū)域列表 [root@zcwyou ~]# firewall-cmd --get-zones 4.28 列出全部區(qū)域啟用的特性 [root@zcwyou ~]# firewall-cmd --list-all-zones 4.29 顯示XX區(qū)域詳情 [root@zcwyou ~]# firewall-cmd --zone=XX --list-all 4.30 查看當(dāng)前活躍區(qū)域 [root@zcwyou ~]# firewall-cmd --get-active-zones 4.31 設(shè)置XX接口所屬區(qū)域 [root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX 4.32 查詢YY區(qū)域中是否包含XX接口 [root@zcwyou ~]# firewall-cmd --zone=YY --query-interface=XX 4.33 刪除指定XX網(wǎng)卡所在的zone(以YY為例) [root@zcwyou ~]# firewall-cmd --zone=YY --remove-interface=XX 4.34 臨時(shí)修改XX接口為YY區(qū)域 [root@zcwyou ~]# firewall-cmd --zone=YY --change-interface=XX 永久修改加參數(shù)--permanent 4.35 控制端口 / 服務(wù) 可以通過兩種方式控制端口的開放,一種是指定端口號另一種是指定服務(wù)名。雖然開放 http 服務(wù)就是開放了 80 端口,但是還是不能通過端口號來關(guān)閉,也就是說通過指定服務(wù)名開放的就要通過指定服務(wù)名關(guān)閉;通過指定端口號開放的就要通過指定端口號關(guān)閉。還有一個(gè)要注意的就是指定端口的時(shí)候一定要指定是什么協(xié)議,tcp 還是 udp。 富規(guī)則 [root@zcwyou ~]# firewall-cmd --permanent --add-rich-rule='rule family='ipv4' source address='192.168.142.166' port protocol='tcp' port='5432' accept'[root@zcwyou ~]# systemctl restart firewalld.service 5. firewalld服務(wù)管理 firewalld服務(wù)管理 5.1 顯示支持的服務(wù) [root@zcwyou ~]# firewall-cmd --get-services 5.2 臨時(shí)允許Samba服務(wù)通過600秒 [root@zcwyou ~]# firewall-cmd --add-service=samba --timeout=600 5.3 顯示默認(rèn)區(qū)域開啟的服務(wù),如果要查某區(qū)域,加參數(shù)--zone=XX [root@zcwyou ~]# firewall-cmd --list-services 5.4 添加HTTP服務(wù)到內(nèi)部區(qū)域(internal),并保存到配置文件 [root@zcwyou ~]# firewall-cmd --permanent --zone=internal --add-service=http 在不改變狀態(tài)的條件下重新加載防火墻 [root@zcwyou ~]# firewall-cmd --reload 5.5 開放mysql服務(wù) [root@zcwyou ~]# firewall-cmd --add-service=mysql 5.6 阻止mysql服務(wù) [root@zcwyou ~]# firewall-cmd --remove-service=mysql 5.7 端口管理 臨時(shí)打開443/TCP端口,立即生效 [root@zcwyou ~]# firewall-cmd --add-port=443/tcp 5.8 永久打開3690/TCP端口 [root@zcwyou ~]# firewall-cmd --permanent --add-port=3690/tcp 5.9 永久打開端口需要reload一下,如果用了reload臨時(shí)打開的端口就失效了 [root@zcwyou ~]# firewall-cmd --reload 5.10 查看防火墻所有區(qū)域的設(shè)置,包括添加的端口和服務(wù) [root@zcwyou ~]# firewall-cmd --list-all 5.11 開放通過tcp訪問3306 [root@zcwyou ~]# firewall-cmd --add-port=3306/tcp 5.12 阻止tcp80 [root@zcwyou ~]# firewall-cmd --remove-port=80/tcp 5.13 開放通過udp訪問233 [root@zcwyou ~]# firewall-cmd --add-port=233/udp 5.14 查看開放的端口 [root@zcwyou ~]# firewall-cmd --list-ports 假設(shè)自定義的ssh端口號為12222,使用下面的命令來添加新端口的防火墻規(guī)則 [root@zcwyou ~]# firewall-cmd --add-port=12222/tcp --permanent 使用--permanent參數(shù)可以將更改保存到配置文件。 5.15 重啟防火墻 永久打開端口需要reload一下,如果用了reload臨時(shí)打開的端口就失效了 [root@zcwyou ~]# firewall-cmd --reload 5.16 添加端口范圍 還可以添加一個(gè)端口范圍 [root@zcwyou ~]# firewall-cmd --add-port=2000-4000/tcp 5.17 針對指定zone XX添加端口 [root@zcwyou ~]# firewall-cmd --permanent --zone=XX --add-port=443/tcp 6. 管理區(qū)域中的對象 管理區(qū)域中的對象 6.1 獲取永久支持的區(qū)域 [root@zcwyou ~]# firewall-cmd --permanent --get-zones 6.2 啟用區(qū)域中的服務(wù) firewall-cmd --permanent [--zone=] --add-service= 此舉將永久啟用區(qū)域中的服務(wù)。如果未指定區(qū)域,將使用默認(rèn)區(qū)域。 臨時(shí)開放mysql服務(wù),立即生效 [root@zcwyou ~]# firewall-cmd --add-service=mysql public區(qū)域,添加httpd服務(wù),并保存,但不會立即生效,需要reload防火墻 [root@zcwyou ~]# firewall-cmd --permanent --zone=public --add-service=httpd public區(qū)域,禁用httpd服務(wù),并保存,但不會立即生效,需要reload防火墻 [root@zcwyou ~]# firewall-cmd --permanent --zone=public --remove-service=httpd 7. 端口轉(zhuǎn)發(fā) 端口轉(zhuǎn)發(fā)可以將指定地址訪問指定的端口時(shí),將流量轉(zhuǎn)發(fā)至指定地址的指定端口。轉(zhuǎn)發(fā)的目的如果不指定ip的話就默認(rèn)為本機(jī),如果指定了ip卻沒指定端口,則默認(rèn)使用來源端口。 典型的做法:
如果配置好端口轉(zhuǎn)發(fā)之后不能用,可以檢查下面兩個(gè)問題: 比如我將 80 端口轉(zhuǎn)發(fā)至 8080 端口,首先檢查本地的 80 端口和目標(biāo)的 8080 端口是否開放監(jiān)聽了 其次檢查是否允許偽裝 IP,沒允許的話要開啟偽裝 IP 將80端口的流量轉(zhuǎn)發(fā)至8080 [root@zcwyou ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 將80端口的流量轉(zhuǎn)發(fā)至192.168.0.1 [root@zcwyou ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 將80端口的流量轉(zhuǎn)發(fā)至192.168.0.1的8080端口 [root@zcwyou ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 當(dāng)我們想把某個(gè)端口隱藏起來的時(shí)候,就可以在防火墻上阻止那個(gè)端口訪問,然后再開一個(gè)不規(guī)則的端口,之后配置防火墻的端口轉(zhuǎn)發(fā),將流量轉(zhuǎn)發(fā)過去。 端口轉(zhuǎn)發(fā)還可以做流量分發(fā),一個(gè)防火墻拖著好多臺運(yùn)行著不同服務(wù)的機(jī)器,然后用防火墻將不同端口的流量轉(zhuǎn)發(fā)至不同機(jī)器。 禁止區(qū)域的端口轉(zhuǎn)發(fā)或者端口映射 firewall-cmd [--zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr= | :toport=[-]:toaddr= }查詢區(qū)域的端口轉(zhuǎn)發(fā)或者端口映射 firewall-cmd [--zone=] --query-forward-port=port=[-]:proto= { :toport=[-] | :toaddr= | :toport=[-]:toaddr= }在區(qū)域中永久啟用端口轉(zhuǎn)發(fā)或映射 firewall-cmd --permanent [--zone=] --add-forward-port=port=[-]:proto= { :toport=[-] | :toaddr= | :toport=[-]:toaddr= }端口可以映射到另一臺主機(jī)的同一端口,也可以是同一主機(jī)或另一主機(jī)的不同端口。端口號可以是一個(gè)單獨(dú)的端口 或者是端口范圍 - 。協(xié)議可以為 tcp 或udp 。目標(biāo)端口可以是端口號 或者是端口范圍 -。目標(biāo)地址可以是 IPv4 地址。受內(nèi)核限制,端口轉(zhuǎn)發(fā)功能僅可用于IPv4。 永久禁止區(qū)域的端口轉(zhuǎn)發(fā)或者端口映射 firewall-cmd --permanent [--zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr= | :toport=[-]:toaddr= }查詢區(qū)域的端口轉(zhuǎn)發(fā)或者端口映射狀態(tài) firewall-cmd --permanent [--zone=] --query-forward-port=port=[-]:proto= { :toport=[-] | :toaddr= | :toport=[-]:toaddr= }如果服務(wù)啟用,此命令將有返回值。此命令沒有輸出信息。 例: 將 home 區(qū)域的 ssh 服務(wù)轉(zhuǎn)發(fā)到 127.0.0.2 [root@zcwyou ~]# firewall-cmd --permanent --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2 8. 偽裝 IP 檢查是否允許偽裝IP [root@zcwyou ~]# firewall-cmd --query-masquerade 允許防火墻偽裝IP [root@zcwyou ~]# firewall-cmd --add-masquerade 禁止防火墻偽裝IP [root@zcwyou ~]# firewall-cmd --remove-masquerade 永久啟用區(qū)域中的偽裝 firewall-cmd --permanent [--zone=] --add-masquerade 此舉啟用區(qū)域的偽裝功能。私有網(wǎng)絡(luò)的地址將被隱藏并映射到一個(gè)公有IP。這是地址轉(zhuǎn)換的一種形式,常用于路由。由于內(nèi)核的限制,偽裝功能僅可用于IPv4。 臨時(shí)禁用區(qū)域中的 IP 偽裝 firewall-cmd [--zone=] --remove-masquerade 永久禁用區(qū)域中的偽裝 firewall-cmd --permanent [--zone=] --remove-masquerade 查詢區(qū)域中的偽裝的永久狀態(tài) firewall-cmd --permanent [--zone=] --query-masquerade 如果服務(wù)啟用,此命令將有返回值。此命令沒有輸出信息。 查詢區(qū)域的偽裝狀態(tài) firewall-cmd [--zone=] --query-masquerade 如果啟用,此命令將有返回值。沒有輸出信息。 9. ICMP控制 獲取永久選項(xiàng)所支持的ICMP類型列表 [root@zcwyou ~]# firewall-cmd --permanent --get-icmptypes 獲取所有支持的ICMP類型 [root@zcwyou ~]# firewall-cmd --get-icmptypes 永久啟用區(qū)域中的ICMP阻塞,需要reload防火墻, firewall-cmd --permanent [--zone=] --add-icmp-block= 此舉將啟用選中的 Internet 控制報(bào)文協(xié)議 (ICMP) 報(bào)文進(jìn)行阻塞。 ICMP 報(bào)文可以是請求信息或者創(chuàng)建的應(yīng)答報(bào)文或錯(cuò)誤應(yīng)答報(bào)文。 永久禁用區(qū)域中的ICMP阻塞,需要reload防火墻, firewall-cmd --permanent [--zone=] --remove-icmp-block= 查詢區(qū)域中的ICMP永久狀態(tài) firewall-cmd --permanent [--zone=] --query-icmp-block= 如果服務(wù)啟用,此命令將有返回值。此命令沒有輸出信息。 例: 阻塞公共區(qū)域中的響應(yīng)應(yīng)答報(bào)文: [root@zcwyou ~]# firewall-cmd --permanent --zone=public --add-icmp-block=echo-reply 立即啟用區(qū)域的 ICMP 阻塞功能 firewall-cmd [--zone=] --add-icmp-block= 此舉將啟用選中的 Internet 控制報(bào)文協(xié)議 (ICMP) 報(bào)文進(jìn)行阻塞。 ICMP 報(bào)文可以是請求信息或者創(chuàng)建的應(yīng)答報(bào)文,以及錯(cuò)誤應(yīng)答。 立即禁止區(qū)域的 ICMP 阻塞功能 firewall-cmd [--zone=] --remove-icmp-block= 查詢區(qū)域的 ICMP 阻塞功能 firewall-cmd [--zone=] --query-icmp-block= 如果啟用,此命令將有返回值。沒有輸出信息。 例: 阻塞區(qū)域的響應(yīng)應(yīng)答報(bào)文: [root@zcwyou ~]# firewall-cmd --zone=public --add-icmp-block=echo-reply 10. 通過配置文件來使用Firewalld的方法 系統(tǒng)本身已經(jīng)內(nèi)置了一些常用服務(wù)的防火墻規(guī)則,存放在/usr/lib/firewalld/services/ 注意!!!!!請勿編輯/usr/lib/firewalld/services/ ,只有 /etc/firewalld/services 的文件可以被編輯。 以下例子均以系統(tǒng)自帶的public zone 為例子. 當(dāng)然firewalld也可以使用圖形界面管理: firewalld使用圖形界面管理 10.1 案例1: 如果想開放80端口供外網(wǎng)訪問http服務(wù),操作如下 Step1:將 http.xml復(fù)制到/etc/firewalld/services/下面,以服務(wù)形式管理防火墻, 這個(gè)cp命令其實(shí)是可以省略的,系統(tǒng)會優(yōu)先去讀取 /etc/firewalld 里面的文件,讀取完畢后,會去/usr/lib/firewalld/services/ 再次讀取,為了方便修改和管理,強(qiáng)烈建議復(fù)制到/etc/firewalld [root@zcwyou ~]# cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/ 修改/etc/firewalld/zones/public.xml,加入http服務(wù) vi /etc/firewalld/zones/public.xml Public For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted. # 加入這行,要匹配 /etc/firewalld/services/文件夾下的文件名 以 root 身份輸入以下命令,重新加載防火墻,并不中斷用戶連接,即不丟失狀態(tài)信息: [root@zcwyou ~]# firewall-cmd --reload 或者以 root 身份輸入以下信息,重新加載防火墻并中斷用戶連接,即丟棄狀態(tài)信息: [root@zcwyou ~]# firewall-cmd --complete-reload 注意:通常在防火墻出現(xiàn)嚴(yán)重問題時(shí),這個(gè)命令才會被使用。比如,防火墻規(guī)則是正確的,但卻出現(xiàn)狀態(tài)信息問題和無法建立連接。 10.2 案例2: SSH為非默認(rèn)端口,要求能正常訪問 [root@zcwyou ~]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/[root@zcwyou ~]# vi /etc/firewalld/services/ssh.xml 把默認(rèn)22修改為目前的SSH端口號[root@zcwyou ~]# firewall-cmd --reload 10.3 案例3:修改區(qū)域配置文件只允許特定主機(jī)192.168.23.1連接SSH [root@zcwyou ~]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/[root@zcwyou ~]# vi /etc/firewalld/zones/public.xml 確保配置文件有以下內(nèi)容 配置結(jié)束 重啟防火墻后生效[root@zcwyou ~]# firewall-cmd --reload 11. firewalld直接模式 對于最高級的使用,或?qū)τ?iptables 專家,F(xiàn)irewallD 提供了一個(gè)Direct接口,允許你給它傳遞原始 iptables 命令。 直接接口規(guī)則不是持久的,除非使用 --permanent。 直接選項(xiàng)主要用于使服務(wù)和應(yīng)用程序能夠增加規(guī)則。 規(guī)則不會被保存,在重新加載或者重啟之后必須再次提交。傳遞的參數(shù) 與 iptables, ip6tables 以及 ebtables 一致。 選項(xiàng) –direct 需要是直接選項(xiàng)的第一個(gè)參數(shù)。 將命令傳遞給防火墻。參數(shù) 可以是 iptables, ip6tables 以及 ebtables 命令行參數(shù)。 firewall-cmd --direct --passthrough { ipv4 | ipv6 | eb } 為表 增加一個(gè)新鏈 。 firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb }從表 中刪除鏈 。 firewall-cmd --direct --remove-chain { ipv4 | ipv6 | eb }查詢 鏈?zhǔn)欠翊嬖谂c表 . 如果是,返回0,否則返回1. firewall-cmd --direct --query-chain { ipv4 | ipv6 | eb } 如果啟用,此命令將有返回值。此命令沒有輸出信息。獲取用空格分隔的表 中鏈的列表。 firewall-cmd --direct --get-chains { ipv4 | ipv6 | eb }為表 增加一條參數(shù)為 的鏈 ,優(yōu)先級設(shè)定為 。 firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb }從表 中刪除帶參數(shù) 的鏈 。 firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb }查詢 帶參數(shù) 的鏈 是否存在表 中. 如果是,返回0,否則返回1. firewall-cmd --direct --query-rule { ipv4 | ipv6 | eb } 如果啟用,此命令將有返回值。此命令沒有輸出信息。獲取表 中所有增加到鏈 的規(guī)則,并用換行分隔。 firewall-cmd --direct --get-rules { ipv4 | ipv6 | eb }以iptables的命令允許端口號,重啟生效 [root@zcwyou ~]# firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT[root@zcwyou ~]# firewall-cmd --reload 添加富規(guī)則: [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family='ipv4' source address='192.168.122.0' accept' 允許192.168.122.0/24主機(jī)所有連接。 [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept' 每分鐘允許2個(gè)新連接訪問ftp服務(wù)。 [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule service name=ftp log limit value='1/m' audit accept' 同意新的 IP v4 和 IP v6 連接 FT P ,并使用審核每分鐘登錄一次。 [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family='ipv4' source address='192.168.122.0/24'service name=ssh log prefix='ssh' level='notice' limit value='3/m' accept' 允許來自192.168.122.0/24地址的新 IPv4連接連接TFTP服務(wù),并且每分鐘記錄一次。 [root@zcwyou ~]# firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop' 丟棄所有icmp包 [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 reject' --timeout=10 當(dāng)使用source和destination指定地址時(shí),必須有family參數(shù)指定ipv4或ipv6。如果指定超時(shí), 規(guī)則將在指定的秒數(shù)內(nèi)被激活,并在之后被自動移除。 [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family=ipv6 source address='2001:db8::/64' servicename='dns' audit limit value='1/h' reject' --timeout=300 拒絕所有來自2001:db8::/64子網(wǎng)的主機(jī)訪問dns服務(wù),并且每小時(shí)只審核記錄1次日志。 [root@zcwyou ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 sourceaddress=192.168.122.0/24 service name=ftp accept' 允許192.168.122.0/24網(wǎng)段中的主機(jī)訪問ftp服務(wù) [root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family='ipv6' source address='1:2:3:4:6::' forward-portto-addr='1::2:3:4:7' to-port='4012' protocol='tcp' port='4011'' 轉(zhuǎn)發(fā)來自ipv6地址1:2:3:4:6::TCP端口4011,到1:2:3:4:7的TCP端口4012 允許來自主機(jī) 192.168.0.14 的所有 IPv4 流量。 [root@zcwyou ~]# firewall-cmd --zone=public --add-rich-rule 'rule family='ipv4' source address=192.168.0.14 accept' 拒絕來自主機(jī) 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量。 [root@zcwyou ~]# firewall-cmd --zone=public --add-rich-rule 'rule family='ipv4' source address='192.168.1.10' port port=22 protocol=tcp reject' 查看富規(guī)則 [root@zcwyou ~]# firewall-cmd --list-rich-rules 12. 總結(jié) CentOS 7是第一代集成firewalld的CentOS系統(tǒng),firewalld是一個(gè)功能豐富、先進(jìn)的防火墻配置工具。熟悉掌握使用它將能大大提升系統(tǒng)和服務(wù)器的安全。 本文已同步至博客站,尊重原創(chuàng),轉(zhuǎn)載時(shí)請?jiān)谡闹懈綆б韵骆溄樱?/p> https://www./rmxx/644.html |
|