Neutron总结-security group

33 篇文章 16 订阅
21 篇文章 1 订阅

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值