|
|
|
@ -0,0 +1,169 @@
|
|
|
|
|
# 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
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
### 三、数据库部署
|
|
|
|
|
##### 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键确认
|
|
|
|
|
然后输入安全码
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|