ARL-plus分布式搭建手册

admin 2024年9月12日00:18:43评论41 views字数 3779阅读12分35秒阅读模式
鉴于近期的双十一SRC活动,耗时数天呕心沥血整理的《分布式安装手册》,祝各位白帽子洞洞高危。

ARL-plus分布式搭建手册

设施准备

 

首先需要准备一台2c4g的非扫描器当数据库(这台不能进行扫描操作),其他的服务器当work,使用几台随意,作者本人是3台4c16g的worker

数据库服务器安装配置

 

一、安装MongoDB数据库

这里安装的是Mongo7.0版本

步骤 1: 导入 MongoDB 公共 GPG 密钥

打开终端并运行以下命令以导入 MongoDB 的 GPG 密钥:

sudo rpm --import https://www.mongodb.org/static/pgp/server-7.0.asc
步骤 2: 创建 MongoDB.repo 文件

接下来,创建一个新的 .repo 文件来配置 MongoDB 源。使用 vi 或其他文本编辑器:

sudo vi /etc/yum.repos.d/mongodb-org-7.0.repo
在文件中添加以下内容(确保根据您的 CentOS 版本选择合适的 baseurl):

[mongodb-org-7.0]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/7.0/x86_64/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
步骤 3: 安装 MongoDB

更新 YUM 包索引,并安装 MongoDB:

sudo yum updatesudo yum install -y mongodb-org
步骤 4: 启动 MongoDB 服务

安装完成后,启动 MongoDB 服务,并设置其为开机自启:

sudo systemctl start mongodsudo systemctl enable mongod
步骤 5: 验证 MongoDB 是否正常运行

可以通过检查服务状态来确认 MongoDB 是否正在运行:

sudo systemctl status mongod
如果一切正常,你应该看到 MongoDB 状态为 “active (running)”。

ARL-plus分布式搭建手册
步骤 6: 配置防火墙(可选)

如果需要远程访问 MongoDB,需要在防火墙中允许相应的端口(默认端口为 27017):

sudo firewall-cmd --permanent --zone=public --add-port=27017/tcpsudo firewall-cmd --reload
步骤 7: 测试 MongoDB

可以通过 MongoDB Shell 连接到数据库:

mongosh
二、数据库配置

执行mongosh进入mongodb命令行

ARL-plus分布式搭建手册
1)创建管理员用户

更改相关的账号和密码配置

db.createUser({  user: "<new_username>",  pwd: "<new_password>",  roles: [    { role: "readWriteAnyDatabase", db: "admin" },    { role: "dbAdminAnyDatabase", db: "admin" },    { role: "userAdminAnyDatabase", db: "admin" }  ]})# 响应{ ok: 1 }则创建正常
2)更改Mongo配置

这里也可更改为非常规端口,更改security增加验证,不然就会免密开放到公网

# network interfacesnet:  port: 27017  bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.security:  authorization: enabled
历史数据迁移(可选)

 

PS: 如果有历史数据要进行迁移的话

docker ps查看本机mongodb的容器ID ,例如图例

ARL-plus分布式搭建手册
执行

docker exec -it 83f3ebcd7151 mongodump -u admin -p admin --authenticationDatabase admin --db arl --out .docker exec -it 83f3ebcd7151 mongodump  -u admin -p admin --authenticationDatabase admin --db arl --out docker exec -it 83f3ebcd7151 mongodump  -u admin -p admin --authenticationDatabase admin --db arl --out.
等到dump完成时候,进入容器,此时根目录下会存在arl这个目录

docker exec -it 83f3ebcd7151 bash# 83f3ebcd7151替换为自己的容器ID
ARL-plus分布式搭建手册
将文件拷贝出来

docker cp 83f3ebcd7151:/arl.
将arl文件夹压缩为zip,方便传输,(需要等一会,等待时间取决于你数据库的内容多少)

ki9mu:/opt# zip -r arl.zip arl/
ARL-plus分布式搭建手册
还挺大个

ARL-plus分布式搭建手册
移动到要迁移的数据库的服务器上

解压前面压缩的内容

ARL-plus分布式搭建手册
解压后使用当前数据库加载数据(要等一段时间)

mongorestore --db arl arl
如果更改了本机的Mongo端口配置和设置了密码可能会出现如下问题:

2024-09-10T09:36:49.618+0800    error connecting to host: failed to connect to mongodb://localhost/: server selection error: server selection timeout, current topology: { Type: Single, Servers: [{ Addr: localhost:27017, Type: Unknown, Last error: dial tcp [::1]:27017: connect: connection refused }, ] }
使用如下命令即可:

mongorestore --host localhost --port 27017 --db arl -u myuser -p mypassword --authenticationDatabase admin arl
如果出现报错大概率是认证的数据库不正确

等待进度条加载完成即迁移成功

ARL-plus分布式搭建手册
安装ARL-plus

 

下载:https://github.com/ki9mu/ARL-plus-docker

一、删除历史容器

删除历史的容器,如果是docker安装不用担心数据问题,不管是原版还是ki9mu的plus版都一样,因为使用了数据卷,不删除数据卷随时可恢复

ARL-plus分布式搭建手册
二、拉取镜像

获取镜像,镜像可关注公众号回复【plus】获取!

# 下载后存在2个文件,一个.tar.bz2的文件,一个tar文件## 为啥用bz2文件再压缩一道,因为太大了bzip -d xxx.tar.bz2docker load -i xxx.tar
三、更改配置

调整config-docker.yaml文件

MONGO:  URI : 'mongodb://admin:admin@<IP地址>:27017/'  DB : 'arl'
更改为前文中你设置的账号密码和数据库,如果连不上数据库,可以更改DB为admin数据库

四、启动相关容器

docker-compose up -d# 即可
五、排错方式

如果出现容器重启或者容器异常问题,可查看日志相关信息

docker logs <对应容器的ID>
例如这个错误,就是数据库的配置写的有问题,如果实在遇到不懂的问题,把日志丢给GPT即可

ARL-plus分布式搭建手册
六、一切都正确但登陆不上

账号密码输入正确,使用

docker exec -ti arl_mongodb mongo -u admin -p adminuse arldb.user.drop()db.user.insert({ username: 'admin',  password: hex_md5('arlsalt!@#'+'admin123') })
此时就能使用admin123登录成功

BUT如果还登不上,作者本人就遇到了这个错误,这是由于认证Mongo数据库特性导致的(巨坑)

在第二步中,更改了config-docker.yaml的DB为其他数据库例如admin的时候会出现这个错误,代码位于/code/app/utils/user.py处

a = conn db('user').find one(query)print(a)# 输出为Nonea = conn db('user','arl').find one(query)print(a)# 输出为正常
此时可以在数据库中,再创建一个arl的管理员用户

use arl  // 切换到 arl 数据库db.createUser({    user: "yourUsername",  // 替换为您想要的用户名    pwd: "yourPassword",    // 替换为您想要的密码    roles: [{ role: "dbOwner", db: "arl" }]  // 赋予 dbOwner 权限});
然后更改配置为arl数据库dbOwner的账号认证,继而删除相关容器,并更新,实测直接更新不行

docker-compose downdocker-compose up -d

原文始发于微信公众号(OneTS安全团队):ARL-plus分布式搭建手册

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月12日00:18:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ARL-plus分布式搭建手册https://cn-sec.com/archives/3152906.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息