InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

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

  • 2019-11-29
  • 本文字数:1934 字

    阅读完需:约 6 分钟

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

本文是由他最近解决的一个 Openstack Neutron 安全组问题所触发而写,让我们跟随作者的思路一起来了解 Neutron Security Group 和一般网络问题的解决思路吧。

前言

本文主要用来记录最近解决的一个 Openstack Neutron 安全组的问题。在为业务部门创建 lvs 服务时,Linux Director 与 Real Server 间无法进行正常的通讯,Real Server 是由 Hulk 云平台创建的 Openstack 虚拟机。


网络问题排查,按照『确定网络结构 - 抓包定位 - 分析定位问题 - 纠正网络部署 - 单元测试 - 完整测试 -(推入生产)- 回归测试 - 总结回顾』的思路来就基本搞定了。

1 确定网络结构

遇到网络问题,首先考虑数据包在全流程中 drop 的位置,所以,首先我们要熟知 Openstack Neutron 网络的整个架构。 为了重点讲述 Openstack Neutron 网络及安全组,我们假设 Linux Director 和 Real Server 虚机所在的物理主机之间的网络可达。如下图是 Openstack Neutron 网络数据面的基本架构。



看下这个架构图,首先遇到一个特殊之处,我们暂且花点时间看一下: br-ethx 与 br-int 是 OVS 创建的 OVS Bridge,qbr-XXX 是 Linux Bridge,为什么不把虚机的 Tap 设备直接挂到 OVS Bridge 的 br-int 上,而在 br-int 和 Tap 设备间加个 Linux Bridge qbr-XXX?



1.Openstack Neutron 需要在宿主机上执行一定的安全策略;

2.Hulk 平台使用的 ovs 版本是 2.3.1,该版本尚未完全支持安全策略的内核模块实施部分:netfilter 模块;

3.增加一个中间层 Linux bridge 可以解决网络策略配置。


Openstack Neutron 网络各设备及配置请参考这里


接下来我们进入探索之旅。

2 抓包定位

在物理机和虚机上抓包:在客户端发送请求数据包后,分别在 ABCDEFG 七个点中抓包:


tcpdump -i xxx -nv | grep ipip
复制代码


其中,在 CDEFG 5 个点都能抓到数据包,在 AB 两点没有抓到。

3 分析定位问题

问题出现在 BC 两点之间,即 Linux bridge 与 Tap 设备之间。Openstack Neutron 在这两点之间利用 iptables 做安全策略,那么是如何实现的,为什么会丢包?反过来想,既然 ssh 能够连接上虚机,说明 TCP 数据包正常,更确信 iptables 安全策略存在问题。


下面,我们先了解下 Openstack Neutron 如何实现安全组策略。

4 Neutron 安全组的 iptables 规则

Neutron L2 Agent 承担使用 iptables 维护链和规则的任务。它为虚机的每块网卡的 tap 设备建立 i(进)、o(出)和 s(防 IP 欺骗)链和规则,来实现:


1.prepares, updates, removes firewall filters (准备、更新和删除防火墙过滤器)

2.drops all packets by default (默认丢弃所有包)

3.prevents IP spoofing based on port’s mac address (compatible with allowed_address_pairs extension) (防 IP 欺骗)

4.allows incoming DHCP and ICMPv6 RA (允许进入虚机的 DHCP 包和 ICMPV6 RA)

5.blocks outgoing DHCP (禁止出虚机的 DHCP 包)

6.drops INVALID packets (丢弃无效状态的包)

7.allows stateful, established connections (允许有状态的并且已建立的连接,比如允许进来的 ICMP 的时候,从外面 ping 虚机时虚机的响应包是可以返回的)

8.converts security group rules to iptables rules (IPv4, IPv6, TCP, UDP, ICMP, ICMPv6) (将用户配置的规则转化为 iptables 规则)

9.multiple TCP/UDP ports per iptables rule using multiport module

支持 IPV4 和 IPV6


来看看 Neutron 为了实现这些功能添加的 iptables 链:


[root@w-openstack32 ~]# iptables -S | grep neutron-N neutron-filter-top-N neutron-openvswi-FORWARD             #neutorn定义的FORWARD链-N neutron-openvswi-INPUT               #Neutron定义的INPUT链-N neutron-openvswi-OUTPUT              #Neutron定义的OUTPUT链 -N neutron-openvswi-ibddxxxxc-b         #处理进入该虚机的网络包-N neutron-openvswi-local-N neutron-openvswi-obddxxxxc-b         #处理出该虚机的网络包-N neutron-openvswi-sbddxxxxc-b         #处理出该虚机的网络包的防IP欺骗-N neutron-openvswi-sg-chain    -N neutron-openvswi-sg-fallback-A INPUT -j neutron-openvswi-INPUT      #将INPUT链转到neutron的INPUT链-A FORWARD -j neutron-filter-top-A FORWARD -j neutron-openvswi-FORWARD  #将FORWARD链转到neutorn的forward链-A OUTPUT -j neutron-filter-top-A OUTPUT -j neutron-openvswi-OUTPUT    #将OUTPUT链转到neutron的output链-A neutron-filter-top -j neutron-openvswi-local
复制代码


这些链之间的关系:



当前由于 iptables 主要做控制 qbr 桥在虚机和 br-int 之间转发的网络帧,Bridge 代码应该是用 filter 表的 FORWARD 链来处理这些网络帧。


下面我们逐步跟踪 FORWARD 链,来找到 neutron-openvswi-ixxxxx 链定位这个问题。


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2019-11-29 13:43874

评论

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

昆仑分布式数据库系统简介 之 SQL 标准兼容性和日常维护工作

KunlunBase昆仑数据库

国产数据库

昆仑分布式数据库Sequence功能及其实现机制

KunlunBase昆仑数据库

国产数据库

EMQX+阿里云Tablestore多场景一站式IoT数据解决方案正式发布

EMQ映云科技

阿里云 物联网 一站式平台 emqx 5月月更

KunlunBase 查询优化(一)

KunlunBase昆仑数据库

MySQL 数据库 国产数据库

三分钟让你了解 vue 中的父子通讯

CRMEB

KunlunBase 查询优化(三)排序下推

KunlunBase昆仑数据库

国产数据库

火山引擎A/B测试私有化实践

字节跳动数据平台

实验 火山引擎 私有化部署 ab测试

leetcode 451. Sort Characters By Frequency 根据字符出现频率排序

okokabcd

LeetCode 排序

数据库堡垒机品牌有哪些?买哪家划算?咨询电话多少?

行云管家

网络安全 信息安全 数据安全 堡垒机

KunlunBase 查询优化(二)Project 和 Filter 下推

KunlunBase昆仑数据库

国产数据库

什么?JDK8的ConcurrentHashMap 有 Bug

skow

Java 后端 并发

AI简报-FIX你的模型

AIWeker

人工智能 深度学习 5月月更 AI简报

小程序转APP,小团队也能实现数字化生态闭环

Speedoooo

APP开发 跨端开发 小程序容器 小程序转app 跨端运行

【LeetCode】调整数组顺序使奇数位于偶数前面Java题解

Albert

LeetCode 5月月更

关于加密通道规范,你真正用的是TLS,而非SSL

华为云开发者联盟

TLS 加密 ssl 加密通道 CA系统

数据库系统最佳实践系列 --- 使用 prepared statement

KunlunBase昆仑数据库

国产数据库

文档管理:企业进步的重要因素

小炮

文档管理

手把手教你搭个Frida + Sekiro Rpc框架

奋飞安全

【二级等保】二级等保怎么做?价格怎么样?贵吗?

行云管家

运维 网络安全 堡垒机 运维审计

MySQL-8.0 Group Replication 研究与改造汇总

KunlunBase昆仑数据库

国产数据库 MySQL 数据库

2022第八届华为软件精英挑战赛全球总决赛圆满落幕,冠军奖金20万!

科技热闻

什么是显卡?GPU服务器到底有什么作用?

Finovy Cloud

gpu GPU服务器

谈谈技术能力

阿里巴巴中间件

阿里云 程序员 中间件 技术思考

2022年中国消费金融数字化发展分析

易观分析

消费金融

深入解读SQL的聚集函数

华为云开发者联盟

sql GaussDB(DWS) 聚集操作 主键列

netty系列之:epoll传输协议详解

程序那些事

Java Netty 程序那些事 5月月更

手绘图解java类加载原理

华为云开发者联盟

Java 类加载 元数据 类静态

烧录OpenHarmony 3.2(尝鲜版)步骤

离北况归

OpenHarmony OpenHarmony3.2

《阿里云代码安全白皮书》5个维度应对3类代码安全问题

阿里云云效

云计算 阿里云 代码管理 代码托管 代码安全

web前端培训创建 NPX 工具

@零度

web前端开发

昆仑数据库可定制的数据分片方案

KunlunBase昆仑数据库

国产数据库

  • 扫码添加小助手
    领取最新资料包
带着问题了解Openstack Neutron安全组(上)_文化 & 方法_李文新_InfoQ精选文章