写点什么

带着问题了解 Openstack Neutron 安全组(下)

2019 年 11 月 29 日

带着问题了解Openstack Neutron安全组(下)

5 链跟踪,定位位置

首先,查看 FORWARD 链:


[root@w-openstack32 ~]# iptables -nxvL FORWARDChain FORWARD (policy ACCEPT 0 packets, 0 bytes)    pkts      bytes target     prot opt in     out     source               destination46935472750 20715430397978 neutron-filter-top  all  --  *      *       0.0.0.0/0            0.0.0.0/046935472750 20715430397978 neutron-openvswi-FORWARD  all  --  *      *       0.0.0.0/0            0.0.0.0/0
复制代码


往下走,跟踪 neutron-openvswi-FORWARD 链:


[root@w-openstack32 ~]# iptables -nxvL neutron-openvswi-FORWARDChain neutron-openvswi-FORWARD (1 references)    pkts      bytes target     prot opt in     out     source               destination46934035761 20714724813160 neutron-openvswi-scope  all  --  *      *       0.0.0.0/0            0.0.0.0/0459609600 121602465610 neutron-openvswi-sg-chain  all  --  *      *       0.0.0.0/0            0.0.0.0/0            PHYSDEV match --physdev-out tapbddxxxxc-bd --physdev-is-bridged /* Direct traffic from the VM interface to the security group chain. */418512415 87324679449 neutron-openvswi-sg-chain  all  --  *      *       0.0.0.0/0            0.0.0.0/0            PHYSDEV match --physdev-in tapbddxxxxc-bd --physdev-is-bridged /* Direct traffic from the VM interface to the security group chain. */
复制代码


继续往下走,跟踪 neutron-openvswi-sg-chain 链:


[root@w-openstack32 ~]# iptables -nxvL neutron-openvswi-sg-chainChain neutron-openvswi-sg-chain (10 references)    pkts      bytes target     prot opt in     out     source               destination459619285 121606141606 neutron-openvswi-ibddxxxxc-b  all  --  *      *       0.0.0.0/0            0.0.0.0/0            PHYSDEV match --physdev-out tapbddxxxxc-bd --physdev-is-bridged /* Jump to the VM specific chain. */418522179 87328347603 neutron-openvswi-obddxxxxc-b  all  --  *      *       0.0.0.0/0            0.0.0.0/0            PHYSDEV match --physdev-in tapbddxxxxc-bd --physdev-is-bridged /* Jump to the VM specific chain. */46927558621 20715211464005 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0
复制代码


往下走,跟踪进入 neutron-openvswi-ibddxxxxc-b 链:


[root@w-openstack32 ~]# iptables -nxvL neutron-openvswi-ibddxxxxc-bChain neutron-openvswi-ibddxxxxc-b (1 references)    pkts      bytes target     prot opt in     out     source               destination428583997 119531816501 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED /* Direct packets associated with a known session to the RETURN chain. */       0        0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            state INVALID /* Drop packets that appear related to an existing connection (e.g. TCP ACK/FIN) but do not have an entry in conntrack. */ 1937647 124006974 neutron-openvswi-sg-fallback  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* Send unmatched traffic to the fallback chain. */
复制代码


最后看下,如果以上规则都不匹配,做的动作:


[root@w-openstack32 ~]# iptables -nxvL neutron-openvswi-sg-fallbackChain neutron-openvswi-sg-fallback (10 references)    pkts      bytes target     prot opt in     out     source               destination 9841017 629783588 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* Default drop rule for unmatched traffic. */
复制代码


6 Neutron 安全组白名单机制

Openstack Neutron 安全组使用白名单机制,此时网络的访问能力 = 用户自定义的规则允许的能力。如果这些规则都不匹配,没看错,是 drop 掉该数据包。


可以通过上边的 iptables 命令看到,安全组没有放开 IPIP 协议的规则,所以数据包没进到虚机中。


控制节点上再确认下安全组策略,的确没有 IPIP 协议规则。



7 确认 IPIP 协议号

查看 kernel 源码中头文件 include/uapi/linux/in.h,可以看到 IPIP 协议号是 4;


/* Standard well-defined IP protocols.  */enum {  IPPROTO_IP = 0,   /* Dummy protocol for TCP   */  IPPROTO_ICMP = 1,   /* Internet Control Message Protocol  */  IPPROTO_IGMP = 2,   /* Internet Group Management Protocol */  IPPROTO_IPIP = 4,   /* IPIP tunnels (older KA9Q tunnels use 94) */  IPPROTO_TCP = 6,    /* Transmission Control Protocol  */  IPPROTO_EGP = 8,    /* Exterior Gateway Protocol    */  IPPROTO_PUP = 12,   /* PUP protocol       */  IPPROTO_UDP = 17,   /* User Datagram Protocol   */  IPPROTO_IDP = 22,   /* XNS IDP protocol     */  IPPROTO_DCCP = 33,    /* Datagram Congestion Control Protocol */  IPPROTO_RSVP = 46,    /* RSVP protocol      */  IPPROTO_GRE = 47,   /* Cisco GRE tunnels (rfc 1701,1702)  */...
复制代码


8 加入规则,纠正网络

在 Openstack Neutron 安全组 dashboard 上加入规则:



在控制节点上看到规则已经生成:



9 单元测试

再去虚机抓包,客户端发包通信接收到应答包,并且在虚机上抓到 IPIP 数据包。同时用命令行查看 iptables,已有数据包匹配并执行(prot 为 4 的 pkts 不为 0)。


[root@w-openstack32 ~]# iptables -nxvL neutron-openvswi-ibddxxxxc-bChain neutron-openvswi-ibddxxxxc-b (1 references)    pkts      bytes target     prot opt in     out     source               destination428583997 119531816501 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED /* Direct packets associated with a known session to the RETURN chain. */   12266  7040888 RETURN     4    --  *      *       0.0.0.0/0            0.0.0.0/0       0        0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            state INVALID /* Drop packets that appear related to an existing connection (e.g. TCP ACK/FIN) but do not have an entry in conntrack. */ 1937647 124006974 neutron-openvswi-sg-fallback  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* Send unmatched traffic to the fallback chain. */
复制代码


在虚机上抓包,没有看到其他类型数据包进入:


tcpdump -i any \(not icmp\) and \(not udp\) and \(not tcp\) and \(not arp\)
复制代码


10 推入生产,回归测试

经验证,和测试环境效果一致,done。


总结

通过问题的探索,我们了解 Openstack Neutron 的安全组策略相关知识了,也对 Neutron 网络数据面的网络拓扑架构有了基本的认识。之后,我会结合源码展开谈谈 iptables 模式匹配与执行,以及 iptables 的高级用法和原理,以及部分 netfilter 的原理。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/jMBRgscKJVgjQZRZ3ZES_A


2019 年 11 月 29 日 13:43281

评论

发布
暂无评论
发现更多内容

英特尔与南京溧水经济技术开发区共同成立智能交通研究院

intel001

双指针算法和位运算&离散化和区间合并

落曦

申通快递 双11 云原生应用实践

阿里巴巴云原生

阿里云 Kubernetes 运维 云原生 监控

【薪火计划】05 - 坦诚是领导力的根基

brave heart

管理

彻底搞懂 IO 底层原理

vivo互联网技术

Java Netty 服务器 语法

Python进阶——什么是元类?

Kaito

Python

大厂经验:埋点数据质量之埋点验证

阿亮

埋点 数据验证

如何基于App SDK快速地开发一个IoT App?

IoT云工坊

App 物联网 sdk 智能家居

About Me

翎君

android

基于DAYU的实时作业开发,分分钟搭建企业个性化推荐平台

华为云开发者社区

华为 算法 数据 dayu

如何用CSS实现图像替换链接文本显示并保证链接可点击

陈北

CSS小技巧

【JAVA】List转换为array

莫问

快三高手预测《走势技巧易懂教学》

陈北

jdk

LeetCode题解:169. 多数元素,分治,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

快三大小最简单的方法倍投盈利

陈北

geohash

面试JVM一问三不知??来看看这个

程序员的时光

JVM Java虚拟机

有奖话题 | 如果程序员和产品经理都会凡尔赛文学,将如何对话?

YourBatman

话题讨论 凡尔赛文学

快三走势分析判断技巧《走势图预测》

陈北

SELinux 安全上下文配置

市值管理软件,交易平台挂单机器人,做市机器人

WX13823153201

市值管理软件

在线K歌的发展和优势

anyRTC开发者

音视频 WebRTC RTC sdk

moon不讲武德!!!一个类加载机制给面试官说蒙了!!

moon聊技术

Java JVM 类加载 类加载器

Web前端如何实现断点续传

QiyihaoLabs

Web 断点续传 upload pl

马士兵最新2020涵盖P5—P8Java全栈架构师学习路线,跟着老师学我已拿P7Offer!

Java架构追梦

Java 学习 架构 面试 马士兵

区块链应用场景有哪些?区块链应用开发

t13823115967

区块链应用场景有哪些 区块链应用开发

视频作品播放量低:自媒体作者如何走出新手村

石头IT视角

云原生应用Go语言:你还在考虑的时候,别人已经应用实践

华为云开发者社区

go 微服务 云技术

程序员面试的时候突然遇到答不上的问题怎么办?

Java架构师迁哥

什么是堡垒机?为什么需要堡垒机?

xcbeyond

运维

市值管理机器人、自动跑k线机器人开发

t13823115967

市值管理机器人 自动跑k线机器人开发

30分钟开发一款抓取网站图片资源的浏览器插件

徐小夕

Java chrome 前端 前端进阶 chrome扩展

我是面试官,我来分享一波面经!看看我的内心OS

比伯

Java 编程 架构 面试 技术宅

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

带着问题了解Openstack Neutron安全组(下)-InfoQ