原文地址:http://www.excelib.com/article/288/show
Firewalld防火牆中所使用到的命令可以分為三大類:安裝卸載、維護和策略操作。
安裝
在Centos7中默認已經安裝了firewalld,如果需要自行安裝,可以直接使用yum安裝
[root@excelib.com ~]# yum install firewalld
如果需要使用圖形化配置工具還需要安裝firewall-config
[root@excelib.com ~]# yum install firewall-config
這樣firewalld就安裝完成了,不過要注意firewalld跟iptables不能同時使用,所以在使用firewalld之前首先需要將iptables停用。
維護命令
firewalld的維護相對來說是非常簡單的,其命令主要分為三大類:啟動停止和查詢狀態、設置開機自動啟動以及更新規則。
啟動停止和查詢狀態
在Centos7中默認將原來的服務管理工具service升級為了systemctl,其實原來的service只是一個腳本執行工具,而systemctl的功能非常強大,關於systemctl的詳細用法大家可以閱讀linux中國的一篇文章,地址是:https://linux.cn/article-5926-1.html,這篇文章寫的非常詳細,所以學生就不再給大家做補充了,下面來說一說怎么用它來操作firewalld。
啟動
[root@excelib.com ~]# systemctl start firewalld
停止
[root@excelib.com ~]# systemctl stop firewalld
重啟
[root@excelib.com ~]# systemctl restart firewalld
查詢狀態
[root@excelib.com ~]$ systemctl status firewalld
另外,對於firewalld來說還可以使用自身的firewall-cmd工具來查詢運行狀態
[root@excelib.com ~]$ firewall-cmd --state
設置開機自動啟動
設置開機自動啟動也是使用systemctl來操作的,命令如下
啟用開機自動啟動
[root@excelib.com ~]$ systemctl enable firewalld
禁用開機自動啟動
[root@excelib.com ~]$ systemctl disable firewalld
查看自動啟動狀態
[root@excelib.com ~]$ systemctl is-enabled firewalld
當然,systemctl的這些命令不只適用於firewalld,也適用於其他服務,使用時只要將firewalld換成相應服務的名稱就可以了。
更新規則
直接使用firewall-cmd修改的規則是不需要更新就可以直接生效的,但是如果加了--permanent
參數,或者直接編輯xml文件之后就需要我們手動reload了,firewall-cmd提供了兩個更新規則的參數:--reload和--complete-reload,前者只是更新需要更新規則,而且更新的過程中不會影響現有的連接,而后者在更新時會將所有的規則清除掉然后重建,而且為了安全考慮,在更新之前首先會將策略設置為DROP,等更新完成之后再恢復為ACCEPT,這樣就會對現有連接造成影響,所以如果沒有特殊需求我們應該盡量使用前者。具體命令如下
[root@excelib.com ~]# firewall-cmd --reload [root@excelib.com ~]# firewall-cmd --complete-reload
策略操作
對於firewalld來說最重要的就是策略操作了,策略操作主要有三種方法:使用firewall-config操作、使用firewall-cmd操作和直接編輯xml文件,學生在上節已經給大家介紹過了,firewall-config是圖形化工具,firewall-cmd是命令行工具,我們這里主要以命令行工具為主來給大家介紹。
firewall-cmd中關於規則的命令非常多,如果在這里全部列出來再給大家解釋一遍應該效果也不會太好,所以學生在后面講到具體相關內容時再給大家講相應的命令,比如講到zone的時候給大家介紹跟zone相關的命令,這樣大家更容易理解和記憶。
firewall-cmd中的命令雖然非常多,但是有四大類使用頻率非常高的命令:--add-xxx、--remove-xxx、--query-xxx、--get-xxx以及--list-xxx,這里前兩個非常容易理解,一個是添加一個是刪除,而后三個從名字上就不太容易區分了,下面學生給大家解釋一下。
--query-xxx主要用於布爾值的查詢,比如
[root@excelib.com ~]$ firewall-cmd --zone=public --query-service=ssh
這個命令用於查詢在public這個zone中是否包含ssh這個服務。
--get-xxx主要用於獲取特定的內容,比如
[root@excelib.com ~]$ firewall-cmd --get-zones
這樣就可以獲取到預設的zones,默認情況下返回結果為
block dmz drop external home internal public trusted work
--list-xxx主要用於按一定條件進行查詢(不過有的list命名也不需要條件),比如
[root@excelib.com ~]$ firewall-cmd --zone=public --list-services
這個命令可以返回public這個zone中所包含的services。
query還是比較容易理解的,但是get和list從字面上並不容易區分,剛開始學生以為get命令用於獲取單個結果,list用於獲取多個結果,但后來發現並不是這樣。當然,我們在使用的時候按照文檔中的說明來使用就可以了。
另外,在firewall-cmd中有一個比較特殊的參數:--permanent,他表示是否將修改后的規則保存下來,如果不加這個參數,那么所做的修改當時會立即生效,但是在firewalld重啟之后就會丟失,而加上這個參數后所做的修改就會永久保存下來,不過這時的修改不會立即生效而是需要reload后才可以生效。其實這個也非常容易理解,當不加
--permanent
修改規則時firewalld
會實際修改運行時的規則,而如果加了這個參數firewalld
其實是去修改的xml配置文件,和我們直接編輯xml文件一樣,所以就需要reload才可以生效。
參考文獻
1、https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html