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