一个以性能、简洁和安全为重点的可扩展覆盖网络工具
作者: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.key和ca.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,并将其添加到lighthousehosts部分。
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的贡献。