[安全开发]如何在windows部署灯塔arl

admin 2023年7月24日14:34:15评论67 views字数 5943阅读19分48秒阅读模式
前言

一位诗人说过,你要做一件事,就不能只做一件事。


[安全开发]如何在windows部署灯塔arl


不是星标不推送文章了。

师傅也不想吧~

快把极梦C设置成星标吧。



1


不知道大家,还记得之前的arl二开的文章吗~~当时在windows部署的,真的难

https://mp.weixin.qq.com/s/OGtfj3b7hLi3353lk6s8Hg



前言(一)


本文章详细描述如何在windows端部署灯塔,由于灯塔采用前后端分离式部署,笔者会从主观角度分析此类项目的结构,前后端、中间件的作用。技术上应该是几年前的技术,本文主要阐述相关思想以及实践。不喜勿怪。

   灯塔arl采用的技术栈为

   前端:Nginx + Vue

   后端:Flask + Celery + RabbitMQ + MongoDB

   此类技术栈特点是前后端中间件均可分离式部署

注:建议小白玩家docker一键化部署

     下图:前后端通信简图



[安全开发]如何在windows部署灯塔arl

前后端分离


前后端分离式部署总结

优点:模块化开发、解耦、灵活性强...

缺点:相对更复杂、前后端之前存在跨域问题、学习成本高...




前后端分离是一种软件开发的架构模式,它的目的是将前端(通常指用户界面)和后端(通常指服务器端逻辑)进行解耦,使它们可以独立开发、测试和部署。这种架构模式的出现主要是为了应对复杂的前端应用需求和提高开发效率。


   随着互联网和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语言



中小型站点不考虑用户数量、并发数,可使用python等开发。大型站点用户基数大,通常采用java、c、go等语言开发。灯塔arl使用了python语言Flask框架开发,python后端常用框架如下:

Django

Flask

FastAPI

Tornado

Pyramind

TurboGears

CherryPy

Flcon

Asgineer

...




Celery和消息中间件


Celery 是一个常用的分布式任务队列,用于在异步环境下处理大量任务。它允许你将耗时的任务(例如发送电子邮件、处理图像、计算等)放入队列中,然后由后台的工作进程异步地执行这些任务,从而避免阻塞主线程或延长响应时间。Celery 支持 Python 和其他语言,但在 Python 生态系统中得到了广泛应用。


   消息中间件是 Celery 的一个关键组件,它允许多个进程或服务在分布式环境中进行通信。Celery 使用消息中间件来在生产者(发布任务到队列的应用)和消费者(处理队列中任务的工作进程)之间传递任务消息。这种解耦的架构使得 Celery 能够轻松地扩展、保持高可用性和高并发性。

工作流程

1 应用程序(生产者)将任务发送给 Celery 队列,这些任务被封装成消息。
2 消费者进程(Celery 工作节点)连接到消息中间件,并监听队列中的任务消息。
3 当队列中有任务消息时,空闲的消费者会从队列中获取消息,并执行相应的任务。
4 任务完成后,消费者会将任务的结果返回到指定的位置,通常是一个数据库或者其他存储服务。
5 应用程序可以轮询或者通过其他机制获取任务的执行结果。


Celery通常需要搭配消息中间件使用,常用的消息中间件有

RabbitMQ 使用 AMQP(高级消息队列协议)来传递消息。

        性能和稳定性在大规模应用中表现优秀。

Redis 开源内存数据库,也可以作为消息中间件来传递 Celery 任务消息。

        支持多种数据结构。

Apache Kafka 分布式流处理平台和消息队列系统,具有高吞吐量和可持久性的特点。
...



ARl项目结构


灯塔arl采用的技术栈为

前端:Nginx + Vue

后端:Flask + Celery + RabbitMQ + MongoDB

项目地址

https://github.com/TophantTechnology/ARL

[安全开发]如何在windows部署灯塔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

[安全开发]如何在windows部署灯塔arl

至此完成前端部署,接下来需要启动后端,完成前后端交互后,系统才可运行。

Mongodb数据库部署


下载地址

https://www.mongodb.com/try/download/community


下载完成直接安装即可

后端服务部署


ARL的后端源码是app

启动前需要复制app/config.yaml.example到app/config.yaml

[安全开发]如何在windows部署灯塔arl

其中除去一些信息收集类的key需要补充,还有GEOIP的路径需要修改,这是ip的定位数据。按照实际的路径修改即可。

[安全开发]如何在windows部署灯塔arl

由于项目设定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对照

[安全开发]如何在windows部署灯塔arl

首次启动报错,这是由于开发者未设置文件读取的编码格式,在app/config.py文件配置读取文件的utf-8编码

[安全开发]如何在windows部署灯塔arl

至此后端代码部署成功

[安全开发]如何在windows部署灯塔arl

访问 http://127.0.0.1/login 成功进入登录框

[安全开发]如何在windows部署灯塔arl

此时是无法登录的,因为数据库中没有录入任何用户,需要手动导入用户信息

用户添加信息在docker/mongo-init.js下可以找到,是一条初始化user数据集的sql语句。

[安全开发]如何在windows部署灯塔arl

可通过MongoDBCompass自行插入,该工具是新版Mongodb安装附带的图形化管理工具。

[安全开发]如何在windows部署灯塔arl

点击create collection创建新的数据集

[安全开发]如何在windows部署灯塔arl

创建user库

[安全开发]如何在windows部署灯塔arl

点击ADD DATA ==> Insert document,按下图输入数据,其中fe0a9aeac7e5c03922067b40db984f0e是arlsalt!@#arlpass的md5加密

[安全开发]如何在windows部署灯塔arl

{
"_id": {
"$oid": "64ba5d3cd4a3fb6cfd9de679"
},
"username": "admin",
"password": "fe0a9aeac7e5c03922067b40db984f0e"
}

插入成功后即可登录

[安全开发]如何在windows部署灯塔arl

[安全开发]如何在windows部署灯塔arl

至此,前后端部署成功,但此时,系统是无法执行扫描任务的,因为依赖于celery+消息中间件执行任务,具体流程是

1 前端发起一个扫描请求
2 后端将该请求整理,装入数据库,并将任务下发消息中间件
3 celery监听消息中间件,获取任务详细信息,按照程序预先制定的流程执行探测任务
4 celery将处理结果导入数据库
5 前端向后端请求调取这些信息

下面是消息中间件及celery部署部分


消息中间件部署


灯塔是用的是RabbitMQ作为消息中间件,但由于该中间件在windows端部署相对冗长,这里使用了Redis部署消息中间件。

下载地址

https://redis.io/download/

[安全开发]如何在windows部署灯塔arl

运行redis-server.exe

[安全开发]如何在windows部署灯塔arl

换用redis消息中间件,需要在如下文件中修改相关的信息

app/config.yaml

CELERY:
BROKER_URL : "redis://127.0.0.1:6379/0"
RESULT_BACKEND : "redis://127.0.0.1:6379/1"

[安全开发]如何在windows部署灯塔arl

app/celerytask.py

celery = Celery('task', broker=Config.CELERY_BROKER_URL, backend=Config.CELERY_RESULT_BACKEND)

[安全开发]如何在windows部署灯塔arl

app/config.py

CELERY_BROKER_URL = "redis://127.0.0.1:6379/0"
CELERY_RESULT_BACKEND = "redis://127.0.0.1:6379/1"

[安全开发]如何在windows部署灯塔arl

Config.CELERY_RESULT_BACKEND = y["CELERY"]["RESULT_BACKEND"]

[安全开发]如何在windows部署灯塔arl

  • backend 是异步任务执行完成以后,结果存放的地方。

  • broker 是具体执行任务的工作节点。


Celery安装及任务下发


使用python3的pip可直接安装

pip install celery


celery的运行命令同样可以再docker中找到
在docker/docker-compose.yml中

[安全开发]如何在windows部署灯塔arl


两个celery分别是启动两个不同的消费者,在后端代码中分别定义了arlgithub、arltask的执行流程
这里启动arltask,这是子域名等收集的消费者。

windows端启动命令



celery -A app.celerytask.celery worker -l info -Q arltask -n arltask -c 2 -O fa


[安全开发]如何在windows部署灯塔arl


此时celery会最大同时执行两个消息,将结果存放在arl_worker.log中

点击任务下发

[安全开发]如何在windows部署灯塔arl


通过日志文件可以看到,这里执行成功了,但是由于兼容性问题,任务开始直接就报错了。

[安全开发]如何在windows部署灯塔arl


这里放一个celery的debug小技巧,建议动手能力强的同学自行解决,具体如何一步步debug解决celery运行时的问题,详见下一篇文章。

找到celery任务

[安全开发]如何在windows部署灯塔arl


[安全开发]如何在windows部署灯塔arl


[安全开发]如何在windows部署灯塔arl



添加如下代码

if __name__ == '__main__':
domain_task("test.com", "test", {})


在关键点逐步调试,即可在pycharm中调试celery的程序,其中的base_domain, task_id, options 可通过拦截前端报文获取,或在数据库中获取

[安全开发]如何在windows部署灯塔arl










星球内容

正式运营星球:

1.src真实漏洞挖掘案例分享(永久不定时更新),过程详细一看就会哦。
2.自研/二开等工具/平台的分享。
3.漏洞分析/资料共享等。






[安全开发]如何在windows部署灯塔arl




[安全开发]如何在windows部署灯塔arl


[安全开发]如何在windows部署灯塔arl




[安全开发]如何在windows部署灯塔arl

[安全开发]如何在windows部署灯塔arl

[安全开发]如何在windows部署灯塔arl



[安全开发]如何在windows部署灯塔arl


[安全开发]如何在windows部署灯塔arl


[安全开发]如何在windows部署灯塔arl




[安全开发]如何在windows部署灯塔arl



[安全开发]如何在windows部署灯塔arl








关于文章/Tools获取方式:请关注交流群或者知识星球。











关于交流群:因为某些原因,更改一下交流群的获取方式:

1.请点击联系我们->联系官方->客服小助手添加二维码拉群 。  

[安全开发]如何在windows部署灯塔arl







关于知识星球的获取方式:

1.后台回复发送 "知识星球",即可获取知识星球二维码。

2如若上述方式不行,请点击联系我们->联系官方->客服小助手添加二维码进入星球 。  

3.为了提高质量,推出"免费名人堂"名额,后台回复发送 "知识星球"了解详情。

[安全开发]如何在windows部署灯塔arl








免责声明


        


本公众号文章以技术分享学习为目的。

由于传播、利用本公众号发布文章而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任。

一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!





[安全开发]如何在windows部署灯塔arl







原文始发于微信公众号(极梦C):[安全开发]如何在windows部署灯塔arl

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月24日14:34:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [安全开发]如何在windows部署灯塔arlhttp://cn-sec.com/archives/1902384.html

发表评论

匿名网友 填写信息