OpenStack 网络服务安全

本节讨论 OpenStack Networking 配置的最佳实践,这些实践适用于您的 OpenStack 部署中的项目网络安全。

项目网络服务工作流程

OpenStack Networking 为用户提供网络资源和配置的自助服务。重要的是,云架构师和运维人员要评估他们的设计用例,以便为用户提供创建、更新和销毁可用网络资源的能力。

网络资源策略引擎

OpenStack Networking 中的策略引擎及其配置文件 policy.json,提供了一种对项目网络方法和对象上用户进行更细粒度授权的方法。OpenStack Networking 策略定义会影响网络可用性、网络安全和整体 OpenStack 安全。云架构师和运维人员应仔细评估其策略,以控制用户和项目对网络资源管理的访问权限。有关 OpenStack Networking 策略定义的更详细说明,请参阅 OpenStack 管理员指南中的 身份验证和授权部分

注意

重要的是要审查默认的网络资源策略,因为可以修改此策略以适应您的安全态势。

如果您的 OpenStack 部署提供多个外部访问点进入不同的安全域,那么限制项目将多个 vNIC 附加到多个外部访问点非常重要——这将桥接这些安全域,并可能导致意想不到的安全漏洞。可以通过利用 OpenStack Compute 提供的宿主聚合功能,或者通过将项目虚拟机拆分为具有不同虚拟网络配置的多个项目项目来缓解此风险。

安全组

OpenStack Networking 服务使用比 OpenStack Compute 中内置的安全组功能更灵活、更强大的机制提供安全组功能。因此,在使用 OpenStack Networking 时,nova.conf 应该始终禁用内置的安全组,并将所有安全组调用代理到 OpenStack Networking API。否则,将导致两个服务同时应用冲突的安全策略。要将安全组代理到 OpenStack Networking,请使用以下配置值

  • firewall_driver 必须设置为 nova.virt.firewall.NoopFirewallDriver,以便 nova-compute 不自行执行基于 iptables 的过滤。

  • security_group_api 必须设置为 neutron,以便将所有安全组请求代理到 OpenStack Networking 服务。

安全组是安全组规则的容器。安全组及其规则允许管理员和项目指定允许通过虚拟接口端口的流量类型和方向(入站/出站)。在 OpenStack Networking 中创建虚拟接口端口时,它将与安全组关联。有关端口安全组的默认行为的更多详细信息,请参阅 Networking Security Group Behavior 文档。可以向默认安全组添加规则,以便在每个部署的基础上更改行为。

当使用 OpenStack Compute API 修改安全组时,更新后的安全组将应用于实例上的所有虚拟接口端口。这是因为 OpenStack Compute 安全组 API 是基于实例的,而不是像 OpenStack Networking 中那样基于端口的。

配额

配额提供了一种限制可用给项目的网络资源数量的能力。您可以为所有项目强制执行默认配额。/etc/neutron/neutron.conf 包含这些配额选项

[QUOTAS]
# resource name(s) that are supported in quota features
quota_items = network,subnet,port

# default number of resource allowed per tenant, minus for unlimited
#default_quota = -1

# number of networks allowed per tenant, and minus means unlimited
quota_network = 10

# number of subnets allowed per tenant, and minus means unlimited
quota_subnet = 10

# number of ports allowed per tenant, and minus means unlimited
quota_port = 50

# number of security groups allowed per tenant, and minus means unlimited
quota_security_group = 10

# number of security group rules allowed per tenant, and minus means unlimited
quota_security_group_rule = 100

# default driver to use for quota checks
quota_driver = neutron.quota.ConfDriver

OpenStack Networking 还支持通过配额扩展 API 进行每个项目的配额限制。要启用每个项目的配额,必须在 neutron.conf 中设置 quota_driver 选项。

quota_driver = neutron.db.quota.driver.DbQuotaDriver

缓解 ARP 欺骗

在使用扁平网络时,不能假定共享同一二层网络(或广播域)的项目彼此完全隔离。这些项目可能容易受到 ARP 欺骗,从而冒着中间人攻击的风险。

如果使用的 Open vSwitch 版本支持 ARP 字段匹配,则可以通过为 Open vSwitch 代理启用 prevent_arp_spoofing 选项来帮助缓解此风险。此选项可防止实例执行欺骗攻击;它不能保护它们免受欺骗攻击。请注意,此设置预计将在 Ocata 中删除,行为将永久激活。

例如,在 /etc/neutron/plugins/ml2/openvswitch_agent.ini

prevent_arp_spoofing = True

其他插件(如 Open vSwitch)也可能包含类似的缓解措施;建议您在适当的情况下启用此功能。

注意

即使启用了 prevent_arp_spoofing,扁平网络也不能提供完全的项目隔离级别,因为所有项目流量仍然发送到相同的 VLAN。