几天前,我发布了Cyber Eye Web平台。一个允许任何用户,甚至没有技术知识的用户,都可以在其基础架构上运行一些基本和高级的安全扫描。
这些扫描中的每一个都是从外部进行的,模拟了攻击者可以搜索的内容。
今天,我们将沿着这个平台的技术方面走下去,我将解释一下我的工作方式。我对改进它的任何建议很开放:)
服务器架构
对于这个项目,我决定将其作为可扩展性的优先级。实际上,由于用户自己可以决定扫描的周期性(通过CRON用户友好的选择器),我希望晚上12点在凌晨12点重载。
所以我决定以这种方式拆分体系结构:
- 管理用户请求的服务负责验证,用户信用检查,将请求发布到其他服务)
- AWS SQS队列发送请求
- 服务听上述队列,负责部署安全探针(每个探测器都用Docker进行了容器)
- AWS SQS队列,其中探针是发送结果通知
- a mongodb atlas数据库存储探针的原始结果
- 管理探针结果的服务,解析它们并创建提供给用户的最终报告
- 最后, Supabase提供的实时数据库处理基本数据存储并允许UI响应率
- 3其他其他服务处理自动化工作,平台统计和使用Stripe的计费
请求服务
此服务是平台的入口点。它是负责处理用户请求的原因,确保他们有足够的信用来运行扫描并将请求发布到AWS SQS队列。
报告服务
此服务是工作流程的最后一部分,当扫描的最后一个探测结束时,它触发。它将从Mongo汲取所有探针,然后根据定义的解析器解析每个探针。一旦正确解析了每个结果,它们就会汇总以形成最终的报告嵌入更多元数据。该报告将提供给用户。
部署服务
这是让我头痛的那个。最初,我想使用由AWS SQS队列触发的AWS lambda函数按需部署某些容器。但是,我使用ECS进行了很多努力,因为它鼓励使用预定义的配置文件,而我希望我的容器可以随时部署而没有任何结构。
在这一点上,我的解决方案是在AWS Services地狱中进行更深入的研究,或者独自研究并创建自己非常简单的EC。这就是我所做的。
这个自制的AWS ECS是用Python编写的,使用boto3
模块聆听AWS队列。在收到的每个事件中,请求进行解析,确定相关容器并设置配置。然后,将容器放置在部署等候队列内(将随机设置为最多5平行运行)。当部署插槽免费时,容器将在主机机器上执行,并在末端被杀死。
这个选择还使我可以降低AWS产生的成本。
探针
每个探针都包裹在码头容器中,以便能够在任何地方运行它,与代码库的其余部分脱钩,并用任何语言编写
我基本上不是创建自己的安全工具,而是围绕着著名工具(例如nmap
,nikto
,sqlmap
...)构建包装纸...以提供可信赖的结果。
前端体系结构
梳理自己,这将是一篇长读
我正在使用react和parwindcss :)
Git Methology&CI / CD
为了能够轻松管理我的模型和常见代码,我决定使用整个服务器端进行MonorePo。
我设置了一些GitHub操作,以便在DEV和生产分支机构上的每个推/拉请求上运行测试。然后,我的Docker图像是使用Dockerhub构建和存储的。
在CD侧,我正在努力在生产服务器上设置watchtower
,以自动拉新的图像并重新启动容器。
总而言之,这个项目对我来说是一个令人兴奋的游乐场,我可以利用我的所有知识并学习了大量新事物(软件架构,DevOps实践,生产的严格性...)。我肯定会继续这个项目将其带入成熟的产品,并越来越多的探针,并将在此博客上发布更多更新
谢谢您阅读!很高兴在评论部分听到您的想法