防止 OpenVPN 上的 IP 欺骗

防止 OpenVPN 上的 IP 欺骗

我对 IP 欺骗和身份验证有疑问。我有一个处于 TUN 模式的 OpenVPN 服务器,该服务器在同一个 VPN 网络中有许多不受信任的客户端,我想知道一个客户端是否能够欺骗其 VPN IP 地址,以便它可以像另一个客户端一样出现在服务器上。有什么方法可以防止这种情况发生吗?

我在想也许:1)我为客户端分配静态 IP 地址,然后 2)为每个客户端保存映射 IP 地址-TLS 证书,然后 3)我可以验证每个传入服务器的数据包的源 IP 地址和发送该数据包的 TLS 连接的指纹(或通用名称),看看它们是否匹配。

这可能吗?如果可能,怎么做?

我读到,使用 tls-verify,我可以验证具有证书 A 的客户端是否属于 10.8.0.4(例如,当客户端连接到 OpenVPN 服务器时),但我确定所有源 IP 地址为 10.8.0.4 的数据包都属于具有证书 A 的客户端吗?基本上,我想根据客户端的 IP 地址来识别它们。是否有任何脚本可以验证这一点?

非常感谢您的关注。希望我已经表达得足够清楚了。

答案1

对于每个客户端指定 IP:您有一个特定的程序“客户端配置目录”,用于将密钥绑定到特定的 IP 号码。如果您创建 openvpn 配置目录的子目录“ccd”,则可以指定密钥/ip 映射文件将在此处找到。在您的 openvpn.conf(或 Windows 上的 .ovpn)中:

client-config-dir ccd
ccd-exclusive

如果您有一个客户端,并且其密钥名为“someclient”,那么您可以创建文件 ccd/someclient,其内容如下:

ifconfig-push 192.168.11.57 192.168.11.58

...这将强制客户端使用 192.168.11.57 和 192.168.11.58 之间的隧道(.57 是客户端的 IP)。为每个客户端创建一个新文件,其中包含有效的起始/终止点映射(请参阅 openvpn 文档以了解有效的 IP 对)。

使用此设置,除非客户端拥有 CCD 文件,否则即使他们拥有有效密钥,也不会接受任何客户端。并且每个客户端都会分配一个明确的 IP。要锁定客户端,只需删除相应的 CCD 文件即可。

我还没有测试过客户端是否有可能以某种方式欺骗发送方 IP,尽管我认为这会很棘手,因为连接的隧道性质(服务器端端点不匹配)。但这只是一个假设。

相关内容