OSSN/OSSN-0018
Nova 网络配置允许访客虚拟机连接到宿主机服务
总结
在使用 Nova 网络管理计算实例的网络时,实例能够访问在宿主机系统上运行的网络服务。这对于操作员来说可能是一个安全问题。
受影响的服务 / 软件
Nova, Folsom, Grizzly, Havana, Icehouse
讨论
使用 Nova 网络而不是 Neutron 进行网络配置的 OpenStack 部署会导致运行实例的宿主机在虚拟网络上可访问。具体来说,启动的实例可以检查其网关地址并尝试连接到它。任何监听由 OpenStack 创建的接口且不应用任何额外过滤的宿主机服务都会收到此类流量。
这对于 OpenStack 服务用户不是可信方,或者不应允许访问宿主机底层服务的部署来说是一个安全问题。
以默认配置的 devstack 为例,在其内部启动的实例将看到以下路由表
$ ip r s default via 172.16.1.1 dev eth0 172.16.1.0/24 dev eth0 src 172.16.1.2
然后,实例可以使用网关地址 (172.16.1.1) 连接到宿主机系统上的 sshd 服务(如果正在运行并且监听所有接口)。宿主机系统将看到来自 `br100` 接口的连接。
建议的操作
可以在各个级别阻止此类连接(libvirt 过滤器、特定宿主机的 iptables 条目、ebtables、网络服务配置)。推荐的方法是阻止关键服务绑定到 Nova 控制的接口。
以 sshd 服务为例,大多数系统上的默认配置是绑定到所有接口和所有本地地址(sshd_config 中的 "ListenAddress :22")。为了仅在特定接口上配置它,请使用 "ListenAddress a.b.c.d:22",其中 a.b.c.d 是分配给所选接口的地址。大多数其他服务都可以找到类似的设置。
可以通过运行命令 'netstat -ltu' 来获取监听所有接口的服务列表,其中“本地地址”字段中的 '*:port' 表示该服务可能会接受来自本地 Nova 实例的连接。
如果选择过滤流量,则必须小心允许来自正在运行的实例到 Nova 控制的服务(DHCP 和 DNS 提供程序)的流量。
联系方式 / 参考文献
- 作者:Stanislaw Pitucha, HP
- 此 OSSN:https://wiki.openstack.org/wiki/OSSN/OSSN-0018
- 原始 LaunchPad Bug:https://bugs.launchpad.net/nova/+bug/1316271
- OpenStack Security ML:openstack-security@lists.openstack.org
- OpenStack Security Group:https://launchpad.net/~openstack-ossg