在OPNsense上使用HAProxy和“Let’s Encrypt”续订SSL证书

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日志,以便能够跟踪前端上的连接。