V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
tsfq007
V2EX  ›  分享创造

非固定 IP 专线实现仅公司访问管理后台并内网部署堡垒机、gitlab

  •  
  •   tsfq007 · 2022-12-07 14:49:36 +08:00 · 2273 次点击
    这是一个创建于 703 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:事发公司属于无专职运维人员公司,近期有现象表明由于可能存在的弱密码或漏洞,导致该公司后台数据及代码泄露。经了解,该公司所有服务及代码仓库都部署在云上,同时,为节约成本,该公司宽带无公网 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 )剩下的虚拟机全部迁往服务器做虚拟化。

    14 条回复    2022-12-08 12:43:47 +08:00
    perfectlife
        1
    perfectlife  
       2022-12-07 15:06:30 +08:00
    直接云上部署个 vpn 本地连接使用呗,真是只能公司内网用 回家后就不访问了,尤其是公司没固定 ip
    tsfq007
        2
    tsfq007  
    OP
       2022-12-07 15:28:48 +08:00
    @perfectlife 这样的缺点是云服务器还是没办法统一管理;然后减少非技术人员的使用难度
    perfectlife
        3
    perfectlife  
       2022-12-07 15:56:04 +08:00
    @tsfq007 打了很多还是删了,只因看到第一行没运维, 请个运维吧 ,没运维 开发那不是八仙过海各显神通 ,安全的最大问题是人不关别的啥事
    zealic
        4
    zealic  
       2022-12-07 16:15:23 +08:00
    我选 Wireguard
    defunct9
        5
    defunct9  
       2022-12-07 17:34:22 +08:00
    罗里吧嗦一大套,是来 show 技的么
    ltruntu
        6
    ltruntu  
       2022-12-07 17:37:52 +08:00
    拉个公网办公的 ip 不就好了
    ltruntu
        7
    ltruntu  
       2022-12-07 17:42:10 +08:00
    堡垒机 git 都部署在云上 公网端口关闭,只允许 frp 走 本地去连 就走 frp 代理一下不就好了 写那么多谁来看
    adoal
        8
    adoal  
       2022-12-07 17:42:27 +08:00 via iPhone
    这是在纵容事发公司后续依然不重视运维
    lower
        9
    lower  
       2022-12-07 17:49:02 +08:00
    我以前负责的项目也出现过类似的事情,
    我加了很多操作的跟踪行为日志,蹲了好几个晚上,终于抓到可疑的账号和 IP 了。。。。
    公司法务根据这些信息,把离职的前员工诈出来承认了😂
    kiddingU
        10
    kiddingU  
       2022-12-07 18:21:25 +08:00
    @perfectlife 没固定 IP 问题也不大吧,DDNS 就行了
    ishalla
        11
    ishalla  
       2022-12-07 20:56:19 +08:00
    我想说 frp 这种产品真的敢用在 enterprise solution 里啊。。
    过得了 compliance 、security 和 qa 三堂会审?
    yujizmq
        12
    yujizmq  
       2022-12-08 01:35:14 +08:00 via Android
    @ishalla “无专职运维人员”,规模应该不大,也许并不在意这点
    当然,我也不建议在企业环境用 frp 之类的工具。
    billytom
        13
    billytom  
       2022-12-08 05:42:09 +08:00 via Android
    这种事情,一看就应该是 VPN 的范畴了,拆东墙补西墙,最终问题只会越来越多
    perfectlife
        14
    perfectlife  
       2022-12-08 12:43:47 +08:00
    @kiddingU 可以但是我认为企业没必要用 ddns ,个人用用也就算了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2681 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:12 · PVG 14:12 · LAX 22:12 · JFK 01:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.