Neutron总结-security group

本文介绍了OpenStack中安全组的概念及其实现方式。通过iptables规则控制进出实例的流量,详细展示了如何配置安全组来允许ping和ssh访问。此外,还介绍了安全组的基本特性和修改方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Neutron 为 instance 提供了两种管理网络安全的方法:
安全组(Security Group)和虚拟防火墙。
安全组的原理是通过 iptables 对 instance 所在计算节点的网络流量进行过滤。
虚拟防火墙则由 Neutron Firewall as a Service(FWaaS)高级服务提供。其底层也是使用 iptables,在 Neutron Router 上对网络包进行过滤。
这里先介绍安全组。

默认安全组

每个 Project(项目)都有一个命名为 “default” 的默认安全组。
点击菜单 项目 -> 计算 -> 访问 & 安全,查看 Security Group 列表。
这里写图片描述
点击“管理规则”按钮,查看 “default” 安全组的规则。
这里写图片描述
“default” 安全组有四条规则,其作用是:允许所有外出(Egress)的流量,但禁止所有进入(Ingress)的流量。

当我们创建 instance 时,可以在 “访问 & 安全” 标签页中选择安全组。如果当前只有 “default” 这一个安全组,则会强制使用 “default” 。
这里写图片描述

当前在 compute2 上有 instance “test2”。
这里写图片描述

在 compute2上执行 iptables-save 命令查看相关规则。iptables 的规则较多,这里我们节选了 test2 相关的规则。
这些规则是 Neutron 根据安全组自动生成的。
这里写图片描述

test2 的 TAP interface 为 tap700eb1c9-8c,可以看到:
1. iptables 的规则是应用在 Neutron port 上的,port 在这里是 test2 的虚拟网卡 tap700eb1c9-8c。
2. ingress 规则集中定义在命名为 “neutron-openvswi-i700eb1c9-8” 的 chain 中。
3. egress 规则集中定义在命名为 “neutron-openvswi-o700eb1c9-8” 的 chain 中。
下面我们通过 dhcp namespace 对 test2 进行 ping 和 ssh 测试。

root@controller:~# ip netns
qrouter-d0945bdd-e860-4f17-b386-80d4ddbb9d3c
qdhcp-838d7441-7c25-4b02-8698-18d76ef670be
qdhcp-f66a4f50-6ce1-452f-a618-5ecf17f1f3e7
root@controller:~# ip netns exec qdhcp-f66a4f50-6ce1-452f-a618-5ecf17f1f3e7 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
11: tap80b8cf90-b7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether fa:16:3e:d1:ca:2a brd ff:ff:ff:ff:ff:ff
    inet 172.16.100.10/24 brd 172.16.100.255 scope global tap80b8cf90-b7
       valid_lft forever preferred_lft forever
    inet 169.254.169.254/16 brd 169.254.255.255 scope global tap80b8cf90-b7
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fed1:ca2a/64 scope link 
       valid_lft forever preferred_lft forever
root@controller:~# ip netns exec qdhcp-f66a4f50-6ce1-452f-a618-5ecf17f1f3e7 ping 172.16.100.19
PING 172.16.100.19 (172.16.100.19) 56(84) bytes of data.
^C
--- 172.16.100.19 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 5999ms
root@controller:~# ip netns exec qdhcp-f66a4f50-6ce1-452f-a618-5ecf17f1f3e7 ssh 172.16.100.19
^C

无法 ping 和 ssh test2 (172.16.100.19),可见当前的规则实现了 “default” 安全组,所有 ingress 流量都被禁止。

修改安全组规则

Neutron 默认的安全组规则会禁止掉所有从外面访问 instance 的流量。
下面我们修改安全组的配置,允许 ping 和 ssh instance。
有两种方法可以达到这个目的:
1. 修改“default” 安全组。
2. 为 test2 添加新的安全组。
这里我们采用第二种方法。
在安全组列表页面点击“ 创建安全组”按钮。
这里写图片描述
为安全组命名并点击 “创建安全组”。新的安全组 “allow ping & ssh” 创建成功。
这里写图片描述
点击“管理规则”按钮,查看 “allow ping & ssh” 的规则。
这里写图片描述
系统默认定义了两条规则,允许所有的外出流量。为清晰起见,可以点击按钮“删除规则”删除这两条规则。
点击“添加规则”按钮,添加允许 ping 的规则。
这里写图片描述
“规则” 选择 “所有 ICMP 协议”,“方向” 选择 “入口”,然后点击 “添加” 按钮。
同样的方式添加 ssh 规则。
这里写图片描述
在列表中查看添加成功的规则。
这里写图片描述
接下来设置 test2,使用新的安全组。进入 instance 列表页面,点击 test2 下拉操作列表中的 “编辑安全组”
这里写图片描述
可以看到 test2 当前使用的安全组为 “default”,可选安全组为 “allow ping & ssh”。
这里写图片描述
点击安全组 “allow ping & ssh” 后面的 “+” 按钮。
这里写图片描述
点击 “保存”。
iptables 会立即更新,下面通过 对比 查看 iptables 前后的变化。
这里写图片描述
“allow ping & ssh” 安全组引入了下面两条 iptables 规则。作用是运行 ingress 的 ssh 和 ping 流量。

-A neutron-openvswi-i700eb1c9-8 -p icmp -j RETURN
-A neutron-openvswi-i700eb1c9-8 -p tcp -m tcp --dport 22 -j RETURN

测试一下,现在能够 ping 和 ssh test2 了。

root@controller:~# ip netns exec qdhcp-f66a4f50-6ce1-452f-a618-5ecf17f1f3e7 ping 172.16.100.19
PING 172.16.100.19 (172.16.100.19) 56(84) bytes of data.
64 bytes from 172.16.100.19: icmp_seq=1 ttl=64 time=1.45 ms
64 bytes from 172.16.100.19: icmp_seq=2 ttl=64 time=0.631 ms
64 bytes from 172.16.100.19: icmp_seq=3 ttl=64 time=0.642 ms
64 bytes from 172.16.100.19: icmp_seq=4 ttl=64 time=0.641 ms
^C
--- 172.16.100.19 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.631/0.841/1.451/0.352 ms
root@controller:~# ip netns exec qdhcp-f66a4f50-6ce1-452f-a618-5ecf17f1f3e7 ssh cirros@172.16.100.19
The authenticity of host '172.16.100.19 (172.16.100.19)' can't be established.
RSA key fingerprint is 9a:b5:80:77:5d:46:d9:f7:ac:47:44:43:7d:e1:97:69.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.100.19' (RSA) to the list of known hosts.
cirros@172.16.100.19's password: 
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:eb:47:85 brd ff:ff:ff:ff:ff:ff
    inet 172.16.100.19/24 brd 172.16.100.255 scope global eth0
    inet6 fe80::f816:3eff:feeb:4785/64 scope link 
       valid_lft forever preferred_lft forever
$ 

小结

安全组有以下特性:
1. 通过宿主机上 iptables 规则控制进出 instance 的流量。
2. 安全组作用在 instance 的 port 上。
3. 安全组的规则都是 allow,不能定义 deny 的规则。
4. instance 可应用多个安全组叠加使用这些安全组中的规则。

文章参考每天5分钟玩转OpenStack安全组相关内容,为学习笔记:
http://www.cnblogs.com/CloudMan6/p/6081430.html
http://www.cnblogs.com/CloudMan6/p/6089335.html

以下是OpenStack Neutron的所有命令行: 1. neutron agent-list:列出所有的网络代理 2. neutron agent-show <agent-id>:查看指定网络代理的详细信息 3. neutron agent-update <agent-id> <agent-property>=<new-value>:更新指定网络代理的属性值 4. neutron ext-list:列出所有的Neutron扩展 5. neutron ext-show <ext-name>:查看指定Neutron扩展的详细信息 6. neutron floatingip-associate <floating-ip> <port-id>:将浮动IP与指定端口关联 7. neutron floatingip-create <floating-network>:创建一个新的浮动IP地址 8. neutron floatingip-delete <floating-ip>:删除指定的浮动IP地址 9. neutron floatingip-list:列出所有的浮动IP地址 10. neutron floatingip-show <floating-ip>:查看指定浮动IP地址的详细信息 11. neutron net-create <network-name>:创建一个新的网络 12. neutron net-delete <network-id>:删除指定的网络 13. neutron net-list:列出所有的网络 14. neutron net-show <network-id>:查看指定网络的详细信息 15. neutron port-create <network-id>:创建一个新的端口 16. neutron port-delete <port-id>:删除指定的端口 17. neutron port-list:列出所有的端口 18. neutron port-show <port-id>:查看指定端口的详细信息 19. neutron router-create <router-name>:创建一个新的路由器 20. neutron router-delete <router-id>:删除指定的路由器 21. neutron router-interface-add <router-id> <subnet-id>:将子网添加到指定路由器的接口 22. neutron router-interface-delete <router-id> <subnet-id>:从指定路由器的接口中删除子网 23. neutron router-list:列出所有的路由器 24. neutron router-show <router-id>:查看指定路由器的详细信息 25. neutron security-group-create <group-name>:创建一个新的安全组 26. neutron security-group-delete <group-id>:删除指定的安全组 27. neutron security-group-list:列出所有的安全组 28. neutron security-group-rule-create <group-id>:创建一个新的安全组规则 29. neutron security-group-rule-delete <rule-id>:删除指定的安全组规则 30. neutron security-group-rule-list <group-id>:列出指定安全组的所有规则 31. neutron security-group-show <group-id>:查看指定安全组的详细信息 32. neutron subnet-create <network-id> <subnet-CIDR>:创建一个新的子网 33. neutron subnet-delete <subnet-id>:删除指定的子网 34. neutron subnet-list:列出所有的子网 35. neutron subnet-show <subnet-id>:查看指定子网的详细信息 36. neutron quota-show <tenant-id>:查看指定租户的配额信息 37. neutron quota-update <tenant-id> <quota-property>=<new-value>:更新指定租户的配额信息 38. neutron help:显示帮助信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值