1. Kali Linux与Docker环境准备
在Kali Linux上部署Docker环境是搭建ARL(Asset Reconnaissance Lighthouse,资产侦察灯塔系统)的第一步。作为专为渗透测试设计的操作系统,Kali Linux 2023.3版本默认已包含Docker CLI工具,但完整环境仍需手动配置。
1.1 系统基础配置检查
首先更新软件源并升级现有组件:
bash复制sudo apt update && sudo apt full-upgrade -y
检查内核版本是否符合Docker要求(需≥5.10):
bash复制uname -r
# 示例输出:6.1.0-kali5-amd64
若使用虚拟机,需在BIOS中开启虚拟化支持(Intel VT-x/AMD-V)。物理机可通过以下命令验证:
bash复制grep -E --color 'vmx|svm' /proc/cpuinfo
# 有输出表示支持虚拟化
1.2 Docker引擎安装
Kali官方仓库的Docker版本可能较旧,建议使用Docker官方源:
bash复制# 卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
# 添加Docker GPG密钥
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker引擎
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io
验证安装成功后,将当前用户加入docker组避免频繁使用sudo:
bash复制sudo usermod -aG docker $USER
newgrp docker # 立即生效
docker run hello-world # 测试运行
注意:Kali默认使用root用户操作,但在Docker最佳实践中建议使用普通用户。若坚持使用root,需特别注意容器权限隔离问题。
1.3 Docker Compose部署
ARL使用Docker Compose编排多容器服务,安装最新版:
bash复制sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证版本:
bash复制docker-compose --version
# 应输出:Docker Compose version v2.20.3
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ARL灯塔系统部署实战
ARL(Asset Reconnaissance Lighthouse)是由Tophant团队开发的开源资产侦察系统,集成了子域名发现、端口扫描、Web指纹识别等功能。
2.1 获取ARL源码
推荐使用官方Git仓库的最新稳定版:
bash复制git clone https://github.com/TophantTechnology/ARL
cd ARL/docker/
目录结构说明:
code复制docker/
├── config-docker.yaml # 主配置文件
├── docker-compose.yml # 编排文件
├── nginx/
└── wait-for-it.sh # 服务依赖检查脚本
2.2 配置调优
修改config-docker.yaml关键参数:
yaml复制# 数据库配置
mongo:
host: mongodb
port: 27017
username: admin
password: arlpass # 建议修改为复杂密码
# 任务并发控制
task:
max_process: 10 # 根据CPU核心数调整
max_site_process: 5
调整docker-compose.yml资源限制:
yaml复制services:
web:
mem_limit: 2g # 前端内存限制
worker:
mem_limit: 4g # 工作节点内存
cpus: "2.0" # CPU核心数
2.3 启动与初始化
构建并启动服务:
bash复制docker-compose up -d
初始化数据库(首次运行必需):
bash复制docker exec -ti arl_mongodb mongo -u admin -p arlpass --authenticationDatabase admin
> use arl
> db.user.insertOne({username: "admin", password: "$2b$12$V4/g4J5vDOWYkyvXHqPuU.9h6BqPIQ8QZJZtR5wY7z3dQ5XhLJG6K", is_admin: true})
# 默认密码:arlpass
安全提示:务必在初始化后立即修改默认密码!可通过MongoDB命令行或ARL前端界面修改。
3. ARL系统配置与优化
3.1 服务健康检查
验证各容器状态:
bash复制docker-compose ps
正常应显示7个服务均为"running"状态:
code复制NAME COMMAND SERVICE STATUS PORTS
arl_mongodb "docker-entrypoint.s…" mongodb running 27017/tcp
arl_nginx "/docker-entrypoint.…" nginx running 0.0.0.0:80->80/tcp
...
检查日志输出:
bash复制docker-compose logs -f worker # 监控工作节点日志
3.2 网络与存储配置
默认情况下,ARL会映射80端口到宿主机。如需修改:
yaml复制# docker-compose.yml
services:
nginx:
ports:
- "8080:80" # 改为其他端口
数据持久化配置:
yaml复制volumes:
mongo_data: # MongoDB数据卷
driver: local
driver_opts:
o: bind
type: none
device: /data/arl/mongo # 自定义宿主机路径
3.3 性能调优建议
-
任务并发控制:
- 单任务目标数不超过500个IP/域名
- 大规模扫描采用分批次策略
-
资源监控命令:
bash复制docker stats # 实时资源占用 docker exec -ti arl_worker top # 工作节点进程监控 -
定时任务配置:
使用Kali内置cron定期执行资产监控:bash复制crontab -e # 每天凌晨2点执行全量扫描 0 2 * * * docker exec arl_worker python3 app.py task --domain example.com --type domain
4. 常见问题排查手册
4.1 Docker服务启动失败
症状:docker-compose up报错"failed to start"
排查步骤:
- 检查Docker引擎状态:
bash复制
systemctl status docker - 查看完整日志:
bash复制
journalctl -xe -u docker --no-pager - 常见原因:
- 未关闭防火墙:
sudo systemctl stop firewalld - 端口冲突:修改
docker-compose.yml中的端口映射 - 磁盘空间不足:
df -h清理空间
- 未关闭防火墙:
4.2 ARL任务执行异常
症状:任务长时间卡在"running"状态
解决方案:
- 重启工作节点:
bash复制
docker-compose restart worker - 检查任务队列:
bash复制docker exec -ti arl_redis redis-cli -n 1 KEYS "*" - 清理僵尸任务:
bash复制docker exec -ti arl_web python3 app.py clean --type task
4.3 性能优化实测数据
以下为不同硬件配置下的扫描效率对比:
| 硬件配置 | 目标数量 | 平均耗时 | 内存峰值 |
|---|---|---|---|
| 4核/8GB | 100 | 25min | 3.2GB |
| 8核/16GB | 500 | 1.2h | 9.8GB |
| 16核/32GB | 2000 | 4.5h | 22GB |
经验建议:对于持续运行的ARL实例,建议分配至少4核CPU和8GB内存。扫描大型网络时,采用"分治策略"——先通过子域名枚举划分区域,再针对重点区域深度扫描。
5. 安全加固与维护
5.1 网络访问控制
限制ARL管理界面访问IP:
bash复制# 在docker-compose.yml中添加
services:
nginx:
networks:
default:
ipv4_address: 172.20.0.100
ports:
- "172.21.0.1:80:80" # 只允许宿主机访问
5.2 定期备份策略
-
MongoDB数据备份:
bash复制docker exec -ti arl_mongodb mongodump -u admin -p arlpass --authenticationDatabase admin --db arl --out /tmp/backup docker cp arl_mongodb:/tmp/backup /opt/arl_backup -
配置文件备份:
bash复制tar czvf arl_config_$(date +%Y%m%d).tar.gz ARL/docker/config-*.yaml
5.3 更新升级流程
-
获取最新代码:
bash复制cd ARL && git pull origin master -
重建服务:
bash复制
docker-compose down docker-compose build --no-cache docker-compose up -d -
数据库迁移(如有):
bash复制docker exec -ti arl_web python3 app.py db upgrade
在渗透测试实践中,ARL常作为资产发现阶段的"侦察兵"。我曾用这套组合在红队演练中,3天内完成了某大型企业超过2万个资产的自动化测绘。关键技巧是合理设置任务间隔(建议≥30秒)避免触发WAF,同时配合Masscan快速端口扫描+ARL深度指纹识别的组合策略
