内网穿透提供内部服务方案
方案背景
目前有部分项目外包到第三方厂家,他们也需要参与到项目的开发和测试中,所以基于frp搭建一套内网穿透方案,以提供第三方厂家远程开发测试。
公司现在对外开发的服务有以下几种方案:
- 提供公司内部VPN,一般是研发人员使用,使用该方案,就相当于直接连接到公司内网;
- 在公司的公网上开启IP+PORT映射,相当于向外界提供公司内网网络的入口;
- 直接在阿里云等厂家上边搭建对外服务,不涉及公司内网。
由于上述方案均无法保证第三厂家能够正常并且安全参与到项目的开发中,其中某些方案存在极大风险安全问题,故为了保证公司内部网络安全以及对接工作的正常开展,现需研究一套安全的技术方案。
方案分析
该方案具备以下特点:
- 确保公司内网应用端口不直接暴露在公网的环境下;
- 需要对第三方厂家的身份进行验证;
- 内部服务数据在网络传输的过程中须进行加密,预防第三方进行拦截;
- 限制不同厂家的使用服务的有限时长;
- 内部服务的安全和稳定性。
技术分析
为了保障公司公⽹(阿里云)的安全和稳定性,⼀般不会提供阿里云公⽹账号密码,也不会对外提供通过公⽹地址直接连接到内网服务器(frp能提供公网地地址直接访问内网服务);所以我们提供对应的连接⼯具(frpc),在通过阿里云(frps)校验证书和密码验证后,才能访问对应的内网服务。
两端的frpc必须持有证书或者认证文件才能和frps进行连接,其中公司内部frpc是搭建内部的kubernetes集群中,可以对需要提供对外开放的应用进行密码保护,同时也预防单点故障。
第三方frpc(以访客角色进行访问)如果要访问192.168.xxx.xxx的服务,就必须获持有证书文件,正确的密码以及对应服务名称。
frps可以开启tls,对整条链路的数据进行加密,可以预防流量被劫持。
如果证书等重要文件被第三方泄漏出去,可以通过kubernetes监控运行frpc的pod是否存在异常情况,同时也可以限制该pod只能访问服务,不能进行ssh登录。(后续所有加入到kubernetes的服务器均不能使用root登录,甚至不允许其他人进行登录服务器,搭建软件均需要联系kubernetes管理员)。
预期成果
- 不在公司的公网上开放任何与第三方对接的服务;
- 需要进行证书(TLS)和账号密码等多重校验第三方厂家身份;
- 开启TLS,全链路保证交互数据的加密;
- 提供给第三厂家的client.key和client.crt,规定使用的有限时长,也可以提供证书有限时长的续签;
- 内部frpc运行在公司内部的kubernetes集群中,限制其使用cpu,内存以及登录其他主机。