fatedier / frp

A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
Apache License 2.0
85.49k stars 13.25k forks source link

访问端结束时如果proxy连接数为0时关闭该端口 #2107

Open hualongsheng1988 opened 3 years ago

hualongsheng1988 commented 3 years ago

proxy 连接数是访问端访问的数量(如远程桌面),当访问端退出时数量减1,如果数量减为0时,服务端关闭该proxy的端口。(目前不关闭端口)

Becods commented 3 years ago

理论上来讲,当proxy的端口关闭的时候,访问端将无法主动连接至服务端,这时只能通过某种方式重新打开端口(listen),例如hook 一般情况下并不重要关闭端口,除非是为了安全或者端口不够用

hualongsheng1988 commented 3 years ago

理论上来讲,当proxy的端口关闭的时候,访问端将无法主动连接至服务端,这时只能通过某种方式重新打开端口(listen),例如hook 一般情况下并不重要关闭端口,除非是为了安全或者端口不够用

现在公司限制了端口数量,所以需要这个功能,即没有访问端使用时主动关闭端口

fatedier commented 3 years ago

我们最近也在考虑一个新功能: 一次性的 proxy。

目的是解决某些特殊场景下的安全问题,例如将某个服务暴露出去给特定的用户访问,一旦某个用户访问后,就不再允许其他人访问,或者可以支持指定超时时间后关闭,或者周期性开放。

目前细节还没有想的太清楚,有想法的话可以补充一下。我大致上想到的几个点:

  1. 只接受单个连接。当一个用户连接建立后,不再接受新的连接,当此连接断开后,proxy 关闭。
  2. 只接受第一个连接的 IP,后续所有的连接的 IP 如果与此 IP 不一致,则拒绝。
  3. 支持给一次性 proxy 设置一个超时,达到指定时间后,proxy 关闭。
  4. 支持设置一个周期性的时间,例如每日 9点 - 10 点,其余时间 proxy 关闭。

另外一个问题是,如何触发开启一次性 proxy,可能的方法:

  1. frpc 提供 API 和命令行相关参数触发。
  2. frps 对外提供转发控制接口的能力,将用户控制请求转发到指定的 frpc 触发,由 frpc 做鉴权。
yuyulei commented 3 years ago

"只接受第一个连接的 IP" 更像是指定用户访问的 proxy ,跟一次性的 proxy 不是同一回事。

hualongsheng1988 commented 3 years ago

作者您好我总结一下 1、proxy连接数仅在由非0变为0时 触发关闭端口。 2、proxy连接失效 如10分钟连接数始终为0 关闭端口(这个有点像Web服务的session失效)

cnazev commented 3 years ago

不知道这个功能在日程上了么? 我也在寻求这个功能 为安全着想 之前想的是一段时间没有链接活动后直接关闭进程 需要的时候再ssh服务器手动开启frps服务 但看作者的总结更好 可以更好满足需求