开源OPNsense网络防火墙配置Nginx

一、Nignx和HAProxy的区别

在 OPNsense 中同时提供 Nginx 和 HAProxy 插件,是因为它们都可以实现反向代理和负载均衡的功能,但它们的设计侧重点和擅长的领域有所不同。哪个“更好”取决于您的具体需求和使用场景。

以下是两者的比较,希望能帮助您做出选择:

1、Nginx (通过 os-nginx 插件)

  • 核心定位: 高性能的 Web 服务器,同时也是优秀的反向代理服务器和负载均衡器。
  • 优点:
    • 全能性: 不仅可以做反向代理,还能直接托管静态网站、提供静态文件下载、处理 HTTP/2、HTTP/3 等。
    • 配置灵活: 配置语法强大,可以通过 Location 规则对请求进行复杂的匹配和处理(如路径重写、权限控制、集成 WAF 模块 os-waf/os-nginx-naxsi 等)。
    • 上手度: 如果您有 Nginx Web 服务器的使用经验,可能会觉得其配置逻辑更容易理解。
    • 静态文件服务: 如果需要在 OPNsense 上直接提供错误页面、维护页面或小型静态站点,Nginx 是更好的选择。
  • 潜在缺点:
    • 负载均衡专业性: 虽然支持负载均衡,但在高级算法、会话保持等方面可能不如 HAProxy 专门且功能丰富。
    • TCP 代理/均衡: 虽然 Nginx Plus 版本支持 TCP 负载均衡,但社区版(OPNsense 插件通常基于社区版)在这方面的功能相对有限,不如 HAProxy 强大。

2、HAProxy (通过 os-haproxy 插件)

  • 核心定位: 专门为高可用、高性能负载均衡和反向代理而设计。
  • 优点:
    • 负载均衡专业性: 提供多种先进的负载均衡算法、强大的健康检查功能、灵活的会话保持选项,在处理大量并发连接和复杂负载均衡场景时表现出色。
    • 性能: 在纯粹的 TCP/HTTP 代理和负载均衡方面,HAProxy 通常被认为具有极高的性能和效率。
    • 稳定性: 以其高可用性和稳定性著称,被广泛用于关键业务场景。
    • TCP 代理: 擅长在 TCP 层(Layer 4)进行代理和负载均衡,而不仅仅是 HTTP 层(Layer 7)。
  • 潜在缺点:
    • 非 Web 服务器: 不能像 Nginx 那样直接提供静态文件或托管完整的网站。
    • 配置结构: 采用 Frontend(前端)和 Backend(后端)的配置结构,与 Nginx 的 Server/Location 结构不同,初次接触可能需要适应。
    • HTTP 请求处理能力: 虽然在 Layer 7 代理方面很强,但在路径重写等复杂的请求处理方面可能不如 Nginx 灵活。

3、如何选择?

  • 选择 Nginx 如果:

    • 您的主要需求是反向代理一两个 Web 应用,并且偶尔需要托管一些简单的静态文件(例如错误页面)。
    • 您希望集成 WAF 功能 (需要 os-nginx-naxsi 插件配合)。
    • 您已经对 Nginx 的配置语法比较熟悉。
    • 您需要更灵活的基于路径的请求处理和重写规则。
  • 选择 HAProxy 如果:

    • 您的主要需求是为多个后端服务器做负载均衡,需要高级的负载均衡算法和健康检查
    • 您需要高可用性和在高并发场景下的卓越性能。
    • 您需要进行 TCP 层的代理或负载均衡
    • 您更喜欢 HAProxy 的 Frontend/Backend 配置结构。

4、总结:

在 OPNsense 中,Nginx 插件是一个更全能的选择,适合作为 Web 服务的综合入口,能够处理代理、静态文件和更复杂的请求处理。HAProxy 插件则是一个更专业的负载均衡器和反向代理,尤其擅长处理多个后端和高并发场景下的流量分发。

对于大多数家庭用户或小型办公室用户来说,两者的性能差异可能不太明显,选择哪个更多取决于您的具体应用场景以及您对哪种配置结构更熟悉或更容易理解

二、安装和配置Nginx

1、安装Nginx插件

安装非常简单,在下图搜索直接安装就可以了,下图是已经安装好了。

下面开始配置

2、创建颁发证书机构

后面要用到SSL,这里先创建私有证书,首先创建证书颁发机构

3、创建证书

 下图注意选择发行人是上面创建的证书颁发机构,类型要选择“服务器证书”

我这里创建的是通配符证书,可以根据需要修改

4、创建上游服务器

Upstream Servers (上游服务器): 定义实际运行你的Web服务或应用的后端服务器。

  • 进入 Services(服务) -> Nginx -> Configuration(配置) -> Upstream(上游) -> Upstream Server(上游服务器)
  • 点击右下角的 + Add(添加) 按钮。
  • 填写 Description(描述):给你的后端服务器一个易于识别的名称(例如:MyWebApp_Server)。
  • 填写 Server(服务器):输入后端服务器的IP地址或主机名。
  • 填写 Port(端口):输入后端服务器上Web服务监听的端口号(例如:80 或 443)。
  • 填写 Server Priority(服务器优先级):用于负载均衡,单个服务器通常设为 1。
  • 根据需要配置其他高级选项。
  • 点击 Save(保存)

5、创建上游

Upstreams (上游): 将一个或多个上游服务器组合成一个逻辑组,用于负载均衡或简单地引用一个后端。

  • 进入 Services(服务) -> Nginx -> Configuration(配置) -> Upstream(上游) -> Upstream(上游)
  • 点击右下角的 + Add(添加) 按钮。
  • 填写 Description(描述):给这个上游组一个名称(例如:MyWebApp_Backend)。
  • Server Entries(服务器条目) 中选择你之前创建的上游服务器。
  • 选择 Load Balancing Algorithm(负载均衡算法) (如果有多台服务器)。
  • 点击 Save(保存)

 

 

6、创建位置

Locations (位置): 定义如何匹配传入的请求URL,并将匹配的请求转发到哪个上游或处理方式。

  • 进入 Services(服务) -> Nginx -> Configuration(配置) -> HTTP(S) -> Location(位置)
  • 点击右下角的 + Add(添加) 按钮。
  • 填写 Description(描述):给这个位置一个描述(例如:MyWebApp_Root)。
  • 填写 URL Pattern(URL模式):定义匹配的URL路径。/ 通常匹配所有请求,/app/ 匹配以 /app/ 开头的请求。
  • 选择 Match Type(匹配类型)
  • Upstream Servers(上游服务器) 中选择你之前创建的上游组或单个上游服务器。
  • 根据需要配置其他高级选项,例如 WebSocket Support(WebSocket支持)Force HTTPS(强制HTTPS) 等。
  • 点击 Save(保存)

 

7、创建Web服务器

HTTP(S) Servers (HTTP(S)服务器): 定义Nginx监听的IP地址、端口和服务器名称(域名),并将请求与之前创建的Location关联起来。

  • 进入 Services(服务) -> Nginx -> Configuration(配置) -> HTTP(S) -> HTTP Server(HTTP服务器)
  • 点击右下角的 + Add(添加) 按钮。
  • 填写 Description(描述):给这个虚拟主机一个描述(例如:MyWebApp_HTTPS)。
  • 填写 HTTP Listen Address(HTTP监听地址)HTTPS Listen Address(HTTPS监听地址):选择Nginx监听的接口和端口。通常监听WAN接口的80和443端口(如果你想对外提供服务)。请确保OPNsense的WebGUI没有占用这些端口,如果占用了,需要在 System(系统) -> Settings(设置) -> Administration(管理) 中更改WebGUI的端口。
  • 填写 Server Name(服务器名称):输入你的域名(例如:https://www.google.com/search?q=myapp.yourdomain.com)。Nginx会根据这个名称来匹配请求。
  • Locations(位置) 中选择你之前创建的Location。
  • 如果使用HTTPS,需要选择 TLS Certificate(TLS证书)。你可以使用OPNsense的ACME插件(用于Let's Encrypt)或其他方式导入证书。
  • 根据需要配置其他选项,例如 Default Server(默认服务器) (用于处理未匹配到其他Server Name的请求)。
  • 点击 Save(保存)

 下图监听地址设置为:WAN IP地址加端口号,TLS证书选择前面创建的证书

6、应用启动Nginx

General Settings (通用设置): 启用或禁用Nginx服务。

  • 进入 Services(服务) -> Nginx -> Configuration(配置) -> General Settings(通用设置)
  • 勾选 Enable nginx(启用nginx)
  • 点击页面顶部的 Apply(应用) 按钮来应用配置并启动Nginx服务。

7、查看日志是否有错

8、配置防火墙规则

为了让外部流量能够访问到Nginx反向代理,你需要在OPNsense的防火墙中创建相应的规则,允许流量进入Nginx监听的端口(通常是TCP/80和TCP/443)。

  • 导航到 Firewall(防火墙) -> Rules(规则) -> WAN (或你Nginx监听的接口)。
  • 点击右下角的 + Add(添加) 按钮。
  • 配置规则以允许来自外部网络的TCP流量到达OPNsense上Nginx监听的端口。目标通常是 This Firewall 或你为Nginx分配的特定IP地址(如果不是在OPNsense主接口上监听)。
  • 点击 Save(保存)Apply changes(应用更改)

 

 下面是80

下面是443

9、测试

配置好域名解析之后,正常情况下是可以访问的,如下图

三、安装Naxsi WAF

Nginx 的 NAXSI WAF 是一个用于 Nginx 的开源 Web 应用防火墙(WAF)模块。在 OPNsense 中,它通常作为 os-nginx-naxsi 插件的一部分提供,与 Nginx 服务紧密集成。

1、什么是 Web 应用防火墙 (WAF)?

首先,理解 WAF 的作用。WAF 位于 Web 应用(您的网站或服务)前面,检查所有进出 Web 应用的 HTTP 流量。它的主要目的是保护 Web 应用免受各种网络攻击,例如:

  • SQL 注入 (SQL Injection)
  • 跨站脚本 (Cross-Site Scripting - XSS)
  • 路径遍历 (Path Traversal)
  • 远程代码执行 (Remote Code Execution - RCE)
  • 其他常见的 Web 漏洞攻击。

WAF 通过分析请求(URL、头部、请求体)和响应来识别并阻止恶意流量,而允许正常的合法流量通过。

2、NAXSI 的工作原理和特点:

NAXSI 与许多传统的 WAF 不同,它主要采用一种基于规则和评分的方法,可以看作是一种**“默认拒绝特定模式”**的安全模型。它的核心思想是:

  1. 基于规则匹配: NAXSI 内置了一套规则集,这些规则定义了与常见 Web 漏洞攻击相关的特定模式或特征(例如,SQL 注入尝试中常见的特殊字符序列,XSS 攻击中可能出现的标签等)。
  2. 累积评分: 当一个传入的 HTTP 请求命中 NAXSI 的某条规则时,这条规则会为请求累积一定的分数(通常针对不同的攻击类型,如 SQLi 分数、XSS 分数等)。
  3. 阈值判断和阻止: NAXSI 为不同的攻击类型设置了阈值。在一个请求处理完成后,如果任何攻击类型的总分数超过了预设的阈值,NAXSI 就会认为这是一个恶意请求,并采取预定的行动(通常是阻止该请求并返回一个错误页面)。
  4. 学习模式 (Learning Mode): NAXSI 提供学习模式。在该模式下,它不会阻止任何请求,但会记录所有命中了规则的请求信息。通过分析这些日志,管理员可以了解哪些合法流量可能被误判,从而调整规则或阈值,减少误报(False Positives)。

3、NAXSI 在 OPNsense 中的使用:

通过安装 os-nginx-naxsi 插件,您可以在 OPNsense 的 Nginx 配置中启用 NAXSI WAF 功能。

  • 您可以在 Nginx 的 HTTP(S) Server 或 Location 配置中,为特定的虚拟主机或路径启用 NAXSI。
  • OPNsense 的 Nginx 插件界面通常会提供一个专门的 WAF 配置部分,让您管理 NAXSI 的规则集、设置不同攻击类型的分数阈值、启用或禁用学习模式等。
  • 默认情况下,NAXSI 插件会包含一套基础的规则集,您可以根据需要进行调整和细化。

4、NAXSI 的优点:

  • 与 Nginx 紧密集成: 作为 Nginx 模块,性能较高。
  • 基于模式和评分: 可以有效地检测和阻止多种已知攻击模式。
  • 学习模式: 有助于在部署初期减少误报。
  • 开源免费: 相对于商业 WAF 成本较低。

5、NAXSI 的缺点:

  • 配置和调优复杂: 理解规则、分析学习日志并进行调优以平衡安全性和误报率需要专业的知识和经验。
  • 规则更新: 依赖于插件提供者提供的规则更新。
  • 不是纯粹的“只允许已知良好流量”模式: 它仍然是在识别和阻止“已知不良模式”,而不是完全定义和只允许“已知良好模式”(后者是更严格的“正向安全模型”)。

总的来说,Nginx 的 NAXSI WAF 是在 OPNsense 中为您的 Web 服务增加一层安全保护的有力工具,特别是针对常见的 Web 漏洞攻击。但成功有效地使用它需要仔细的配置和持续的监控调优。

6、安装NAXSI

成功之后

下图是规则

仪表盘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海科技服务

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值