背景:事发公司属于无专职运维人员公司,近期有现象表明由于可能存在的弱密码或漏洞,导致该公司后台数据及代码泄露。经了解,该公司所有服务及代码仓库都部署在云上,同时,为节约成本,该公司宽带无公网 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 )剩下的虚拟机全部迁往服务器做虚拟化。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.