北京定制公交网站,商城类网站功能,微信开发者工具开发小程序,宝安网站多少钱文章目录 前言传统的开发方式#xff1a;Docker-解决环境问题 DevOps-CI/CD走向流水线Jenkins工作流程Git拉取代码Maven构建打包通过SSH连接后端服务器 实现效果 DevSecOps-安全赋能关于安全平台漏洞扫描漏洞预警TODO 前言
临近春节#xff0c;笔者经过半年北漂#xff0c;… 文章目录 前言传统的开发方式Docker-解决环境问题 DevOps-CI/CD走向流水线Jenkins工作流程Git拉取代码Maven构建打包通过SSH连接后端服务器 实现效果 DevSecOps-安全赋能关于安全平台漏洞扫描漏洞预警TODO 前言
临近春节笔者经过半年北漂实习期间辗转几家公司同时也接触了几种不同岗位也算对安全有了个初步的了解 目前在一家公司做安全开发相关实习期间接触到一些比较有意思的技术特此记录一下 之前写一些小的工具无论是Bash、Python还是Java都是顶多几百行的工作量感觉不到开发的魅力也没有开发和安全相结合的感觉后面在公司有机会写一下完整的系统以及后续的部署发布体验到了创造的魅力(增删改查 hah)
传统的开发方式
一开始写的时候 技术选型是SpringBootSpringSecurityMyBatisthymeleaf前后端不分离直接java -jar project.jar 直接运行了似乎其他的也不需要考虑后面了解到防御型编程(开玩笑的)直接将项目进行前后端分离SpringBootVue(为什么选Vue因为公司前端用的React)后端提供接口文档给前端这样开发出来的项目 后端与前端单独运行将前端静态代码放在Nginx中配置个反向代理啥的这样项目也能跑起来 nginx目录放置静态代码
Docker-解决环境问题
后面接触到了Docker 感觉容器化部署也不错也不需要管Jdk版本数据库版本啥的部署起来简直不要太舒服直接一个DockerFile就跑起来了。
FROM ubuntu:latest
FROM openjdk:8# 设置工作目录
WORKDIR /appCOPY /target/springboot-backend.jar /appEXPOSE 22
EXPOSE 8080LABEL authorsxxxxxx
LABEL version1.0
LABEL descriptionI think therefore I am.ENV IMAGE_NAMEsecPlatform-springboot#RUN apt-get update vim net-tools openssh-serverENTRYPOINT [java, -jar,springboot-backend.jar]
这样看似乎也没什么问题 这里搭配IDEA食用更佳
后面发现一个一个拉镜像也挺麻烦的Java后端的、Nginx前端的、Mysql数据库的、Redis数据库还有需要一个portainer做监测吧(这里还是要注意下数据卷挂载问题)后面了解到Docker-Compose(单主机多容器)跟Docker Swam(多个主机容器集群 奈何资源有限)写个Docker-Compose 直接一键编排也确实挺香的
version: 3
services:nginx:image: nginx:latestcontainer_name: springboot-nginxrestart: alwaysports:- 80:80volumes:- /data/Docker/Volumes/nginx/html:/usr/share/nginx/html- /data/Docker/Volumes/nginx/nginx.conf:/etc/nginx/nginx.confprivileged: truemysql:image: mysql:8.2.0container_name: springboot-mysqlrestart: alwaysports:- 3306:3306environment:- MYSQL_ROOT_PASSWORDxxxxxxvolumes:- /data/Docker/Volumes/mysql/data:/var/lib/mysql- /data/Docker/Volumes/mysql/conf/conf.d:/etc/mysql/conf.dredis:image: redis:latestcontainer_name: springboot-redisrestart: alwayscommand: redis-server /etc/redis/redis.conf --appendonly yes --requirepass xxxxxxports:- 6379:6379volumes:- /data/Docker/Volumes/redis/conf:/etc/redis- /data/Docker/Volumes/redis/data:/datalogging:driver: json-fileoptions:max-size: 100mmax-file: 2backend:image: springboot-backend:1.0container_name: springboot-backrestart: alwaysbuild: .ports:- 8080:8080- 122:22environment:- TZAsia/Shanghai # 设置时区为上海GMT8portainer:image: portainer/portainercontainer_name: portainerrestart: alwaysports:- 9000:9000- 8001:8080volumes:- /var/run/docker.sock:/var/run/docker.sock- /data/Docker/Volumes/portainer/data:/data 局限于服务器资源限制 说实话我其实想直接上K8s的(怎么着也要32g起步啊)。 做完这些感觉还是不够 自己写的代码还是需要构建打包 然后每次都需要重新部署前端后端容器这些操作还是需要手动的操作 感觉还是不够人性化(这里感觉稍微别扭一点的就是容器间通信问题 当然最近还在琢磨)
后面接触到了DevOpsCI、CD操作彻底解放双手
DevOps-CI/CD走向流水线
DevOps经历了瀑布模型到敏捷模型的’进化’从传统的开发运维模型演变而来 DevOps中的Dev指的是Development开发Ops指的是Operations运维用一句话来说DevOps就是打通开发运维的壁垒实现开发运维一体化。
这里概念啥的不再重复先上手再说搭建环境的时候挺麻烦 不过好在已经习惯了 找了一些课程看了看 感觉里面的一些工具什么的都是自己曾经做渗透测试的时候经常遇到的系统比如说Gitlab、Jenkins、Grafana、Prometheus当时就顾的找有没有历史漏洞版本能不能对上能不能复现打没打补丁也不太在意这个系统是干嘛的现在看起来这些系统原来都在DevOps中扮演着不同的角色。 相关工具使用 代码管理Gitlab 构建工具Maven 与JDK 通过数据卷映射到Jenkins_home下 CI/CD(持续集成、持续部署)Jenkins 在DevOps流程中JenKins扮演着重要角色
换一张图再次震撼一下 基本上有点规模的公司都会使用这种开发流程
这里通过Jnekins构建过程中 控制台输出来简单讲述一下 Jenkins工作流程
Jenkins工作流程
Git拉取代码
Started by user whgojp
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/安全平台-后端
The recommended git tool is: NONE
No credentials specified git rev-parse --resolve-git-dir /var/jenkins_home/workspace/安全平台-后端/.git # timeout10
Fetching changes from the remote Git repository git config remote.origin.url http://172.21.251.39:8929/whgojp/secplatform-springboot.git # timeout10
Fetching upstream changes from http://172.21.251.39:8929/whgojp/secplatform-springboot.git git --version # timeout10 git --version # git version 2.39.2 git fetch --tags --force --progress -- http://172.21.251.39:8929/whgojp/secplatform-springboot.git refs/heads/*:refs/remotes/origin/* # timeout10 git rev-parse refs/remotes/origin/main^{commit} # timeout10
Checking out Revision a422d64e0ad3760e288170c97c6aa44669fde20e (refs/remotes/origin/main) git config core.sparsecheckout # timeout10 git checkout -f a422d64e0ad3760e288170c97c6aa44669fde20e # timeout10
Commit message: Update docker-compose.yml git rev-list --no-walk 13688eb2a3f81e7e1b4239a9b4dc10ac9857115c # timeout10Maven构建打包
[安全平台-后端] $ /var/jenkins_home/maven3.9.6/bin/mvn clean package -DskipTests
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for springboot-backend:springboot-backend:jar:5.1
[INFO] --------------- springboot-backend:springboot-backend ----------------
[INFO] Building springboot-backend 5.1
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] The artifact mysql:mysql-connector-java:jar:8.0.33 has been relocated to com.mysql:mysql-connector-j:jar:8.0.33: MySQL Connector/J artifacts moved to reverse-DNS compliant Maven 2 coordinates.
[INFO]
[INFO] --- clean:3.2.0:clean (default-clean) springboot-backend ---
[INFO] Deleting /var/jenkins_home/workspace/安全平台-后端/target
[INFO]
[INFO] --- surefire:2.22.2:test (default-test) springboot-backend ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- jar:3.2.2:jar (default-jar) springboot-backend ---
[INFO] Building jar: /var/jenkins_home/workspace/安全平台-后端/target/springboot-backend.jar
[INFO]
[INFO] --- spring-boot:2.7.14:repackage (repackage) springboot-backend ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.756 s
[INFO] Finished at: 2024-02-01T03:38:05Z
[INFO] ------------------------------------------------------------------------通过SSH连接后端服务器
SSH: Connecting from host [7988de83981e]
SSH: Connecting with configuration [172.21.251.39] ...
SSH: EXEC: completed after 3,402 ms
SSH: Disconnecting configuration [172.21.251.39] ...
SSH: Transferred 3 file(s
Finished: SUCCESS当然这个过程中还需要一些必要的配置这里就不再复述
实现自己在Idea中写完代码push后自动部署 后续可以搭配webhook触发
最终的docker-compose文件
version: 3
services:nginx:image: nginx:latestcontainer_name: springboot-nginxrestart: alwaysports:- 80:80volumes:- /data/Docker/Volumes/nginx/html:/usr/share/nginx/html- /data/Docker/Volumes/nginx/nginx.conf:/etc/nginx/nginx.confprivileged: truemysql:image: mysql:8.2.0container_name: springboot-mysqlrestart: alwaysports:- 3306:3306environment:- MYSQL_ROOT_PASSWORDxxxxxxvolumes:- /data/Docker/Volumes/mysql/data:/var/lib/mysql- /data/Docker/Volumes/mysql/conf/conf.d:/etc/mysql/conf.dredis:image: redis:latestcontainer_name: springboot-redisrestart: alwayscommand: redis-server /etc/redis/redis.conf --appendonly yes --requirepass xxxxxxports:- 6379:6379volumes:- /data/Docker/Volumes/redis/conf:/etc/redis- /data/Docker/Volumes/redis/data:/datalogging:driver: json-fileoptions:max-size: 100mmax-file: 2backend:image: springboot-backend:1.0container_name: springboot-back
# command: cd /data/Docker/Volumes/restart: alwaysbuild: .ports:- 8080:8080- 122:22environment:- TZAsia/Shanghai # 设置时区为上海GMT8- portainer:image: portainer/portainercontainer_name: portainerrestart: alwaysports:- 9000:9000- 8001:8080volumes:- /var/run/docker.sock:/var/run/docker.sock- /data/Docker/Volumes/portainer/data:/data# gitlab 需要服务器4G往上 暂时放置本地gitlab:image: gitlab/gitlab-ce:14.0.7-ce.0container_name: springboot-gitlabrestart: alwayshostname: 172.21.251.39environment:GITLAB_OMNIBUS_CONFIG: |external_url http://172.21.251.39:8929gitlab_rails[gitlab_shell_ssh_port] 2224gitlab_rails[time_zone] Asia/Shanghaiports:- 8929:8929- 2224:22 # 注意这里映射的是gitlab的22端口volumes:- /data/Docker/Volumes/gitlab/config:/etc/gitlab- /data/Docker/Volumes/gitlab/logs:/var/log/gitlab- /data/Docker/Volumes/gitlab/data:/var/opt/gitlabjenkins:image: jenkins/jenkinscontainer_name: springboot-jenkinsrestart: alwaysports:- 18002:8080- 50000:50000volumes:- /data/Docker/Volumes/jenkins/jenkins_home:/var/jenkins_homeprivileged: true 实现效果
当然后台也进行docker-compose 编排 后面会考虑加入日志管理、系统监控、SonarQube(代码质量、安全检测)啥的 当然这也要看运维大哥给不给加内存了 hah
最近又又又接触到了DevSecOps
DevSecOps-安全赋能
顾名思义 就是在DevOps过程中贯穿了安全近几年从DevOps演变而来的 据我目前的认识应该是在DevOps流程中加入一些安全工具等因素比如说 使用SAST(静态分析安全测试)Fortify、AppScan DAST(动态分析安全测试)OWASP ZAP、Contrast 当然还有一些其他的工具AWVS、Nessus 对源代码进行分析以及源代码相关的SBOM(软件物料清单)pom依赖、第三方组件(供应链攻击) 除了一些工具技术的干预外 还有一些安全培训等等相关介入 由于接触的时间并不长部分的内容了解的不多留个白吧后面有机会再补充
关于安全平台
这里还是介绍一下自己正在开发的安全平台️目前只写了完整的两个功能
漏洞扫描
可能有老哥一眼出发现了什么猫腻 可以实现批量添加、批量删除、以及定时扫描导出报告用的POI自定义模版以及高危漏洞不同颜色显示等等等 每个目标对应多个漏洞每个漏洞都有漏洞详情、修复建议什么的 不过还是存在一些问题(大量漏洞详情存储过程中性能优化、怎么快速筛选出有价值的漏洞并导出报告)
漏洞预警
代码实现通过定时监控微软、阿里云、奇安信等漏洞预警平台接口(api调用、爬虫)使用钉钉webhook进行推送 当然还面临一些其他问题(平台的反爬虫、各平台推送重复怎么去重优化、漏洞及时更新详情)
TODO
公司敏感信息泄漏监测(初步思路是通过GitHub接口监测……)本地资产管理(通过运维提供的资产列表定期进行扫描端口、服务……)外网暴露面管理(通过Fofa进行资产汇总定期监控……)