Neutron总结-security group

来源:互联网 发布:小说哪个软件好 编辑:程序博客网 时间:2024/05/22 02:01

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 netnsqrouter-d0945bdd-e860-4f17-b386-80d4ddbb9d3cqdhcp-838d7441-7c25-4b02-8698-18d76ef670beqdhcp-f66a4f50-6ce1-452f-a618-5ecf17f1f3e7
root@controller:~# ip netns exec qdhcp-f66a4f50-6ce1-452f-a618-5ecf17f1f3e7 ip a1: 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 forever11: 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.19PING 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.19PING 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 ms64 bytes from 172.16.100.19: icmp_seq=2 ttl=64 time=0.631 ms64 bytes from 172.16.100.19: icmp_seq=3 ttl=64 time=0.642 ms64 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 2999msrtt 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.19The 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)? yesWarning: Permanently added '172.16.100.19' (RSA) to the list of known hosts.cirros@172.16.100.19's password: $ ip a1: 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 forever2: 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

阅读全文
0 0
原创粉丝点击