第 7 章 配置安全组
安全组是一组 IP 过滤规则,它们控制网络和协议对实例的访问,如 ICMP,允许您 ping 实例,以及 SSH 允许您连接实例。安全组及其规则适用于与其关联的端口。
在 OpenShift (RHOSO)环境中的 Red Hat OpenStack Services 中,所有项目都有一个称为 default 的默认安全组,当您没有为实例指定安全组时使用。默认情况下,默认安全组允许所有传出流量,并拒绝来自同一安全组中实例以外的任何来源的所有传入流量。您可以将规则添加到 default 安全组,也可以为项目创建新的安全组。您可以在实例创建过程中将一个或多个安全组应用到实例。要将安全组应用到正在运行的实例,请将该安全组应用到与实例连接的端口。
在创建安全组时,您可以选择有状态或无状态。
默认情况下,安全组是有状态的,在大多数情况下,有状态安全组可以更好地控制管理开销。
无状态安全组可以提供显著的性能优势,因为它会绕过底层防火墙中的连接跟踪。但是无状态安全组需要比有状态安全组更多的安全组规则。在某些情况下,无状态安全组还会提供较少的粒度。
- 无状态安全组优点
- 无状态安全组可能会比有状态安全组更快
- 无状态安全组是将 OpenFlow 操作卸载到硬件的应用中唯一可行的安全组选项。
- 无状态安全组的缺陷
- 无状态安全组规则不会自动允许返回流量。例如,如果您创建一个规则来允许来自无状态安全组中的端口的传出 TCP 流量,您还必须创建一个允许传入回复的规则。有状态安全组会自动允许传入的回复。
- 对这些传入回复的控制可能并不准确,因为有状态安全组提供的控制。
通常,使用默认的有状态安全组类型,除非应用高度敏感,或者使用 OpenFlow 操作的硬件卸载。
本节包含以下主题:
您无法在实例创建过程中将基于角色的访问控制 (RBAC) 共享安全组直接应用到实例。要将 RBAC 共享安全组应用到实例,您必须首先创建端口,将共享安全组应用到该端口,然后将该端口分配给实例。请参阅 创建和管理实例 中的 向端口添加安全组。
7.1. 创建安全组 复制链接链接已复制到粘贴板!
您可以创建一个新的安全组,以应用到 OpenShift (RHOSO)环境中的 Red Hat OpenStack Services (RHOSO)项目中的实例和端口。
先决条件
-
管理员已为您创建一个项目,并为您提供了一个
clouds.yaml文件来访问云。 python-openstackclient软件包驻留在您的工作站上。$ dnf list installed python-openstackclient
流程
确认为您的云设置了系统
OS_CLOUD变量:$ echo $OS_CLOUD my_cloud如果需要,重置变量:
$ export OS_CLOUD=my_other_cloud作为替代方案,您可以在每次运行
openstack命令时添加--os-cloud <cloud_name> 选项指定云名称。可选: 要确保您所需的安全组尚不存在,请查看可用的安全组及其规则:
$ openstack security group list $ openstack security group rule list <sec_group>-
将 <
sec_group> 替换为您从可用安全组列表中检索的安全组的名称或 ID。
-
将 <
创建安全组:
$ openstack security group create [--stateless] mySecGroup可选:包含--
stateless选项,以创建无状态安全组。安全组默认是有状态的。
在您的安全组中添加规则:
$ openstack security group rule create --protocol <protocol> \ [--dst-port <port-range>] \ [--remote-ip <ip-address> | --remote-group <group>] \ [--ingress | --egress] mySecGroup-
将
<protocol> 替换为您要允许与您的实例通信的协议名称。 -
可选:将
<port-range> 替换为为协议打开的目标端口或端口范围。IP 协议 TCP、UDP 和 SCTP 是必需的。设置为-1以允许指定协议的所有端口。使用冒号分隔端口范围值。 -
可选: 您可以使用
--remote-ip指定远程 IP 地址块( or--remote-group) 来只允许从指定的 IP 地址访问,以指定该规则只适用于来自远程组的成员的接口的数据包。如果使用--remote-ip,请将 <ip-address> 替换为远程 IP 地址块。您可以使用 CIDR 表示法。如果使用--remote-group,请将 替换为现有安全组的名称或 ID。如果未指定选项,则允许访问所有地址,因为远程 IP 访问范围默认为 (IPv4 默认:0.0.0.0/0;IPv6 默认:::/0)。 指定协议规则应用到的网络流量的方向,可以是传入(
入口)或传出(egress)。如果没有指定,则默认为ingress。注意如果您创建了无状态安全组,并且创建了一条规则来允许来自无状态安全组中的端口的外向 TCP 流量,您还必须创建一个允许传入回复的规则。
-
将
重复上一步,直到您已为您要允许访问实例的所有协议创建了规则。
以下示例创建了允许 SSH 连接到安全组
mySecGroup中的实例的规则:$ openstack security group rule create --protocol tcp \ --dst-port 22 mySecGroup