在我们公司,我们使用 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
https://lists.zx2c4.com/pipermail/wireguard/2017-November/001951.html
https://support.yubico.com/hc/en-us/articles/360013790259-Using-Your-YubiKey-with-OpenPGP
非常感谢您的意见。
答案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。