防火牆守護 firewalld 服務引入了一個信任級別的概念來管理與之相關聯的連接與接口。 動態防火牆後臺程序firewalld提供了一個動態管理的防火牆,用以支持網絡“zone”,以分配對一個網路及其相關連接和界面的支持 它支持 ipv4 與 ipv6,並支持網橋,採用 firewall-cmd (command) 或 firewall-config (gui) 來動態的管理 kernel netfilter 的臨時或永久的接口規則,並實時生效而無需重啓服務。 在RHEL7裏有幾種防火牆共存:firewalld、iptables、ebtables,默認使用firewalld來管理netfilter子系統,不過底層調用的命令仍然是iptables等。 netfilter纔是防火牆,firewalld和iptables是兩種不同的防火牆管理工具,其底層都是iptables命令
|
|||||||||||||
firewalld跟iptables比起來至少有兩大好處: 1、firewalld可以動態修改單條規則,而不需要像iptables那樣,在修改了規則後必須得全部刷新纔可以生效; |
|||||||||||||
ZONE |
數據包要進入到內核必須要通過這些zone中的一個,而不同的zone裏定義的規則不一樣(即信任度不一樣,過濾的強度也不一樣)。可以根據網卡所連接的網絡的安全性來判斷,這張網卡的流量到底使用哪個zone,比如上圖來自eth0的流量全部使用zone1的過濾規則,eth1的流量使用zone3。一張網卡同時只能綁定到一個zone。大家就可以把這些zone想象成進入火車站(地鐵)的安檢,不同的入口檢測的嚴格度不一樣 |
||||||||||||
阻塞區域(block):任何傳入的網絡數據包都將被阻止。 |
|||||||||||||
配置模式 |
firewalld的配置文件以xml格式爲主(主配置文件firewalld.conf例外),他們有兩個存儲位置 |
||||||||||||
當需要一個文件時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的主配置文件,是鍵值對的格式,不過非常簡單,只有五個配置項
|
|||||||||||
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:
tusted:
我們要特別注意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 | ||||||||||||