不止于安装:用Docker Compose玩转ARL灯塔的进阶配置与数据持久化
不止于安装:用Docker Compose玩转ARL灯塔的进阶配置与数据持久化
当你第一次在Kali上成功运行ARL灯塔时,那种快速收集资产的畅快感确实令人兴奋。但很快你会发现,每次重启容器后任务记录消失、默认端口暴露安全风险、资源分配不合理导致扫描中断等问题接踵而至。本文将带你超越基础安装,探索如何通过Docker Compose实现ARL的专业级部署。
1. 理解ARL的Docker架构设计
ARL灯塔的Docker Compose架构由四个核心服务组成:Nginx作为反向代理、Web应用处理前端交互、Celery执行异步扫描任务、MongoDB存储所有数据。这种微服务设计既保证了组件独立性,又通过Docker网络实现了内部通信。
查看默认的
docker-compose.yml
文件,你会发现几个关键配置项:
version: '3'
services:
web:
image: tophant/arl-web
ports:
- "5003:5003"
volumes:
- ./config.yaml:/app/config.yaml
worker:
image: tophant/arl-worker
depends_on:
- web
- mongodb
mongodb:
image: mongo:4.4
volumes:
- arl_db:/data/db
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=arlpass
volumes:
arl_db:
提示:默认配置中仅MongoDB使用了数据卷,这意味着Web和Worker服务的临时文件会在容器重启后丢失。
2. 实现全方位数据持久化
2.1 数据库持久化进阶方案
虽然默认配置已经为MongoDB创建了
arl_db
卷,但我们可以做得更好:
# 查看现有数据卷详情
docker volume inspect arl_db
# 创建带标签的专用数据卷(推荐)
docker volume create --driver local \
--label com.example.arl=production \
--name arl_prod_db
修改
docker-compose.yml
的volumes部分:
volumes:
arl_prod_db:
external: true
scan_results:
driver: local
driver_opts:
type: none
o: bind
device: /opt/arl/scan_data
2.2 扫描结果与配置持久化
为确保扫描任务记录和配置文件不丢失,需要为Web和Worker服务添加挂载点:
services:
web:
volumes:
- ./config.yaml:/app/config.yaml
- ./logs:/app/logs
- scan_results:/app/static/results
worker:
volumes:
- scan_results:/app/static/results
- ./task_logs:/app/logs
3. 安全加固与网络优化
3.1 端口与TLS配置
默认的5003端口直接暴露存在风险,建议通过Nginx实现:
-
修改Nginx配置模板
nginx.conf:
server {
listen 443 ssl;
server_name arl.yourdomain.com;
ssl_certificate /etc/nginx/ssl/arl.crt;
ssl_certificate_key /etc/nginx/ssl/arl.key;
location / {
proxy_pass http://web:5003;
proxy_set_header Host $host;
}
}
- 更新Compose文件:
services:
nginx:
image: nginx:alpine
ports:
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./ssl:/etc/nginx/ssl
depends_on:
- web
3.2 资源限制与健康检查
防止单个扫描任务耗尽系统资源:
services:
worker:
deploy:
resources:
limits:
cpus: '2'
memory: 2G
healthcheck:
test: ["CMD", "celery", "--app=app.celery", "inspect", "ping"]
interval: 30s
timeout: 10s
retries: 3
4. 生产环境运维实践
4.1 日志集中管理方案
# 查看实时日志
docker-compose logs -f --tail=100
# 使用ELK栈收集日志(docker-compose.override.yml示例)
services:
logstash:
image: docker.elastic.co/logstash/logstash:7.14.0
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
kibana:
image: docker.elastic.co/kibana/kibana:7.14.0
ports:
- "5601:5601"
4.2 备份与恢复策略
创建自动化备份脚本
backup_arl.sh
:
#!/bin/bash
BACKUP_DIR=/backups/arl_$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
# 备份MongoDB
docker-compose exec -T mongodb mongodump \
--archive --gzip > $BACKUP_DIR/mongo.gz
# 备份扫描结果
tar czf $BACKUP_DIR/scan_results.tar.gz /opt/arl/scan_data
# 上传到远程存储
rclone copy $BACKUP_DIR backup:/arl_backups
5. 高级集成技巧
5.1 与Kali工作流集成
通过API实现自动化任务创建:
import requests
ARL_API = "https://arl.yourdomain.com/api/"
auth = ("admin", "arlpass")
def create_scan(target):
data = {
"target": target,
"scan_type": "domain",
"options": {"port_scan_type": "top100"}
}
resp = requests.post(f"{ARL_API}task/", json=data, auth=auth)
return resp.json()
# 示例:扫描目标列表
targets = ["example.com", "test.org"]
for target in targets:
print(f"创建扫描任务: {create_scan(target)}")
5.2 自定义扫描策略
修改
config.yaml
实现深度扫描:
task:
max_concurrent: 5
port_scan:
top_ports: 500
domain_brute:
enabled: true
wordlist: /app/dict/subdomains.txt
vulnerability:
enabled: true
plugins: ["xss", "sqlmap"]
在项目实践中,我发现将ARL与Nessus联动可以显著提升漏洞发现效率。通过定期导出ARL的资产列表并导入到Nessus中,可以建立完整的资产漏洞画像。
更多推荐
所有评论(0)