跳转到内容

Ethane 2007 — 把企业网安全策略集中到一台中央电脑上

是什么

Ethane 是一套让企业网的安全策略由中央电脑统一决定的网络架构。日常类比:原本一栋写字楼里每层楼自己装门禁、各发各的卡,互不通气;Ethane 做的事是——整栋楼只设一个保安总台,所有门都改成『刷卡前先打电话问总台』,总台一查名册(你是谁、要去哪、规则允不允许),同意才放行。

技术上一句话:

一台控制器保管全网拓扑、用户名册和策略;交换机只剩一张流表,遇到新流量先上报控制器,控制器查策略后再下发『放行/拒绝』规则。

这套架构是 OpenFlow / SDN 的精神前身——晚一年的 OpenFlow 论文几乎是把 Ethane 的交换机部分单独拎出来标准化。

为什么重要

不理解 Ethane,下面这些事都没法解释:

  • 为什么 2008 年 OpenFlow 一出现就被业界接受——因为 Ethane 已经在 Stanford 跑过 4 个月、300 台主机的生产部署
  • 为什么 SDN 一开始的卖点是『安全策略』而不是『流量调度』——Ethane 解决的就是企业网准入控制
  • 为什么 VMware 的 NSX 网络虚拟化产品长这个样——作者 Casado 后来创立 Nicira,被 VMware 收购
  • 为什么传统企业网防火墙厂商(Cisco / Check Point)2010 年后突然紧张

一句话:Ethane 是『把网络当成一台可编程计算机』这个想法的工业首次验证

核心要点

Ethane 把企业网拆成 三层

  1. 注册表(Registration):每个用户、主机、交换机上线前必须先在控制器登记,绑定身份和密钥。类比:进园区先办工卡。

  2. 认证(Authentication):用户登录第一台交换机时跑一次握手,控制器把『这个 MAC 现在是 Bob』记到全局表里。之后 Bob 发的每个包都能反查到他这个人,而不只是一串 IP。

  3. 流级策略执行(Flow-Level Policy Enforcement):每个新流量的第一个包送到控制器;控制器查 Pol-Eth 策略 → 决定 allow / deny / waypoint(绕路经过 IDS)→ 把规则装到沿路所有交换机的流表。后续包就在交换机本地按表转发,不再上报。

类比一张图:

┌────────────────────────┐
│ Controller (PC) │ ← 名册 + 策略 + 全局拓扑
└──────────┬─────────────┘
│ 安全通道
┌───────┴────────┐
│ Ethane Switch │
│ ┌────────────┐ │ ← 只有一张流表
│ │ Flow Table │ │
│ └────────────┘ │
└────────────────┘

关键洞察:作者发现企业网真正难的不是路由(IP 已经会算最短路),而是**『谁能跟谁说话』。这个问题跟流量本身无关,跟人和服务有关。所以策略应该绑在用户/主机/服务**上,不该绑在 IP 上(IP 会变、会伪造、会 NAT)。

Pol-Eth 策略示例

allow(usrc="bob", hdst="websrv", protocol="http").
deny(hsrc in "student_hosts", hdst="fileserver").
waypoint("ids")(usrc="guest").

第一行:Bob 可以访问 websrv 的 http;第二行:学生机不许碰 fileserver;第三行:访客流量必须先经过 IDS。语言是 Datalog 风格,声明式,写完编译成可在控制器上跑的判定函数。

实践案例

案例 1:Bob 登录后第一次访问内网网页

  1. Bob 笔记本接交换机端口 → 交换机看不懂这个 MAC,把首包扔给控制器
  2. 控制器要求 Bob 用证书登录 → 登录成功后记下『端口 12 = Bob』
  3. Bob 浏览器请求 webserver.corp/index.html → DNS 也走控制器,控制器把名字解析成 IP,顺带把策略检查做了
  4. 控制器发现 Pol-Eth 允许 → 算最短路径 → 沿途 4 台交换机都装上一条流表项
  5. 之后这条流的包都在交换机本地转发,控制器不再介入

整个过程第一个包慢一点(毫秒级往返控制器),后续包按线速跑。

案例 2:Pol-Eth 怎么处理冲突

策略多了会冲突。Ethane 的解法:默认拒绝 + 显式优先级

deny(). # 默认全拒
allow(usrc in "employees"). # 员工默认放行
deny(hdst="finance_db"). # 但财务库谁都不许碰
allow(usrc="cfo", hdst="finance_db") # CFO 例外

最具体的规则赢——这套语义在 SQL ACL、iptables、AWS IAM 里都能看到影子。

案例 3:Stanford 4 个月部署的真实数据

作者把 Ethane 装到 Stanford CS 系,约 300 台主机、有线无线混合,跑了 4 个月:

  • 控制器单机能扛全网(首包 RTT 不到几毫秒)
  • 交换机用 NetFPGA 改的硬件 + Linksys 改的无线 AP 跑 OpenWRT
  • 真发现并阻止了几起未授权扫描和恶意流量
  • 暴露的最大问题:首包延迟 + 控制器单点——这两个坑后来 OpenFlow 时代继续踩了 5 年

踩过的坑

  1. 以为『集中』等于『慢』:实际上首包延迟在毫秒级,对 TCP 三次握手影响很小;而且只有新流要问控制器,长连接和重复连接都不用。

  2. 以为策略可以在交换机上判:作者一开始也试过,发现策略涉及全局视图(谁是谁、IDS 现在在哪台机器上),交换机本地永远拼不出来——这是集中的根本理由。

  3. 以为部署能一夜切换:Stanford 部署时大量遗留设备不能改,Ethane 必须支持和传统以太网共存,靠 VLAN 隔出实验区。这个『增量部署』思路后来 OpenFlow 直接继承。

  4. 以为 Pol-Eth 表达力够用:4 个月跑下来,运维要写的策略远比预期复杂(时间窗、限速、QoS、计费),Pol-Eth 都没覆盖——后续工业 SDN 控制器都把策略层做得更丰富。

适用 vs 不适用场景

适用

  • 单一管理域的企业网 / 校园网(人和机器都能登记)
  • 需要『谁能跟谁说话』细粒度准入的场景(金融、医疗、政务)
  • 想做实验性新协议的研究网络
  • 网络虚拟化的早期形态(多租户隔离)

不适用

  • 跨 AS 的互联网骨干(没法要求陌生人来登记)
  • 超低延迟交易网络(首包毫秒级开销不可接受)
  • 完全无中央信任的开放网络(家庭 WiFi、公共热点)
  • 主机不可控的物联网底层(很多设备改不了认证流程)

历史小故事(可跳过)

  • 2006 年:Casado 在 Stanford 读博,被 NSA 派去研究『怎么让网络管得住』。他发现传统方案(VLAN + ACL + 防火墙)配置量随主机数指数增长,运维人均维护几千条规则,错误率极高。
  • 2007 年 8 月:SIGCOMM 发表 Ethane,主张所有决策上交中央——当时被审稿人怀疑『这能扩展吗』。
  • 2008 年 4 月:同实验室的 McKeown 把 Ethane 的交换机部分抽出来标准化,叫 OpenFlow——一篇 6 页的 CCR 文章,引爆 SDN。
  • 2007 年:Casado / McKeown / Shenker 创立 Nicira,把 Ethane 的思想做成商用网络虚拟化平台。
  • 2012 年:VMware 用 12.6 亿美元收购 Nicira,产品改名 NSX,至今是企业网络虚拟化的标杆。
  • 2014 年起:Pol-Eth 的精神继承者 P4、Frenetic、Pyretic 等高级网络编程语言陆续出现。

学到什么

  1. 策略应该绑在『主体』上而不是『地址』上——IP 会变、会伪造,但用户和服务的身份相对稳定,这是认证 + 命名的根本理由
  2. 集中不是性能问题,是信息问题——决策需要全局视图时,分布式拼不出来,集中反而是最简方案
  3. 范式迁移先从『单一管理域』开刀——企业网先吃掉,再慢慢往骨干网扩散;OpenFlow / SDN / 服务网格都遵循这条路径
  4. 学术原型 → 标准 API → 商业产品:Ethane 2007 → OpenFlow 2008 → Nicira 2012 收购,每一步隔 1~4 年
  5. **『首包问中央,后续走本地』**这个分层思路,后来在 DNS、TLS session resumption、CDN、API gateway 里反复出现

延伸阅读

关联

  • openflow-2008 —— 直接继承者,把 Ethane 的『交换机 + 流表』标准化成跨厂商协议
  • p4 —— 后续把可编程性从 action 推到 parser,是 OpenFlow 的精神延续
  • differential-datalog —— Pol-Eth 是 Datalog 用于网络策略的典型案例
  • souffle-datalog —— 同源的 Datalog 工程化方向,给企业策略类问题提供工具
  • lamport-tla-1994 —— 控制器集群一致性的理论基础(Ethane 单机版还没遇到,OpenFlow 时代必修)

反向链接

  • differential-datalog —— DDlog (Differential Datalog) — 输入只改一条,引擎只算受影响的那一小块
  • lamport-tla-1994 —— TLA — 把状态机和时序逻辑捏成一个公式
  • openflow-2008 —— OpenFlow 2008 — 把交换机的『分拣规则』搬到一台中央电脑上
  • p4-2014 —— P4 — 让交换机的转发逻辑像写代码一样改
  • souffle-datalog —— Soufflé — 把 Datalog 编译成 C++ 让程序分析跑得动