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] ~]# 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這臺主機: