背景:事发公司属于无专职运维人员公司,近期有现象表明由于可能存在的弱密码或漏洞,导致该公司后台数据及代码泄露。经了解,该公司所有服务及代码仓库都部署在云上,同时,为节约成本,该公司宽带无公网IP,无防火墙设备。

一、紧急措施

1、创建管理后台云主机专用的安全组,管理后台所在的云主机重置新的弹性IP,并在安全组中将公司此时的公网出口IP加入80端口的白名单;

2、创建通用安全组,并在安全组中,所有线上系统的云主机的将公司此时的公网出口IP加入ssh端口的白名单;

3、创建gitlab专用安全组,同时,gitlab服务器重置新的弹性IP,22和80端口在安全组中将公司此时的公网出口IP加入白名单;

二、初步恢复手段

目的:由于出现之前的严重情况,后续该公司希望所有云上主机等运维只能通过公司内网进行,并提供远程接入公司网络的服务。

需要的资源:(1)性能处于中流的台式机设备一台;(2)公司业务量最大的区域的同一VPC网络下购买一台最低配的云主机,带宽方面先期按流量计费,使用非弹性公网IP,带宽计费方式后期根据情况进行调整;

1、为不泄露相关信息,本文中,云主机公网IP设定为11.11.11.11,VPC内网IP为172.16.0.143;该云主机创建后,我在上面部署了frps,并新建了专用安全组,保证bind_port已经开放,并保证后续要用到的8000端口不开放访问;配置如下,token、端口和dashboard相关信息都是随机填写:

[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
token = 123456

完成填写后用以下命令启动:

nohup ./frps -c ./frps.ini >/dev/null 2>&1 &

2、在对方公司本地,台式机配置为i5-7600,内存16G,SSD为512G,符合目前需求。该台式机我无法成功安装exsi,为了尽快投入使用,我安装了win10,并在上面安装了Virtualbox和todesk(方便管理);

3、在win10本地,我设置该机内网IP为192.168.1.240,然后在上面部署frps和frpc,配置分别如下,同样,token、端口和dashboard相关信息都是随机填写;

//frps.ini
[common]
bind_port = 8000
dashboard_port = 8500
vhost_http_port = 80
vhost_https_port = 443
dashboard_user = admin
dashboard_pwd = admin
token = 123456
//frpc.ini
[common]
server_addr = 11.11.11.11
server_port = 7000
token = 123456

admin_addr = 127.0.0.1
admin_port = 2000

[frptcp]
type = tcp
local_ip = 127.0.0.1
local_port = 8000
remote_port = 8000
use_encryption = true
use_compression = true

完成填写后在cmd中用以下命令启动:

C:\frp\frps.exe -c C:\frp\frps.ini
C:\frp\frpc.exe -c C:\frp\frpc.ini

完成填写后在cmd中用以下命令进行重载:

C:\frp\frpc.exe reload -c C:\frp\frpc.ini

4、对方使用的域名以aaa.com为例,管理后台所在的云主机为172.16.0.111,以此为例,在最后购买的云主机172.16.0.143进行操作;以上操作时,需要被连接的主机的端口在安全组对frps所在的云主机进行内网IP(同一区域的VPC)或外网IP(不同区域或同一区域不通VPC网络)开放;

//frpcgs.ini
[common]
server_addr = 127.0.0.1
server_port = 8000
token = 123456

admin_addr = 127.0.0.1
admin_port = 2000

[adminssh]
type = tcp
local_ip = 172.16.0.111
local_port = 22
remote_port = 10000
use_encryption = true
use_compression = true

[adminweb]
type = http
local_ip = 172.16.0.111
local_port = 80
custom_domains = admin.aaa.com
use_encryption = true
use_compression = true

完成填写后用以下命令启动:

nohup ./frpc -c ./frpcgs.ini >/dev/null 2>&1 &

后期如果是添加或删除等更改,可以使用以下命令reload,无法对frpc进程杀了重启;

./frpc reload -c ./frpcgs.ini

完成后admin.aaa.com的解析切换到192.168.1.240,并删除管理后台所在的云主机的弹性IP;

5、在Virtualbox新建一个Other Linux(64-bit)的虚拟机,配置为2核4G,最大存储为100G,安装centos7,安装完后,网络设置为桥接,IP配置好IP为192.168.1.241,完成后使用以下命令自动完成jumpserver的安装:

curl -sSL https://github.com/jumpserver/jumpserver/releases/download/v2.16.3/quick_start.sh | bash

jumpserver完成安装和配置后,添加云上主机时,图标1中填入192.168.1.240(本地frps所在的IP),端口填入代理回来的端口号;

6、在Virtualbox新建一个Other Linux(64-bit)的虚拟机,配置为2核4G,最大存储为100G,安装centos7,安装完后,网络设置为桥接,IP配置好IP为192.168.1.242,完成后安装gitlab,设置完后将代码导入。由于本文使用的是台式机,无硬盘安全保证,在目前的情况下,在对方公司制度上要求每周第一个工作日备份一次镜像,然同时复制到两个不同的移动硬盘中,以防设备损坏造成代码丢失;

7、在Virtualbox新建一个Othe的虚拟机,配置为1核1G,最大存储为5G,安装爱快。爱快安装完成后,在虚拟机界面开放WEB的WAN口访问,并将eth0绑定给WAN1,并将WAN1的IP设置为192.168.1.243。完成以上操作后,设置回公司的OPENVPN,将如图红框标注的部分设置为TCP,这样操作的原因在于目前国内运营商存在对UDP过分Qos的情况;

在本地frpc所在的win10上,增加以下配置,配置完成后重载frpc,并将配置中的目标端口TCP 55555在云端frps的安全组中对公网开放;

[adminssh]
type = tcp
local_ip = 192.168.2.243
local_port = 1194
remote_port = 55555
use_encryption = true
use_compression = true

需要注意的是,从爱快上下载的OPENVPN配置,需要改变红框标注的remote的配置,按实际情况填写;

三、后期规划方案

规划原因:目前的方案只是解决了棘手的问题,但由于台式机相对不稳定的特点,建议后期迁移到真正的服务器上;

需要增加的设备:(1)一台服务器,装exsi,硬盘raid1;(2)购买一台迷你主机,上面装爱快,做为软路由;

后期规划:(1)去掉本地的frps,在云端部署openvpn,用软路由接入;(2)将回公司的VPN迁移到软路由上;(3)剩下的虚拟机全部迁往服务器做虚拟化。