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

时间: 2024-10-20 16:33:04

Firewalld中的whitelist并不是规则白名单的相关文章

apache rewrite规则白名单示例

如何在apache中使用rewrite规则配置白名单,这里分享一个方法. 今天弄了半天apache 的rewrite 规则,还是没有配置出符合的规则.经同事指点,成功. 需求:六个文件的入口,其他都重定向到index自己的思路:正则找出不是六个文件的URL的模式,进行过滤.对比同事的结果,自己思路的问题:1. 想找出所有不符合规则的,越想越多,无法下手.---------------- 思路错误,应该 制定白名单,2. 概念错误, 弄错 REQUEST_URI 和 REQUEST_STRING

通过网站不能跳转登录的案例来看IP白名单的设置

最近在公司遇到一个问题,进入公司的游戏产品官网注册一个普通用户账号,登录官网 然后点击进入该游戏产品的论坛,不能自动跳转到论坛实现自动登录 于是自己去官网注册了一个普通用户账号,登录官网,测试看看,发现确实不能自动跳转到论坛 登录论坛的服务器数据库,查看到数据库里已经有刚刚注册的用户数据了,但密码没有同步过来 经过和开发的一起分析和故障排查,发现一个报错程序 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communicatio

iOS9 URL Schme 白名单

原文地址: https://github.com/ChenYilong/iOS9AdaptationTips WWDC 2015 Session 703: "Privacy and Your App( 时间在30:18左右)关于 URL scheme 的介绍,指出: 也就是说:在iOS9中,如果使用 canOpenURL: 方法,该方法所涉及到的 URL scheme 必须在"Info.plist"中将它们列为白名单,否则不能使用.key叫做LSApplicationQuer

【算法】二分查找与暴力查找(白名单过滤)

二分查找与暴力查找. 如果可能,我们的测试用例都会通过模拟实际情况来展示当前算法的必要性.这里该过程被称为白名单过滤.具体来说,可以想象一家信用卡公司,它需要检查客户的交易账号是否有效.为此,它需要: 将客户的账号保存在一个文件中,我们称它为白名单: 从标准输入中得到每笔交易的账号: 使用这个测试用例在标准输出中打印所有与任何客户无关的账号,公司很可能拒绝此类交易. 在一家有上百万客户的大公司中,需要处理数百万甚至更多的交易都是很正常的.为了模拟这种情况,我们提供了文件largeW.txt(10

Linux服务器防火墙白名单设置

公司最近对网络安全抓的比较严,要求防火墙必须开启,但是项目的服务器有五六台,三台用于负载均衡,服务器之间必须要进行各种连接,那就只能通过添加白名单的方式. 登上服务器,编辑防火墙配置文件 vi /etc/sysconfig/iptables 把需要访问本台服务器的其他服务器ip地址,以及本台服务器需要开放的端口号添加上 如下: # Firewall configuration written by system-config-firewall # Manual customization of

详解 Python 中的下划线命名规则

在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单下划线(_)会在以下3种场景中使用: 1.1 在解释器中: 在这种情况下,“_”代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准CPython解释器采用,然后其他类型的解释器也先后采用. >>> _ Traceback (most recent call last): Fil

在MySQL命令行中使用SQL语句的规则

规则1: SQL语句必须以分号(;)或者(\G)结束 分号(;)是SQL语句的结束标志.如果遗忘了分号,而直接按下回车键时,在MySQL客户端上将显示如下 mySQL> SELECT * FROM customer -> 因为没有以分号结束,客户端认为SQL语句并没有结束,显示[->]等待用户继续输入命令,直到以分号结束.有些数据库中,支持省略最后的分号的情况. 规则2: 保留关键字不区分大小写 保留关键字是SQL中事先定义好的关键字,如上面检索语句中的SELECT.FROM等就属于保留

机器学习中的正则化和范数规则化

机器学习中的正则化和范数规则化 正则化和范数规则化 文章安排:文章先介绍了正则化的定义,然后介绍其在机器学习中的规则化应用L0.L1.L2规则化范数和核范数规则化,最后介绍规则化项参数的选择问题. 正则化(regularization)来源于线性代数理论中的不适定问题,求解不适定问题的普遍方法是:用一族与原不适定问题相“邻近”的适定问题的解去逼近原问题的解,这种方法称为正则化方法.如何建立有效的正则化方法是反问题领域中不适定问题研究的重要内容.通常的正则化方法有基于变分原理的Tikhonov正则

iOS9中如何适配http,Bitcode,设置sina,qq,weChat配置Scheme白名单

iOS9.0SDK在编译的时候,默认所有从NSURLConnection.CFURL和NSURLSession发出的http请求,都改为https请求.由于AFNetworking版本底层是用了NSURLConnection,所以使用AFNetworking的app都将受到影响.对于这个问题的解决办法有三种,一:让服务器更新,使用https,以解析相关的数据. 二:在info.plist做些配置,让其暂时倒回到不安全的网络传输协议(http协议).下面详细来说下这两种方案. 方案一:让服务器更新