使用 yubikey 等硬件身份验证访问 wireguard

使用 yubikey 等硬件身份验证访问 wireguard

在我们公司,我们使用 wireguard vpn 来访问我们的集群。在我们的服务器中,我们安装了 wireguard,它将添加一个充当隧道接口的网络接口。通过此隧道的访问将通过服务器和客户端之间的私钥/公钥关联进行加密。

以下是示例配置

服务器

[Interface]
PrivateKey = serverPrivateKey
ListenPort = serverPort

[Peer]
PublicKey = clientPublicKey
AllowedIPs = clientIpRanges

客户:

[Interface]
PrivateKey = clientPrivateKey
ListenPort = clientPort

[Peer]
PublicKey = serverPublicKey
Endpoint = serverIP:serverPort
AllowedIPs = 0.0.0.0/0

上述客户端配置现在本地保存在需要访问服务器的本地机器中。

问题是 wireguard 不支持 2FA,因此作为额外的安全措施,我们尝试从机器本身中删除密钥,并以更安全的方式访问服务器。

为此,我们有一个 Yubikey,我们打算向其中添加配置,作为访问服务器的 2FA 验证。

我们正在努力实现的目标:

我们需要从本地PC上移除密钥,然后使用yubikey来访问服务器。

事情已经过去了

我已经使用 gpg 设置了密码存储,其中创建了一个包含集群配置的多行密码。

仍然缺少 wg 和 yubikey 之间的连接,因为我们有多个具有不同配置的服务器。密钥已移至卡中:

$ gpg --edit-key keyID

gpg> keytocard


Really move the primary key? (y/N) y
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 1

非常感谢您的意见。

答案1

不要将整个 WireGuard 配置放入密码存储中——只需将 WireGuard 私钥放入即可。

如果您有多个 WireGuard 配置,请将每个配置的私钥存储在不同的密码条目中,如下所示:

wg genkey | pass insert -e WireGuard/private-keys/wg0
wg genkey | pass insert -e WireGuard/private-keys/wg1

(然后您可以像这样计算私钥的公钥:pass WireGuard/private-keys/wg0 | wg pubkey。)

将每个接口的 WireGuard 配置保留在您的/etc/wireguard目录中——但用一个命令替换接口的PrivateKey条目PostUp,该命令在接口启动时从您的用户帐户的密码存储中提取私钥;如这个示例 WireGuard 配置文件(其中您的用户帐户名为me):

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.200.100.8/24
DNS = 10.200.100.1
PostUp = wg set %i private-key <(sudo -u me pass WireGuard/private-keys/%i)

[Peer]
PublicKey = GtL7fZc/bLnqZldpVofMCD6hDjrK28SsdLxevJ+qtKU=
AllowedIPs = 10.200.100.0/24
Endpoint = 198.51.100.123:51820

或者这个示例 WireGuard 配置文件:

# /etc/wireguard/wg1.conf
[Interface]
Address = 10.192.122.1/24
Address = 10.10.0.1/16
PostUp = wg set %i private-key <(sudo -u me pass WireGuard/private-keys/%i)
ListenPort = 51820

[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.192.122.3/32, 10.192.124.1/24

[Peer]
PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
AllowedIPs = 10.192.122.4/32, 192.168.0.0/16

[Peer]
PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
AllowedIPs = 10.10.10.230/32

wg0您可以使用以下命令启动上述界面:

sudo wg-quick up wg0

界面wg1如下:

sudo wg-quick up wg1

如果您的 gpg-agent 在其缓存中没有用于存储您的密码的 PGP 密钥,则当您启动其中一个界面时,系统将提示您输入 PGP 密钥的密码 - 或者如果您已将 PGP 密钥移动到 YubiKey,系统将提示您触摸您的 YubiKey。

相关内容