一个以性能、简洁和安全为重点的可扩展覆盖网络工具

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/slackhq/nebula

项目概述

Nebula是一个可扩展的覆盖网络工具,具有性能,简单性和安全性。它可以让你无缝地连接世界上任何地方的计算机,可以用于连接少量计算机,也可以连接成千上万台计算机。它使用了加密,安全组,证书和隧道等多种技术,将这些思想融合在一起,形成了一个比其各个组成部分更强大的整体。

技术点

  • 互相认证的点对点软件定义网络
  • 基于噪声协议框架
  • 使用证书来断言节点的IP地址,名称和用户定义组中的成员身份
  • 允许提供商不可知的流量过滤
  • 允许在云服务提供商,数据中心和端点之间移动数据,而无需维护特定的寻址方案
  • 使用椭圆曲线Diffie-Hellman(ECDH)密钥交换和AES-256-GCM进行加密

项目用途

Nebula可以用于在云上或全球范围内安全地连接计算机,同时使得防火墙定义更加自由灵活。它可以连接多个云服务提供商,数据中心和端点,而无需维护特定的寻址方案。Nebula还可以用于构建VPN,以提供更加安全的网络连接。

什么是Nebula?

Nebula是一款可扩展的覆盖网络工具,专注于性能、简单性和安全性。它可以让您轻松地在全球范围内连接计算机。Nebula是可移植的,可在Linux、OSX、Windows、iOS和Android上运行。它可以用于连接少量计算机,也可以连接数万台计算机。

Nebula包含了许多现有概念,如加密、安全组、证书和隧道,每个单独的部分都以不同形式存在于Nebula之前。Nebula不同于现有的产品之处在于,它将所有这些想法结合在一起,形成一个比其各个部分更大的总和。

进一步的文档可以在这里找到。

您可以在这里阅读更多关于Nebula的信息。

您也可以加入NebulaOSS Slack群组。

支持的平台

桌面和服务器

请在发布页下载或查看分发包部分。

  • Linux - 64位和32位、arm和其他
  • Windows
  • MacOS
  • Freebsd

分发包

  • Arch Linux

    $ sudo pacman -S nebula
    
  • Fedora Linux

    $ sudo dnf install nebula
    
  • macOS Homebrew

    $ brew install nebula
    

移动设备

技术概述

Nebula是一个互相认证的点对点软件定义网络,基于Noise协议框架。Nebula使用证书来确定节点的IP地址、名称和用户定义组内的成员身份。Nebula的用户定义组允许在节点之间进行跨服务提供商的流量过滤。发现节点允许单个对等体找到彼此,并可选择使用UDP打洞从大多数防火墙或NAT后面建立连接。用户可以在任意数量的云服务提供商、数据中心和终端之间移动数据,而无需维护特定的寻址方案。

Nebula在其默认配置中使用椭圆曲线Diffie-Hellman(ECDH)密钥交换和AES-256-GCM进行加密。

Nebula的创建是为了提供一种机制,使主机组能够安全地通信,即使跨越互联网,同时实现类似于云安全组的表达式防火墙定义。

快速入门

要设置Nebula网络,您需要:

1. Nebula二进制文件Distribution Packages的特定平台。特别是,您需要nebula-cert和每个平台使用的特定Nebula二进制文件。

2.(可选,但您真的应该...)至少有一个带有可路由IP地址的发现节点,我们称之为灯塔。

Nebula灯塔允许节点在全球范围内找到彼此。灯塔是Nebula网络中唯一IP地址不应更改的节点。运行灯塔需要非常少的计算资源,您可以轻松地使用云托管提供商的最便宜选项。如果您不确定要使用哪个提供商,我们中的一些人使用$5/月的DigitalOcean droplets作为灯塔。

一旦您启动了实例,请确保Nebula的UDP流量(默认端口UDP/4242)可以通过Internet到达它。#### 3. Nebula证书授权机构,将成为特定Nebula网络的信任根源。

./nebula-cert ca -name "Myorganization, Inc"

这将在当前目录中创建名为ca.keyca.cert的文件。ca.key文件是您将创建的最敏感的文件,因为它是用于签署单个nebula节点/主机证书的密钥。请将此文件存储在安全的地方,最好使用强加密。

4. 从该证书授权机构生成的Nebula主机密钥和证书

假设您有四个节点,分别为lighthouse1、laptop、server1和host3。您可以随意命名节点,包括FQDN。您还需要选择IP地址和相关子网。在此示例中,我们正在创建一个Nebula网络,该网络将使用192.168.100.x/24作为其网络范围。此示例还演示了Nebula组,这些组稍后可以用于定义Nebula网络中的流量规则。

./nebula-cert sign -name "lighthouse1" -ip "192.168.100.1/24"
./nebula-cert sign -name "laptop" -ip "192.168.100.2/24" -groups "laptop,home,ssh"
./nebula-cert sign -name "server1" -ip "192.168.100.9/24" -groups "servers"
./nebula-cert sign -name "host3" -ip "192.168.100.10/24"

5. 每个主机的配置文件

下载Nebula 示例配置的副本。

  • 在lighthouse节点上,您需要确保设置了am_lighthouse: true

  • 在各个主机上,确保在static_host_map部分中正确定义了lighthouse,并将其添加到lighthouse hosts部分。

6. 将Nebula凭据、配置和二进制文件复制到每个主机

对于每个主机,请将Nebula二进制文件及第5步中的config.yml,以及第4步中的ca.crt{host}.crt{host}.key文件复制到主机上。

不要将ca.key复制到单个节点。

7. 在每个主机上运行Nebula

./nebula -config /path/to/config.yml

从源代码构建Nebula

下载go并克隆此repo。转到Nebula目录。

要为所有平台构建Nebula: make all

要为特定平台构建Nebula(例如,Windows): make bin-windows

有关构建目标的更多详细信息,请参见Makefile

Curve P256和BoringCrypto

用于加密握手和签名的默认曲线是Curve25519。这是大多数用户推荐的设置。如果您的部署具有某些合规要求,则可以选择使用nebula-cert ca -curve P256创建您的CA以使用NIST曲线P256。然后,CA将使用ECDSA P256签署证书,并且使用这些证书的任何主机将在ECDH握手中使用P256。

此外,Nebula可以使用BoringCrypto GOEXPERIMENT构建,方法是运行以下任一make目标之一:

make bin-boringcrypto
make release-boringcrypto

这不是推荐的默认部署,但根据您的合规要求可能有用。

Credits

Nebula是由Nate Brown和Ryan Huber在Slack Technologies, Inc创建的,其中包括Oliver Fross、Alan Lam、Wade Simmons和Lining Wang的贡献。

标签:工具分享