原文地址: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或者更低。