zoukankan      html  css  js  c++  java
  • Firewalld中的whitelist并不是规则白名单

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

  • 相关阅读:
    Servlet程序开发-- 过滤器
    English--Computer System
    Servlet程序开发--实例操作:MVC设计模式应用
    Servlet程序开发--WEB开发模式(Mode I, Mode II)
    在服务器上搭建git仓库
    git 搭建本地仓库
    smartcrop.js 内容感知图像裁剪
    js函数 eql,equal,equalp
    nodejs XML和json互相转换
    js 创建XML
  • 原文地址:https://www.cnblogs.com/bldly1989/p/7215802.html
Copyright © 2011-2022 走看看