前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >ARL-plus分布式搭建手册

ARL-plus分布式搭建手册

作者头像
OneTS安全团队
发布2025-02-07 16:35:49
发布2025-02-07 16:35:49
6600
代码可运行
举报
文章被收录于专栏:OneTS安全团队OneTS安全团队
运行总次数:0
代码可运行

鉴于近期的双十一SRC活动,耗时数天呕心沥血整理的《分布式安装手册》,祝各位白帽子洞洞高危。

设施准备

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

性价比超高的服务器地址推荐:

腾讯云 2核2G 3M40G 38块/年(每天10点限量抢)

腾讯云 2核2G 4M50G 79块/年

腾讯云 4核8G 12M180G 880块/年+赠送3个月(不如京东)

腾讯云链接直达:https://curl.qcloud.com/RbgQrR5U

京东云 4核16G 5M100G 518/年 (推荐当worker用,一次4个任务)

京东云 2核4G 5M60G 618 3年(推荐当数据库使用,稳定不迁移)

数据库服务器安装配置

一、安装MongoDB数据库

这里安装的是Mongo7.0版本

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

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

代码语言:javascript
代码运行次数:0
复制
sudo rpm --import https://www.mongodb.org/static/pgp/server-7.0.asc

步骤 2: 创建 MongoDB.repo 文件

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

代码语言:javascript
代码运行次数:0
复制
sudo vi /etc/yum.repos.d/mongodb-org-7.0.repo

在文件中添加以下内容(确保根据您的 CentOS 版本选择合适的 baseurl):

代码语言:javascript
代码运行次数:0
复制
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc

步骤 3: 安装 MongoDB

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

代码语言:javascript
代码运行次数:0
复制
sudo yum update
sudo yum install -y mongodb-org

步骤 4: 启动 MongoDB 服务

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

代码语言:javascript
代码运行次数:0
复制
sudo systemctl start mongod
sudo systemctl enable mongod

步骤 5: 验证 MongoDB 是否正常运行

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

代码语言:javascript
代码运行次数:0
复制
sudo systemctl status mongod

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

步骤 6: 配置防火墙(可选)

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

代码语言:javascript
代码运行次数:0
复制
sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp
sudo firewall-cmd --reload

步骤 7: 测试 MongoDB

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

代码语言:javascript
代码运行次数:0
复制
mongosh

二、数据库配置

执行mongosh进入mongodb命令行

1)创建管理员用户

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

代码语言:javascript
代码运行次数:0
复制
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增加验证,不然就会免密开放到公网

代码语言:javascript
代码运行次数:0
复制
# network interfaces
net:
  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 ,例如图例

执行

代码语言:javascript
代码运行次数:0
复制
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这个目录

代码语言:javascript
代码运行次数:0
复制
docker exec -it 83f3ebcd7151 bash
# 83f3ebcd7151替换为自己的容器ID

将文件拷贝出来

代码语言:javascript
代码运行次数:0
复制
docker cp 83f3ebcd7151:/arl.

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

代码语言:javascript
代码运行次数:0
复制
ki9mu:/opt# zip -r arl.zip arl/

还挺大个

移动到要迁移的数据库的服务器上

解压前面压缩的内容

解压后使用当前数据库加载数据(要等一段时间)

代码语言:javascript
代码运行次数:0
复制
mongorestore --db arl arl

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

代码语言:javascript
代码运行次数:0
复制
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 }, ] }

使用如下命令即可:

代码语言:javascript
代码运行次数:0
复制
mongorestore --host localhost --port 27017 --db arl -u myuser -p mypassword --authenticationDatabase admin arl

如果出现报错大概率是认证的数据库不正确

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

安装ARL-plus

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

一、删除历史容器

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

二、拉取镜像

代码语言:javascript
代码运行次数:0
复制
# 下载后存在2个文件,一个.tar.bz2的文件,一个tar文件
## 为啥用bz2文件再压缩一道,因为太大了
bzip -d xxx.tar.bz2
docker load -i xxx.tar

三、更改配置

调整config-docker.yaml文件

代码语言:javascript
代码运行次数:0
复制
MONGO:
  URI : 'mongodb://admin:admin@<IP地址>:27017/'
  DB : 'arl'

更改为前文中你设置的账号密码和数据库,如果连不上数据库,可以更改DB为admin数据库

四、启动相关容器

代码语言:javascript
代码运行次数:0
复制
docker-compose up -d
# 即可

五、排错方式

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

代码语言:javascript
代码运行次数:0
复制
docker logs <对应容器的ID>

例如这个错误,就是数据库的配置写的有问题,如果实在遇到不懂的问题,把日志丢给GPT即可

六、一切都正确但登陆不上

账号密码输入正确,使用

代码语言:javascript
代码运行次数:0
复制
docker exec -ti arl_mongodb mongo -u admin -p admin
use arl
db.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处

代码语言:javascript
代码运行次数:0
复制
a = conn db('user').find one(query)
print(a)
# 输出为None

a = conn db('user','arl').find one(query)
print(a)
# 输出为正常

此时可以在数据库中,再创建一个arl的管理员用户

代码语言:javascript
代码运行次数:0
复制
use arl  // 切换到 arl 数据库

db.createUser({
    user: "yourUsername",  // 替换为您想要的用户名
    pwd: "yourPassword",    // 替换为您想要的密码
    roles: [{ role: "dbOwner", db: "arl" }]  // 赋予 dbOwner 权限
});

然后更改配置为arl数据库dbOwner的账号认证,继而删除相关容器,并更新,实测直接更新不行

代码语言:javascript
代码运行次数:0
复制
docker-compose down
docker-compose up -d
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OneTS安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档