防火牆firewalld

防火牆守護 firewalld 服務引入了一個信任級別的概念來管理與之相關聯的連接與接口。

動態防火牆後臺程序firewalld提供了一個動態管理的防火牆,用以支持網絡“zone”,以分配對一個網路及其相關連接和界面的支持

它支持 ipv4 與 ipv6,並支持網橋,採用 firewall-cmd (command) 或 firewall-config (gui) 來動態的管理 kernel netfilter 的臨時或永久的接口規則,並實時生效而無需重啓服務。

在RHEL7裏有幾種防火牆共存:firewalld、iptables、ebtables,默認使用firewalld來管理netfilter子系統,不過底層調用的命令仍然是iptables等。

netfilter纔是防火牆,firewalld和iptables是兩種不同的防火牆管理工具,其底層都是iptables命令

firewall_stack.png

systemctl start firewalld   ##啓用
systemctl enable firewalld   ##開機自啓動
systemctl disable firewalld  ##開機禁啓動
systemctl stop firewalld     ##關閉

 

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

1、firewalld可以動態修改單條規則,而不需要像iptables那樣,在修改了規則後必須得全部刷新纔可以生效;
2、firewalld在使用上要比iptables人性化很多,即使不明白“五張表五條鏈”而且對TCP/IP協議也不理解也可以實現大部分功能

ZONE

  數據包要進入到內核必須要通過這些zone中的一個,而不同的zone裏定義的規則不一樣(即信任度不一樣,過濾的強度也不一樣)。可以根據網卡所連接的網絡的安全性來判斷,這張網卡的流量到底使用哪個zone,比如上圖來自eth0的流量全部使用zone1的過濾規則,eth1的流量使用zone3。一張網卡同時只能綁定到一個zone。大家就可以把這些zone想象成進入火車站(地鐵)的安檢,不同的入口檢測的嚴格度不一樣

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

配置模式

firewalld的配置文件以xml格式爲主(主配置文件firewalld.conf例外),他們有兩個存儲位置
1、/etc/firewalld/
2、/usr/lib/firewalld/

 

當需要一個文件時firewalld會首先到第一個目錄中去查找,如果可以找到,那麼就直接使用否則會繼續到第二個目錄中查找。
firewalld的這種配置文件結構的主要作用是這樣的:

在第二個目錄中存放的是firewalld給提供的通用配置文件,如果我們想修改配置, 那麼可以copy一份到第一個目錄中,然後再進行修改。

這麼做有兩個好處:首先我們日後可以非常清晰地看到都有哪些文件是我們自己創建或者修改過的,

                               其 次,如果想恢復firewalld給提供的默認配置,只需要將自己在第一個目錄中的配置文件刪除即可,非常簡                                    單,而不需要像其他很多軟件那樣在修改之前還 得先備份一下,而且時間長了還有可能忘掉之前備份的是什                                  麼版本

配置文件結構 文件:firewalld.conf、lockdown-whitelist.xml
目錄:zones、services、icmptypes
另外,如果使用到direct,還會有一個direct.xml文件。我們要注意,在保存默認配置的目錄“/usr/lib/firewalld/”中只有我們這裏所說的目錄,而沒有firewalld.conf、lockdown-whitelist.xml和direct.xml這三個文件,也就是說這三個文件只存在於“/etc/firewalld/”目錄中。
文件和目錄的作用 firewalld.conf

firewalld的主配置文件,是鍵值對的格式,不過非常簡單,只有五個配置項

DefaultZone 默認使用的zone,默認值爲public
MinimalMark  標記的最小值,linux內核會對每個進入的數據包都進行標記,目的當然是爲了對他們進行區分,這裏其實就是使用的標記,當然對數據包的標記還有很多作用。這裏所設置的 MinimalMark值就是標記的最小值,默認值爲100,一般情況下我們不需要對其進行修改,但是如果我們有特殊需要的時候就可以通過對其進行修改來 告訴linux所使用標記的最小值了,比如我們需要給符合某條件的數據包標記爲123,這時候爲了防止混淆就需要將MinimalMark設置爲一個大於 123的值了
CleanupOnExit 這個配置項非常容易理解,他表示當退出firewalld後是否清除防火牆規則,默認值爲yes;
Lockdown 這個選項跟D-BUS接口操作firewalld有關,firewalld可以讓別的程序通過D-BUS接口直接操作,當Lockdown設置爲yes的 時候就可以通過lockdown-whitelist.xml文件來限制都有哪些程序可以對其進行操作,而當設置爲no的時候就沒有限制了,默認值爲 no;
IPv6_rpfilter 其功能類似於rp_filter,只不過是針對ipv6版的,其作用是判斷所接受到的包是否是僞造的,檢查方式主要是通過路由表中的路由條目實現的,更多詳細的信息大家可以搜索uRPF相關的資料,這裏的默認值爲yes
lockdown-whitelist.xml 當Lockdown爲yes的時候用來限制可以通過D-BUS接口操作firewalld的程序
direct.xml 通過這個文件可以直接使用防火牆的過濾規則,這對於熟悉iptables的用戶來說會非常順手,另外也對從原來的iptables到firewalld的遷移提供了一條綠色通道
zones 保存zone配置文件
services 保存service配置文件
icmptypes 保存和icmp類型相關的配置文件
zone概念

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

上面的九個zone其實就是九種方案,而且起決定作用的其實是每個xml文件所包含的內容,而不是 文件名,所以大家不需要對每種zone(每個文件名)的含義花費過多的精力,比如trusted這個zone會信任所有的數據包,也就是說所有數據包都會 放行,但是public這個zone只會放行其中所配置的服務,其他的一律不予放行,其實我們如果將這兩個文件中的內容互換一下他們的規則就換過來了,也 就是public這個zone會放行所有的數據包,下面我們來看一下這兩個文件的內容

public:

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>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.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
</zone>

tusted:

<?xml version="1.0" encoding="utf-8"?>
<zone target="ACCEPT">
  <short>Trusted</short>
  <description>All network connections are accepted.</description>
</zone>

我們要特別注意trusted.xml中zone的target,就是因爲他設置爲了ACCEPT,所以纔會放行所有的數據包,而 public.xml中的zone沒有target屬性,這樣就會默認拒絕通過,所以public這個zone(這種方案)只有其中配置過的服務纔可以通 過

service 從端口號改爲服務名主要有兩個好處:首先是使用服務名配置的語義清晰,不容易出錯;其次在對某個服務的端口號進行修改的時候只需要修改相應的 service文件就可以了,而不需要再修改防火牆方案——zone。這其實跟DNS將ip地址和域名關聯了起來是一樣的道理。下面學生再來給大家介紹一 下service的配置文件。
service配置文件的命名規則是<服務名>.xml,比如ssh的配置文件是ssh.xml,http的配置文件是 http.xml等,他們默認保存在“/usr/lib/firewalld/services/”目錄下,常見的服務其中都可以找到,如果我們想修改某 個服務的配置,那麼可以複製一份到“/etc/firewalld/services/”目錄下然後進行修改就可以了,要想恢復默認配置直接將我們自己的 配置文件刪除就可以了
   
   
配置方法 firewalld的配置方法主要有三種:firewall-config、firewall-cmd和直接編輯xml文件,其中 firewall-config是圖形化工具,firewall-cmd是命令行工具
   
   
   
   
   
                                                                             命令
區域 顯示支持的區域列表 firewall-cmd --get-zones
設置當前區域的接口 firewall-cmd --get-zone-of-interface=enp03s
查看當前區域 firewall-cmd --get-active-zones
查看所有域

firewall-cmd --list-all-zones

查看指定域的信息 firewall-cmd --zone=public --list-all
設定默認域 firewall-cmd --set-default-zone=work
臨時修改網絡接口(enp0s3)爲內部區域(internal) firewall-cmd --zone=internal --change-interface=enp03s
永久修改網絡接口enp03s爲內部區域(internal) firewall-cmd --permanent --zone=internal --change-interface=enp03s
端口 打開端口 firewall-cmd --add-port=443/tcp

永久打開3690/TCP端口

永久打開端口需要reload一下

firewall-cmd --permanent --add-port=3690/tcp

永久打開一個端口段

永久打開端口需要reload一下

firewall-cmd --permanent --add-port=1000-2000/tcp
查看防火牆,添加的端口 firewall-cmd --list-all
刪除端口 firewall-cmd --permanent --zone=public --remove-port=8080-8081/tcp
服務 刪除服務 firewall-cmd --permanent --zone=public --remove-service=https
  顯示服務列表 firewall-cmd --get-services
  允許SSH服務通過 firewall-cmd --enable service=ssh
  禁止SSH服務通過 firewall-cmd --disable service=ssh
  打開TCP的8080端口 firewall-cmd --enable ports=8080/tcp
  顯示當前服務 firewall-cmd --list-services
  添加HTTP服務到內部區域 firewall-cmd --permanent --zone=internal --add-service=http
  臨時允許Samba服務通過600秒 firewall-cmd --enable service=samba --timeout=600
     
   
   
   
   
   
   
   
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章