OPNSense 可以直接从 Let’s Encrypt 请求免费证书,然后自动进行续约。Let’s Encrypt 提供了有效期 90 天的免费证书。
HAProxy 是一个免费的开源软件,可以为 TCP 和 HTTP 应用程序提供负载平衡和高可用性代理服务,以便将访问请求分布到多个服务器上。在本教程中,将演示如何配置 OPNsense 以便将 HAProxy 作为反向代理,从而自动更新 SSL 证书。
本示例使用的地址:

Web 服务器位于 dmz 中,IP 地址为:10.158.1.10
配置 OPNsense
OPNsense Web 界面访问的默认端口是 443(HTTPS),由于我们要创建和使用 SSL 证书,因此我们将为 Exchange 保留端口 443。因此需要将默认访问端口由 443 改为其他端口,这里我们修改为 4444,你也可以选择其他端口。

修改完成后,必须使用修改后的端口访问 OPNsense,本示例为 https://192.168.1.1:4444
导航到“系统 > 固件 > 插件”,安装 os-acme-client 和 os-haproxy 两个插件。

添加过滤规则,以允许外部网络访问 WAN 接口上的 80 和 443 端口。规则见下图:

443 端口也重复上述步骤。完成后应该有两个下面的规则:

配置 HAProxy
现在配置 HAProxy 来侦听公共 IP(本例中为 10.0.2.15),并将请求重定向到 Exchange 服务器 (10.158.1.10)。
首先,输入 Exchange 服务器的参数。
转到“服务 > HAProxy > 设置 > Real Servers”,然后单击右侧的“ ”添加 Exchange 服务器。

由于要使用自签名证书,所以选中“SSL”选项,而不是“Verify SSL Certificate”。

输入位于 DMZ 中的 Exchange 服务器地址:10.158.1.10。单击“保存”,现在应该看到 Exchange 服务器。单击“Apply ”应用更改!

转到“服务 > HAProxy > 设置 > 虚拟服务 > 后端池”,创建一个后端。

由于仅指示使用的服务器,可以保留默认选项。验证并应用修改。
现在,转到“服务 > HAProxy > 设置 > 规则和检查 > 条件”中创建一个条件。

创建如下图所示的条件并进行验证。

现在使用此条件来创建规则,转到“服务 > HAProxy > 设置 > 规则和检查 > 规则”。添加一条规则,如下图所示:

最后,我们来创建一个前端,转到“服务 > HAProxy > 设置 > 虚拟服务 > 公共服务”。在这里输入公网地址,必须从外部可以在该公网地址上访问 Exchange。还必须激活 SSL 模式并填写默认的 OPNsense 证书。应用先前创建的规则进行验证。


最后,启用 HAProxy 服务,转到“服务 > HAProxy > 设置”,选中“启用 HAProxy”,对于已经激活 HAProxy 服务的,建议重新启动该服务。

现在用域名访问 Exchange 服务器,可以看到它确实具有证书,但是无效,因为它是 OPNsense 提供的证书。

配置 Let’s Encrypt
“Let’s Encrypt”对发行有效证书进行了限制,只发行有限数量的证书。因此在测试完成后再切换到生产环境是有必要的。因此,选择“Staging Environment”,激活插件,激活 HAProxy 集成,然后单击“应用更改”。

下面,需要创建一个帐户,转到“服务 > Let’s Encrypt > 帐号”,填写帐号信息。

转到“服务 > Let’s Encrypt > 帐号 > 验证方法”,验证类型选 HTTP-01,HTTP 服务选择 HAProxy Frontend integration。如下图所示:

现在,我们将转到“证书”部分来编辑证书。

我们单击“颁发/续订证书”来创建证书。通常可能会收到错误消息,因为域验证失败。这是正常现象,我们已将 Exchange 配置为侦听端口 443(HTTPS),但是 Let’s Encrypt 使用 HTTP-01 来验证域,该方法需要在端口 80(HTTP)上完成的。因此,还需要创建一个额外的前端,该前端将在端口 80(HTTP)上侦听该前端,以便“Let’s Encrypt”可以验证该域。
验证域名
返回到“服务 > HAProxy > 设置 > 虚拟服务 > 公共服务”,创建一个新的前端,完成后单击“应用”。通过在“Let’s Encrypt”中启用 HAProxy 集成,它在 HAProxy 中创建了一个名为“redirect_acme_challenge”的规则。该规则使“Let’s Encrypt”可以验证我们的域。


返回到“Let’s Encrypt”插件的“证书”标签,然后再次验证域。

如果一切顺利,应该在“Last Acme Status”下看到一个“OK”,也可以在“系统 > 证书 > 证书”中查看获得的证书。
切换到生产环境
测试正常后,就可以切换到生产环境,并用新证书替换旧证书。
导航到“服务 > Let’s Encrypt > 设置”,选择生产环境。

选择后,必须重新验证证书。返回到“证书”标签,然后再次要求验证域。
更换证书
现在转到“服务 > HAProxy > 设置 > 虚拟服务 > 公共服务”。选择在端口 443 上侦听的前端,然后编辑参数。删除旧证书,选择新证书,然后提交更改。

完成上述所有步骤后,在浏览器中输入域名,就可以看到站点现在已经有了 Let’s Encrypt 签名的证书!
最后,不要忘记在 OPNsense 中配置 HAProxy 日志,以便能够跟踪前端上的连接。
觉得内容不错?我要