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

本文摘要OPNSense 可以直接从 Let’s Encrypt 请求免费证书,然后自动进行续约。Let’s Encrypt 提供了有效期 90 天的免费证书。HAProxy 是一个免费的开源软件,可以为 TCP 和 HTTP 应用程序提供负载平衡和高可用性代理服务,以便将访问请求分布到多个服务器上。在本教程中,将演示如何配置 OPNsense 以便将 HAProxy 作为反向代理,从而自动更新 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,你也可以选择其他端口。

修改 Web 访问端口

修改完成后,必须使用修改后的端口访问 OPNsense,本示例为 https://192.168.1.1:4444

导航到“系统 > 固件 > 插件”,安装 os-acme-client 和 os-haproxy 两个插件。

安装插件

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

防火墙规则-WAN 80端口

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

防火墙规则列表

配置 HAProxy

现在配置 HAProxy 来侦听公共 IP(本例中为 10.0.2.15),并将请求重定向到 Exchange 服务器 (10.158.1.10)。

首先,输入 Exchange 服务器的参数。
转到“服务 > HAProxy > 设置 > Real Servers”,然后单击右侧的“ ”添加 Exchange 服务器。

添加 Real Server

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

Real Server SSL 设置

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

Real Server 列表

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

后端池设置

由于仅指示使用的服务器,可以保留默认选项。验证并应用修改。

现在,转到“服务 > HAProxy > 设置 > 规则和检查 > 条件”中创建一个条件。

创建条件

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

条件配置

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

创建规则

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

前端公共服务创建

前端 SSL 和规则配置

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

启用 HAProxy 服务

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

浏览器显示无效证书

配置 Let’s Encrypt

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

Let's Encrypt 设置(Staging 环境)

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

创建 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”可以验证我们的域。

创建 HTTP 前端(端口 80)

HTTP 前端配置详情

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

验证成功状态

如果一切顺利,应该在“Last Acme Status”下看到一个“OK”,也可以在“系统 > 证书 > 证书”中查看获得的证书。

切换到生产环境

测试正常后,就可以切换到生产环境,并用新证书替换旧证书。
导航到“服务 > Let’s Encrypt > 设置”,选择生产环境。

切换到生产环境

选择后,必须重新验证证书。返回到“证书”标签,然后再次要求验证域。

更换证书

现在转到“服务 > HAProxy > 设置 > 虚拟服务 > 公共服务”。选择在端口 443 上侦听的前端,然后编辑参数。删除旧证书,选择新证书,然后提交更改。

更换证书

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

觉得内容不错?我要

评论 暂无评论
暂无评论,快来抢沙发吧~