零信任实现之Pritunl-Zero

前言

最近一段时间公司让我来搭建“零信任”网络,最开始也是一脸懵逼。因为国内对这方面的文档实在是少得可怜,但是对这个概念的说明文档倒是不少,所以我就不多说相关的概念了(能搜索到这个帖子的大佬,相信也对零信任的概念已经有所了解)我就主要讲讲我的实现方法和所使用到的组件以及对此的心得体会吧!也希望大家可以一起讨论,指出其中的不足,共同进步!

心酸历程:从最开始的SPA(无法连接)到fwknop(领导说没有网页配置,只有一个敲门。不够丰满)再到最后的pritunl-zero(有后台配置页面,功能也比较多,但是门槛较高、配置繁琐)。

话不多说,开始正文

搭建Pritunl-zero需要的环境,以及其中的组件。

1.pritunl-zero服务端(我使用的是阿里云服务器。ip: 135
2.pritunl-zero客户端(我使用的是内网服务器。ip:205
3.pritunl-zero堡垒机(使用的AWS服务器。公网ip:177。内网ip:84

我的应用场景:公司内网ip通过服务端ssh连接到堡垒机,以及堡垒机所在的内网服务器集群。(使内网服务器通过pritunl-zero服务器ssh连接到亚马逊服务器上的内网ip)

ps:这些组件可以自行搭配。只要满足以下条件即可。(重中之重)
1、需要有自己的域名,如果是国内的服务器则需要通过备案(如果有现成的就不说了。没有的话域名在阿里云上几块钱就买到了,没有备案又想自己搭建的就在阿里云上买一个外网服务器这样就可以跳过备案使用https了)
2、服务端需要有固定的公网ipv4。
3、堡垒机也需要有外网ipv4或ipv6。

开始搭建

过程比较繁琐,希望大家耐心看完。有不懂的或者出错的留言区讨论。

一、在135服务器搭建mongoDB数据库

1 配置yum源 安装指定的mongodb-org
sudo tee /etc/yum.repos.d/mongodb-org-4.0.repo << EOF
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
EOF

sudo yum -y install mongodb-org
sudo systemctl start mongod
sudo systemctl enable mongod
2 在mongoDB中创建admin用户
sudo mongo
use admin;
db.createUser(
  {
    user: "admin",
    pwd: "123456",
    roles: [
      "userAdminAnyDatabase",
      "dbAdminAnyDatabase",
      "readWriteAnyDatabase"
    ]
  }
);
3 更改MongoDB配置文件
vim /etc/mongod.conf 
#这里贴出我的配置
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 27017
  bindIp: 0.0.0.0

security:
  authorization: enabled
4 创建pritunl用户
sudo mongo --host 127.0.0.1 -u admin --authenticationDatabase admin

use admin;
db.createUser({
  user: "pritunl",
  pwd: "123456",
  roles: [{role: "dbOwner", db: "pritunl"}]
});

最后需要重启以下mongod服务

sudo systemctl restart mongod

到这里mongoDB已经搭建完成。可以使用3T或其他工具进行测试。

二、在135服务器上配置ssl

因为pritunl-zero需要https支持,而且在页面进行配置的时候也需要去配置域名。所以这一步也是在为搭建pritunl-zero做准备工作。
该步骤主要就是为pritunl-zero服务器(135)配置SSL证书,如果该服务器已有SSL证书请略过此步骤

先列出需要进行配置的域(这里用你们自己的域名和泛域名)
example.com 服务器
user.example.com 客户端操作
这两个域名在进行DNS解析的时候都指向135服务器

默认使用root账户操作。不是root请在前面加上 sudo

1 安装python虚拟环境
yum install python36 -y

#配置环境
mkdir -p /opt/soft/tool/certbot/
cd /opt/soft/tool/certbot/
python3 -m venv venv
source venv/bin/activate
2 安装certbot-nginx
pip install --upgrade pip
pip install certbot certbot-nginx certbot-dns-aliyun
3 配置阿里云AK密钥
cat > /opt/soft/tool/certbot/credentials.ini <<EOF
certbot_dns_aliyun:dns_aliyun_access_key = XXXXXX
certbot_dns_aliyun:dns_aliyun_access_key_secret = XXXXXXX
EOF

chmod 600 /opt/soft/tool/certbot/credentials.ini   #赋予文本权限

如果是其他云服务器请自行百度

4 申请证书以及设置续签定时任务

申请证书:

/opt/soft/tool/certbot/venv/bin/certbot certonly -a certbot-dns-aliyun:dns-aliyun --certbot-dns-aliyun:dns-aliyun-credentials /opt/soft/tool/certbot/credentials.ini -d "*.example.top" -d "example.top"

证书有效期90天,如果需要续签设置定时任务

echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && /opt/soft/tool/certbot/venv/bin/certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

到这里域名的ssl证书就以及生成在pritunl-zero服务器上了,接下来就是等着pritunl-zero来配置证ssl书了

如有不懂的地方请参考以下文章。
链接: 阿里云服务器 Certbot 申请 LetsEncrypt 泛域名免费证书,并实现自动续订

三、开始在135上安装pritunl-zero服务

1 安装pritunl-zero客户端
sudo tee /etc/yum.repos.d/pritunl.repo << EOF
[pritunl]c
name=Pritunl Repository
baseurl=https://repo.pritunl.com/stable/yum/centos/7/
gpgcheck=1
enabled=1
EOF

sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 7568D9BB55FF9E5287D586017AE645C0CF8E292A
gpg --armor --export 7568D9BB55FF9E5287D586017AE645C0CF8E292A > key.tmp; sudo rpm --import key.tmp; rm -f key.tmp
sudo yum -y install pritunl-zero 
2 配置mongo连接,并启动pritunl-zero服务
sudo pritunl-zero mongo "mongodb://pritunl:123456@example:27017/pritunl?authSource=admin"

sudo systemctl start pritunl-zero
sudo systemctl enable pritunl-zero
#查看启动的状态
sudo systemctl status pritunl-zero
3 获取默认用户名密码,以及登陆控制台
#获取默认用户名密码
sudo pritunl-zero default-password

如果没有正常显示或报错请检查配置的mongoDB连接

用户名是pritunl 密码是随机生成的。进入系统后第一件事就是修改默认的用户名密码,不然自己记不住

登陆页面

4 配置证书Certificates

新建证书TYPE改为LetsEncrypt
添加需要证书的两个域

配置证书
添加完域后点击保存,等待一分钟。pritunl-zero会自动在服务器中查找对应的ssl证书
如果DNS Names一直没有出现所配置的域。则说明服务器中的证书有问题或者没有进行DNS解析设置,具体问题请点击页面右上方的Logs查看报错。

5 配置Nodes

在Nodes中打开Management以及User
分别填入两个域,再添加刚才创建的证书点击保存。

nodes关闭浏览器后再打开。如果是https则证明SSL证书配置成功。

6 创建Authorities

在Authorities栏目下直接点击新建,其他不用动。然后点击Generate Deploy Script查看自动生成的脚本,添加权限cloud(也可以不添加权限,配置后会添加用户权限验证,在客户端连接服务器时验证)。然后复制脚本在135服务器上执行该脚本(或者一段一段的执行也ok)。
在这里插入图片描述
到这里pritunl-zero的服务端就已经配置完成了。

四、在205上配置客户端

首先date查看时间如果和服务器不同需要同步时区。不然一直连接不上pritunl-zero服务器.时间不同会一直报错

#安装时间同步应用
yum install -y ntp
#同步上海授时中心时间
ntpdate ntp.api.bz 
1 安装pritunl-ssh
sudo tee /etc/yum.repos.d/pritunl.repo << EOF
[pritunl]
name=Pritunl Repository
baseurl=https://repo.pritunl.com/stable/yum/centos/7/
gpgcheck=1
enabled=1
EOF

gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 7568D9BB55FF9E5287D586017AE645C0CF8E292A
gpg --armor --export 7568D9BB55FF9E5287D586017AE645C0CF8E292A > key.tmp; sudo rpm --import key.tmp; rm -f key.tmp
sudo yum -y install pritunl-ssh
2 生成ssh密钥

密码为空,直接回车确认。

ssh-keygen -t ed25519
3 测试用pritunl-ssh连接pritunl-zero服务器
pritunl-ssh

第一次会让你输入用户服务域名user.example.com
密钥就选择刚刚新建的密钥,输入1后回车
之后成功会显示一条链接
在这里插入图片描述

在浏览器打开此链接,然后使用user用户登陆(如果有权限验证,则需要使用具有cloud权限的用户登陆)。登陆后点击确认按键,控制台会显示成功。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到此客户端已经安装完毕
下面检验安装的客户端和服务端

ssh root@example.com

如果不需要输入密码直接登陆上服务端服务器则恭喜你到目前为止配置一切正常!

五、在177上配置堡垒服务器

因为我使用的是亚马逊服务器当作堡垒主机,所以先获取root权限,然后开放9800端口,关闭22端口

su root
1 安装pritunl-zero和docker
sudo tee /etc/yum.repos.d/pritunl.repo << EOF
[pritunl]
name=Pritunl 
baseurl=https://repo.pritunl.com/stable/yum/amazonlinux/2/
gpgcheck=1
enabled=1
EOF

sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 7568D9BB55FF9E5287D586017AE645C0CF8E292A
gpg --armor --export 7568D9BB55FF9E5287D586017AE645C0CF8E292A > key.tmp; sudo rpm --import key.tmp; rm -f key.tmp
sudo yum -y install pritunl-zero docker
2 配置mongoDB 并启动服务
sudo pritunl-zero mongo "mongodb://pritunl:123456@example:27017/pritunl?authSource=admin"
systemctl start pritunl-zero docker
systemctl enable pritunl-zero docker
#查看是否正确连接mongoDB
systemctl status pritunl-zero docker

如果正确连接mongoDB则在Nodes页面会多出来一个节点,该节点就是你的堡垒主机。

3 进入配置页面配置权限

在这里插入图片描述
开启Automatic bastion server 然后填入bastion.example.com端口为9800
在DNS解析bastion.example.com解析地址要为堡垒服务器的ip地址(177)
重点:配置Math Subnets(子网)让外网可以通过堡垒主机连接到堡垒主机所在的内网ip。

4 配置堡垒节点

在这里插入图片描述

5 在堡垒服务器执行客户端脚本

在这里插入图片描述
执行完成后就大功告成~

测试

开始测试使用205内网服务器去ssh连接177的内网服务器(内网ip:84

#在205客户端使用该命令重新生成令牌
pritunl-ssh renew
#ssh连接177的内网服务器地址
ssh root@172.31.92.84

连接成功则表示一切OK~

总结

这点东西看起来简单,实际上问题重重。其中pritunl-zero还包含许多功能(单点登录、多用户验证、服务管理)还需要大家多多去摸索。本篇内容为我这段时间摸索的总结。希望可以帮助到大家。让大家少走弯路。其实还有很多好的项目,苦于中文文档实在太少。还望大家分享自己的力量把中文社区壮大起来!
最后贴出官方文档地址:
链接: https://zero.pritunl.com/

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
go-zero是一个开源的Go语言框架,它在构建微服务和高并发应用方面具有突破性的优势。其中一个突出的特点就是它整合了masterminds/squirrel,从而实现了优雅的多数据库支持。 masterminds/squirrel是一个流行的SQL查询构建器,它以非常直观和灵活的方式提供了编写SQL查询的功能。而go-zero在此基础上做了进一步的封装和优化,使得使用者能够更加方便地编写和执行SQL查询。 首先,go-zero提供了一组简洁而强大的API,使得构建SQL查询非常容易。开发者只需要按照一定的约定来创建查询参数和条件,然后使用go-zero提供的API来构建查询语句,即可完成复杂的SQL查询。 其次,go-zero还增加了一些高级功能,进一步提升了多数据库查询的灵活性和性能。例如,它支持数据库连接池管理,可以动态调整数据库连接数以适应并发请求;还支持分表分库功能,可以按照一定的规则将数据分散存储在不同的数据库或表中,从而提高查询效率。 最重要的是,go-zero通过内置的代码生成工具,提供了自动化生成数据库访问代码的能力。开发者只需要定义数据表的结构,然后运行代码生成工具,就能够自动生成包含增删改查等一系列数据库操作的代码。这极大地提高了开发效率,减少了出错的机会。 综上所述,go-zero整合了masterminds/squirrel,通过提供简洁强大的API、高级功能和自动化代码生成工具,实现了优雅的多数据库支持。它在微服务和高并发应用场景下的表现突出,为开发者提供了极大的便利和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值