基于OpenZiti零信任系统的搭建

📅 发布时间:2026/7/4 9:02:34 👁️ 浏览次数:
基于OpenZiti零信任系统的搭建
张绪舜一、什么是零信任系统零信任是一种软件定义网络安全模式是一套指导安全架构设计的原则。它通过身份、设备、网络、应用和数据等多个维度的持续校验构建起一道动态的纵深防线。远程办公、混合云构架、互联应用的广泛使用导致传统的网络边界越来越模糊持续性威胁和内部信息泄露频发也导致管理员疲于应付同时数据保护法规趋严要求医疗机构具备更精细的安全访问控制能力。因此建立一套零信任安全访问体系对提高医院信息和数据安全有很大促进作用。二、什么是OpenZitiOpenZiti 是一个免费的开源项目专注于将零信任网络原则直接融入到任何应用程序中。该项目提供了实现零信任覆盖网络所需的全部组件以及将零信任集成到您现有解决方案中的所有必要工具。对医疗机构来说最重要的是需要将零信任融入到各种应用场合如急诊急救系统、掌上医院、移动办公等应用目的是医院不再对外开放任何业务应用端口。下图是基于OpenZiti的零信任构架整个业务流程是内网的应用服务端通过安全隧道经过OpenZiti的网络控制器认证后和边界路由器建立安全通道。客户端经过OpenZiti的网络控制器认证后告知边界路由器充许和此客户端建立连接客户端通过安全隧道或者是OpenZiti的SDK和边界路由器建立连接。网络按制器通过安全策略控制服务的连通满足策略要求则客户端和应用服务端建立连接。如医院常用应用场景掌上医院需进行挂号或缴费业务传统模式是在防火墙上开通相应端口移动终端应用通过此端口进行访问。现在掌上医院通过OpenZiti的SDK安全模块经过安全认证实现和边界路由器建立安全通道从而实现和医院内网的通信。三、基于docker容器的OpenZiti布署1、镜像下载docker pull openziti/quickstart:latest2、创建一个卷docker volume create zxsPersistentZitiFiles3、创建容器网络docker network create zxsFirstZitiNetwork4、运行控制器docker run \--name ziti-controller \-e ZITI_CTRL_ADVERTISED_ADDRESSziti-edge-controller \--network zxsFirstZitiNetwork \--network-alias ziti-controller \--network-alias ziti-edge-controller \-p 1280:1280 \-v zxsPersistentZitiFiles:/persistent \openziti/quickstart \/var/openziti/scripts/run-controller.sh边界路由器创建完毕后会生成一个admin的密码需要记住Do you want to keep the generated admin password 7zqqDZyWLyACYd6cIeIMG4dspl8-_DjU? (Y/n),下面登录ZAC时需要此密码。5、创建边界路由器策略docker run \--network zxsFirstZitiNetwork \--network-alias ziti-controller-init-container \-v zxsPersistentZitiFiles:/persistent \openziti/quickstart \/var/openziti/scripts/run-with-ziti-cli.sh /var/openziti/scripts/access-control.sh6、创建边界路由器docker run \--name ziti-edge-router-1 \-e ZITI_ROUTER_NAMEziti-edge-router-1 \-e ZITI_ROUTER_ADVERTISED_ADDRESSziti-edge-router-1 \-e ZITI_ROUTER_ROLESpublic \--network zxsFirstZitiNetwork \--network-alias ziti-edge-router-1 \-p 3022:3022 \-v zxsPersistentZitiFiles:/persistent \openziti/quickstart \/var/openziti/scripts/run-router.sh edge7、创建第二个边界路由器docker run \--name ziti-edge-router-2 \-e ZITI_ROUTER_NAMEziti-edge-router-2 \-e ZITI_ROUTER_ADVERTISED_ADDRESSziti-edge-router-2 \-e ZITI_ROUTER_PORT4022 \-e ZITI_ROUTER_ROLESpublic \--network zxsFirstZitiNetwork \--network-alias ziti-edge-router-2 \-p 4022:4022 \-v zxsPersistentZitiFiles:/persistent \openziti/quickstart \/var/openziti/scripts/run-router.sh edge网络控制边界和边界路由器最好是安装在不同网络位置比如网络控制器安装在trust区边界路由器安装在DMZ区。本人因测试是安装在CentOs stream 9同一台虚拟机上。四、安全认证和策略的创建下面是我基于RDP创建的相关认证和策略# 1. 创建服务配置 - 主机配置(host.v1) - 指定后端真实地址ziti edge create config rdp.hostv1 host.v1 \{protocol:tcp, address:192.168.10.2, port:3389, forwardProtocol: true,forwardPort: true,allowedProtocols: [tcp, udp]}# 2. 创建服务配置 - 拦截配置(intercept.v1) - 定义客户端访问的地址ziti edge create config rdp.clientv1 intercept.v1 \{protocols:[tcp], addresses:[rdp.internal], portRanges:[{low:3389,high:3389}]}# 3. 创建服务关联两个配置ziti edge create service rdp-service \--configs rdp.hostv1,rdp.clientv1 \--role-attributes rdp-services# 4. 创建身份 - 服务端托管服务ziti edge create identity device rdp-app-server \#定义服务端的身份认证-a rdp-servers \-o rdp_app-server.jwt #证书# 5. 创建身份 - 客户端访问服务ziti edge create identity user rdp_home \ #定义客户端的身份认证-a rdp-clients \-o rdp-device.jwt #证书# 6. 创建服务策略 - Bind策略谁可以提供服务ziti edge create service-policy rdp.bind Bind \--service-roles rdp-service \ #第三步创建的服务名--identity-roles #rdp-servers #服务端身份属性# 7. 创建服务策略 - Dial策略谁可以访问服务ziti edge create service-policy rdp.dial Dial \--service-roles rdp-service \ #第三步创建的服务名--identity-roles #rdp-clients #客户端身份属性# 8. 创建边路由器策略 - 允许身份使用边路由器ziti edge create edge-router-policy rdp-app-router-policy \--edge-router-roles #all \--identity-roles #rdp-servers,#rdp-clients #服务端身份属性#客户端身份属性# 9. 创建服务边路由器策略 - 允许服务通过边路由器ziti edge create service-edge-router-policy rdp-app-service-router-policy \--edge-router-roles #all \--service-roles rdp-service #第三步创建的服务名# 10. 验证策略是否生效ziti edge policy-advisor services rdp-service #第三步创建的服务名五、服务端安装因为我们测试的是RDP服务测试的是我办公室和我家里电脑的RDP连接1、在防火墙是对网络控制器端口1280、3022、4022进行NAT转换和安全策略设置2、办公室电脑安装Ziti.Desktop.Edge.Client-2.2.2.exe客户端同时在HOSTS文件中加入 192.x.x.91 ziti-edge-controller ziti-edge-router-1 ziti-edge-router-2 进行域名解析导入服务端身份 app-server.jwt证书3、同样在家庭电脑中安装Ziti.Desktop.Edge.Client-2.2.2.exe客户端同时在HOSTS文件中加入 61.x.x.29 ziti-edge-controller ziti-edge-router-1 ziti-edge-router-2 进行域名解析导入客户端身份 rdp-device.jwt证书这样家中电脑与办公室电脑就可以进行远程桌面访问了六、linux服务端相关ziti-edge-tunnel安装和设置。1、# 安装ziti-edge-tunnelcurl -sSf https://get.openziti.io/install.bash | /bin/bash -s ziti-edge-tunnel如果你是基于这种方式安装的第2步到第4步均可省略了因为我这一步没有成功所以采取了下列方式。2、#下载二进制文件wget https://github.com/openziti/ziti-tunnel-sdk-c/releases/latest/download/ziti-edge-tunnel-linux-amd64chmod x ziti-edge-tunnel-linux-amd64 改变权限sudo mv ziti-edge-tunnel-linux-amd64 /usr/local/bin/ziti-edge-tunnel #移动位置3、# 创建身份和日志目录sudo mkdir -p /etc/openziti/identitiessudo mkdir -p /var/log/openzitisudo mkdir -p /etc/openziti/config4、# 设置权限sudo chmod 755 /etc/openziti/identities5、创建服务sudo vim /etc/systemd/system/ziti-edge-tunnel.service将下列服务相关内容考入到此文件中[Unit]DescriptionOpenZiti Edge TunnelAfternetwork.targetWantsnetwork.target[Service]TypesimpleUserrootGrouprootExecStart/usr/local/bin/ziti-edge-tunnel run --identity-dir /etc/openziti/identities --log-file /var/log/openziti/ziti.logExecReload/bin/kill -HUP $MAINPIDKillModemixedKillSignalSIGINTRestarton-failureRestartSec5LimitNOFILE65535[Install]WantedBymulti-user.target#启动服务# 重新加载 systemdsudo systemctl daemon-reload# 启动 Ziti 隧道sudo systemctl start ziti-edge-tunnel# 设置开机自启sudo systemctl enable ziti-edge-tunnel# 查看状态sudo systemctl status ziti-edge-tunnel# 查看日志sudo journalctl -u ziti-edge-tunnel -f6、# 注册身份ziti-edge-tunnel enroll --jwt my-app-server.jwt --identity /opt/openziti/etc/identities/my-app-server.json这样基于linux的ziti-edge-tunnel端就安装好了七、ZAC安装ZAC影像文件下载dockerpull openziti/zac:latestZAC启动启动ZAC之前需要将证书文件从控制器目录拷到下面命令指定的目录运行ZACdocker run --name zac \-p 1408:1408 \-p 8443:8443 \--network zxsFirstZitiNetwork \-e ZAC_CONTROLLER_URLShttps://ziti-edge-controller:1280 \-v zxsPersistentZitiFiles:/persistent \-e ZAC_SERVER_KEY/persistent/pki/ziti-edge-controller-intermediate/keys/ziti-edge-controller-server.key \-e ZAC_SERVER_CERT_CHAIN/persistent/pki/ziti-edge-controller-intermediate/certs/ziti-edge-controller-server.chain.pem \openziti/zac登录ZAC输入运行控制器时生成的密码登录4、进入首页界面我们在ZAC图形化界面中可以进行证书的生成服务、安全策略的制定当然这些内容也可以通过上面的命令在网络控制器中生成。以上就是基于OpenZiti的零信任的搭建和应用的举例基于OpenZiti SDK应用的开发本人将下一步研究后分享给大家。