原文地址:http://www.excelib.com/article/292/showpython
白名單跟防火牆結合在一塊兒你們很容易將其理解爲規則白名單,不過在Firewalld中whitelist卻並非規則白名單的含義。linux
對於一個防火牆來講,最重要的固然就是規則了,Firewalld固然也不例外,學生前面也給你們介紹了不少規則相關的配置方法,不過你們有沒有意識到一個潛在的問題呢?當咱們服務器中的某個服務(好比http)出現漏洞時,攻擊者若是能夠執行命令那麼是否是就可使用firewall-cmd工具來修改咱們防火牆的規則呢?若是真是這樣那麼後果可想而知,攻擊者不但能夠開放咱們原來沒有開放的端口,甚至還能夠搞惡做劇——將咱們正常服務的端口給關閉!服務器
Firewalld中whitelist就是來解決這個問題的,他能夠限制誰能對防火牆規則進行修改,也就是說這裏的whitelist其實使用用來配置能夠修改防火牆規則的主體的白名單。工具
在默認配置下whitelist是不啓用的,咱們須要將Lockdown設置爲yes才能夠啓用,這些內容前面學生已經給你們介紹過了,另外,firewall-cmd工具也能夠直接對其進行設置和查詢,命令以下ui
1 firewall-cmd --lockdown-on 2 firewall-cmd --lockdown-off 3 firewall-cmd --query-lockdown
第一個是開啓Lockdown,也就是讓whitelist起做用,第二個是關閉Lockdown,第三個是查詢當前Lockdown的狀態。spa
這三個命令很是容易理解,不過他們跟學生前面給你們介紹過的其餘命令有一些使用上的區別,咱們看到這三個命令都沒有--permanent選項,不過這並不表示他們不能夠持久化保存,其實偏偏相反,在咱們對Lockdown進行修改時配置文件和運行時環境會同時進行修改,也就是說當咱們使用firewall-cmd命令對Lockdown的狀態進行修改後首先能夠當即生效、其次在重啓後也不會失效。excel
另外,在使用--lockdown-on的時候你們要特別當心,要先看本身在不在whitelist範圍內,若是不在,啓用以後咱們本身也不能夠對防火牆進行操做了!code
whitelist的配置文件是位於/etc/firewalld目錄下的lockdown-whitelist.xml文件,其結構以下xml
1 <whitelist> 2 [<selinux context="selinuxcontext"/>] 3 [<command name="commandline[*]"/>] 4 [<user {name="username"|id="userid"}/>] 5 </whitelist>
咱們看到這裏面有三個可選的配置節點:selinux、command和user,每一個配置節點均可以配置多個,配置進來的就表示能夠修改防火牆規則,下面學生分別來給你們介紹一下這三個配置項。blog
一說到selinux可能有的人就會產生畏懼心,不過這裏用到的很是簡單,只須要將某進程的content給設置進去就好了,具體某個進程的content你們可使用「ps -e --context」命令來查找,找出來以後設置到context屬性中就能夠了。
咱們能夠直接編輯xml配置文件,另外也可使用firewall-cmd命令來操做,相關命令以下
1 firewall-cmd [--permanent] --add-lockdown-whitelist-context=context 2 firewall-cmd [--permanent] --remove-lockdown-whitelist-context=context 3 firewall-cmd [--permanent] --query-lockdown-whitelist-context=context 4 firewall-cmd [--permanent] --list-lockdown-whitelist-contexts
這四個命令也很是容易理解,他們分別表示添加、刪除、查詢一個具體的selinuxcontenxt以及羅列出全部白名單中配置了的selinuxcontenxt,使用--permanent能夠持久化保存,不使用能夠當即生效。
經過command節點能夠針對具體的command命令進行配置,配置以後此命令就能夠被通常用戶執行了。好比咱們想將以前講過的panic模式的開啓和關閉命令開發,這樣當遇到緊急狀況時通常用戶也能夠啓動panic模式,這種需求咱們使用下面的配置便可
1 <whitelist> 2 <command name="/usr/bin/python /bin/firewall-cmd --panic-on"/> 3 <command name="/usr/bin/python /bin/firewall-cmd --panic-off"/> 4 </whitelist>
另外,command還可使用通配符「*」,因此上面的配置還能夠簡化爲
1 <whitelist> 2 <command name="/usr/bin/python /bin/firewall-cmd --panic-*"/> 3 </whitelist>
固然,command也可使用firewall-cmd命令來操做,相關命令以下
1 firewall-cmd [--permanent] --add-lockdown-whitelist-command=command 2 firewall-cmd [--permanent] --remove-lockdown-whitelist-command=command 3 firewall-cmd [--permanent] --query-lockdown-whitelist-command=command 4 firewall-cmd [--permanent] --list-lockdown-whitelist-commands
命令的含義跟上面的selinux差很少,你們能夠很容易理解,學生就再也不解釋了。
這裏的user指的就是linux中的用戶,經過這項能夠對指定的用戶開放配置權限,指定用戶的方法有兩種:經過userId和經過userName均可以,在默認的lockdown-whitelist.xml配置文件中就設置了id爲0的user,也就是root用戶
1 <whitelist> 2 ... 3 <user id="0"/> 4 </whitelist>
固然,經過name屬性設置用戶名也是能夠的,很是簡單,學生這裏就不給你們舉例了。user也可使用firewall-cmd命令來操做,並且uid和name是分開操做的,因此user相關的命令一共有八個
1 firewall-cmd [--permanent] --add-lockdown-whitelist-uid=uid 2 firewall-cmd [--permanent] --remove-lockdown-whitelist-uid=uid 3 firewall-cmd [--permanent] --query-lockdown-whitelist-uid=uid 4 firewall-cmd [--permanent] --list-lockdown-whitelist-uids 5 6 firewall-cmd [--permanent] --add-lockdown-whitelist-user=user 7 firewall-cmd [--permanent] --remove-lockdown-whitelist-user=user 8 firewall-cmd [--permanent] --query-lockdown-whitelist-user=user 9 firewall-cmd [--permanent] --list-lockdown-whitelist-users
前四個是對uid進行操做,後四個是對username進行操做,具體含義你們應該很容易理解。
在使用whitelist的時候咱們要特別注意一點,那就是whitelist只是針對規則的修改(包括添加和刪除)起做用,可是不會限制查詢。若是你們是使用root配置好防火牆後通常不多修改,也沒有使用腳本動態修改等特殊需求的話能夠直接將/bin/firewall-cmd的權限設置爲750或者更低。