一、oVirt平台虚拟机未授权访问的风险背景
很多企业或者团队都会用oVirt来管理一堆KVM/QEMU虚拟机,毕竟这个开源平台能集中管机器、存资源、调网络,省不少事。但很多人用的时候只盯着功能好不好用,忘了安全这回事,结果就容易出未授权访问的问题。比如有人能随便登别人的虚拟机,甚至把别人的机器搞坏、偷数据,后果可大可小。 举个最常见的例子:之前有个做电商的团队,用oVirt管着几十台业务虚拟机,其中一台支付相关的机器没做加固,结果有人通过漏洞拿到了oVirt的普通用户权限,又因为虚拟机的VNC端口没限制,直接连上去偷了用户的支付数据,最后赔了不少钱还丢了口碑。所以说,给oVirt里的KVM/QEMU虚拟机做安全加固,堵未授权访问的漏洞,真的很有必要。
二、oVirt平台未授权访问的核心风险点
要做加固,得先搞清楚风险到底从哪来。我把最常见的几个风险点列出来,大家可以对照自己的平台看看。
2.1 oVirt平台本身的权限漏洞
oVirt是分角色的,比如有超级管理员、普通管理员、用户,不同角色能做的事不一样。但很多人配置的时候要么给的权限太大,要么没限制角色的操作范围。比如本来只让某个用户看自己的虚拟机,结果不小心给了他能改所有虚拟机配置的权限,那他就能随便连别人的机器。 还有就是oVirt的Web管理界面、API接口的权限没做好。比如API接口如果没做认证,或者认证规则太松,别人就能直接调用接口拿到虚拟机的信息,甚至改配置。
2.2 虚拟机的远程访问端口未限制
KVM/QEMU虚拟机常用的远程访问方式有VNC、SPICE,这些方式都会开端口。很多人默认配置的时候,这些端口是对外开放的,或者只做了很简单的限制。比如VNC端口默认是从5900开始的,要是没限制只能从特定IP访问,那任何人只要知道端口号就能连上去,甚至很多VNC默认没密码,或者密码是弱口令,一猜就中。
2.3 虚拟机内部的访问控制缺失
就算外部连不进来,虚拟机内部也可能有问题。比如有的虚拟机开了SSH端口,用的是弱密码,或者没限制SSH的登录IP;还有的虚拟机装了一些服务,比如数据库、中间件,没做访问控制,别人拿到权限后就能直接访问这些服务。
三、oVirt平台虚拟机安全加固的具体方案
针对上面的风险点,我整理了一套具体的加固方案,每一步都有实际的操作示例,大家可以跟着做。
3.1 加固oVirt平台本身的权限控制
首先得把oVirt自己的权限管好,不让不该碰的人碰不该碰的东西。
3.1.1 精细化配置用户角色
oVirt默认有几个角色,但很多时候默认角色的权限太大,我们可以自定义角色,只给用户需要的最小权限。比如有个开发,只需要看自己的测试虚拟机,不需要改配置,那我们就给他创建一个只允许查看虚拟机的角色。 操作示例(技术栈:oVirt管理平台Web界面操作):
- 登录oVirt的Web管理界面,用超级管理员账号进去。
- 左边菜单找到“系统”,然后选“角色”,点击“新建角色”。
- 给角色起个名字,比如“测试用户只读角色”,然后在权限列表里只勾选“虚拟机”下面的“查看”权限,其他权限都不选。
- 保存这个角色,然后给对应的开发用户分配这个角色,并且指定只能访问自己的测试虚拟机所在的资源池。 这样一来,这个开发用户就只能看自己的虚拟机,不能改也不能碰别人的机器。
3.1.2 限制oVirt API接口的访问
oVirt的API接口是用来和其他系统交互的,比如自动化部署、监控,所以得把API的访问权限管好。
操作示例(技术栈:oVirt API 访问控制):
首先,oVirt的API默认是需要认证的,认证方式有两种:一种是用用户名密码,一种是用CA证书。我们可以限制只有特定的IP能访问API,并且要求必须用CA证书认证,不能用用户名密码(因为用户名密码容易泄露)。
具体配置是修改oVirt Engine的配置文件,找到/etc/ovirt-engine/engine.conf.d/99-custom.conf这个文件,添加下面的配置:
# 限制API访问的IP段,这里只允许192.168.1.0/24这个网段访问API
ENGINE_API_ALLOWED_IP=192.168.1.0/24
# 禁用API的用户名密码认证,只允许CA证书认证
ENGINE_API_AUTH_METHOD=certificate
改完之后重启oVirt Engine服务:
systemctl restart ovirt-engine
这样一来,只有指定网段的机器,并且用合法的CA证书,才能访问oVirt的API,其他人就算知道API地址也连不上。
3.2 加固虚拟机的远程访问端口
虚拟机的VNC、SPICE端口是未授权访问的重灾区,必须严格限制。
3.2.1 限制VNC/SPICE端口的访问IP
oVirt里的虚拟机可以配置防火墙规则,限制只有特定的IP能访问它的VNC/SPICE端口。 操作示例(技术栈:oVirt虚拟机防火墙配置):
- 登录oVirt Web界面,找到要加固的虚拟机,进入它的“网络”配置页面。
- 找到“防火墙”选项,点击“新建规则”。
- 配置规则:
- 方向:入站
- 协议:TCP
- 端口:5900-5910(VNC的常用端口范围,根据实际情况调整)
- 来源:192.168.1.100/32(只允许这个IP访问VNC端口,这里的IP是管理员的办公IP)
- 动作:允许
- 再新建一条规则,方向是入站,端口是5900-5910,来源是任意,动作是拒绝。 这样配置之后,只有指定的管理员IP能访问这个虚拟机的VNC端口,其他IP连不上。
3.2.2 禁用不必要的远程访问方式
如果虚拟机不需要用VNC或者SPICE,就直接关掉,减少暴露面。比如有的虚拟机是纯后台运行的,不需要远程桌面,那就在oVirt的虚拟机配置里把VNC和SPICE都禁用掉。 操作示例(技术栈:oVirt虚拟机配置):
- 找到要配置的虚拟机,进入“控制台”配置页面。
- 把“VNC”和“SPICE”的勾选都去掉,保存配置。
- 重启虚拟机让配置生效。 这样一来,这个虚拟机就没有远程桌面端口了,别人连不上。
3.3 加固虚拟机内部的访问控制
就算外部端口限制好了,虚拟机内部也得做好安全。
3.3.1 加固SSH访问
很多虚拟机都会开SSH端口用来登录,必须限制SSH的访问。
操作示例(技术栈:Linux虚拟机SSH配置):
首先,修改SSH的配置文件/etc/ssh/sshd_config,做下面的配置:
# 禁止root账号直接登录,只能用普通账号登录,再用sudo提权
PermitRootLogin no
# 只允许特定的用户登录SSH,这里只允许admin用户登录
AllowUsers admin
# 限制SSH的登录IP,只允许192.168.1.0/24网段登录
# 可以通过在/etc/hosts.allow里配置,添加:
sshd:192.168.1.0/24
# 然后在/etc/hosts.deny里添加:
sshd:ALL
改完之后重启SSH服务:
systemctl restart sshd
这样一来,只有指定网段的admin用户能登录这个虚拟机的SSH,其他人登不上。
3.3.2 限制内部服务的访问
如果虚拟机里装了数据库、中间件等服务,必须限制这些服务的访问。比如MySQL数据库,默认是允许所有IP访问的,我们可以改成只允许本地或者特定IP访问。
操作示例(技术栈:MySQL配置):
修改MySQL的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,添加下面的配置:
# 只允许本地访问MySQL
bind-address = 127.0.0.1
然后登录MySQL,给用户设置访问权限,比如只允许本地的test用户访问数据库:
-- 登录MySQL
mysql -u root -p
-- 给test用户设置只允许本地访问
GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost' IDENTIFIED BY '你的密码';
-- 刷新权限
FLUSH PRIVILEGES;
这样一来,MySQL就只能本地访问,外部连不上。
四、加固方案的应用场景、优缺点及注意事项
4.1 应用场景
这套加固方案适合所有用oVirt管理KVM/QEMU虚拟机的场景,不管是企业内部的开发测试环境,还是生产环境。比如:
- 企业的生产环境,有对外提供服务的虚拟机,必须做加固防止未授权访问;
- 开发测试环境,有多个开发用户,需要限制不同用户的权限,防止互相干扰;
- 有敏感数据的虚拟机,比如存储用户数据、财务数据的机器,必须严格控制访问。
4.2 技术优缺点
优点:
- 覆盖了从oVirt平台到虚拟机内部的全链路安全,能有效规避未授权访问的风险;
- 操作都是基于oVirt和虚拟机本身的功能,不需要额外买第三方工具,成本低;
- 配置灵活,可以根据实际需求调整权限和规则,适合不同规模的团队。 缺点:
- 精细化配置的工作量比较大,尤其是用户多、虚拟机多的场景,需要逐个配置;
- 权限配置太严可能会影响正常使用,比如管理员的办公IP变了,就需要修改防火墙规则,不然连不上;
- 需要定期维护,比如用户离职了要及时删除账号,IP变了要及时修改规则,不然会出现安全漏洞或者使用问题。
4.3 注意事项
- 配置规则的时候一定要仔细,不要把规则写错了,比如把允许的IP写成拒绝的,会导致自己连不上虚拟机;
- 定期备份oVirt的配置和虚拟机的数据,万一配置错了可以恢复;
- 定期检查安全配置,比如每个月检查一次用户权限、防火墙规则、SSH配置,确保没有漏洞;
- 尽量不要用弱密码,不管是oVirt的账号密码还是虚拟机内部的账号密码,都要用复杂的密码,最好定期更换。
五、文章总结
oVirt管理平台里的KVM/QEMU虚拟机的未授权访问风险,主要来自平台本身的权限漏洞、虚拟机远程端口未限制、虚拟机内部访问控制缺失这几个方面。要规避这个风险,需要从三个层面做加固:首先是加固oVirt平台本身的权限控制,精细化配置用户角色和API访问;然后是加固虚拟机的远程访问端口,限制端口的访问IP,禁用不必要的访问方式;最后是加固虚拟机内部的访问控制,限制SSH和内部服务的访问。 这套方案虽然有一些工作量,也需要定期维护,但能有效保护虚拟机的安全,防止数据泄露、机器被篡改等问题。对于用oVirt管理虚拟机的团队来说,花点时间做加固是非常有必要的,毕竟安全无小事,一旦出了问题,损失可能比花在加固上的时间和精力大得多。
评论
围绕“oVirt管理平台中KVM/QEMU虚拟机的安全加固,规避未授权访问的风险”参与讨论