本地环境安全访问公有云资源的一种方式

本地环境安全访问公有云资源的一种方式_第1张图片

本地环境安全访问公有云资源的一种方式

  • 本地环境安全访问公有云资源的一种方式
    • 场景预演
    • 技术选型
      • 为什么不是 OpenVPN / WireGuard ?
        • OpenVPN
        • WireGuard
      • 原生支持
    • 部署
    • 链接成功客户端配置示例
      • Windows 11
      • MacOS 13
    • 访问 vpc 内的资源
    • Show time

场景预演

不知道你有没有遇到这样的场景?

你在某个公有云平台上,有好几台服务器,它们在一个私有网络(vpc)里相互串联通信,一起构建整套系统。

然而由于它们对外默认只提供 22/80/443 等端口的访问,你无法直接访问里面的 redis/db 等等的资源。

那么把 redis/db 等等的资源的监听端口全部放开不就好啦?

显然不行,直接把 redis,db 等等资源暴露在公网上是非常不安全的,即使你设置了复杂的密码。

那么给 db 套一层外壳去访问就安全吗?

比如我有一个 postgres 实例只在 docker 网络中暴露访问端口,然后在部署一个 dpage/pgadmin4 在那个网络里,再配置复杂的密码,放开额外的端口暴露在公网上,显然这就比上面直接暴露数据库要安全一点,因为这种方式相当于加了一层保护壳。

但是这样就足够安全吗?显然不是,服务只要暴露在公网上就不够安全。

因为静态的密码即使再长再复杂,没有锁定和重试机制都有破解的可能。
相对而言,2FA 和 cert 登录就安全很多,尤其是 2FA 现在已经广泛的运用到各个领域了。

事实上,我们完全可以在某台服务器上部署一个 -server 把它作为我们本地环境和云上环境的桥梁,让我们本地可以快速安全的访问到云上的资源,同时云上的资源也不需要暴露在公网上。

技术选型

经过了一些调研,最终选定了 hwdsl2/ipsec--server

为什么不是 OpenVPN / WireGuard ?

OpenVPN

相关地址:

  • https://github.com/OpenVPN/open
  • https://open.net/

商业化了,使用起来有些限制。老版本可以使用,但是为什么要去部署一个已经停止维护的版本呢?

WireGuard

相关地址:

  • https://www.wireguard.com/

很棒但是需要下载对应的client,某些系统版本的client在某些国家和地区是无法使用的,看到这句话你应该知道哪个地方了吧。

原生支持

而且我们想使用那种,所有系统原生自带的功能去链接我们的服务器。

那么这个范围就缩小很多了,我们需要部署一个支持 L2TP/IPsec 协议的 server,同时我们需要容器化部署。

所以 hwdsl2/ipsec--server 就成为了优秀的解决方案。

部署

使用 docker 部署非常方便,准备一份 docker-compose.yml

version: "3"

volumes:
  ikev2--data:

services:
  :
    image: hwdsl2/ipsec--server
    restart: always
    env_file:
      - ./.env
    ports:
      - "500:500/udp"
      - "4500:4500/udp"
    privileged: true
    hostname: ipsec--server
    container_name: ipsec--server
    volumes:
      - ikev2--data:/etc/ipsec.d
      - /lib/modules:/lib/modules:ro

和一份配置文件:

# .env
# 预共享秘钥
VPN_IPSEC_PSK=
# 用户名
VPN_USER=
# 密码
VPN_PASSWORD=

配置好值之后,直接 docker compose up -d 就启动部署完成了。当然我目前是独立部署的,你也可以把它加入你自己的 docker network 中去,从而暴露更多服务。

同时因为 ipsec 协议的需求,我们需要在部署的那台服务器的 vpc安全组 里,开放 500/4500udp 协议。

本地环境安全访问公有云资源的一种方式_第2张图片

这样配置好了之后就可以直接用本机自带的 功能进行链接了,非常的简单方便快速。

windows 系统的机器,需要修改注册表后重新启动才能连上,不然会报错,详见 https://github.com/hwdsl2/setup-ipsec-/blob/master/docs/clients-zh.md

链接成功客户端配置示例

Windows 11

本地环境安全访问公有云资源的一种方式_第3张图片

MacOS 13

本地环境安全访问公有云资源的一种方式_第4张图片

访问 vpc 内的资源

在我们购买服务器的时候,服务商都会给我们 2ip

一个是公网的ip,一个是vpc内网里的ip,

接下来让我们进入服务器,查看 ifconfig:

本地环境安全访问公有云资源的一种方式_第5张图片

我们直接使用 内网 ip + 端口,就可以访问对应的资源了,这些资源,你甚至可以直接监听 0.0.0.0,因为它们在安全组那会被屏蔽,所以不会直接暴露在公网。

这样,我们本地连上 就可以直接连接线上的数据库,访问线上的缓存,队列等等系统了。比如我们访问 pgadmin4:

本地环境安全访问公有云资源的一种方式_第6张图片

实在是非常的方便,推荐大家试一试。

当然有更好的方式也欢迎提出。小伙伴们你们学会了吗?


Show time

最后给自己的个人小程序打个小广告:

想要你的Github项目在微信内分享吗?快来试试 程序员名片 吧。

进入方式:微信内,搜索 程序员名片,快速注册后添加名片,导入 Github 项目即可。

在使用过程中,如果遇到问题,或者你有好的意见和建议,欢迎与我讨论。

Demo short link: 微信内访问 #小程序://程序员名片/c9lmHLg29GtN2PH 查看我的名片。

你可能感兴趣的:(安全,docker,linux)