使用最佳安全性在pfSense中配置OpenVPN服务器

pfSense操作系统,面向 火墙 和路由器,有几个 VPN 协议以通过站点到站点VPN互连站点,我们还可以配置远程访问VPN来互连不同的移动客户端,以便所有Internet通信都通过操作系统本身。 由于其安全性,灵活性和良好的操作性,OpenVPN是创建虚拟专用网络最常用的软件之一。 今天,在本文中,我们将逐步说明如何配置pfSense内的OpenVPN服务器。

在pfSense中配置OpenVPN服务器

pfSense内置的OpenVPN是什么?做什么?

OpenVPN是一款允许我们构建虚拟专用网络的软件,我们将拥有一个控制通道,将在其中管理隧道的解除和加密协议的协商,并且我们将拥有一个数据通道,在其中将所有隧道流量点对点加密。 pfSense中OpenVPN的优势之一是,绝大多数可用选项可通过非常直观的图形用户界面获得,这将使我们能够对其进行配置,而无需在“选项”字段中手动合并任何指令。 先进的。 我们已经集成到pfSense中的OpenVPN软件将允许我们创建和配置两种类型的体系结构:

  • 远程访问VPN –远程 客户端将连接到pfSense VPN服务器,并通过我们连接到Internet。 他们还将能够访问我们指示的子网。 这种类型的VPN面向通勤者,网络和系统技术人员等。
  • 站点到站点VPN :此体系结构允许我们将一个站点与另一个站点进行互通,通过Internet互通不同的站点,并且所有流量都受到点对点保护。 例如,使用这种类型的VPN,我们可以与办公室,公司总部等进行通信。

OpenVPN支持数十种不同的配置,以提高性能和安全性。 pfSense允许使用不同类型的身份验证,但是最推荐使用基于SSL / TLS证书的方式,以确保真实性,机密性和完整性,并且不建议使用预共享密钥。 除了合并基于SSL / TLS证书的身份验证之外,我们还可以将其他身份验证与用户名/密码合并,以建立一个更强大的系统。 pfSense允许您使用密码导出证书的私钥,这样,为了能够使用这些证书,我们还必须合并一个额外的密码,否则将无法使用。

集成在pfSense中的OpenVPN服务器将使我们能够快速,安全地连接到家庭或远程工作,而不管网络是有线的还是有线的。 WiFi。 所有流量将从我们的OpenVPN客户端(安装在计算机,智能手机或平板电脑上)到pfSense OpenVPN服务器的端到端加密。 一个非常重要的细节是,OpenVPN服务器必须安装在CG-NAT之外的Internet连接中,并且防火墙中的规则已打开以允许连接,否则,我们将无法通过Internet连接。

当然,在服务器上,我们可以添加不同的子网以通过pfSense中的不同子网路由流量,甚至可以在防火墙中配置是否要允许来自特定OpenVPN服务器IP地址的那些访问。 借助OpenVPN,我们提供了两种管理软件包的方式以及它们在传输层级别上的工作方式:

  • TUN :此操作模式允许将通过它传输的所有数据包封装为TCP段或UDP数据报。 将为所有客户端提供一个特定的新子网,默认情况下,OpenVPN子网为10.8.0.0/24,但我们可以配置所需的子网。
  • TAP :此操作模式模拟以太网网络接口,也称为网桥,并且此虚拟隧道的作用是直接封装以太网数据包。 桥接器操作模式对于轻松地与远程用户进行互通很有用,但是,如果源专用网络与目标专用网络匹配,我们将遇到路由问题,并且通信将无法进行。

在本教程中,在pfSense中配置OpenVPN,我们将使用 虚拟子网10.8.0.0/24 连接所有VPN客户端时,我们将很容易识别出我们已连接到网络的不同VPN客户端,此外,我们可以“强制”使用每个具有特定证书的客户端始终具有VPN隧道的相同私有IP地址。

在本手册中,我们将向您展示如何在pfSense中进行非常安全的OpenVPN配置,如何自定义对称,非对称和哈希加密算法。 这样,我们可以对通信进行最佳加密。

使用的加密摘要

  • 数字证书 :OpenVPN允许使用基于RSA的数字证书,也可以使用 EC(椭圆曲线) ,我们将使用EC算法secp521r1,尽管我们可以通过pfSense证书管理使用许多其他算法。 我们将使用的哈希算法将是 SHA512 ,这是我们目前可以使用的最安全的方法之一。 版本2.4的所有VPN客户端都应与此配置兼容,在我们的情况下,服务器和客户端都使用OpenVPN 2.5或更高版本,因此应该没有问题。
  • OpenVPN控制频道 :我们将使用TLS 1.3来提供最大的安全性,并始终使用PFS(完美前向保密)。 我们将使用TLS 1.3中的三个加密套件来建立通信:TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256和TLS_AES_128_GCM_SHA256。 如果要检查服务器或客户端是否支持这种加密类型,则必须在控制台中放入“ openvpn –show-tls”。
  • OpenVPN数据通道 :我们将使用AES-256-GCM对称加密算法,该算法是目前最安全的算法,已被整合到OpenVPN 2.4及更高版本中。 但是,我们还将对VPN客户端使用CHACHA20-POLY1305和AES-128-GCM来选择所需的VPN客户端,并优先考虑第一个客户端。 如果要检查服务器或客户端是否支持这些类型的加密,则必须在控制台中放入“ openvpn –show-ciphers”。

要在数据通道中定义我们想使用TLS 1.3,我们将不得不使用指令“ tls-ciphersuites”,而不是我们通常使用的典型“ tls-cipher”。 如下所示:

tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256

除了这些安全措施之外,我们还将在首次TLS协商中包含HMAC签名,这将使我们能够保护OpenVPN服务器免受可能的DoS攻击。 如果客户端没有正确的HMAC签名,它将自动被阻止,并且不会继续检查数字证书。 我们将使用OpenVPN 2.4及更高版本中提供的tls-crypt,以获得最佳的安全性,因为它允许我们对通道进行身份验证和加密,从而使任何人都无法捕获此预共享密钥。

最后,我们将使用UDP协议而不是TCP,因为它可以更强地抵御拒绝服务攻击,因此必须记住UDP是非连接的,不可靠的且面向连接的。 但是,我们可以毫无问题地使用TCP为VPN提供此协议的所有优点。

安装OpenVPN Client插件以生成配置

尽管OpenVPN默认安装在pfSense中,无论是在服务器模式还是在客户端模式下,我们都没有预先安装的程序包,该程序包允许我们自动为客户端生成配置。 如果转到“系统/程序包管理器”中的程序包管理器,然后转到“可用程序包”选项卡,我们可以安装“ OpenVPN-client-export”程序包,这将使我们能够精确地执行此操作,从而极大地简化了操作客户端的配置,并导入服务器配置及其相应的数字证书。

安装完成后,我们将准备进行下一步,创建数字证书。

在pfSense本身中创建数字证书

要配置具有“远程访问SSL / TLS”身份验证的OpenVPN服务器,我们必须使用数字证书。 我们将必须创建一个用于签署不同证书的证书颁发机构(CA),我们必须为OpenVPN服务器和服务器类型以及要注册的VPN客户端的所有数字证书创建一个特定的证书。 。

我们还可以创建证书吊销列表,如果由于丢失了证书而使证书受损,我们可以直接将其取消以使其无效。 万一有非法用户使用它,您将无法以任何方式连接到我们的VPN服务器。

创建CA(证书颁发机构)

在“ CA”部分中,我们必须单击“添加”以创建新的证书颁发机构,这样做对于使所有数字证书(包括服务器和将要使用的VPN客户端)正确工作至关重要。 连接。 在此菜单中,我们必须选择以下选项:

  • 创建/编辑CA
    • 描述性名称:无论我们想要什么,我们都为该CA加上描述性名称。
    • 方法:创建一个内部证书颁发机构。
  • 内部证书颁发机构
    • 密钥类型:具有与OpenVPN兼容的secp521r1的ECDSA。
    • 摘要算法:sha512
    • 终生天数:3650(10年)
    • 公用名:CN必须是描述性名称,用于唯一描述此CA。 在我们的案例中,我们只有一个OpenVPN的CA,因此我们只需要输入“ openvpn-ca”
    • 国家/地区代码:无。 不再需要填写新的OpenVPN证书。

CA配置如下:

在不同的菜单中,我们可以选择其他配置选项,例如导入已经创建的CA或创建中间CA,我们先创建一个CA,然后再创建证书,而无需使用任何中间CA。

我们还可以在RSA或ECDSA之间进行选择,甚至可以使用不同的RSA密钥长度和不同的EC算法来创建CA。 在“摘要算法”中,我们可以选择不同的哈希算法,最推荐使用的是sha256,sha384和sha512,出于安全考虑,切勿使用sha1。

一旦创建了CA,它将显示在CA列表中,如下所示:

在此菜单中,我们可以看到与其关联的证书数量,CN,证书的有效性以及当前是否正在使用此CA。 当我们使用CA或证书时,我们将无法删除它。 在“操作”部分中,我们可以编辑证书的描述,导出CA的公钥,私钥,更新CA甚至删除我们刚刚创建的CA。

创建OpenVPN服务器证书

现在,我们必须创建pfSense中集成的OpenVPN服务器将使用的证书。 我们转到“证书”部分,然后单击“添加/签名”,我们将始终在pfSense中拥有一个预配置的证书,因为HTTPS协议使用它来进行连接,否则它将无法正常工作。 在安装操作系统时,将自动创建此证书。

证书创建菜单与上一个非常相似,我们将不得不在以下三个选项之间进行选择:

  • 方法:
    • 创建一个内部证书。
    • 导入现有证书。
    • 创建证书签名请求。
    • 签署证书签名请求。

我们将选择第一个选项,创建一个内部证书。

接下来,无论需要什么,我们都必须给它一个描述性名称,并且配置必须如下所示:

  • 添加/签名新证书
    • 方法:创建一个内部证书颁发机构。
    • 描述性名称:无论我们想要什么,我们都为该证书添加一个描述性名称。
  • 内部证书
    • 证书颁发机构:我们必须选择在上一步中刚刚创建的先前的CA。
    • 密钥类型:具有与OpenVPN兼容的secp521r1的ECDSA。 与CA相同。
    • 摘要算法:sha512
    • 终生天数:3650(10年)
    • 公用名:CN必须是描述性名称,明确描述此服务器证书。 在我们的情况下,我们只有一个服务器证书,因此我们仅表示了openvpn-server。
    • 国家/地区代码:无。 不再需要填写新的OpenVPN证书。

如果我们拥有的证书的有效期超过398天,则可能会在某些平台上给我们带来错误,这是一种普遍的方式,但不适用于OpenVPN。 因此,我们可以将我们想要的持续时间没有问题,这不会给我们带来失败。

在底部,我们必须选择以下选项:

  • 证书属性:
    • 证书类型:服务器证书
    • 备用名称:我们可以将其保留为空。

我们必须记住,现在我们正在为OpenVPN服务器配置数字证书,因此,我们必须选择“服务器证书”。

“备用名称”部分通常用于IPsec证书,但我们不会在OpenVPN中使用它。

创建后,我们将在证书列表中看到它,此外,我们还可以看到与我们签署证书的CA,以及它是否属于服务器类型。

该服务器的数字证书是在pfSense中配置OpenVPN服务器时必须放置的数字证书,我们必须牢记我们为其指定的名称,因为稍后它将带我们列出所有证书。

为所有客户创建证书

要为客户端创建一个或多个数字证书,我们必须执行与服务器证书完全相同的过程。

  • 添加/签名新证书
    • 方法:创建一个内部证书颁发机构。
    • 描述性名称:我们在此客户端证书上添加了描述性名称。
  • 内部证书
    • 证书颁发机构:我们必须选择在第一步中创建的先前的CA。
    • 密钥类型:具有与OpenVPN兼容的secp521r1的ECDSA。 与CA相同。
    • 摘要算法:sha512
    • 终生天数:3650(10年)
    • 公用名:CN必须是描述性名称,用于唯一描述此客户端证书。 在我们的情况下,我们只有一个客户端证书,因此我们仅指示了openvpn-client1。
    • 国家/地区代码:无。 不再需要填写新的OpenVPN证书。

在“证书属性”部分中,我们将必须对其进行如下配置:

  • 证书属性:
    • 证书类型:用户证书
    • 备用名称:我们可以将其保留为空。

创建后,我们可以看到在pfSense中创建的证书的新列表。

如果单击“编辑”,我们唯一可以做的就是修改描述性名称,但是我们也可以使用密码导出私钥,如果我们输入密码,则私钥本身将使用AES-256-CBC加密为保护其内容,因此请避免如果将其落入错误的手中,则他们可以阅读和使用它。 这就是我们用来导出客户证书的方式,稍后我们将向您展示。

如果我们想创建更多的客户证书,我们可以用相同的方式来做,我们要做的就是放一个不同的描述以及一个不同的CN。

一旦完成创建将要连接到OpenVPN服务器的客户端的所有证书,我们将逐步配置服务器。

使用说明的所有选项配置OpenVPN服务器

要配置OpenVPN服务器,我们要做的就是转到pfSense的主菜单,单击“ VPN”部分,然后选择“ OpenVPN的 “。

在“ OpenVPN”部分,我们必须单击“服务器”,然后单击“添加”以添加新的OpenVPN服务器。

在OpenVPN服务器配置中,我们必须选择以下选项:

  • 一般资料:
    • 服务器模式:远程访问(SSL / TLS)
    • 协议:UDP
    • 设备模式:tun
    • 广域网接口
    • 本地端口:1194,默认为该端口,建议更改。
    • 描述:我们可以对此OpenVPN服务器进行描述,因为我们可以创建多个。

在“协议”部分中,我们有不同的配置选项,默认情况下为“仅IPv4上的UDP”,因为如果使用此协议,我们还可以使用TCP,甚至TCP和UDP,以及IPv6网络。 网。 如前所述,在“设备模式”部分,我们可以选择tun或tap,tun处于第3层,而tap处于第2层,这有其优势和劣势。 在“接口”部分,最正常的事情是使用WAN,但是我们可以在所有接口上使用此OpenVPN服务器进行监听。 最后,在“本地端口”中,我们可以修改所需的TCP和/或UDP端口,建议不要使用默认端口1194。

在里面 ” 密码设定 ”部分,我们可以配置与SSL / TLS数字证书有关的所有内容,然后说明所有选项:

  • 密码设定
    • TLS配置:我们启用TLS密钥的使用,要使用tls-crypt,我们单击自动生成TLS密钥。 保存更改时,如果我们要使用“身份验证”或“加密”,则会显示它,建议后者使用新的tls-crypt而不是以前使用的tls-auth。
    • 对等证书颁发机构:我们选择在pfSense本身中为此OpenVPN服务器创建的CA。
    • 对等证书吊销列表:如果创建证书吊销列表,则会在“系统> Cert.Manager”部分中创建它,并在此处选择之前创建的列表。
    • 服务器证书:我们选择OpenVPN服务器,在本例中为“ OpenVPN_ServidorOVPN(服务器:是)”
    • DH参数长度:仅ECDH
    • ECDH曲线:我们选择secp521r1

在“数据 加密 “协商”部分将其启用,然后选择要用于数据通道的对称密码。 在我们的案例中,我们总共选择了3个:AES-256-GCM,AES-128-GCM以及最近合并的新CHACHA20-POLY1305。 如果OpenVPN客户端不兼容,我们还必须选择“ Fallback”算法,在这种情况下,我们选择AES-256-CBC,但是如果您想要最大的安全性,我们建议选择AES-256-GCM强制其不连接如果我们不使用强加密,则不能使用AES-256-CBC,如果有旧客户端,则必须更新它们。

在“ Auth Digest Algorithm”中,我们将选择始终安全的哈希函数SHA256或SHA512。

在“硬件加密”部分:如果我们具有硬件加密加速功能,我们将在此处进行选择,以便更快地连接至VPN,如果我们没有或不想启用它,则保留默认值。

在“证书深度”中,我们选择“一个(客户端+服务器)”。

在“隧道设置”部分,我们将必须配置以下选项:

  • IPv4隧道网络:我们将为OpenVPN客户端放置特定的子网,它必须是我们之前未使用的免费子网。 在本例中,我们选择了10.8.0.0/24,这是该软件的默认设置,但是我们可以使用任何子网。
  • IPv6隧道网络:与IPv4相同,但是如果您使用IPv6网络。
  • 重定向IPv4网关和IPv6:如果启用此选项,则来自OpenVPN客户端的所有流量都将通过OpenVPN服务器,并且可以访问操作系统的所有子网,我们可以通过防火墙配置选项来阻止对某些子网的访问,但是客户端将接收到达所有子网的路由。 如果要进行全隧道VPN,请激活此选项,如果要使用Split-Tunnel,则将其禁用,并且必须在下面输入希望它们访问的子网。
  • 并发连接数:10,是同时连接的最大客户端数,这取决于您的需求。
  • 允许压缩:拒绝,我们不想压缩以避免攻击。
  • 推送压缩:我们将能够向客户端提供此压缩选项(无压缩)。
  • 客户端之间的通信:我们可以允许或拒绝OpenVPN客户端彼此之间进行通信,出于安全考虑,建议禁用它,但是在某些情况下,有必要甚至建议进行通信,这取决于您的需求。
  • 重复连接:通常应禁用此选项,每个OpenVPN客户端应具有自己的凭据,并且不能使用具有相同证书的相同客户端进行连接。 如果我们要在智能手机,计算机和平板电脑(3个设备)上使用相同的证书,并且要同时连接,则此选项很有用。 我们的建议是为每个设备颁发证书。

在“客户端设置”中,我们可以为客户端提供动态IP,然后可以指定每个客户端的IP特定范围为10.8.0.0/24。 在“拓扑”中,我们选择“子网”,它比传统的net30效率要高得多。

在《 Ping设置》中,我们可以配置ping,以查看客户端是否仍处于连接状态或失去连接。

在“高级客户端设置”中,我们可以配置 DNS 外部DNS服务器(例如流行的8.8.8.8)或pfSense本身的本地DNS服务器。 我们还可以选择“阻止对DNS服务器的访问”选项(VPN隧道除外)以提高安全性。

在“高级配置”部分,我们可以添加图形用户界面中没有的其他高级规则,例如,我们有兴趣始终至少与TLS 1.3协商,如果客户端不兼容,它将无法连接,因为我们将不会启用TLS 1.2。

如前所述,当首次保存OpenVPN服务器配置时,在“ TLS密钥”部分中,我们将看到pfSense自动生成的TLS密钥,并且我们必须选择“ TLS加密和身份验证”。

配置完成后,我们可以在下面看到配置摘要:

我们可以对路由进行的另一种配置是,不是强制所有客户端通过VPN隧道发送所有流量,而是可以定义我们只能访问某些网络,我们想要的网络,并自动访问它们将接收到的客户端。路由到这些网络。

一旦配置了OpenVPN服务器,就将配置防火墙以允许传入连接。

在防火墙上配置规则以允许访问

在“防火墙/规则”部分中,我们单击WAN,然后创建具有以下值的规则:

  • 动作:通过
  • 接口:广域网
  • 地址族:IPv4
  • 协议:UDP
  • 来源:任何来源,因为我们并不总是知道我们将拥有什么公共IP
  • 目标:OpenVPN端口1194或我们已配置服务器的端口中的WAN地址。

保存后,将在Internet WAN中创建规则。

现在,我们必须转到“防火墙/规则/ OpenVPN”部分,在此部分中,我们将定义OpenVPN客户端的访问权限。 如果我们要允许OpenVPN客户端访问任何pfSense子网以及Internet,则必须创建“全部通过”规则,定义以下内容:

  • 动作:通过
  • 接口:OpenVPN
  • 地址族:IPv4
  • 协议:任何
  • 资料来源:任何
  • 目的地:任何

如果我们要创建特定的规则以拒绝到某些子网的通信,则必须创建满足此条件的规则。

一旦我们可以从Internet WAN访问操作系统,也可以访问操作系统的任何子网并重定向到Internet,我们将为客户端导出OpenVPN配置文件。

导出客户端的OpenVPN配置文件

我们转到“ VPN / OpenVPN /客户端导出”部分,在这里我们将配置扩展以为客户端生成自动配置:

  • 远程访问服务器:我们将选择已配置的VPN服务器,我们可以有多个,因此,我们将选择一个我们感兴趣的服务器。
  • 主机名解析:我们在pfSense中配置的DDNS域或WAN的IP地址,我们将有几种可能性。
  • 验证服务器CN:自动-使用verify-x509-name
  • 阻止外部DNS:我们启用此选项。
  • 使用随机本地端口:我们启用此选项。

完成上述所有配置后,我们必须单击要导出的客户端,最正常的选择是“内联配置:大多数客户端”,它将导出客户端证书的CA,公钥和私钥,以及所有配置。

我们的建议是从“内联配置:大多数客户端”中选择此选项,但要添加加密的客户端的私钥,这样,如果此配置文件落入错误的人手中,它将无法访问我们的VPN服务器。 要导出加密的私钥,我们必须转到“系统/证书管理器”部分,然后“编辑”客户端的证书,输入密码并单击“导出私钥”:

现在,使用文本编辑器,打开此加密密钥,然后下载刚刚下载的配置文件:

  • 在完整的OpenVPN配置文件中,我们删除« »
  • 我们将导出的私钥的完整内容复制到« »并保存更改。

现在,当使用私钥连接到服务器时,我们将必须输入此密码来保护证书。 现在,我们将检查服务是否启动,并与第一个客户端建立连接。

检查服务和连接的客户端的状态

在“状态/ OpenVPN”部分中,我们可以查看它是否已激活,我们将其激活并连接第一个客户端,没有任何问题。

可以使用pfSense进行的另一项建议是提供始终使用具有相同IP地址的特定证书的相同VPN客户端。 为此,我们只需进入“客户端特定替代”,添加一个新的,选择特定客户端的服务器和CN,并在“高级”部分中输入:

ifconfig-push 10.8.0.2 255.255.255.0;

具有特定CN的VPN客户端将始终在VPN通道内拥有此私有IP地址。