☰
Pritunl+反向代理打造安全远程接入网关:从端口暴露到统一入口
2026/10/15 6:42:51 网站建设 项目流程

刚开始接手这家公司的远程接入需求时,情况其实挺狼狈的。财务系统、内部文档、代码仓库各开了一堆公网端口,运维同学为了省事甚至把远程桌面端口直接暴露在公网安全组里,结果就是三天两头被扫描、被爆破。我当时的任务很简单:把远程办公这件事变得安全、统一、可管理。最终落地的一套框架可以概括为“Pritunl 远程办公安全接入网关 + 前置流量网关”,也就是现在很多人常说的反向接入层。这篇文章是我完整搭建过程的实践记录,包含服务器规划、初始化、用户与访问策略、前置网关配置、日常安全加固,以及几个真实踩过的坑。适合正在做企业远程接入改造的运维、网管,以及希望自己掌控远程接入基础设施的中小型团队。

1. 为什么我会把“远程接入”单独拆成一个项目来做

1.1 暴露公网端口的日子,我实在过够了

最早那家公司并不是没有远程办公能力,恰恰相反,能远程的方式太多了:有人直接开远程桌面,有人把数据库管理工具映射到公网,还有人为了访问内网 Git 仓库,干脆把整个内网段做了路由打通。听起来很方便,实际上就是一个千疮百孔的门。

我记得有一次安全扫描报告出来后,发现办公网里有十几台机器的远程桌面端口是对全互联网开放的。没过多久,其中一台就被暴力破解成功,随后被装上了挖矿程序,CPU 直接跑满。那次事件之后,公司才意识到一个问题:远程办公最大的难点不是“能不能连上”,而是“怎么只让该连的人连上,并且整个过程可审计、可追溯”。

传统方案里,每个内网系统都各自处理外部接入,等于把安全责任分散到了每个业务系统身上,只要有一个系统配置不严谨,整个内网就存在突破口。而我想要的,是先把所有远程接入请求集中到一个统一的门口,让这个门口负责身份认证、加密传输、访问控制,再由它决定用户能不能进入内网、能进到什么范围。这个思想,说白了就是“统一接入网关”。

1.2 三个选型约束:安全、易维护、员工体验

选型之前,我先给自己定了几条硬约束,避免被各种花哨功能带偏。

第一,安全层面必须做到多因素认证。员工账号加密码远远不够,还要有动态口令。谁什么时候在什么设备上接入过,系统必须能留下日志。第二,维护成本不能太高。作为一个小团队的运维,我不可能每天去手改隧道配置、手工管理证书。我需要一个集中管理面板,能创建用户、分配权限、查看在线状态,最好还能导出审计日志。第三,员工体验不能太差。如果接入流程复杂到要让员工看三页说明书,方案就很难推行。客户端要尽量轻量,登录后能自动连接,断线能自动重连。

带着这三条约束,我最后选了 Pritunl 作为核心接入服务。它把复杂的隧道协商、证书管理、用户认证、路由下发这些能力都集成到了一个 Web 管理界面里,而不是散落在各种命令行和配置文件里。对中小型团队来说,这大大降低了日常运维的上手门槛。

1.3 最终方案:加密隧道 + 统一入口

整体架构看起来很简单,但每一层的职责都很明确。

用户终端先装上接入客户端,连接到一个统一域名。这个域名背后是一台前置流量网关,负责完成 TLS 证书校验、接入请求的初步检查和流量转发。前置网关再把合法请求转交给真正负责身份认证的 Pritunl 服务。Pritunl 确认用户身份、验证动态口令、下发内网地址和允许访问的路由规则,用户这时才算真正进入办公网。

有人可能会问,Pritunl 本身不是已经有加密隧道能力了吗,为什么前面还要再加一层前置流量网关?这个我在第 4 部分会详细展开。简单说,前置这一层承担了对外暴露面的收敛、证书的统一终结、后续扩容时的灵活性,也让员工只需要记住一个域名,而不是一长串 IP 和端口。

2. Pritunl 部署前的规划和参数选择

2.1 服务器与网络拓扑,以及我踩过的端口规划坑

Pritunl 对硬件要求其实不高。我最初用一台 2 核 4GB 的云主机跑,十几个人同时在线完全没压力。如果公司规模到几百人,建议至少 4 核 8GB。系统我选了 Ubuntu 22.04 LTS,用起来比较顺手,遇到问题也容易搜到社区经验。

这里我要特别强调一下网络规划。Pritunl 服务端会监听几个端口:一个是 Web 管理面板,一个是接入服务端口,还有一个是数据库相关服务。很多人在初期容易犯一个错误,就是安装完成后为了图省事,把所有端口都加到云安全组的放行规则里,对外全部开放。这样做非常危险。

我当时给那家公司规划的放行策略是这样的:

用途端口是否对外开放
前置流量网关443对外开放,这是员工接入的唯一入口
Pritunl 管理面板默认高位端口不对公网开放,只允许管理网段访问
Pritunl 接入服务端口自定义高位端口不对公网直接开放,经由前置网关转发
SSH 远程维护22不对公网开放,或至少在安全组里限制来源 IP

端口收敛这个事我在第 5 部分还会再强调。现在先记住一个原则:员工只需要访问 443 端口,除此之外,公网上不应该再看到任何和这套系统相关的端口。

2.2 域名、证书与解析:先准备好这些才能少返工

部署前最好先把域名规划好。我习惯分配一个独立的子域名给远程接入网关使用,比如接入域名和内部服务域名分开。不建议直接用裸域名或者和公司官网混用一个域名,后续证书管理和日志区分都会麻烦。

证书这一块,我强烈建议别用自签名证书。自签名证书会导致员工访问时出现安全告警,还得让人手动信任证书,体验极差。如果公司暂时没有企业级证书,可以先使用自动签发的免费证书,配合自动续期任务来解决有效期问题。域名解析建议指向前置流量网关的公网 IP,这样后续如果 Pritunl 迁移到了别的服务器,只要前置网关的转发目标调整一下,员工端配置就不需要变动。

2.3 安装与初始化的完整过程(只讲关键步骤)

Pritunl 的安装比较标准化。以下是我实际操作时用到的核心步骤,仅供参考,具体版本请以官方文档为准。

# 添加 Pritunl 软件源之前,先更新系统并安装基础依赖 apt update && apt upgrade -y apt install -y gnupg wget # 导入 Pritunl 官方仓库密钥并添加软件源(具体地址以官网为准) # 然后安装 Pritunl apt install -y pritunl # 启动服务并设置开机自启 systemctl start pritunl systemctl enable pritunl

Pritunl 依赖 MongoDB 保存配置和审计数据,所以还需要确认数据库服务处于运行状态。安装完成后,本机浏览器打开管理面板地址,首次访问会看到一个初始化页面,要求在页面上输入系统生成的一个密钥,然后设置管理员账号和密码。初始化完成之后,第一件事就是进去修改默认配置,包括管理面板监听端口、是否允许实操环境使用公共端口等等。

这一步看着不复杂,但恰恰是很多人容易跳过后续步骤的地方。安装成功只是开始,如果没有对管理面板做访问限制,后面就可能被人扫到管理入口。

3. 组织、用户与访问策略:安全不是在端口上,而是在策略上

3.1 先建组织,再建服务器,最后绑定用户

Pritunl 管理面板里的逻辑层次是“组织-服务器-用户”。我一般会先创建一个组织,比如用公司英文名命名,然后把需要远程接入的服务器关联到这个组织,最后在组织里创建用户账号。

组织的作用主要是做隔离。如果公司有多个部门,或者有外部合作方需要接入,我会建议按团队或项目创建不同的组织,然后给每个组织分配不同的服务器或网段。这样可以避免所有用户都在一个大池子里,权限边界不清晰。

服务器创建的时候需要重点配置两个东西:虚拟网段和 DNS。虚拟网段是用户连进来后分配到的内网地址范围,我习惯用 10.240.0.0/24 这种专门给远程接入用的段,避免和办公网真实网段冲突。DNS 建议填公司内网 DNS 地址,这样用户接入后能直接解析内部系统的主机名,而不是每个人都去记一堆 IP。

3.2 用户账号、动态口令,以及离职账号处理

账号管理这条我走过弯路,以前图方便给整个部门建了一个共享账号,结果出了问题根本定位不到人。后来强行推了“一人一号”,每个员工有独立的接入账号,并强制开启动态口令。

Pritunl 的动态口令做得还算省心,支持标准的多因素认证应用。在用户详情里生成一次性的绑定二维码,员工用自己的认证应用扫码即可。这里有一个细节:一定要提醒员工保存好恢复码,否则不小心删了认证应用,再登录就会非常麻烦。

离职账号建议“禁用”而不是“删除”。删除账号虽然干净,但历史日志里对应的用户记录会变得不完整,审计时说不清楚。禁用之后,这个账号无法再接入,但它的历史操作记录还能完整保留。

3.3 按角色分配访问网段,而不是一人通到底

远程接入最容易犯的另一个错误,是把整个办公网段都推送给所有用户。员工在家里打开客户端,能访问的范围和坐在办公室一模一样。如果员工的私人设备被木马控制,那就相当于打开了整个内网的门。

更合理的做法是,按角色配置路由网段。普通员工只需要访问 OA、邮箱、文件服务器,那就只推送对应网段。技术人员需要访问代码仓库和测试环境,再加对应网段。财务、人事这类敏感系统,甚至可以单独划分一个网段,只允许指定用户访问。

角色可访问网段是否启用动态口令
普通员工OA、文件服务网段是
研发人员OA、文件服务、代码仓库、测试环境网段是
财务人员仅财务系统网段是,且建议单独设备
外部合作方仅指定项目网段是,并设置每周到期

Pritunl 的服务器配置页里有路由设置,把这些网段填进去后,用户连接时才会自动下发对应的路由规则。这个步骤不要省,它直接决定了接入后的最小权限边界。

4. 前置流量网关的搭建与 TLS 接入配置

4.1 为什么不让员工直接连服务器 IP

标题里提到的“反向代理”,拆开来看就是我这一章要做的核心:在 Pritunl 前面放一个统一的前置流量网关。很多初学者不理解为什么要多这一层,觉得多一层多一个故障点。实际上这一层带来的收益远大于额外维护成本。

第一,暴露面收敛。员工访问的始终是同一个域名、同一个 443 端口。即使后端 Pritunl 的接入服务端口被扫描到了,因为前置网关不会把无关端口的流量转交给后端,外部也基本无法直接触达接入服务。第二,灵活扩展。域名解析指向前置网关,后端 Pritunl 换一台机器,或者以后加一台做负载均衡,员工端完全无感。第三,证书管理集中化。TLS 证书只需要在前置流量网关上统一处理,不需要把证书下发到每台客户端,也不需要让 Pritunl 直接对外暴露证书信息。

用一个不太严谨但好理解的类比:Pritunl 是办公楼里负责登记访客的前台,但它如果直接把门口保安的位置也占了,那所有来访者都能看到保安室的门牌号。前置流量网关就是把“对外大门”和“内部前台”分开,让外部只知道大门在哪,不知道里面门牌号。

4.2 配置前置入口:证书、域名与转发规则

我在这套方案里用的是 Nginx 作为前置流量网关。核心思路是让 Nginx 监听 443 端口,完成 TLS 握手后,把请求转交给本机高位端口上运行着的 Pritunl 接入服务。

具体配置涉及几个关键字段,我建议对照 Nginx 官方文档确认最新写法:

配置项作用
listen 443 ssl让 Nginx 对外提供 TLS 接入服务
server_name填写员工访问用的接入域名
ssl_certificate / ssl_certificate_key指定证书文件和私钥文件路径
location /将转发目标指向本机 Pritunl 接入服务端口
keepalive_timeout / 长连接相关配置保证接入隧道建立后连接不被中途切断

转发目标这里尤其要注意:如果 Pritunl 接入服务用的是 9700 这样的高位端口,那 Nginx 就是要把 443 收到的流量转交到 127.0.0.1:9700。由于是给远程接入用的,连接建立后会保持很长一段时间,所以要显式调高超时时间,避免空闲连接被过早清理。

证书这一块,我用的方案是自动续期。第一次手动申请并配置到 Nginx 里,然后加入定时任务,让证书在到期前自动续期。证书续期成功后,记得重载 Nginx 配置,这一步容易漏,漏了客户端第二天就全掉线了。

4.3 处理长连接和流量的细节

远程接入服务对前置流量网关的另一个要求是:连接持续时长可能很长。普通网页请求几秒就结束了,但接入隧道一旦建立,可能一整天下班都不断开。Nginx 作为前置流量网关时,默认的参数往往针对短连接优化,所以需要调整。

我给自己画过一个排查清单:连接建立后查看 Nginx 访问日志,看是否有大量超时断开记录;如果有,优先检查长连接超时时间设置。再有,如果 Pritunl 接入使用 UDP 模式传输,前置流量网关还需要考虑对 UDP 流量的支持。因此在实际部署中,我倾向于让 Pritunl 服务端强制使用 TCP 模式,前端的 Nginx 转发配置会更简单,兼容性也更好。

另外,日志格式里加上了客户端真实来源 IP 的字段。因为经过 Nginx 后,Pritunl 默认看到的是 Nginx 所在服务器的 IP,如果不在转发配置里把原始客户端 IP 传过去,审计日志就失去了意义。这个细节对安全审计非常重要。

5. 安全加固与日常运维

5.1 端口收敛:从“开放一片”到“只留一个”

安全加固最重要的一件事,就是把对外端口收敛到一个。我在那家公司的云安全组里做了很严格的规则,规则如下:

来源目标端口用途
0.0.0.0/0443员工远程接入统一入口
内网管理网段高位管理端口管理员访问 Pritunl 面板
办公网固定出口 IP22SSH 运维
其他全部全部拒绝

这里有一个容易被忽略的点:Pritunl 管理面板默认端口是随机高位端口。只要不对公网开放,它就相当于只在内网可见。但如果运维人员自己在家里想管理面板,建议通过前置流量网关再套一层访问控制,或者配合动态口令,不要直接给管理面板开公网访问。

5.2 日志、监控与告警

远程接入的日志价值比很多人想象中更大。Pritunl 自带审计日志,记录了用户登录、动态口令验证、连接建立与断开时间。这能回答“谁在什么时间从什么 IP 接入了内网”这样的问题。配合前置流量网关的访问日志,还能看到每个外部来源 IP 的访问频率和路径。

监控方面,我最看重的几个指标包括:当前在线人数、当天主动断开次数、认证失败次数、前置网关的 443 端口状态。在线人数突然激增可能是异常事件,认证失败次数连续上涨大概率有人在尝试爆破。即便有动态口令保护,这类告警也不能省。

简单一点的方式是写一个定时检查脚本,把认证失败次数超过阈值的事件通过邮件或即时消息发出来。只要阈值设置合理,这种基础告警基本够用。

5.3 备份和升级的固定节奏

很多运维部署完就忘了 Pritunl 的数据其实都存在 MongoDB 里,一旦数据库损坏,所有用户、组织、路由策略都会丢失。我把备份分成三部分:MongoDB 数据、Pritunl 配置文件、证书和相关密钥。

# 备份 MongoDB 中的 Pritunl 数据库 mongodump --db pritunl --out /backup/pritunl-$(date +%F) # 备份 Pritunl 主配置 cp /etc/pritunl.json /backup/pritunl-$(date +%F)/ # 压缩整个备份目录 tar -czf /backup/pritunl-$(date +%F).tar.gz /backup/pritunl-$(date +%F)

备份文件我记得会同步到另一个存储位置,最好别和前一台服务器放一起。升级的时间基本固定在一个月一次,选在低峰时段,升级前先看官方更新公告,确认有没有破坏性变更,升级后立刻验证一次动态口令登录和路由访问是否正常。

6. 实战中真实踩过的坑,以及团队变大后的演进思路

6.1 六个值得记录的坑

按照“症状、原因、解法”的方式整理一下,这些坑大多是我在两个不同环境里踩过的。

症状根因解决方式
首次初始化时页面提示数据库异常MongoDB 服务未正常启动检查数据库服务运行状态,按顺序先启动数据库再启动 Pritunl
客户端能连上但内网页面打不开服务器路由设置里没添加办公网段在 Pritunl 服务器配置里把内网路由网段补上
管理面板频繁被外部扫描安全组把高位端口全放开了修改安全组,只保留 443 对外开放,管理面板仅内网访问
凌晨员工全部掉线,第二天连不上证书到期且未自动续期配置自动续期任务,续期成功后重载前置网关配置
某个员工换了新手机后无法登录动态口令绑定信息存储在旧设备上在用户管理里重置该用户动态口令,重新扫码绑定
升级后路由表丢失升级脚本和备份恢复顺序不对升级前完整备份数据库,升级后若异常,先停服再恢复

6.2 如果团队更大,这套架构怎么演进

上面这套方案最多能支撑几百人左右的规模。如果公司继续变大,我不会直接在现有机器上硬撑,而是会考虑把前置流量网关和 Pritunl 服务都做成多节点。

前置流量网关可以放两台,前面做 DNS 轮询或负载均衡,任何一台故障时连接能自动迁移。Pritunl 服务端本身也支持多节点部署,多台服务器组成一个集群,共用一个 MongoDB 数据库,用户和配置数据是统一的。这样即使某台 Pritunl 节点中断,其他节点也能接管接入请求。

还有一个方向是结合终端安全状态检查。现在很多远程接入场景,不仅要验证“你是谁”,还要验证“你的设备是否符合公司安全标准”。如果接入网关能识别出设备缺少补丁、没有开启磁盘加密,就暂时不允许接入,这个安全水位会比单纯依靠账号和口令高很多。

最后说一次我自己的习惯。我从来不会把整套系统完全丢给一段文档就撒手不管,每隔一段时间会做一次“模拟事故演练”:故意停掉数据库,按备份恢复流程把整套服务拉起来。这样做虽然麻烦,但真到了出事故那天,团队不会手足无措。对于远程办公接入这类基础设施,最大的安全感不是部署完成那一刻,而是半年后证书自动续期了、离职员工账号第一时间被停用了、日志审计说得清楚的时候。希望这份实践记录能帮你少走一点弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询