# EIM项目安全部署方案 ##### 容器列表 | 容器名称 | 容器映射端口 |备注说明 | | -------- | -------- |-------- | | mysql数据库 | 3306 | | | nginx服务器 | 8081 | | | nacos服务器 |8848、9848、9849 | | | eim服务器 | 8101 | | ##### 宿主机端口开放 | 容器名称 | 对外开放端口 |备注说明 | | -------- | -------- |-------- | | mysql数据库 | 3306 | | | nginx服务器 | | | | nacos服务器 |8848 | | | eim服务器 | 8101 | | ### 一、docker容器的安全策略 ##### 1. 版本控制与镜像管理 使用Docker时,及时管理和维护镜像版本非常重要。在生产环境中,我们应该使用具有稳定性和经过验证的镜像版本,并定期更新和测试新的镜像版本。此外,建议使用私有的Docker镜像仓库,以确保权限控制和镜像的完整性。EIP项目使用镜像仓库列表: | 镜像分类 | 镜像仓库地址 |备注说明 | | -------- | -------- |-------- | | mysql数据库 | | | | nginx服务器 | | | | nacos服务器 | | | | eim服务器 | 218.17.55.193:3001/pdc/openjdk:8 | | ##### 2. 权限控制 在将应用程序容器化之前,需要对容器进行安全加固。将容器限制在一个最小的权限集合中,以减少潜在的攻击面。 ###### (1)创建Docker用户组,并将需要使用Docker的用户添加到该用户组中。这可以通过执行以下命令实现: sudo groupadd docker sudo usermod -aG docker $USER --$USER替换为用户名 sudo gpasswd -a yzj docker newgrp docker 然后,重新登录以使更改生效。 ###### (2)将Docker socket文件的所有者更改为Docker用户组。这可以通过执行以下命令实现: sudo chown root:docker /var/run/docker.sock 这将允许在无需root权限的情况下运行Docker。 ##### 3. 资源限制和监控 为了避免容器资源的过度使用或不足,我们应该设置适当的资源限制,并对其进行监控。使用Docker提供的资源管理工具,例如Docker Compose或Kubernetes,可以更好地管理容器的资源分配。同时,通过监控容器的运行状况和性能指标,可以及时发现和解决潜在的问题。 docker run --cpus=0.5 --memory=512m myimage ##### 4. 容器日志和监控 配置容器日志收集系统,将容器日志集中管理和分析,以及添加适当的告警机制 ### 二、配置文件修改(使用bootstrap-test.yml) ##### 1. 修改dtaf-service.jar配置文件 bootstrap.yml ![这是图片](/assets/img/taf-bootstrap.jp "Magic Gardens") ### 三、数据库部署 ##### 1. 生成mysql数据库容器 docker pull mysql:latest #使用私有仓库镜像 docker run -itd --name mysql-app -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql #密码要求轻度高,包含大小写字母,数字,特殊字符 ##### 2. 创建生产数据库用户 CREATE USER 'eim'@'192.168.8.100' IDENTIFIED BY 'pass123'; #密码要求轻度高,包含大小写字母,数字,特殊字符 GRANT ALL PRIVILEGES ON *.* TO 'eim'@'192.168.8.100'; FLUSH PRIVILEGES; 注意:限制用户只能从特定IP地址登录可以增强安全性,但也要确保你不会意外地限制合法用户。始终确保你了解正在执行的操作,并始终保持数据库的安全性。 ##### 3. 禁止root用户远程登录 REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%'; FLUSH PRIVILEGES; root用户将无法通过远程连接登录MySQL数据库。记住,在禁用root远程登录之后,确保你有其他方式可以安全地管理和维护你的数据库。 ##### 3. 执行数据库脚本 ### 四、nginx部署 1、拷贝nginx.conf、eimp到/home/yzj文件(eimp为前端代码) docker pull nginx:stable-perl cd /home/yzj mkdir -p /home/yzj/eim-prod/nginx/conf mkdir -p /home/yzj/eim-prod/nginx/html cp nginx.conf /home/yzj/eim-prod/nginx/conf cp -r eimp/ /home/yzj/eim-prod/nginx/html docker run -d -p 8081:80 --name eim-nginx -v /home/yzj/eim-prod/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/yzj/eim-prod/nginx/logs:/var/log/nginx -v /home/yzj/eim-prod/nginx/html:/usr/share/nginx/html nginx:stable-perl 验证: ### 五、nacos部署 1、拷贝nacos-server-2.2.0.zip、Dockerfile到/home/yzj/nacos-build 文件 cd /home/yzj/nacos-build/ docker pull openjdk:8-jre docker build -t nacos:eim . docker run -d -it --name nacos-eim -p 8848:8848 -p 9848:9848 -p 9849:9849 nacos:eim Dockerfile内容 FROM openjdk:8-jre ENV WORK_HOME /usr/local WORKDIR $WORK_HOME ADD nacos-server-2.2.0.zip /usr/local RUN unzip /usr/local/nacos-server-2.2.0.zip RUN chmod +x /usr/local/nacos/bin/startup.sh EXPOSE 8848 9848 9849 ENTRYPOINT [ "sh", "-c", "/usr/local/nacos/bin/startup.sh && tail -f /usr/local/nacos/logs/start.out" ] ### 六、eim部署 1、拷贝customer-service.jar、dtaf-service.jar、eima-bff.jar、eim-service.jar、eimp-gateway.jar、Dockerfile到/home/yzj/eim-build 文件 cd /home/yzj/eim-build/ docker pull openjdk:8-jre docker build -t eim:0428 . docker run -d -it --name eim -p 8101:8101 eim:0428 #确定启动后,进入容器内启动eimp-gateway服务 docker exec -it eim /bin/bash nohup java -jar eimp-gateway.jar & Dockerfile内容 FROM openjdk:8-jre ENV WORK_HOME /opt/ WORKDIR $WORK_HOME EXPOSE 8101 ADD customer-service.jar /opt/ ADD dtaf-service.jar /opt/ ADD eima-bff.jar /opt/ ADD eim-service.jar /opt/ ADD eimp-gateway.jar /opt/ RUN chmod +x /opt/*.jar CMD ["sh", "-c", "java -jar dtaf-service.jar > /dtaf-service.log 2>&1 & java -jar customer-service.jar > /customer-service.log 2>&1 & java -jar eima-bff.jar > /eima-bff.log 2>&1 & java -jar eim-service.jar > /eim-service.log 2>&1 "] ### 七、docker宿主机隔离 ##### 1. 禁止root用户登录 vi /etc/ssh/sshd_config PermitRootLogin选项,并将其值修改为no sudo /etc/init.d/ssh restart ##### 2. 使用密钥登录 ###### (1)在windows堡垒机上生成密钥 ssh-keygen -t rsa #生成密钥 弹出密钥保存路径,直接回车即可 弹出输入安全码,设置一个远程连接安全码。 ###### (2)上传公钥到服务器 scp ~/.ssh/id_rsa.pub yzj@192.168.8.156:~/ ###### (3)到服务器上将公钥添加到authorized_keys ssh yzj@192.168.8.156 #登录到linux系统 追加id\_rsa.pub公钥到authorized\_keys(如果没有则新建) mkdir -p ~/.ssh #如果已经存在就不需要执行 chmod 700 ~/.ssh cat ~/id_rsa.pub >> ~/.ssh/authorized_keys ###### (4)打开密钥连接并关闭网络连接 vi /etc/ssh/sshd_config `PubkeyAuthentication` 选项设置为 `yes`,以启用公钥认证 `PasswordAuthentication`选项被设置为`no`,关闭密码登录 保存并关闭文件后,重启SSH服务 sudo /etc/init.d/ssh restart ###### (5)通过密钥连接 ssh yzj@192.168.8.156 第一次需要按enter键确认 然后输入安全码