'CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎'

CentOS 防火牆 網絡安全 電腦 Fedora Linux基礎入門教程 2019-07-22
"

請關注本頭條號,每天堅持更新原創乾貨技術文章。

如需學習視頻,請在微信搜索公眾號“智傳網優”直接開始自助視頻學習

1. 前言

本文將會詳細介紹CentOS 7 firewalld的來由、功能、常用命令、常用的案例及使用方法。希望能幫助讀者全面瞭解firewalld,並能正確配置和使用它。

"

請關注本頭條號,每天堅持更新原創乾貨技術文章。

如需學習視頻,請在微信搜索公眾號“智傳網優”直接開始自助視頻學習

1. 前言

本文將會詳細介紹CentOS 7 firewalld的來由、功能、常用命令、常用的案例及使用方法。希望能幫助讀者全面瞭解firewalld,並能正確配置和使用它。

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

centos7 firewalld

2. firewalld與iptables的關係

在RHEL7裡有幾種防火牆共存:firewalld、iptables、ebtables,默認是使用firewalld來管理netfilter子系統,不過底層調用的命令仍然是iptables等。firewalld跟iptables比起來,不好的地方是每個服務都需要去設置才能放行,因為默認是拒絕。而iptables裡默認是每個服務是允許,需要拒絕的才去限制。

"

請關注本頭條號,每天堅持更新原創乾貨技術文章。

如需學習視頻,請在微信搜索公眾號“智傳網優”直接開始自助視頻學習

1. 前言

本文將會詳細介紹CentOS 7 firewalld的來由、功能、常用命令、常用的案例及使用方法。希望能幫助讀者全面瞭解firewalld,並能正確配置和使用它。

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

centos7 firewalld

2. firewalld與iptables的關係

在RHEL7裡有幾種防火牆共存:firewalld、iptables、ebtables,默認是使用firewalld來管理netfilter子系統,不過底層調用的命令仍然是iptables等。firewalld跟iptables比起來,不好的地方是每個服務都需要去設置才能放行,因為默認是拒絕。而iptables裡默認是每個服務是允許,需要拒絕的才去限制。

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

firewalld與iptables的關係

firewalld跟iptables比起來至少有兩大好處:

1、firewalld可以動態修改單條規則,而不需要像iptables那樣,在修改了規則後必須得全部刷新才可以生效;

2、firewalld在使用上要比iptables人性化很多,即使不明白“五張表五條鏈”而且對TCP/IP協議也不理解也可以實現大部分功能。

firewalld自身並不具備防火牆的功能,而是和iptables一樣需要通過內核的netfilter來實現,也就是說firewalld和 iptables一樣,他們的作用都是用於維護規則,而真正使用規則幹活的是內核的netfilter,只不過firewalld和iptables的結構以及使用方法不一樣罷了。

一個重要的概念:區域管理

firewalld將網卡對應到不同的區域(zone),zone 默認共有9個,block dmz drop external home internal public trusted work.

不同的區域之間的差異是其對待數據包的默認行為不同,根據區域名字我們可以很直觀的知道該區域的特徵,在CentOS7系統中,默認區域被設置為public.

在最新版本的fedora(fedora21)當中隨著 server 版和 workstation 版的分化則添加了兩個不同的自定義 zone FedoraServer 和 FedoraWorkstation 分別對應兩個版本。

通過將網絡劃分成不同的區域,制定出不同區域之間的訪問控制策略來控制不同程序區域間傳送的數據流。例如,互聯網是不可信任的區域,而內部網絡是高度信任的區域。網絡安全模型可以在安裝,初次啟動和首次建立網絡連接時選擇初始化。該模型描述了主機所連接的整個網絡環境的可信級別,並定義了新連接的處理方式。有如下幾種不同的初始化區域:

  • 阻塞區域(block):任何傳入的網絡數據包都將被阻止。
  • 工作區域(work):相信網絡上的其他計算機,不會損害你的計算機。
  • 家庭區域(home):相信網絡上的其他計算機,不會損害你的計算機。
  • 公共區域(public):不相信網絡上的任何計算機,只有選擇接受傳入的網絡連接。
  • 隔離區域(DMZ):隔離區域也稱為非軍事區域,內外網絡之間增加的一層網絡,起到緩衝作用。對於隔離區域,只有選擇接受傳入的網絡連接。
  • 信任區域(trusted):所有的網絡連接都可以接受。
  • 丟棄區域(drop):任何傳入的網絡連接都被拒絕。
  • 內部區域(internal):信任網絡上的其他計算機,不會損害你的計算機。只有選擇接受傳入的網絡連接。
  • 外部區域(external):不相信網絡上的其他計算機,不會損害你的計算機。只有選擇接受傳入的網絡連接。
  • 注:FirewallD的默認區域是public。

firewalld默認提供了九個zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他們都保存在“/usr/lib/firewalld/zones/”目錄下。

默認情況下,在/etc/firewalld/zones下面只有一個public.xml。如果給另外一個zone做一些改動,並永久保存,那麼會自動生成對應的配置文件,比如,給work zone增加一個端口:

firewall-cmd --permanent --zone=work --add-port=1000/tcp

此時就會生成一個work.xml的配置文件

查看XX區域的永久配置文件:

[root@zcwyou ~]# cat /etc/firewalld/zones/XX.xml

注意:防火牆配置文件也可以手動修改,修改後記得reload防火牆

配置方法

firewalld的配置方法主要有三種:firewall-config、firewall-cmd和直接編輯xml文件,其中 firewall-config是圖形化工具,firewall-cmd是命令行工具,而對於linux來說大家應該更習慣使用命令行方式的操作,所以 firewall-config我們就不給大家介紹了。

firewalld默認配置文件有兩個:

/usr/lib/firewalld/ (系統配置,儘量不要修改)

/etc/firewalld/ (用戶配置地址)

3. 什麼是服務?

在 /usr/lib/firewalld/services/ 目錄中,還保存了另外一類配置文件,每個文件對應一項具體的網絡服務,如 ssh 服務等.

與之對應的配置文件中記錄了各項服務所使用的 tcp/udp 端口,在最新版本的 firewalld 中默認已經定義了 70+ 種服務供我們使用.

當默認提供的服務不夠用或者需要自定義某項服務的端口時,我們需要將 service 配置文件放置在 /etc/firewalld/services/ 目錄中.

service 配置的好處顯而易見:

第一,通過服務名字來管理規則更加人性化,

第二,通過服務來組織端口分組的模式更加高效,如果一個服務使用了若干個網絡端口,則服務的配置文件就相當於提供了到這些端口的規則管理的批量操作快捷方式。

假如你服務器的ftp不使用默認端口,默認ftp的端口21改為1121,但想通過服務的方式操作防火牆,代碼如下:

複製模版到/etc,以便修改和調用

[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為默認zone,所以要編輯這個,增加一行,以下內容

<service name="ftp"/>

重新加載防火牆配置

[root@zcwyou ~]# firewall-cmd --reload

4. 安裝、啟用、關閉firewalld

4.1 安裝firewalld

[root@zcwyou ~]# yum install firewalld firewall-config

4.2 啟動服務

[root@zcwyou ~]# systemctl start firewalld

4.3 開機自動啟動服務

[root@zcwyou ~]# systemctl enable firewalld

4.4 查看狀態

[root@zcwyou ~]# systemctl status firewalld
[root@zcwyou ~]# firewall-cmd --state

4.5 關閉服務

[root@zcwyou ~]# systemctl stop firewalld

4.6 取消開機啟動

[root@zcwyou ~]# systemctl disable firewalld

4.7 棄用FirewallD防火牆,改用iptables

你也可以關閉目前還不熟悉的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 顯示狀態

[root@zcwyou ~]# firewall-cmd --state

4.11 查看活動區域信息

[root@zcwyou ~]# firewall-cmd --get-active-zones

4.12 查看XX接口所屬區域

[root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX

4.13 拒絕所有包

[root@zcwyou ~]# firewall-cmd --panic-on

4.14 取消拒絕狀態

[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 身份輸入以下命令,重新加載防火牆,並不中斷用戶連接,即不丟失狀態信息:

[root@zcwyou ~]# firewall-cmd --reload

4.18 完全重啟防火牆

以 root 身份輸入以下命令,重新加載防火牆並中斷用戶連接,即丟棄狀態信息:

[root@zcwyou ~]# firewall-cmd --complete-reload

注意:通常在防火牆出現嚴重問題時,這個命令才會被使用。比如,防火牆規則是正確的,但卻出現狀態信息問題和無法建立連接。

firewall-cmd --reload與firewall-cmd --complete-reload兩者的區別就是第一個無需斷開連接,就是firewalld特性之一動態添加規則,第二個需要斷開連接,類似重啟服務

4.19 顯示默認區域

[root@zcwyou ~]# firewall-cmd --get-default-zone

4.20 添加接口到區域

將接口添加到XX區域,如果不指定區域,則添加到默認區域

[root@zcwyou ~]# firewall-cmd --zone=XX --add-interface=eth0

永久生效再加上--permanent 然後reload防火牆

4.21 設置默認區域,立即生效無需重啟

[root@zcwyou ~]# firewall-cmd --set-default-zone=XX

4.22 查看XX區域打開的端口

[root@zcwyou ~]# firewall-cmd --zone=XX --list-ports

4.23 查看XX區域加載的服務

[root@zcwyou ~]# firewall-cmd --zone=XX --list-services

4.24 臨時加一個端口到XX區域

[root@zcwyou ~]# firewall-cmd --zone=XX --add-port=8080/tcp

若要永久生效方法加參數--permanent

4.25 打開一個服務,類似於將端口可視化,服務需要在配置文件中添加,/etc/firewalld 目錄下有services文件夾,查看其它的xml文件以及參考前面說方法

[root@zcwyou ~]# firewall-cmd --zone=work --add-service=smtp

4.26 移除服務

[root@zcwyou ~]# firewall-cmd --zone=work --remove-service=smtp

4.27 顯示支持的區域列表

[root@zcwyou ~]# firewall-cmd --get-zones

4.28 列出全部區域啟用的特性

[root@zcwyou ~]# firewall-cmd --list-all-zones

4.29 顯示XX區域詳情

[root@zcwyou ~]# firewall-cmd --zone=XX --list-all

4.30 查看當前活躍區域

[root@zcwyou ~]# firewall-cmd --get-active-zones

4.31 設置XX接口所屬區域

[root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX

4.32 查詢YY區域中是否包含XX接口

[root@zcwyou ~]# firewall-cmd --zone=YY --query-interface=XX

4.33 刪除指定XX網卡所在的zone(以YY為例)

[root@zcwyou ~]# firewall-cmd --zone=YY --remove-interface=XX

4.34 臨時修改XX接口為YY區域

[root@zcwyou ~]# firewall-cmd --zone=YY --change-interface=XX

永久修改加參數--permanent

4.35 控制端口 / 服務

可以通過兩種方式控制端口的開放,一種是指定端口號另一種是指定服務名。雖然開放 http 服務就是開放了 80 端口,但是還是不能通過端口號來關閉,也就是說通過指定服務名開放的就要通過指定服務名關閉;通過指定端口號開放的就要通過指定端口號關閉。還有一個要注意的就是指定端口的時候一定要指定是什麼協議,tcp 還是 udp。

富規則

[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服務管理

"

請關注本頭條號,每天堅持更新原創乾貨技術文章。

如需學習視頻,請在微信搜索公眾號“智傳網優”直接開始自助視頻學習

1. 前言

本文將會詳細介紹CentOS 7 firewalld的來由、功能、常用命令、常用的案例及使用方法。希望能幫助讀者全面瞭解firewalld,並能正確配置和使用它。

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

centos7 firewalld

2. firewalld與iptables的關係

在RHEL7裡有幾種防火牆共存:firewalld、iptables、ebtables,默認是使用firewalld來管理netfilter子系統,不過底層調用的命令仍然是iptables等。firewalld跟iptables比起來,不好的地方是每個服務都需要去設置才能放行,因為默認是拒絕。而iptables裡默認是每個服務是允許,需要拒絕的才去限制。

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

firewalld與iptables的關係

firewalld跟iptables比起來至少有兩大好處:

1、firewalld可以動態修改單條規則,而不需要像iptables那樣,在修改了規則後必須得全部刷新才可以生效;

2、firewalld在使用上要比iptables人性化很多,即使不明白“五張表五條鏈”而且對TCP/IP協議也不理解也可以實現大部分功能。

firewalld自身並不具備防火牆的功能,而是和iptables一樣需要通過內核的netfilter來實現,也就是說firewalld和 iptables一樣,他們的作用都是用於維護規則,而真正使用規則幹活的是內核的netfilter,只不過firewalld和iptables的結構以及使用方法不一樣罷了。

一個重要的概念:區域管理

firewalld將網卡對應到不同的區域(zone),zone 默認共有9個,block dmz drop external home internal public trusted work.

不同的區域之間的差異是其對待數據包的默認行為不同,根據區域名字我們可以很直觀的知道該區域的特徵,在CentOS7系統中,默認區域被設置為public.

在最新版本的fedora(fedora21)當中隨著 server 版和 workstation 版的分化則添加了兩個不同的自定義 zone FedoraServer 和 FedoraWorkstation 分別對應兩個版本。

通過將網絡劃分成不同的區域,制定出不同區域之間的訪問控制策略來控制不同程序區域間傳送的數據流。例如,互聯網是不可信任的區域,而內部網絡是高度信任的區域。網絡安全模型可以在安裝,初次啟動和首次建立網絡連接時選擇初始化。該模型描述了主機所連接的整個網絡環境的可信級別,並定義了新連接的處理方式。有如下幾種不同的初始化區域:

  • 阻塞區域(block):任何傳入的網絡數據包都將被阻止。
  • 工作區域(work):相信網絡上的其他計算機,不會損害你的計算機。
  • 家庭區域(home):相信網絡上的其他計算機,不會損害你的計算機。
  • 公共區域(public):不相信網絡上的任何計算機,只有選擇接受傳入的網絡連接。
  • 隔離區域(DMZ):隔離區域也稱為非軍事區域,內外網絡之間增加的一層網絡,起到緩衝作用。對於隔離區域,只有選擇接受傳入的網絡連接。
  • 信任區域(trusted):所有的網絡連接都可以接受。
  • 丟棄區域(drop):任何傳入的網絡連接都被拒絕。
  • 內部區域(internal):信任網絡上的其他計算機,不會損害你的計算機。只有選擇接受傳入的網絡連接。
  • 外部區域(external):不相信網絡上的其他計算機,不會損害你的計算機。只有選擇接受傳入的網絡連接。
  • 注:FirewallD的默認區域是public。

firewalld默認提供了九個zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他們都保存在“/usr/lib/firewalld/zones/”目錄下。

默認情況下,在/etc/firewalld/zones下面只有一個public.xml。如果給另外一個zone做一些改動,並永久保存,那麼會自動生成對應的配置文件,比如,給work zone增加一個端口:

firewall-cmd --permanent --zone=work --add-port=1000/tcp

此時就會生成一個work.xml的配置文件

查看XX區域的永久配置文件:

[root@zcwyou ~]# cat /etc/firewalld/zones/XX.xml

注意:防火牆配置文件也可以手動修改,修改後記得reload防火牆

配置方法

firewalld的配置方法主要有三種:firewall-config、firewall-cmd和直接編輯xml文件,其中 firewall-config是圖形化工具,firewall-cmd是命令行工具,而對於linux來說大家應該更習慣使用命令行方式的操作,所以 firewall-config我們就不給大家介紹了。

firewalld默認配置文件有兩個:

/usr/lib/firewalld/ (系統配置,儘量不要修改)

/etc/firewalld/ (用戶配置地址)

3. 什麼是服務?

在 /usr/lib/firewalld/services/ 目錄中,還保存了另外一類配置文件,每個文件對應一項具體的網絡服務,如 ssh 服務等.

與之對應的配置文件中記錄了各項服務所使用的 tcp/udp 端口,在最新版本的 firewalld 中默認已經定義了 70+ 種服務供我們使用.

當默認提供的服務不夠用或者需要自定義某項服務的端口時,我們需要將 service 配置文件放置在 /etc/firewalld/services/ 目錄中.

service 配置的好處顯而易見:

第一,通過服務名字來管理規則更加人性化,

第二,通過服務來組織端口分組的模式更加高效,如果一個服務使用了若干個網絡端口,則服務的配置文件就相當於提供了到這些端口的規則管理的批量操作快捷方式。

假如你服務器的ftp不使用默認端口,默認ftp的端口21改為1121,但想通過服務的方式操作防火牆,代碼如下:

複製模版到/etc,以便修改和調用

[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為默認zone,所以要編輯這個,增加一行,以下內容

<service name="ftp"/>

重新加載防火牆配置

[root@zcwyou ~]# firewall-cmd --reload

4. 安裝、啟用、關閉firewalld

4.1 安裝firewalld

[root@zcwyou ~]# yum install firewalld firewall-config

4.2 啟動服務

[root@zcwyou ~]# systemctl start firewalld

4.3 開機自動啟動服務

[root@zcwyou ~]# systemctl enable firewalld

4.4 查看狀態

[root@zcwyou ~]# systemctl status firewalld
[root@zcwyou ~]# firewall-cmd --state

4.5 關閉服務

[root@zcwyou ~]# systemctl stop firewalld

4.6 取消開機啟動

[root@zcwyou ~]# systemctl disable firewalld

4.7 棄用FirewallD防火牆,改用iptables

你也可以關閉目前還不熟悉的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 顯示狀態

[root@zcwyou ~]# firewall-cmd --state

4.11 查看活動區域信息

[root@zcwyou ~]# firewall-cmd --get-active-zones

4.12 查看XX接口所屬區域

[root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX

4.13 拒絕所有包

[root@zcwyou ~]# firewall-cmd --panic-on

4.14 取消拒絕狀態

[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 身份輸入以下命令,重新加載防火牆,並不中斷用戶連接,即不丟失狀態信息:

[root@zcwyou ~]# firewall-cmd --reload

4.18 完全重啟防火牆

以 root 身份輸入以下命令,重新加載防火牆並中斷用戶連接,即丟棄狀態信息:

[root@zcwyou ~]# firewall-cmd --complete-reload

注意:通常在防火牆出現嚴重問題時,這個命令才會被使用。比如,防火牆規則是正確的,但卻出現狀態信息問題和無法建立連接。

firewall-cmd --reload與firewall-cmd --complete-reload兩者的區別就是第一個無需斷開連接,就是firewalld特性之一動態添加規則,第二個需要斷開連接,類似重啟服務

4.19 顯示默認區域

[root@zcwyou ~]# firewall-cmd --get-default-zone

4.20 添加接口到區域

將接口添加到XX區域,如果不指定區域,則添加到默認區域

[root@zcwyou ~]# firewall-cmd --zone=XX --add-interface=eth0

永久生效再加上--permanent 然後reload防火牆

4.21 設置默認區域,立即生效無需重啟

[root@zcwyou ~]# firewall-cmd --set-default-zone=XX

4.22 查看XX區域打開的端口

[root@zcwyou ~]# firewall-cmd --zone=XX --list-ports

4.23 查看XX區域加載的服務

[root@zcwyou ~]# firewall-cmd --zone=XX --list-services

4.24 臨時加一個端口到XX區域

[root@zcwyou ~]# firewall-cmd --zone=XX --add-port=8080/tcp

若要永久生效方法加參數--permanent

4.25 打開一個服務,類似於將端口可視化,服務需要在配置文件中添加,/etc/firewalld 目錄下有services文件夾,查看其它的xml文件以及參考前面說方法

[root@zcwyou ~]# firewall-cmd --zone=work --add-service=smtp

4.26 移除服務

[root@zcwyou ~]# firewall-cmd --zone=work --remove-service=smtp

4.27 顯示支持的區域列表

[root@zcwyou ~]# firewall-cmd --get-zones

4.28 列出全部區域啟用的特性

[root@zcwyou ~]# firewall-cmd --list-all-zones

4.29 顯示XX區域詳情

[root@zcwyou ~]# firewall-cmd --zone=XX --list-all

4.30 查看當前活躍區域

[root@zcwyou ~]# firewall-cmd --get-active-zones

4.31 設置XX接口所屬區域

[root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX

4.32 查詢YY區域中是否包含XX接口

[root@zcwyou ~]# firewall-cmd --zone=YY --query-interface=XX

4.33 刪除指定XX網卡所在的zone(以YY為例)

[root@zcwyou ~]# firewall-cmd --zone=YY --remove-interface=XX

4.34 臨時修改XX接口為YY區域

[root@zcwyou ~]# firewall-cmd --zone=YY --change-interface=XX

永久修改加參數--permanent

4.35 控制端口 / 服務

可以通過兩種方式控制端口的開放,一種是指定端口號另一種是指定服務名。雖然開放 http 服務就是開放了 80 端口,但是還是不能通過端口號來關閉,也就是說通過指定服務名開放的就要通過指定服務名關閉;通過指定端口號開放的就要通過指定端口號關閉。還有一個要注意的就是指定端口的時候一定要指定是什麼協議,tcp 還是 udp。

富規則

[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服務管理

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

firewalld服務管理

5.1 顯示支持的服務

[root@zcwyou ~]# firewall-cmd --get-services

5.2 臨時允許Samba服務通過600秒

[root@zcwyou ~]# firewall-cmd --add-service=samba --timeout=600

5.3 顯示默認區域開啟的服務,如果要查某區域,加參數--zone=XX

[root@zcwyou ~]# firewall-cmd --list-services

5.4 添加HTTP服務到內部區域(internal),並保存到配置文件

[root@zcwyou ~]# firewall-cmd --permanent --zone=internal --add-service=http

在不改變狀態的條件下重新加載防火牆

[root@zcwyou ~]# firewall-cmd --reload

5.5 開放mysql服務

[root@zcwyou ~]# firewall-cmd --add-service=mysql

5.6 阻止mysql服務

[root@zcwyou ~]# firewall-cmd --remove-service=mysql

5.7 端口管理

臨時打開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臨時打開的端口就失效了

[root@zcwyou ~]# firewall-cmd --reload

5.10 查看防火牆所有區域的設置,包括添加的端口和服務

[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

假設自定義的ssh端口號為12222,使用下面的命令來添加新端口的防火牆規則

[root@zcwyou ~]# firewall-cmd --add-port=12222/tcp --permanent

使用--permanent參數可以將更改保存到配置文件。

5.15 重啟防火牆

永久打開端口需要reload一下,如果用了reload臨時打開的端口就失效了

[root@zcwyou ~]# firewall-cmd --reload

5.16 添加端口範圍

還可以添加一個端口範圍

[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. 管理區域中的對象

"

請關注本頭條號,每天堅持更新原創乾貨技術文章。

如需學習視頻,請在微信搜索公眾號“智傳網優”直接開始自助視頻學習

1. 前言

本文將會詳細介紹CentOS 7 firewalld的來由、功能、常用命令、常用的案例及使用方法。希望能幫助讀者全面瞭解firewalld,並能正確配置和使用它。

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

centos7 firewalld

2. firewalld與iptables的關係

在RHEL7裡有幾種防火牆共存:firewalld、iptables、ebtables,默認是使用firewalld來管理netfilter子系統,不過底層調用的命令仍然是iptables等。firewalld跟iptables比起來,不好的地方是每個服務都需要去設置才能放行,因為默認是拒絕。而iptables裡默認是每個服務是允許,需要拒絕的才去限制。

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

firewalld與iptables的關係

firewalld跟iptables比起來至少有兩大好處:

1、firewalld可以動態修改單條規則,而不需要像iptables那樣,在修改了規則後必須得全部刷新才可以生效;

2、firewalld在使用上要比iptables人性化很多,即使不明白“五張表五條鏈”而且對TCP/IP協議也不理解也可以實現大部分功能。

firewalld自身並不具備防火牆的功能,而是和iptables一樣需要通過內核的netfilter來實現,也就是說firewalld和 iptables一樣,他們的作用都是用於維護規則,而真正使用規則幹活的是內核的netfilter,只不過firewalld和iptables的結構以及使用方法不一樣罷了。

一個重要的概念:區域管理

firewalld將網卡對應到不同的區域(zone),zone 默認共有9個,block dmz drop external home internal public trusted work.

不同的區域之間的差異是其對待數據包的默認行為不同,根據區域名字我們可以很直觀的知道該區域的特徵,在CentOS7系統中,默認區域被設置為public.

在最新版本的fedora(fedora21)當中隨著 server 版和 workstation 版的分化則添加了兩個不同的自定義 zone FedoraServer 和 FedoraWorkstation 分別對應兩個版本。

通過將網絡劃分成不同的區域,制定出不同區域之間的訪問控制策略來控制不同程序區域間傳送的數據流。例如,互聯網是不可信任的區域,而內部網絡是高度信任的區域。網絡安全模型可以在安裝,初次啟動和首次建立網絡連接時選擇初始化。該模型描述了主機所連接的整個網絡環境的可信級別,並定義了新連接的處理方式。有如下幾種不同的初始化區域:

  • 阻塞區域(block):任何傳入的網絡數據包都將被阻止。
  • 工作區域(work):相信網絡上的其他計算機,不會損害你的計算機。
  • 家庭區域(home):相信網絡上的其他計算機,不會損害你的計算機。
  • 公共區域(public):不相信網絡上的任何計算機,只有選擇接受傳入的網絡連接。
  • 隔離區域(DMZ):隔離區域也稱為非軍事區域,內外網絡之間增加的一層網絡,起到緩衝作用。對於隔離區域,只有選擇接受傳入的網絡連接。
  • 信任區域(trusted):所有的網絡連接都可以接受。
  • 丟棄區域(drop):任何傳入的網絡連接都被拒絕。
  • 內部區域(internal):信任網絡上的其他計算機,不會損害你的計算機。只有選擇接受傳入的網絡連接。
  • 外部區域(external):不相信網絡上的其他計算機,不會損害你的計算機。只有選擇接受傳入的網絡連接。
  • 注:FirewallD的默認區域是public。

firewalld默認提供了九個zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他們都保存在“/usr/lib/firewalld/zones/”目錄下。

默認情況下,在/etc/firewalld/zones下面只有一個public.xml。如果給另外一個zone做一些改動,並永久保存,那麼會自動生成對應的配置文件,比如,給work zone增加一個端口:

firewall-cmd --permanent --zone=work --add-port=1000/tcp

此時就會生成一個work.xml的配置文件

查看XX區域的永久配置文件:

[root@zcwyou ~]# cat /etc/firewalld/zones/XX.xml

注意:防火牆配置文件也可以手動修改,修改後記得reload防火牆

配置方法

firewalld的配置方法主要有三種:firewall-config、firewall-cmd和直接編輯xml文件,其中 firewall-config是圖形化工具,firewall-cmd是命令行工具,而對於linux來說大家應該更習慣使用命令行方式的操作,所以 firewall-config我們就不給大家介紹了。

firewalld默認配置文件有兩個:

/usr/lib/firewalld/ (系統配置,儘量不要修改)

/etc/firewalld/ (用戶配置地址)

3. 什麼是服務?

在 /usr/lib/firewalld/services/ 目錄中,還保存了另外一類配置文件,每個文件對應一項具體的網絡服務,如 ssh 服務等.

與之對應的配置文件中記錄了各項服務所使用的 tcp/udp 端口,在最新版本的 firewalld 中默認已經定義了 70+ 種服務供我們使用.

當默認提供的服務不夠用或者需要自定義某項服務的端口時,我們需要將 service 配置文件放置在 /etc/firewalld/services/ 目錄中.

service 配置的好處顯而易見:

第一,通過服務名字來管理規則更加人性化,

第二,通過服務來組織端口分組的模式更加高效,如果一個服務使用了若干個網絡端口,則服務的配置文件就相當於提供了到這些端口的規則管理的批量操作快捷方式。

假如你服務器的ftp不使用默認端口,默認ftp的端口21改為1121,但想通過服務的方式操作防火牆,代碼如下:

複製模版到/etc,以便修改和調用

[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為默認zone,所以要編輯這個,增加一行,以下內容

<service name="ftp"/>

重新加載防火牆配置

[root@zcwyou ~]# firewall-cmd --reload

4. 安裝、啟用、關閉firewalld

4.1 安裝firewalld

[root@zcwyou ~]# yum install firewalld firewall-config

4.2 啟動服務

[root@zcwyou ~]# systemctl start firewalld

4.3 開機自動啟動服務

[root@zcwyou ~]# systemctl enable firewalld

4.4 查看狀態

[root@zcwyou ~]# systemctl status firewalld
[root@zcwyou ~]# firewall-cmd --state

4.5 關閉服務

[root@zcwyou ~]# systemctl stop firewalld

4.6 取消開機啟動

[root@zcwyou ~]# systemctl disable firewalld

4.7 棄用FirewallD防火牆,改用iptables

你也可以關閉目前還不熟悉的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 顯示狀態

[root@zcwyou ~]# firewall-cmd --state

4.11 查看活動區域信息

[root@zcwyou ~]# firewall-cmd --get-active-zones

4.12 查看XX接口所屬區域

[root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX

4.13 拒絕所有包

[root@zcwyou ~]# firewall-cmd --panic-on

4.14 取消拒絕狀態

[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 身份輸入以下命令,重新加載防火牆,並不中斷用戶連接,即不丟失狀態信息:

[root@zcwyou ~]# firewall-cmd --reload

4.18 完全重啟防火牆

以 root 身份輸入以下命令,重新加載防火牆並中斷用戶連接,即丟棄狀態信息:

[root@zcwyou ~]# firewall-cmd --complete-reload

注意:通常在防火牆出現嚴重問題時,這個命令才會被使用。比如,防火牆規則是正確的,但卻出現狀態信息問題和無法建立連接。

firewall-cmd --reload與firewall-cmd --complete-reload兩者的區別就是第一個無需斷開連接,就是firewalld特性之一動態添加規則,第二個需要斷開連接,類似重啟服務

4.19 顯示默認區域

[root@zcwyou ~]# firewall-cmd --get-default-zone

4.20 添加接口到區域

將接口添加到XX區域,如果不指定區域,則添加到默認區域

[root@zcwyou ~]# firewall-cmd --zone=XX --add-interface=eth0

永久生效再加上--permanent 然後reload防火牆

4.21 設置默認區域,立即生效無需重啟

[root@zcwyou ~]# firewall-cmd --set-default-zone=XX

4.22 查看XX區域打開的端口

[root@zcwyou ~]# firewall-cmd --zone=XX --list-ports

4.23 查看XX區域加載的服務

[root@zcwyou ~]# firewall-cmd --zone=XX --list-services

4.24 臨時加一個端口到XX區域

[root@zcwyou ~]# firewall-cmd --zone=XX --add-port=8080/tcp

若要永久生效方法加參數--permanent

4.25 打開一個服務,類似於將端口可視化,服務需要在配置文件中添加,/etc/firewalld 目錄下有services文件夾,查看其它的xml文件以及參考前面說方法

[root@zcwyou ~]# firewall-cmd --zone=work --add-service=smtp

4.26 移除服務

[root@zcwyou ~]# firewall-cmd --zone=work --remove-service=smtp

4.27 顯示支持的區域列表

[root@zcwyou ~]# firewall-cmd --get-zones

4.28 列出全部區域啟用的特性

[root@zcwyou ~]# firewall-cmd --list-all-zones

4.29 顯示XX區域詳情

[root@zcwyou ~]# firewall-cmd --zone=XX --list-all

4.30 查看當前活躍區域

[root@zcwyou ~]# firewall-cmd --get-active-zones

4.31 設置XX接口所屬區域

[root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX

4.32 查詢YY區域中是否包含XX接口

[root@zcwyou ~]# firewall-cmd --zone=YY --query-interface=XX

4.33 刪除指定XX網卡所在的zone(以YY為例)

[root@zcwyou ~]# firewall-cmd --zone=YY --remove-interface=XX

4.34 臨時修改XX接口為YY區域

[root@zcwyou ~]# firewall-cmd --zone=YY --change-interface=XX

永久修改加參數--permanent

4.35 控制端口 / 服務

可以通過兩種方式控制端口的開放,一種是指定端口號另一種是指定服務名。雖然開放 http 服務就是開放了 80 端口,但是還是不能通過端口號來關閉,也就是說通過指定服務名開放的就要通過指定服務名關閉;通過指定端口號開放的就要通過指定端口號關閉。還有一個要注意的就是指定端口的時候一定要指定是什麼協議,tcp 還是 udp。

富規則

[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服務管理

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

firewalld服務管理

5.1 顯示支持的服務

[root@zcwyou ~]# firewall-cmd --get-services

5.2 臨時允許Samba服務通過600秒

[root@zcwyou ~]# firewall-cmd --add-service=samba --timeout=600

5.3 顯示默認區域開啟的服務,如果要查某區域,加參數--zone=XX

[root@zcwyou ~]# firewall-cmd --list-services

5.4 添加HTTP服務到內部區域(internal),並保存到配置文件

[root@zcwyou ~]# firewall-cmd --permanent --zone=internal --add-service=http

在不改變狀態的條件下重新加載防火牆

[root@zcwyou ~]# firewall-cmd --reload

5.5 開放mysql服務

[root@zcwyou ~]# firewall-cmd --add-service=mysql

5.6 阻止mysql服務

[root@zcwyou ~]# firewall-cmd --remove-service=mysql

5.7 端口管理

臨時打開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臨時打開的端口就失效了

[root@zcwyou ~]# firewall-cmd --reload

5.10 查看防火牆所有區域的設置,包括添加的端口和服務

[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

假設自定義的ssh端口號為12222,使用下面的命令來添加新端口的防火牆規則

[root@zcwyou ~]# firewall-cmd --add-port=12222/tcp --permanent

使用--permanent參數可以將更改保存到配置文件。

5.15 重啟防火牆

永久打開端口需要reload一下,如果用了reload臨時打開的端口就失效了

[root@zcwyou ~]# firewall-cmd --reload

5.16 添加端口範圍

還可以添加一個端口範圍

[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. 管理區域中的對象

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

管理區域中的對象

6.1 獲取永久支持的區域

[root@zcwyou ~]# firewall-cmd --permanent --get-zones

6.2 啟用區域中的服務

firewall-cmd --permanent [--zone=] --add-service=

此舉將永久啟用區域中的服務。如果未指定區域,將使用默認區域。

臨時開放mysql服務,立即生效

[root@zcwyou ~]# firewall-cmd --add-service=mysql

public區域,添加httpd服務,並保存,但不會立即生效,需要reload防火牆

[root@zcwyou ~]# firewall-cmd --permanent --zone=public --add-service=httpd

public區域,禁用httpd服務,並保存,但不會立即生效,需要reload防火牆

[root@zcwyou ~]# firewall-cmd --permanent --zone=public --remove-service=httpd

7. 端口轉發

端口轉發可以將指定地址訪問指定的端口時,將流量轉發至指定地址的指定端口。轉發的目的如果不指定ip的話就默認為本機,如果指定了ip卻沒指定端口,則默認使用來源端口。

典型的做法:

  1. NAT內網端口映射
  2. SSH隧道轉發數據

如果配置好端口轉發之後不能用,可以檢查下面兩個問題:

比如我將 80 端口轉發至 8080 端口,首先檢查本地的 80 端口和目標的 8080 端口是否開放監聽了

其次檢查是否允許偽裝 IP,沒允許的話要開啟偽裝 IP

將80端口的流量轉發至8080

[root@zcwyou ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080

將80端口的流量轉發至192.168.0.1

[root@zcwyou ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1

將80端口的流量轉發至192.168.0.1的8080端口

[root@zcwyou ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080

當我們想把某個端口隱藏起來的時候,就可以在防火牆上阻止那個端口訪問,然後再開一個不規則的端口,之後配置防火牆的端口轉發,將流量轉發過去。

端口轉發還可以做流量分發,一個防火牆拖著好多臺運行著不同服務的機器,然後用防火牆將不同端口的流量轉發至不同機器。

禁止區域的端口轉發或者端口映射

firewall-cmd [--zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}查詢區域的端口轉發或者端口映射

firewall-cmd [--zone=] --query-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}在區域中永久啟用端口轉發或映射

firewall-cmd --permanent [--zone=] --add-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}端口可以映射到另一臺主機的同一端口,也可以是同一主機或另一主機的不同端口。端口號可以是一個單獨的端口 或者是端口範圍 - 。協議可以為 tcp 或udp 。目標端口可以是端口號 或者是端口範圍 -。目標地址可以是 IPv4 地址。受內核限制,端口轉發功能僅可用於IPv4。

永久禁止區域的端口轉發或者端口映射

firewall-cmd --permanent [--zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}查詢區域的端口轉發或者端口映射狀態

firewall-cmd --permanent [--zone=] --query-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}如果服務啟用,此命令將有返回值。此命令沒有輸出信息。

例: 將 home 區域的 ssh 服務轉發到 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

永久啟用區域中的偽裝

firewall-cmd --permanent [--zone=] --add-masquerade

此舉啟用區域的偽裝功能。私有網絡的地址將被隱藏並映射到一個公有IP。這是地址轉換的一種形式,常用於路由。由於內核的限制,偽裝功能僅可用於IPv4。

臨時禁用區域中的 IP 偽裝

firewall-cmd [--zone=] --remove-masquerade

永久禁用區域中的偽裝

firewall-cmd --permanent [--zone=] --remove-masquerade

查詢區域中的偽裝的永久狀態

firewall-cmd --permanent [--zone=] --query-masquerade

如果服務啟用,此命令將有返回值。此命令沒有輸出信息。

查詢區域的偽裝狀態

firewall-cmd [--zone=] --query-masquerade

如果啟用,此命令將有返回值。沒有輸出信息。

9. ICMP控制

獲取永久選項所支持的ICMP類型列表

[root@zcwyou ~]# firewall-cmd --permanent --get-icmptypes

獲取所有支持的ICMP類型

[root@zcwyou ~]# firewall-cmd --get-icmptypes

永久啟用區域中的ICMP阻塞,需要reload防火牆,

firewall-cmd --permanent [--zone=] --add-icmp-block=

此舉將啟用選中的 Internet 控制報文協議 (ICMP) 報文進行阻塞。 ICMP 報文可以是請求信息或者創建的應答報文或錯誤應答報文。

永久禁用區域中的ICMP阻塞,需要reload防火牆,

firewall-cmd --permanent [--zone=] --remove-icmp-block=

查詢區域中的ICMP永久狀態

firewall-cmd --permanent [--zone=] --query-icmp-block=

如果服務啟用,此命令將有返回值。此命令沒有輸出信息。

例: 阻塞公共區域中的響應應答報文:

[root@zcwyou ~]# firewall-cmd --permanent --zone=public --add-icmp-block=echo-reply

立即啟用區域的 ICMP 阻塞功能

firewall-cmd [--zone=] --add-icmp-block=

此舉將啟用選中的 Internet 控制報文協議 (ICMP) 報文進行阻塞。 ICMP 報文可以是請求信息或者創建的應答報文,以及錯誤應答。

立即禁止區域的 ICMP 阻塞功能

firewall-cmd [--zone=] --remove-icmp-block=

查詢區域的 ICMP 阻塞功能

firewall-cmd [--zone=] --query-icmp-block=

如果啟用,此命令將有返回值。沒有輸出信息。

例: 阻塞區域的響應應答報文:

[root@zcwyou ~]# firewall-cmd --zone=public --add-icmp-block=echo-reply

10. 通過配置文件來使用Firewalld的方法

系統本身已經內置了一些常用服務的防火牆規則,存放在/usr/lib/firewalld/services/

注意!!!!!請勿編輯/usr/lib/firewalld/services/ ,只有 /etc/firewalld/services 的文件可以被編輯。

以下例子均以系統自帶的public zone 為例子.

當然firewalld也可以使用圖形界面管理:

"

請關注本頭條號,每天堅持更新原創乾貨技術文章。

如需學習視頻,請在微信搜索公眾號“智傳網優”直接開始自助視頻學習

1. 前言

本文將會詳細介紹CentOS 7 firewalld的來由、功能、常用命令、常用的案例及使用方法。希望能幫助讀者全面瞭解firewalld,並能正確配置和使用它。

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

centos7 firewalld

2. firewalld與iptables的關係

在RHEL7裡有幾種防火牆共存:firewalld、iptables、ebtables,默認是使用firewalld來管理netfilter子系統,不過底層調用的命令仍然是iptables等。firewalld跟iptables比起來,不好的地方是每個服務都需要去設置才能放行,因為默認是拒絕。而iptables裡默認是每個服務是允許,需要拒絕的才去限制。

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

firewalld與iptables的關係

firewalld跟iptables比起來至少有兩大好處:

1、firewalld可以動態修改單條規則,而不需要像iptables那樣,在修改了規則後必須得全部刷新才可以生效;

2、firewalld在使用上要比iptables人性化很多,即使不明白“五張表五條鏈”而且對TCP/IP協議也不理解也可以實現大部分功能。

firewalld自身並不具備防火牆的功能,而是和iptables一樣需要通過內核的netfilter來實現,也就是說firewalld和 iptables一樣,他們的作用都是用於維護規則,而真正使用規則幹活的是內核的netfilter,只不過firewalld和iptables的結構以及使用方法不一樣罷了。

一個重要的概念:區域管理

firewalld將網卡對應到不同的區域(zone),zone 默認共有9個,block dmz drop external home internal public trusted work.

不同的區域之間的差異是其對待數據包的默認行為不同,根據區域名字我們可以很直觀的知道該區域的特徵,在CentOS7系統中,默認區域被設置為public.

在最新版本的fedora(fedora21)當中隨著 server 版和 workstation 版的分化則添加了兩個不同的自定義 zone FedoraServer 和 FedoraWorkstation 分別對應兩個版本。

通過將網絡劃分成不同的區域,制定出不同區域之間的訪問控制策略來控制不同程序區域間傳送的數據流。例如,互聯網是不可信任的區域,而內部網絡是高度信任的區域。網絡安全模型可以在安裝,初次啟動和首次建立網絡連接時選擇初始化。該模型描述了主機所連接的整個網絡環境的可信級別,並定義了新連接的處理方式。有如下幾種不同的初始化區域:

  • 阻塞區域(block):任何傳入的網絡數據包都將被阻止。
  • 工作區域(work):相信網絡上的其他計算機,不會損害你的計算機。
  • 家庭區域(home):相信網絡上的其他計算機,不會損害你的計算機。
  • 公共區域(public):不相信網絡上的任何計算機,只有選擇接受傳入的網絡連接。
  • 隔離區域(DMZ):隔離區域也稱為非軍事區域,內外網絡之間增加的一層網絡,起到緩衝作用。對於隔離區域,只有選擇接受傳入的網絡連接。
  • 信任區域(trusted):所有的網絡連接都可以接受。
  • 丟棄區域(drop):任何傳入的網絡連接都被拒絕。
  • 內部區域(internal):信任網絡上的其他計算機,不會損害你的計算機。只有選擇接受傳入的網絡連接。
  • 外部區域(external):不相信網絡上的其他計算機,不會損害你的計算機。只有選擇接受傳入的網絡連接。
  • 注:FirewallD的默認區域是public。

firewalld默認提供了九個zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他們都保存在“/usr/lib/firewalld/zones/”目錄下。

默認情況下,在/etc/firewalld/zones下面只有一個public.xml。如果給另外一個zone做一些改動,並永久保存,那麼會自動生成對應的配置文件,比如,給work zone增加一個端口:

firewall-cmd --permanent --zone=work --add-port=1000/tcp

此時就會生成一個work.xml的配置文件

查看XX區域的永久配置文件:

[root@zcwyou ~]# cat /etc/firewalld/zones/XX.xml

注意:防火牆配置文件也可以手動修改,修改後記得reload防火牆

配置方法

firewalld的配置方法主要有三種:firewall-config、firewall-cmd和直接編輯xml文件,其中 firewall-config是圖形化工具,firewall-cmd是命令行工具,而對於linux來說大家應該更習慣使用命令行方式的操作,所以 firewall-config我們就不給大家介紹了。

firewalld默認配置文件有兩個:

/usr/lib/firewalld/ (系統配置,儘量不要修改)

/etc/firewalld/ (用戶配置地址)

3. 什麼是服務?

在 /usr/lib/firewalld/services/ 目錄中,還保存了另外一類配置文件,每個文件對應一項具體的網絡服務,如 ssh 服務等.

與之對應的配置文件中記錄了各項服務所使用的 tcp/udp 端口,在最新版本的 firewalld 中默認已經定義了 70+ 種服務供我們使用.

當默認提供的服務不夠用或者需要自定義某項服務的端口時,我們需要將 service 配置文件放置在 /etc/firewalld/services/ 目錄中.

service 配置的好處顯而易見:

第一,通過服務名字來管理規則更加人性化,

第二,通過服務來組織端口分組的模式更加高效,如果一個服務使用了若干個網絡端口,則服務的配置文件就相當於提供了到這些端口的規則管理的批量操作快捷方式。

假如你服務器的ftp不使用默認端口,默認ftp的端口21改為1121,但想通過服務的方式操作防火牆,代碼如下:

複製模版到/etc,以便修改和調用

[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為默認zone,所以要編輯這個,增加一行,以下內容

<service name="ftp"/>

重新加載防火牆配置

[root@zcwyou ~]# firewall-cmd --reload

4. 安裝、啟用、關閉firewalld

4.1 安裝firewalld

[root@zcwyou ~]# yum install firewalld firewall-config

4.2 啟動服務

[root@zcwyou ~]# systemctl start firewalld

4.3 開機自動啟動服務

[root@zcwyou ~]# systemctl enable firewalld

4.4 查看狀態

[root@zcwyou ~]# systemctl status firewalld
[root@zcwyou ~]# firewall-cmd --state

4.5 關閉服務

[root@zcwyou ~]# systemctl stop firewalld

4.6 取消開機啟動

[root@zcwyou ~]# systemctl disable firewalld

4.7 棄用FirewallD防火牆,改用iptables

你也可以關閉目前還不熟悉的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 顯示狀態

[root@zcwyou ~]# firewall-cmd --state

4.11 查看活動區域信息

[root@zcwyou ~]# firewall-cmd --get-active-zones

4.12 查看XX接口所屬區域

[root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX

4.13 拒絕所有包

[root@zcwyou ~]# firewall-cmd --panic-on

4.14 取消拒絕狀態

[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 身份輸入以下命令,重新加載防火牆,並不中斷用戶連接,即不丟失狀態信息:

[root@zcwyou ~]# firewall-cmd --reload

4.18 完全重啟防火牆

以 root 身份輸入以下命令,重新加載防火牆並中斷用戶連接,即丟棄狀態信息:

[root@zcwyou ~]# firewall-cmd --complete-reload

注意:通常在防火牆出現嚴重問題時,這個命令才會被使用。比如,防火牆規則是正確的,但卻出現狀態信息問題和無法建立連接。

firewall-cmd --reload與firewall-cmd --complete-reload兩者的區別就是第一個無需斷開連接,就是firewalld特性之一動態添加規則,第二個需要斷開連接,類似重啟服務

4.19 顯示默認區域

[root@zcwyou ~]# firewall-cmd --get-default-zone

4.20 添加接口到區域

將接口添加到XX區域,如果不指定區域,則添加到默認區域

[root@zcwyou ~]# firewall-cmd --zone=XX --add-interface=eth0

永久生效再加上--permanent 然後reload防火牆

4.21 設置默認區域,立即生效無需重啟

[root@zcwyou ~]# firewall-cmd --set-default-zone=XX

4.22 查看XX區域打開的端口

[root@zcwyou ~]# firewall-cmd --zone=XX --list-ports

4.23 查看XX區域加載的服務

[root@zcwyou ~]# firewall-cmd --zone=XX --list-services

4.24 臨時加一個端口到XX區域

[root@zcwyou ~]# firewall-cmd --zone=XX --add-port=8080/tcp

若要永久生效方法加參數--permanent

4.25 打開一個服務,類似於將端口可視化,服務需要在配置文件中添加,/etc/firewalld 目錄下有services文件夾,查看其它的xml文件以及參考前面說方法

[root@zcwyou ~]# firewall-cmd --zone=work --add-service=smtp

4.26 移除服務

[root@zcwyou ~]# firewall-cmd --zone=work --remove-service=smtp

4.27 顯示支持的區域列表

[root@zcwyou ~]# firewall-cmd --get-zones

4.28 列出全部區域啟用的特性

[root@zcwyou ~]# firewall-cmd --list-all-zones

4.29 顯示XX區域詳情

[root@zcwyou ~]# firewall-cmd --zone=XX --list-all

4.30 查看當前活躍區域

[root@zcwyou ~]# firewall-cmd --get-active-zones

4.31 設置XX接口所屬區域

[root@zcwyou ~]# firewall-cmd --get-zone-of-interface=XX

4.32 查詢YY區域中是否包含XX接口

[root@zcwyou ~]# firewall-cmd --zone=YY --query-interface=XX

4.33 刪除指定XX網卡所在的zone(以YY為例)

[root@zcwyou ~]# firewall-cmd --zone=YY --remove-interface=XX

4.34 臨時修改XX接口為YY區域

[root@zcwyou ~]# firewall-cmd --zone=YY --change-interface=XX

永久修改加參數--permanent

4.35 控制端口 / 服務

可以通過兩種方式控制端口的開放,一種是指定端口號另一種是指定服務名。雖然開放 http 服務就是開放了 80 端口,但是還是不能通過端口號來關閉,也就是說通過指定服務名開放的就要通過指定服務名關閉;通過指定端口號開放的就要通過指定端口號關閉。還有一個要注意的就是指定端口的時候一定要指定是什麼協議,tcp 還是 udp。

富規則

[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服務管理

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

firewalld服務管理

5.1 顯示支持的服務

[root@zcwyou ~]# firewall-cmd --get-services

5.2 臨時允許Samba服務通過600秒

[root@zcwyou ~]# firewall-cmd --add-service=samba --timeout=600

5.3 顯示默認區域開啟的服務,如果要查某區域,加參數--zone=XX

[root@zcwyou ~]# firewall-cmd --list-services

5.4 添加HTTP服務到內部區域(internal),並保存到配置文件

[root@zcwyou ~]# firewall-cmd --permanent --zone=internal --add-service=http

在不改變狀態的條件下重新加載防火牆

[root@zcwyou ~]# firewall-cmd --reload

5.5 開放mysql服務

[root@zcwyou ~]# firewall-cmd --add-service=mysql

5.6 阻止mysql服務

[root@zcwyou ~]# firewall-cmd --remove-service=mysql

5.7 端口管理

臨時打開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臨時打開的端口就失效了

[root@zcwyou ~]# firewall-cmd --reload

5.10 查看防火牆所有區域的設置,包括添加的端口和服務

[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

假設自定義的ssh端口號為12222,使用下面的命令來添加新端口的防火牆規則

[root@zcwyou ~]# firewall-cmd --add-port=12222/tcp --permanent

使用--permanent參數可以將更改保存到配置文件。

5.15 重啟防火牆

永久打開端口需要reload一下,如果用了reload臨時打開的端口就失效了

[root@zcwyou ~]# firewall-cmd --reload

5.16 添加端口範圍

還可以添加一個端口範圍

[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. 管理區域中的對象

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

管理區域中的對象

6.1 獲取永久支持的區域

[root@zcwyou ~]# firewall-cmd --permanent --get-zones

6.2 啟用區域中的服務

firewall-cmd --permanent [--zone=] --add-service=

此舉將永久啟用區域中的服務。如果未指定區域,將使用默認區域。

臨時開放mysql服務,立即生效

[root@zcwyou ~]# firewall-cmd --add-service=mysql

public區域,添加httpd服務,並保存,但不會立即生效,需要reload防火牆

[root@zcwyou ~]# firewall-cmd --permanent --zone=public --add-service=httpd

public區域,禁用httpd服務,並保存,但不會立即生效,需要reload防火牆

[root@zcwyou ~]# firewall-cmd --permanent --zone=public --remove-service=httpd

7. 端口轉發

端口轉發可以將指定地址訪問指定的端口時,將流量轉發至指定地址的指定端口。轉發的目的如果不指定ip的話就默認為本機,如果指定了ip卻沒指定端口,則默認使用來源端口。

典型的做法:

  1. NAT內網端口映射
  2. SSH隧道轉發數據

如果配置好端口轉發之後不能用,可以檢查下面兩個問題:

比如我將 80 端口轉發至 8080 端口,首先檢查本地的 80 端口和目標的 8080 端口是否開放監聽了

其次檢查是否允許偽裝 IP,沒允許的話要開啟偽裝 IP

將80端口的流量轉發至8080

[root@zcwyou ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080

將80端口的流量轉發至192.168.0.1

[root@zcwyou ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1

將80端口的流量轉發至192.168.0.1的8080端口

[root@zcwyou ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080

當我們想把某個端口隱藏起來的時候,就可以在防火牆上阻止那個端口訪問,然後再開一個不規則的端口,之後配置防火牆的端口轉發,將流量轉發過去。

端口轉發還可以做流量分發,一個防火牆拖著好多臺運行著不同服務的機器,然後用防火牆將不同端口的流量轉發至不同機器。

禁止區域的端口轉發或者端口映射

firewall-cmd [--zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}查詢區域的端口轉發或者端口映射

firewall-cmd [--zone=] --query-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}在區域中永久啟用端口轉發或映射

firewall-cmd --permanent [--zone=] --add-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}端口可以映射到另一臺主機的同一端口,也可以是同一主機或另一主機的不同端口。端口號可以是一個單獨的端口 或者是端口範圍 - 。協議可以為 tcp 或udp 。目標端口可以是端口號 或者是端口範圍 -。目標地址可以是 IPv4 地址。受內核限制,端口轉發功能僅可用於IPv4。

永久禁止區域的端口轉發或者端口映射

firewall-cmd --permanent [--zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}查詢區域的端口轉發或者端口映射狀態

firewall-cmd --permanent [--zone=] --query-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=

| :toport=[-]:toaddr=

}如果服務啟用,此命令將有返回值。此命令沒有輸出信息。

例: 將 home 區域的 ssh 服務轉發到 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

永久啟用區域中的偽裝

firewall-cmd --permanent [--zone=] --add-masquerade

此舉啟用區域的偽裝功能。私有網絡的地址將被隱藏並映射到一個公有IP。這是地址轉換的一種形式,常用於路由。由於內核的限制,偽裝功能僅可用於IPv4。

臨時禁用區域中的 IP 偽裝

firewall-cmd [--zone=] --remove-masquerade

永久禁用區域中的偽裝

firewall-cmd --permanent [--zone=] --remove-masquerade

查詢區域中的偽裝的永久狀態

firewall-cmd --permanent [--zone=] --query-masquerade

如果服務啟用,此命令將有返回值。此命令沒有輸出信息。

查詢區域的偽裝狀態

firewall-cmd [--zone=] --query-masquerade

如果啟用,此命令將有返回值。沒有輸出信息。

9. ICMP控制

獲取永久選項所支持的ICMP類型列表

[root@zcwyou ~]# firewall-cmd --permanent --get-icmptypes

獲取所有支持的ICMP類型

[root@zcwyou ~]# firewall-cmd --get-icmptypes

永久啟用區域中的ICMP阻塞,需要reload防火牆,

firewall-cmd --permanent [--zone=] --add-icmp-block=

此舉將啟用選中的 Internet 控制報文協議 (ICMP) 報文進行阻塞。 ICMP 報文可以是請求信息或者創建的應答報文或錯誤應答報文。

永久禁用區域中的ICMP阻塞,需要reload防火牆,

firewall-cmd --permanent [--zone=] --remove-icmp-block=

查詢區域中的ICMP永久狀態

firewall-cmd --permanent [--zone=] --query-icmp-block=

如果服務啟用,此命令將有返回值。此命令沒有輸出信息。

例: 阻塞公共區域中的響應應答報文:

[root@zcwyou ~]# firewall-cmd --permanent --zone=public --add-icmp-block=echo-reply

立即啟用區域的 ICMP 阻塞功能

firewall-cmd [--zone=] --add-icmp-block=

此舉將啟用選中的 Internet 控制報文協議 (ICMP) 報文進行阻塞。 ICMP 報文可以是請求信息或者創建的應答報文,以及錯誤應答。

立即禁止區域的 ICMP 阻塞功能

firewall-cmd [--zone=] --remove-icmp-block=

查詢區域的 ICMP 阻塞功能

firewall-cmd [--zone=] --query-icmp-block=

如果啟用,此命令將有返回值。沒有輸出信息。

例: 阻塞區域的響應應答報文:

[root@zcwyou ~]# firewall-cmd --zone=public --add-icmp-block=echo-reply

10. 通過配置文件來使用Firewalld的方法

系統本身已經內置了一些常用服務的防火牆規則,存放在/usr/lib/firewalld/services/

注意!!!!!請勿編輯/usr/lib/firewalld/services/ ,只有 /etc/firewalld/services 的文件可以被編輯。

以下例子均以系統自帶的public zone 為例子.

當然firewalld也可以使用圖形界面管理:

CentOS 7/8 預裝的新型防火牆firewalld配置詳解,你會用嗎

firewalld使用圖形界面管理

10.1 案例1: 如果想開放80端口供外網訪問http服務,操作如下

Step1:將 http.xml複製到/etc/firewalld/services/下面,以服務形式管理防火牆,

這個cp命令其實是可以省略的,系統會優先去讀取 /etc/firewalld 裡面的文件,讀取完畢後,會去/usr/lib/firewalld/services/ 再次讀取,為了方便修改和管理,強烈建議複製到/etc/firewalld

[root@zcwyou ~]# cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/

修改/etc/firewalld/zones/public.xml,加入http服務

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 身份輸入以下命令,重新加載防火牆,並不中斷用戶連接,即不丟失狀態信息:

[root@zcwyou ~]# firewall-cmd --reload

或者以 root 身份輸入以下信息,重新加載防火牆並中斷用戶連接,即丟棄狀態信息:

[root@zcwyou ~]# firewall-cmd --complete-reload

注意:通常在防火牆出現嚴重問題時,這個命令才會被使用。比如,防火牆規則是正確的,但卻出現狀態信息問題和無法建立連接。

10.2 案例2: SSH為非默認端口,要求能正常訪問

[root@zcwyou ~]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
[root@zcwyou ~]# vi /etc/firewalld/services/ssh.xml

把默認22修改為目前的SSH端口號

[root@zcwyou ~]# firewall-cmd --reload

10.3 案例3:修改區域配置文件只允許特定主機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

確保配置文件有以下內容

配置結束

重啟防火牆後生效

[root@zcwyou ~]# firewall-cmd --reload

11. firewalld直接模式

對於最高級的使用,或對於 iptables 專家,FirewallD 提供了一個Direct接口,允許你給它傳遞原始 iptables 命令。 直接接口規則不是持久的,除非使用 --permanent。

直接選項主要用於使服務和應用程序能夠增加規則。 規則不會被保存,在重新加載或者重啟之後必須再次提交。傳遞的參數 與 iptables, ip6tables 以及 ebtables 一致。

選項 –direct 需要是直接選項的第一個參數。

將命令傳遞給防火牆。參數 可以是 iptables, ip6tables 以及 ebtables 命令行參數。

firewall-cmd --direct --passthrough { ipv4 | ipv6 | eb }

為表

增加一個新鏈 。

firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb }從表

中刪除鏈 。

firewall-cmd --direct --remove-chain { ipv4 | ipv6 | eb }查詢 鏈是否存在與表

. 如果是,返回0,否則返回1.

firewall-cmd --direct --query-chain { ipv4 | ipv6 | eb }

如果啟用,此命令將有返回值。此命令沒有輸出信息。獲取用空格分隔的表

中鏈的列表。

firewall-cmd --direct --get-chains { ipv4 | ipv6 | eb }為表

增加一條參數為 的鏈 ,優先級設定為 。

firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb }從表

中刪除帶參數 的鏈 。

firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb }查詢 帶參數 的鏈 是否存在表

中. 如果是,返回0,否則返回1.

firewall-cmd --direct --query-rule { ipv4 | ipv6 | eb }

如果啟用,此命令將有返回值。此命令沒有輸出信息。獲取表

中所有增加到鏈 的規則,並用換行分隔。

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

添加富規則:

[root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0" accept'

允許192.168.122.0/24主機所有連接。

[root@zcwyou ~]# firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept'

每分鐘允許2個新連接訪問ftp服務。

[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服務,並且每分鐘記錄一次。

[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

當使用source和destination指定地址時,必須有family參數指定ipv4或ipv6。如果指定超時,

規則將在指定的秒數內被激活,並在之後被自動移除。

[root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service
name="dns" audit limit value="1/h" reject' --timeout=300

拒絕所有來自2001:db8::/64子網的主機訪問dns服務,並且每小時只審核記錄1次日誌。

[root@zcwyou ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source
address=192.168.122.0/24 service name=ftp accept'

允許192.168.122.0/24網段中的主機訪問ftp服務

[root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:4:6::" forward-port
to-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"'

轉發來自ipv6地址1:2:3:4:6::TCP端口4011,到1:2:3:4:7的TCP端口4012

允許來自主機 192.168.0.14 的所有 IPv4 流量。

[root@zcwyou ~]# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'

拒絕來自主機 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'

查看富規則

[root@zcwyou ~]# firewall-cmd --list-rich-rules

12. 總結

CentOS 7是第一代集成firewalld的CentOS系統,firewalld是一個功能豐富、先進的防火牆配置工具。熟悉掌握使用它將能大大提升系統和服務器的安全。

本文已同步至博客站,尊重原創,轉載時請在正文中附帶以下鏈接:

https://www.linuxrumen.com/rmxx/644.html

點擊瞭解更多,快速查看更多的技術文章列表。

"

相關推薦

推薦中...