一位诗人说过,你要做一件事,就不能只做一件事。
不是星标不推送文章了。
师傅也不想吧~
快把极梦C设置成星标吧。
不知道大家,还记得之前的arl二开的文章吗~~当时在windows部署的,真的难
https://mp.weixin.qq.com/s/OGtfj3b7hLi3353lk6s8Hg
本文章详细描述如何在windows端部署灯塔,由于灯塔采用前后端分离式部署,笔者会从主观角度分析此类项目的结构,前后端、中间件的作用。技术上应该是几年前的技术,本文主要阐述相关思想以及实践。不喜勿怪。
灯塔arl采用的技术栈为
前端:Nginx + Vue
后端:Flask + Celery + RabbitMQ + MongoDB
此类技术栈特点是前后端中间件均可分离式部署
注:建议小白玩家docker一键化部署
下图:前后端通信简图
前后端分离式部署总结
优点:模块化开发、解耦、灵活性强...
缺点:相对更复杂、前后端之前存在跨域问题、学习成本高...
前后端分离是一种软件开发的架构模式,它的目的是将前端(通常指用户界面)和后端(通常指服务器端逻辑)进行解耦,使它们可以独立开发、测试和部署。这种架构模式的出现主要是为了应对复杂的前端应用需求和提高开发效率。
随着互联网和Web应用的普及,前端页面变得越来越复杂,需要处理大量的用户交互和数据展示。传统的前后端紧耦合的架构模式对于这种复杂性可能变得不够灵活和可维护。因此,通过前后端分离,前端可以专注于用户界面和用户交互的开发,而后端可以专注于业务逻辑和数据处理的开发。
在前后端分离的架构中,前端通过后端提供的API(应用程序接口)进行通信。前端通过调用后端的API来获取数据,并在前端进行展示和渲染。这种方式可以使前端与后端解耦,前端可以选择使用不同的技术栈和框架进行开发,而后端可以独立于前端进行开发和维护。
总的来说,前后端分离是一种工程化考量和项目管理的解决方案,可以提高开发效率、降低开发难度,并且使前端和后端团队可以并行开发。
常用的前端框架:
Bootstrap
React
Vue
Angular
Foundation
Node.Js
Ember
常用的后端技术栈 :
负载均衡
微服务生态
Thrift
Consul
数据库
Struts
Spring
Mybatis
Shiro
Maven
常用的后端开发语言:
Java语言
C语言
C++ 语言
PHP语言
Go语言
Python语言
Ruby语言
Node.js语言
Django
Flask
FastAPI
Tornado
Pyramind
TurboGears
CherryPy
Flcon
Asgineer
...
Celery 是一个常用的分布式任务队列,用于在异步环境下处理大量任务。它允许你将耗时的任务(例如发送电子邮件、处理图像、计算等)放入队列中,然后由后台的工作进程异步地执行这些任务,从而避免阻塞主线程或延长响应时间。Celery 支持 Python 和其他语言,但在 Python 生态系统中得到了广泛应用。
消息中间件是 Celery 的一个关键组件,它允许多个进程或服务在分布式环境中进行通信。Celery 使用消息中间件来在生产者(发布任务到队列的应用)和消费者(处理队列中任务的工作进程)之间传递任务消息。这种解耦的架构使得 Celery 能够轻松地扩展、保持高可用性和高并发性。
工作流程
1 应用程序(生产者)将任务发送给 Celery 队列,这些任务被封装成消息。
2 消费者进程(Celery 工作节点)连接到消息中间件,并监听队列中的任务消息。
3 当队列中有任务消息时,空闲的消费者会从队列中获取消息,并执行相应的任务。
4 任务完成后,消费者会将任务的结果返回到指定的位置,通常是一个数据库或者其他存储服务。
5 应用程序可以轮询或者通过其他机制获取任务的执行结果。
Celery通常需要搭配消息中间件使用,常用的消息中间件有
RabbitMQ 使用 AMQP(高级消息队列协议)来传递消息。
性能和稳定性在大规模应用中表现优秀。
Redis 开源内存数据库,也可以作为消息中间件来传递 Celery 任务消息。
支持多种数据结构。
Apache Kafka 分布式流处理平台和消息队列系统,具有高吞吐量和可持久性的特点。
...
灯塔arl采用的技术栈为
前端:Nginx + Vue
后端:Flask + Celery + RabbitMQ + MongoDB
项目地址
https://github.com/TophantTechnology/ARL
关键的目录
appServer后端代码
docker/frontendServer前端代码
docker生成docker镜像的配置文件
test一些测试连通性的工具
其中前端和后端源码可拿出来分别在windows部署
ARL的前端组成为Nginx+Vue编译后的静态html文件。
其中Nginx的主要作用是将客户端的请求代理到后端的应用服务器。该服务通常部署在DMZ区域。
Nginx特点
静态文件服务
反向代理
负载均衡
缓存
丰富的安全功能
SSL 支持
...
Nginx下载
http://nginx.org/en/download.html
安装完成后Nginx需要配置html静态文件的位置,也就是arl中docker/frontend前端代码的位置,以及后端api接口的uri。可直接参考github项目文件中docker/nginx.conf部分内容,也可参考如下部分
注:此处未做ssl配置,ssl配置请参考官方conf文件
#user nginx;
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include mime.types;
default_type application/octet-stream;
include conf.d/*.conf;
server {
listen 80;
server_name _;
#access_log logs/host.access.log main;
access_log off;
root /code/frontend; # 这里需要修改
location / {
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /api/ {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:5018/api/;
}
location /swaggerui/ {
proxy_pass http://127.0.0.1:5018/swaggerui/;
}
}
}
需要修改的地方:
root /code/frontend; 路径改为实际前端代码的绝对路径
proxy_pass http://127.0.0.1:5018/api/; 是后端接口,可根据实际调整
修改完成后启动nginx,并访问http://127.0.0.1:80
至此完成前端部署,接下来需要启动后端,完成前后端交互后,系统才可运行。
下载地址
https://www.mongodb.com/try/download/community
下载完成直接安装即可
ARL的后端源码是app
启动前需要复制app/config.yaml.example到app/config.yaml
其中除去一些信息收集类的key需要补充,还有GEOIP的路径需要修改,这是ip的定位数据。按照实际的路径修改即可。
由于项目设定app为模块目录,并非项目主目录,在项目运行前在主目录创建一个main.py文件
from app import main
if __name__ == '__main__':
main.arl_app.run(debug=True, port=5018, host="127.0.0.1")
端口和nginx反代中的proxy_pass对照
首次启动报错,这是由于开发者未设置文件读取的编码格式,在app/config.py文件配置读取文件的utf-8编码
至此后端代码部署成功
访问 http://127.0.0.1/login 成功进入登录框
此时是无法登录的,因为数据库中没有录入任何用户,需要手动导入用户信息
用户添加信息在docker/mongo-init.js下可以找到,是一条初始化user数据集的sql语句。
可通过MongoDBCompass自行插入,该工具是新版Mongodb安装附带的图形化管理工具。
点击create collection创建新的数据集
创建user库
点击ADD DATA ==> Insert document,按下图输入数据,其中fe0a9aeac7e5c03922067b40db984f0e是arlsalt!@#arlpass的md5加密
{
"_id": {
"$oid": "64ba5d3cd4a3fb6cfd9de679"
},
"username": "admin",
"password": "fe0a9aeac7e5c03922067b40db984f0e"
}
插入成功后即可登录
至此,前后端部署成功,但此时,系统是无法执行扫描任务的,因为依赖于celery+消息中间件执行任务,具体流程是
1 前端发起一个扫描请求
2 后端将该请求整理,装入数据库,并将任务下发消息中间件
3 celery监听消息中间件,获取任务详细信息,按照程序预先制定的流程执行探测任务
4 celery将处理结果导入数据库
5 前端向后端请求调取这些信息
下面是消息中间件及celery部署部分
灯塔是用的是RabbitMQ作为消息中间件,但由于该中间件在windows端部署相对冗长,这里使用了Redis部署消息中间件。
下载地址
https://redis.io/download/
运行redis-server.exe
换用redis消息中间件,需要在如下文件中修改相关的信息
app/config.yaml
CELERY:
BROKER_URL : "redis://127.0.0.1:6379/0"
RESULT_BACKEND : "redis://127.0.0.1:6379/1"
app/celerytask.py
celery = Celery('task', broker=Config.CELERY_BROKER_URL, backend=Config.CELERY_RESULT_BACKEND)
app/config.py
CELERY_BROKER_URL = "redis://127.0.0.1:6379/0"
CELERY_RESULT_BACKEND = "redis://127.0.0.1:6379/1"
Config.CELERY_RESULT_BACKEND = y["CELERY"]["RESULT_BACKEND"]
-
backend 是异步任务执行完成以后,结果存放的地方。
-
broker 是具体执行任务的工作节点。
使用python3的pip可直接安装
pip install celery
windows端启动命令
celery -A app.celerytask.celery worker -l info -Q arltask -n arltask -c 2 -O fa
添加如下代码
if __name__ == '__main__':
domain_task("test.com", "test", {})
正式运营星球:
1.src真实漏洞挖掘案例分享(永久不定时更新),过程详细一看就会哦。
2.自研/二开等工具/平台的分享。
3.漏洞分析/资料共享等。
关于文章/Tools获取方式:请关注交流群或者知识星球。
关于交流群:因为某些原因,更改一下交流群的获取方式:
1.请点击联系我们->联系官方->客服小助手添加二维码拉群 。
关于知识星球的获取方式:
1.后台回复发送 "知识星球",即可获取知识星球二维码。
2如若上述方式不行,请点击联系我们->联系官方->客服小助手添加二维码进入星球 。
3.为了提高质量,推出"免费名人堂"名额,后台回复发送 "知识星球"了解详情。
本公众号文章以技术分享学习为目的。
由于传播、利用本公众号发布文章而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任。
一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
原文始发于微信公众号(极梦C):[安全开发]如何在windows部署灯塔arl
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论