【Docker项目实战】使用Docker部署OneTerm堡垒机
一、OneTerm介绍
1.1 OneTerm 堡垒机简介
OneTerm
堡垒机是一款高度集成的安全管理平台,专为企业提供全面的IT运维安全管理解决方案。它基于4A(认证、授权、账号、审计)理念设计,旨在通过严格的访问控制和详尽的操作审计,确保企业内部网络环境的安全性与合规性。OneTerm 不仅能够有效防止内部人员的误操作或恶意行为,还能对外部攻击进行有效的防御,是企业IT内控和安全合规的重要工具。
1.2 OneTerm 堡垒机特点
-
统一身份认证:支持多种认证方式,如用户名/密码、双因素认证、生物识别等,确保每个用户的身份真实可靠。
-
精细权限控制:基于角色的访问控制(RBAC),可以为不同岗位的人员分配不同的权限,实现最小权限原则,降低风险。
-
实时会话监控:提供实时的会话监控和录像功能,可以即时查看和回放用户操作过程,便于事后追溯和分析。
-
操作审计与报告:记录所有用户的登录、操作和退出信息,生成详细的审计日志和报告,满足合规性要求。
-
资源访问控制:对服务器、数据库、应用系统等资源的访问进行严格控制,防止未授权访问和数据泄露。
-
智能告警机制:当检测到异常操作或潜在威胁时,系统自动触发告警,及时通知管理员采取措施。
1.3 OneTerm 堡垒机使用场景
-
金融行业:金融机构需要严格遵守各种法规,OneTerm 堡垒机可以帮助其实现对敏感数据和系统的严格访问控制,满足合规要求。
-
政府机构:政府信息系统存储大量公民个人信息,使用OneTerm 可以有效保护这些数据免受内部和外部威胁。
-
医疗保健:医疗行业涉及患者隐私,OneTerm 的细粒度权限管理和操作审计功能有助于保护患者数据的安全。
-
大型企业:对于拥有复杂IT环境和众多员工的大公司,OneTerm 提供了统一的平台来管理多样的IT资产,减少安全漏洞。
-
教育机构:学校和研究机构可以通过OneTerm 来控制对学术资源的访问,保护研究成果不被非法获取。
-
云服务提供商:云服务商需要向客户提供高安全性的服务,OneTerm 能够帮助他们实现这一目标,增强客户信任。
二、本地环境介绍
2.1 本地环境规划
本次实践为个人测试环境,操作系统版本为centos7.6。
hostname | IP地址 | 操作系统版本 | Docker版本 |
---|---|---|---|
jeven | 192.168.3.166 | centos 7.6 | 20.10.17 |
2.2 本次实践介绍
1.本次实践部署环境为个人测试环境,生产环境请谨慎;
2.使用Docker部署OneTerm堡垒机。
三、本地环境检查
3.1 检查Docker服务状态
检查Docker服务是否正常运行,确保Docker正常运行。
[root@jeven ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2024-07-03 21:07:37 CST; 1 day 21h ago
Docs: https://docs.docker.com
Main PID: 11950 (dockerd)
Tasks: 10
Memory: 138.3M
CGroup: /system.slice/docker.service
└─11950 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
3.2 检查Docker版本
检查Docker版本
[root@jeven ~]# docker -v
Docker version 20.10.17, build 100c701
3.3 检查docker compose 版本
检查Docker compose版本,确保2.0以上版本。
[root@jeven ~]# docker compose version
Docker Compose version v2.6.0
四、下载OneTerm镜像
- 拉取oneterm相关容器镜像
docker pull registry.cn-hangzhou.aliyuncs.com/veops/oneterm-api:24.3
docker pull registry.cn-hangzhou.aliyuncs.com/veops/oneterm-ssh:24.3.1
docker pull registry.cn-hangzhou.aliyuncs.com/veops/oneterm-guacd:24.3
docker pull registry.cn-hangzhou.aliyuncs.com/veops/mysql:latest
docker pull registry.cn-hangzhou.aliyuncs.com/veops/redis:latest
docker pull registry.cn-hangzhou.aliyuncs.com/veops/oneterm-ui:24.3
docker pull registry.cn-hangzhou.aliyuncs.com/veops/acl-api:1.1
五、部署OneTerm应用
5.1 拉取OneTerm项目
执行以下命令,拉取OneTerm项目。
git clone https://github.com/veops/oneterm.git
5.2 查看部署文件
进入OneTerm项目,查看docker-compose.yml部署文件。
[root@jeven ~]# cd oneterm/
[root@jeven oneterm]# ls
backend docker-compose.yaml docs LICENSE oneterm-ui README_cn.md README.md
默认的部署文件内容如下,可自行修改宿主机映射端口。
version: "3.0"
services:
oneterm-api:
image: registry.cn-hangzhou.aliyuncs.com/veops/oneterm-api:24.3
container_name: oneterm-api
volumes:
- file-data:/replay
- ./docs/api.yaml:/oneterm/config.yaml
depends_on:
- mysql
- redis
- oneterm-guacd
restart: always
networks:
new:
aliases:
- oneterm-api
oneterm-ssh:
image: registry.cn-hangzhou.aliyuncs.com/veops/oneterm-ssh:24.3.1
container_name: oneterm-ssh
ports:
- "12229:12228"
restart: always
tty: true
volumes:
- ./docs/ssh.yaml:/oneterm/config.yaml
- ./docs/scripts/entrypoint.sh:/oneterm/entrypoint.sh
- ssh-data:/root/.ssh
entrypoint: ./entrypoint.sh
depends_on:
- oneterm-api
networks:
new:
aliases:
- oneterm-ssh
oneterm-guacd:
image: registry.cn-hangzhou.aliyuncs.com/veops/oneterm-guacd:24.3
container_name: oneterm-guacd
user: root
restart: always
volumes:
- file-data:/replay
networks:
new:
aliases:
- oneterm-guacd
mysql:
image: registry.cn-hangzhou.aliyuncs.com/veops/mysql:latest
#image: mysql:8.0.30
container_name: oneterm-mysql
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_DATABASE: 'oneterm'
volumes:
- db-data:/var/lib/mysql
- ./docs/mysqld.cnf:/etc/mysql/conf.d/mysqld.cnf
- ./docs/acl.sql:/docker-entrypoint-initdb.d/2-acl.sql
- ./docs/api.sql:/docker-entrypoint-initdb.d/3-api.sql
- ./docs/create-users.sql:/docker-entrypoint-initdb.d/1-create-users.sql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
networks:
new:
aliases:
- mysql
ports:
- '23306:3306'
redis:
image: registry.cn-hangzhou.aliyuncs.com/veops/redis:latest
container_name: oneterm-redis
#command: redis-server --requirepass tyrj5QVP9rHs
restart: always
environment:
TZ: Asia/Shanghai
networks:
new:
aliases:
- redis
oneterm-ui:
image: registry.cn-hangzhou.aliyuncs.com/veops/oneterm-ui:24.3
container_name: oneterm-ui
depends_on:
- oneterm-api
environment:
TZ: Asia/Shanghai
ONETERM_API_HOST: oneterm-api:8080
ACL_API_HOST: acl-api:5000
NGINX_PORT: 80
volumes:
- ./docs/nginx.oneterm.conf.example:/etc/nginx/conf.d/nginx.oneterm.conf.example
restart: always
command:
- /bin/sh
- -c
- |
envsubst '$$ONETERM_API_HOST $$ACL_API_HOST $$NGINX_PORT' < /etc/nginx/conf.d/nginx.oneterm.conf.example > /etc/nginx/conf.d/oneterm.conf
nginx -g 'daemon off;'
networks:
- new
ports:
- "8000:80"
acl-api:
image: registry.cn-hangzhou.aliyuncs.com/veops/acl-api:1.1
container_name: oneterm-acl-api
environment:
#TZ: Asia/Shanghai
WAIT_HOSTS: mysql:3306, redis:6379
volumes:
- ./docs/settings.py:/data/app/acl/settings.py
- ./docs/.env:/data/apps/acl/.env
- ./docs/nginx.oneterm.conf.example:/etc/nginx/conf.d/nginx.oneterm.conf.example
restart: always
command:
- /bin/sh
- -c
- |
sleep 2
flask db-setup
flask init-acl
flask init-department
gunicorn --workers=3 autoapp:app -b 0.0.0.0:5000 -D --access-logfile logs/access.log --error-logfile logs/error.log
celery -A celery_worker.celery worker -E -Q acl_async --logfile=one_acl_async.log --autoscale=2,1
depends_on:
- mysql
- redis
networks:
new:
aliases:
- acl-api
volumes:
db-data:
driver: local
name: oneterm_db-data
file-data:
driver: local
name: oneterm_file-data
ssh-data:
driver: local
name: oneterm_ssh
networks:
new:
driver: bridge
name: oneterm_network
ipam:
config:
- subnet: 172.30.0.0/24
5.3 创建OneTerm容器
- 使用docker-compose.yaml文件创建OneTerm容器
docker compose up -d
5.4 检查OneTerm容器状态
检查OneTerm容器状态,确保OneTerm容器正常启动。
[root@jeven oneterm]# docker compose ps
NAME COMMAND SERVICE STATUS PORTS
oneterm-acl-api "/bin/sh -c 'sleep 2…" acl-api running
oneterm-api "./api run -c ./conf…" oneterm-api running
oneterm-guacd "/bin/sh -c '/opt/gu…" oneterm-guacd running (starting) 4822/tcp
oneterm-mysql "docker-entrypoint.s…" mysql running 0.0.0.0:23306->3306/tcp, :::23306->3306/tcp
oneterm-redis "docker-entrypoint.s…" redis running 6379/tcp
oneterm-ssh "./entrypoint.sh" oneterm-ssh running 0.0.0.0:12229->12228/tcp, :::12229->12228/tcp
oneterm-ui "/docker-entrypoint.…" oneterm-ui running 0.0.0.0:8000->80/tcp, :::8000->80/tcp
六、访问OneTerm首页
6.1 进入OneTerm登录页
访问地址:http://192.168.3.166:8000,将IP替换为自己服务器IP地址,进入到OneTerm初始页。如果无法访问,则检查服务器防火墙是否设置,云服务器的安全组端口是否放行等。
6.2 访问OneTerm首页
默认的登录账号Miami如下:
- username: admin
- password: 123456
- 点赞
- 收藏
- 关注作者
评论(0)