OpenVPN 在两点之间创建一个加密隧道,防止第三方访问您的网络流量。 通过设置您的虚拟专用网络 (VPN) 服务器,您将成为自己的 VPN 提供商。 许多流行的 VPN 服务已经使用 OpenVPN,所以为什么将您的连接绑定到特定的提供商,而您可以完全控制呢?
本系列文章的第一篇文章演示了如何设置和配置 Linux PC 作为您的 OpenVPN 服务器。 它还讨论了如何配置您的路由器,以便您可以从外部网络访问您的 VPN 服务器。
第二篇文章演示了如何使用来自 OpenVPN wiki 的自定义步骤安装 OpenVPN 服务器软件。
安装 OpenVPN
首先,使用您的包管理器安装 OpenVPN 和 easy-rsa
应用程序(以帮助您在服务器上设置身份验证)。 此示例使用 Fedora Linux; 如果您选择了其他发行版,请使用适合您的发行版的命令
$ sudo dnf install openvpn easy-rsa
这将创建一些空目录
/etc/openvpn
/etc/openvpn/client
/etc/openvpn/server
如果在安装过程中未创建这些目录,请手动创建它们。
设置身份验证
OpenVPN 依赖于 easy-rsa
脚本,并且应该有自己的副本。 复制 easy-rsa
脚本和文件
$ sudo mkdir /etc/openvpn/easy-rsa
$ sudo cp -rai /usr/share/easy-rsa/3/* \
/etc/openvpn/easy-rsa/
身份验证非常重要,OpenVPN 对此非常重视。 理论上,如果 Alice 需要访问 Bob 公司内的私人信息,Bob 必须确保 Alice 确实是 Alice。 同样,Alice 必须确保 Bob 确实是 Bob。 我们称之为相互身份验证。
当今的最佳实践是从以下三个可能的因素中检查两个属性
- 你拥有的东西
- 你知道的东西
- 你是什么
有很多选择。 此 OpenVPN 设置使用
- 证书:客户端和服务器都拥有的东西
- 证书密码:人们知道的东西
Alice 和 Bob 需要帮助才能相互验证。 由于他们都信任 Cathy,因此 Cathy 扮演一个名为证书颁发机构 (CA) 的角色。 Cathy 证明 Alice 和 Bob 都是他们声称的人。 因为 Alice 和 Bob 都信任 Cathy,所以他们也相互信任。
但是,是什么说服 Cathy 相信 Alice 和 Bob 确实是 Alice 和 Bob? Cathy 在社区中的声誉取决于能否正确做到这一点,因此,如果她希望 Danielle、Evan、Fiona、Greg 和其他人也信任她,她将严格测试 Alice 和 Bob 的声明。 在 Alice 和 Bob 说服 Cathy 相信他们确实是 Alice 和 Bob 之后,Cathy 会签署证书以供他们相互共享和与世界共享。
Alice 和 Bob 如何知道 Cathy(而不是冒充她的人)签署了证书? 他们使用一种称为 公钥密码术 的技术:
- 找到一种使用一个密钥加密并使用另一个密钥解密的密码算法。
- 声明一个密钥为私钥,并与公众共享另一个密钥。
- Cathy 与世界共享她的公钥和她的签名的明文副本。
- Cathy 使用她的私钥加密她的签名。 任何人都可以使用她的公钥解密它。
- 如果 Cathy 解密的签名与明文副本匹配,Alice 和 Bob 可以相信 Cathy 确实签署了它。
每次您在线购买商品和服务时,您都会使用相同的技术。
实施身份验证
OpenVPN 的 文档建议在单独的系统上或至少在 OpenVPN 服务器上的单独目录中设置 CA。 该文档还建议从服务器和客户端生成服务器和客户端证书。 因为这是一个简单的设置,所以您可以将 OpenVPN 服务器用作其自己的 CA,并将证书和密钥放入服务器上的指定目录中。
从服务器生成证书,并在客户端设置过程中将它们复制到每个客户端。
此实现使用自签名证书。 这是可行的,因为服务器信任自身,并且客户端信任服务器。 因此,服务器是签署证书的最佳 CA。
从 OpenVPN 服务器,设置 CA
$ sudo mkdir /etc/openvpn/ca
$ cd /etc/openvpn/ca
$ sudo /etc/openvpn/easy-rsa/easyrsa init-pki
$ sudo /etc/openvpn/easy-rsa/easyrsa build-ca
使用一个容易记住但难以猜测的密码。
设置服务器密钥对和证书请求
$ cd /etc/openvpn/server
$ sudo /etc/openvpn/easy-rsa/easyrsa init-pki
$ sudo /etc/openvpn/easy-rsa/easyrsa gen-req OVPNserver2020 nopass
在本例中,OVPNServer2020
是您在本系列文章的第一篇文章中分配给 OpenVPN 服务器的主机名。
生成和签名证书
现在您必须向 CA 发送服务器请求,并生成和签署服务器证书。
此步骤本质上是将请求文件从 /etc/openvpn/server/pki/reqs/OVPNserver2020.req
复制到 /etc/openvpn/ca/pki/reqs/OVPNserver2020.req
,以准备进行审查和签名
$ cd /etc/openvpn/ca
$ sudo /etc/openvpn/easy-rsa/easyrsa \
import-req /etc/openvpn/server/pki/reqs/OVPNserver2020.req OVPNserver2020
审查和签署请求
您已经生成了一个请求,所以现在您必须审查和签署证书
$ cd /etc/openvpn/ca
$ sudo /etc/openvpn/easy-rsa/easyrsa \
show-req OVPNserver2020
以服务器身份签名
$ cd /etc/openvpn/ca
$ sudo /etc/openvpn/easy-rsa/easyrsa \
sign-req server OVPNserver2020
将服务器和 CA 证书的副本放在它们所属的位置,以便配置文件可以拾取它们
$ sudo cp /etc/openvpn/ca/pki/issued/OVPNserver2020.crt \
/etc/openvpn/server/pki/
$ sudo cp /etc/openvpn/ca/pki/ca.crt \
/etc/openvpn/server/pki/
接下来,生成 Diffie-Hellman 参数,以便客户端和服务器可以交换会话密钥
$ cd /etc/openvpn/server
$ sudo /etc/openvpn/easy-rsa/easyrsa gen-dh
快完成了
本系列文章的下一篇将演示如何配置和启动您刚刚构建的 OpenVPN 服务器。
本文基于 D. Greg Scott 的 博客 并经许可重复使用。
评论已关闭。