1. 程式人生 > >RHEL7系統的防火牆管理工具之一——firewalld

RHEL7系統的防火牆管理工具之一——firewalld

一、搭建firwalld的管理環境:

       ## 首先搭建好yum源(本地或者網路都OK)

       ## 搭建防火牆服務firewalld

[[email protected] ~]# yum install firewalld.noarch -y

[[email protected] ~]# yum install firewall-config -y

[[email protected] ~]# systemctl start firewalld.service
[

[email protected] ~]# systemctl enable firewalld.service

二、系統防火牆的視窗化管理:

       ## 用下方命令開啟防火牆的管理視窗:

[[email protected] ~]# firewall-config

       # 這個圖形化介面主要有四大部分

第一部分:

      這一部分主要是對防火牆的一些基本管理,如載入配置,改變預設的域,改變介面、埠、ip連線的域。 如下圖:

第二部分:

      這一部分主要是設定 防火牆配置為永久生效,或者是暫時生效,Runtime表示暫時生效(關機、重啟服務、重新載入配置都能使其失效),Permanent表示永久生效:

第三部分:

     這一部分內容表示配置是基於什麼方式的,Zones表示基於域的方式來設定相關策略,Service表示基於服務的方式來設定相關策略:

防火牆的域有下圖幾種系統預設的型別:

第四部分:

      這一部分是配置的詳細內容。

      當第三部分選擇基於域的選項時,第四部分內容如下:

而當第三部分的選擇基於服務的選項時,第四部分內容如下:

其中最重要當然也最複雜的就是第四部分,下面以幾個簡單例子來說明圖形化設定防火牆策略的方式!

       ##  圖形化介面設定策略,使其它主機可以訪問本機的apache服務:

[[email protected] ~]# firewall-config &

[[email protected] ~]# watch -n 1 firewall-cmd --list-all

開啟該主機(ip為172.25.254.113)的apache服務:

在另外一臺主機瀏覽器中測試是否能進入113這臺主機的apache測試頁,發現不能進入測試頁,說明連線不同:

現在用圖形介面配置允許其它主機訪問113這臺主機上的apache服務,如下:

       設定永久生效:

       允許訪問本機的http(apache):

       載入該配置:

       監視畫面中,該服務已經被載入系統了:

現在用另一臺主機再次測試,如下圖已經可以連線入apache的測試頁了:

       ## 設定預設域為trusted

在“Options“ 選項卡中選擇” Change Default Zone“:

然後再選擇tusted:

此時發現在眾多域中,trusted變成了粗體,這表示trusted成了預設的域,如下圖:

三、命令的方式管理防火牆:

        1)防火牆設定與顯示域的相關命令:

首先保持防火牆為開啟的狀態:

[[email protected] ~]# systemctl stop firewalld.service

[[email protected] ~]# firewall-cmd  --state             ###  檢視防火牆的狀態

[[email protected] ~]# systemctl start firewalld.service

[[email protected] ~]# firewall-cmd  --get-default-zone       #### 檢視防火牆預設生效的域

[[email protected] ~]# firewall-cmd --get-active-zones   ### 檢視防火牆正在生效的域

[[email protected] ~]# firewall-cmd --get-zones    ### 顯示防火牆所有的域型別名字

[[email protected] ~]# firewall-cmd --list-all-zones   #### 列出防火牆的所有域,以及每個域的詳細火牆內容

[[email protected] ~]# firewall-cmd --set-default-zone=trusted      #### 設定火牆的預設生效域為trusted

[[email protected] ~]# firewall-cmd --get-services     ####  得到防火牆可以控制的所有服務

       2)將ip為172.25.254.2的主機加入防火牆的信賴域,實現能訪問apache服務:

在設定之前先測試能否連通apache服務,發現不能連通:

[[email protected] ~]# firewall-cmd --list-all --zone=trusted     ### 顯示trusted域的防火牆列表

[[email protected] ~]# firewall-cmd --add-source=172.25.254.2 --zone=trusted   ## 允許ip為172.25.254.2的源主機訪問本主機的網路

在172.25.254.2這臺主機測試能否連通本機的apache服務:

[[email protected] ~]# firewall-cmd  --remove-source=172.25.254.2 --zone=trusted  ### 移除ip為172.25.254.2的源主機

       ## 3) 關於介面的火牆設定:

[[email protected] ~]# firewall-cmd --list-all --zone=public     ####   檢視public域的火牆列表,發現允許介面eth0訪問主機

[[email protected] ~]# firewall-cmd --remove-interface=eth0 --zone=public    ##### 移除public域中的介面eth0

[[email protected] ~]# firewall-cmd --add-interface=eth0 --zone=publicsuccess  ###  新增eth0介面到火牆的public域中

[[email protected] ~]# firewall-cmd --change-interface=eth0 --zone=trusted   ### 將上一步public域中的介面eth0改變到trusted域中

[[email protected] ~]# firewall-cmd  --list-all --zone=public

      ## 4)關於服務的火牆設定:

[[email protected] ~]#  firewall-cmd  --permanent  --add-service=http  ### 開放該主機的httpd服務

[[email protected] ~]# firewall-cmd --permanent  --remove-service=http  ### 取消開放httpd服務

[[email protected] ~]# firewall-cmd --reload   ### 載入上條配置

下面我們通過幾個系統中的檔案來加深對服務的理解:

[[email protected] zones]# cd  /usr/lib/firewalld/

上圖中有兩個目錄,一個是services,另外一個是zones。

services目錄裡有許多檔案,這些檔案便是防火牆能夠控制的所有服務的檔案,每個檔案記錄一個服務,如下:

[[email protected] firewalld]# cd services/

我們挑選ssh這個服務對應的檔案檢視其內容是什麼:

[[email protected] services]# vim ssh.xml

由上圖可知檔案記錄了該服務的描述、服務名以及埠號。

再看看zones目錄裡面的內容:

[[email protected] firewalld]# cd zones/

由上圖可知,該目錄記錄了我們系統所有型別的域檔案。

[[email protected] zones]# vim public.xml

我們設定將http服務永久加入public域時,其時就是在上圖的檔案中加入對應配置。

       5)關於埠的火牆配置:

[[email protected] zones]# firewall-cmd --add-port=8080/tcp --permanent   ### 開放本機的tcp協議的8080埠

[[email protected] zones]# firewall-cmd --reload

[[email protected] zones]# firewall-cmd --permanent --remove-port=8080/tcp   ### 取消上面配置的開放tcp協議的8080埠

[[email protected] zones]# firewall-cmd --reload

四、高階火牆設定:

       火牆的高階配置,主要是針對三表五鏈的設定; 我們依舊使用firewall-cmd命令工具,但要加上 --direct 選項,即直接埠模式,該模式適用於程式或者服務,以便在執行時間內新增特定的防火牆規則,直接埠新增的規則優先順序高,所以優先使用。

       防火牆的三表五鏈如下圖:

  INPUT OUTPUT FORWARD POSTROUTING PREROUTING
FILTER            *         *         *    
NET             *          *              *              *
MANGEL            *          *          *             *               *

1)防火牆FILTER表的配置:

這裡我們以設定一條input鏈為例,讓172.25.254.2這臺主機能夠連通本機的apache服務:

在配置之前172.25.254.2這臺主機不能在瀏覽器中訪問本機的apache服務:

 

[[email protected] zones]# firewall-cmd   --direct   --add-rule ipv4 filter  INPUT 1 -s 172.25.254.2 -p tcp --dport 80 -j ACCEPT     ####在直接埠模式下,新增ipv4的filter表的input鏈,鏈的內容是:當來自172.25.254.2的主機來訪問本機的埠為80的tcp協議時,接受它。

[[email protected] zones]# firewall-cmd --direct --get-all-rules    ###顯示設定的高階路由規則

現在再在172.25.254.2這臺主機的瀏覽器中訪問本機的apache服務:

[[email protected] zones]# firewall-cmd --direct --remove-rule ipv4 filter  INPUT 1 -s 172.25.254.2 -p tcp --dport 80 -j ACCEPT         #####  刪除上方新增的INPUT鏈   

   2)防火牆NET表的配置:

##例1:你若訪問我,我把你的訪問轉到了另外一臺主機,從進來的時候進行net轉換

[[email protected] zones]# firewall-cmd --add-forward-port=proto=tcp:port=22:toport=22:toaddr=172.25.254.213

[[email protected] zones]# firewall-cmd --add-masquerade     #### 開啟核心的偽裝功能

測試:

使用ip為 172.25.254.2這臺主機使用ssh遠端連線新增火牆策略的ip為172.25.254.113這臺主機:

當連線進入時,發現連線的不是172.25.254.113這臺主機,而是172.25.254.213這臺主機

而由於偽裝功能的開啟,在172.25.254.213這臺主機上顯示的是 172.25.254.113這臺主機正在通過遠端登陸訪問自己:

[[email protected] zones]# firewall-cmd --remove-forward-port=proto=tcp:port=22:toport=22:toaddr=172.25.254 .213    ####  移除上面設定的火牆規則

 

 

## 例2:當1.1.1.1主機訪問另172.25.254.2主機時,明顯他們不在同一個網段,172.25.254.113主機將1.1.1.1轉換為另外一個網段的ip你就可以訪問了; 在172.25.254.113主機上轉換的時候,是在出埠進行轉換的。

         下面為172.25.254.113主機的相關設定:

[[email protected] ~]# vim /etc/sysctl.conf

[[email protected] ~]# sysctl -a |grep ip_forward     ###   查看出介面的轉發功能是否開啟,1表示開啟,0表示不開啟

172.25.254.113主機由兩塊網絡卡,下圖為這兩塊網絡卡的資訊:

下圖為1.1.1.1主機的網路資訊:

現在用1.1.1.1主機通過ssh遠端連線172.25.254.2主機,如下圖:

連線成功後,在172.25.254.2主機上用 w -i 命令檢視登陸當前主機的是誰,發現是172.25.254.113這臺主機: