赞
踩
最近一段时间公司让我来搭建“零信任”网络,最开始也是一脸懵逼。因为国内对这方面的文档实在是少得可怜,但是对这个概念的说明文档倒是不少,所以我就不多说相关的概念了(能搜索到这个帖子的大佬,相信也对零信任的概念已经有所了解)我就主要讲讲我的实现方法和所使用到的组件以及对此的心得体会吧!也希望大家可以一起讨论,指出其中的不足,共同进步!
心酸历程:从最开始的SPA(无法连接)到fwknop(领导说没有网页配置,只有一个敲门。不够丰满)再到最后的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数据库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
sudo mongo
use admin;
db.createUser(
{
user: "admin",
pwd: "123456",
roles: [
"userAdminAnyDatabase",
"dbAdminAnyDatabase",
"readWriteAnyDatabase"
]
}
);
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
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
yum install python36 -y
#配置环境
mkdir -p /opt/soft/tool/certbot/
cd /opt/soft/tool/certbot/
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install certbot certbot-nginx certbot-dns-aliyun
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 #赋予文本权限
如果是其他云服务器请自行百度
申请证书:
/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服务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
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
#获取默认用户名密码
sudo pritunl-zero default-password
如果没有正常显示或报错请检查配置的mongoDB连接
用户名是pritunl 密码是随机生成的。进入系统后第一件事就是修改默认的用户名密码,不然自己记不住
新建证书TYPE改为LetsEncrypt
添加需要证书的两个域
添加完域后点击保存,等待一分钟。pritunl-zero会自动在服务器中查找对应的ssl证书
如果DNS Names一直没有出现所配置的域。则说明服务器中的证书有问题或者没有进行DNS解析设置,具体问题请点击页面右上方的Logs查看报错。
在Nodes中打开Management
以及User
分别填入两个域,再添加刚才创建的证书点击保存。
关闭浏览器后再打开。如果是https则证明SSL证书配置成功。
在Authorities栏目下直接点击新建,其他不用动。然后点击Generate Deploy Script
查看自动生成的脚本,添加权限cloud
(也可以不添加权限,配置后会添加用户权限验证,在客户端连接服务器时验证)。然后复制脚本在135
服务器上执行该脚本(或者一段一段的执行也ok)。
到这里pritunl-zero的服务端就已经配置完成了。
205
上配置客户端首先date查看时间如果和服务器不同需要同步时区。不然一直连接不上pritunl-zero服务器.时间不同会一直报错
#安装时间同步应用
yum install -y ntp
#同步上海授时中心时间
ntpdate ntp.api.bz
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
密码为空,直接回车确认。
ssh-keygen -t ed25519
pritunl-ssh
第一次会让你输入用户服务域名user.example.com
密钥就选择刚刚新建的密钥,输入1后回车
之后成功会显示一条链接
在浏览器打开此链接,然后使用user用户登陆(如果有权限验证,则需要使用具有cloud
权限的用户登陆)。登陆后点击确认按键,控制台会显示成功。
到此客户端已经安装完毕
下面检验安装的客户端和服务端
ssh root@example.com
如果不需要输入密码直接登陆上服务端服务器则恭喜你到目前为止配置一切正常!
177
上配置堡垒服务器因为我使用的是亚马逊服务器当作堡垒主机,所以先获取root权限,然后开放9800端口,关闭22端口
su root
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
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
页面会多出来一个节点,该节点就是你的堡垒主机。
开启Automatic bastion server
然后填入bastion.example.com
端口为9800
在DNS解析bastion.example.com
解析地址要为堡垒服务器的ip地址(177
)
重点:配置Math Subnets(子网)
让外网可以通过堡垒主机连接到堡垒主机所在的内网ip。
执行完成后就大功告成~
开始测试使用205
内网服务器去ssh连接177
的内网服务器(内网ip:84
)
#在205客户端使用该命令重新生成令牌
pritunl-ssh renew
#ssh连接177的内网服务器地址
ssh root@172.31.92.84
连接成功则表示一切OK~
这点东西看起来简单,实际上问题重重。其中pritunl-zero还包含许多功能(单点登录、多用户验证、服务管理)还需要大家多多去摸索。本篇内容为我这段时间摸索的总结。希望可以帮助到大家。让大家少走弯路。其实还有很多好的项目,苦于中文文档实在太少。还望大家分享自己的力量把中文社区壮大起来!
最后贴出官方文档地址:
链接: https://zero.pritunl.com/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。