1. 程式人生 > >Firewalld中的whitelist並不是規則白名單

Firewalld中的whitelist並不是規則白名單

運行 名單 rman 默認 ref firewalld 屬性設置 最重要的 我們

原文地址:http://www.excelib.com/article/292/show

whitelist的含義

白名單跟防火墻結合在一起大家很容易將其理解為規則白名單,不過在Firewalld中whitelist卻並不是規則白名單的含義。

對於一個防火墻來說,最重要的當然就是規則了,Firewalld當然也不例外,學生前面也給大家介紹了很多規則相關的配置方法,不過大家有沒有意識到一個潛在的問題呢?當我們服務器中的某個服務(比如http)出現漏洞時,攻擊者如果可以執行命令那麽是不是就可以使用firewall-cmd工具來修改我們防火墻的規則呢?如果真是這樣那麽後果可想而知,攻擊者不但可以開放我們原來沒有開放的端口,甚至還可以搞惡作劇——將我們正常服務的端口給關閉!

Firewalld中whitelist就是來解決這個問題的,他可以限制誰能對防火墻規則進行修改,也就是說這裏的whitelist其實使用用來配置可以修改防火墻規則的主體的白名單。

使用條件

在默認配置下whitelist是不啟用的,我們需要將Lockdown設置為yes才可以啟用,這些內容前面學生已經給大家介紹過了,另外,firewall-cmd工具也可以直接對其進行設置和查詢,命令如下

1 firewall-cmd --lockdown-on
2 firewall-cmd --lockdown-off
3 firewall-cmd --query-lockdown

第一個是開啟Lockdown,也就是讓whitelist起作用,第二個是關閉Lockdown,第三個是查詢當前Lockdown的狀態。

這三個命令非常容易理解,不過他們跟學生前面給大家介紹過的其他命令有一些使用上的區別,我們看到這三個命令都沒有--permanent選項,不過這並不表示他們不可以持久化保存,其實恰恰相反,在我們對Lockdown進行修改時配置文件和運行時環境會同時進行修改,也就是說當我們使用firewall-cmd命令對Lockdown的狀態進行修改後首先可以立即生效、其次在重啟後也不會失效。

另外,在使用--lockdown-on的時候大家要特別小心,要先看自己在不在whitelist範圍內,如果不在,啟用之後我們自己也不可以對防火墻進行操作了!

配置文件

whitelist的配置文件是位於/etc/firewalld目錄下的lockdown-whitelist.xml文件,其結構如下

1 <whitelist>
2     [<selinux context="selinuxcontext"/>]
3     [<command name="commandline[*]"/>]
4     [<user {name="username"|id="userid"}/>]
5 </whitelist>

我們看到這裏面有三個可選的配置節點:selinux、command和user,每個配置節點都可以配置多個,配置進來的就表示可以修改防火墻規則,下面學生分別來給大家介紹一下這三個配置項。

selinux

一說到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節點可以針對具體的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

這裏的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或者更低。

Firewalld中的whitelist並不是規則白名單