ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Web-Check开源网站分析工具部署与使用指南

Web-Check开源网站分析工具部署与使用指南

1. Web-Check:网站体检专家的自我修养

作为一个常年和网站打交道的开发者,我深知摸清一个网站底细的重要性。每次接手新项目或是排查线上问题,最头疼的就是要像侦探一样收集各种零散信息:DNS解析对不对?SSL证书有没有问题?服务器分布在哪里?直到发现了Web-Check这个神器,它就像给网站做CT扫描一样,所有内部结构一目了然。

Web-Check是一款开源的网站分析工具,它能自动化完成我们平时需要手动执行的各类检测。不同于商业扫描工具,它完全免费且可以私有化部署,不用担心扫描频率限制或数据隐私问题。我把它部署在自己的云服务器上,现在团队里谁要分析网站,第一个想到的就是我的这个"私人体检中心"。

这个工具特别适合以下几类人:

  • 前端开发者:快速了解目标网站的架构特点,为兼容性调整提供依据
  • 运维工程师:定期扫描自有站点,及时发现配置异常
  • 安全研究员:初步评估网站安全状况,寻找潜在漏洞
  • 网站站长:竞品分析时获取技术参考,优化自家网站

2. 部署前的战略准备

2.1 硬件选型:云服务器的选购艺术

工欲善其事,必先利其器。选择适合的云服务器是确保Web-Check稳定运行的第一步。经过多次实践,我总结出几个关键考量点:

CPU与内存配置:

  • 基础测试:1核CPU/1GB内存足够应付偶尔使用
  • 持续扫描:建议2核CPU/2GB内存以上,避免多任务排队
  • 高频扫描:考虑4核CPU/4GB内存配置,防止OOM崩溃

网络带宽选择:

  • 国内站点分析:1Mbps带宽足够
  • 国际站点扫描:建议3Mbps以上,减少等待时间
  • 注意云厂商的流量计费方式,扫描会产生可观的外网流量

系统镜像选择:

  • Ubuntu Server 20.04/22.04 LTS:对Docker支持最好,社区资源丰富
  • CentOS 7/8:企业级稳定,但需注意EOL时间
  • Debian:轻量高效,适合资源有限的实例

避坑指南:避免选择Windows Server系统,不仅资源占用高,Docker支持也不如Linux完善。我曾尝试在Windows Server 2019上部署,光是解决Hyper-V冲突就浪费了半天时间。

2.2 系统环境:打造Docker的温床

在正式部署前,我们需要确保系统环境准备就绪。以下是我经过多次部署总结的最佳实践:

系统更新与基础工具:

# Ubuntu/Debian系 sudo apt update && sudo apt upgrade -y sudo apt install -y curl wget git vim net-tools # CentOS/RHEL系 sudo yum update -y sudo yum install -y curl wget git vim net-tools

时区与时间同步:

# 设置上海时区 sudo timedatectl set-timezone Asia/Shanghai # 启用NTP时间同步 sudo systemctl enable systemd-timesyncd sudo systemctl start systemd-timesyncd

SSH安全加固:

  1. 修改默认SSH端口
  2. 禁用root直接登录
  3. 启用密钥认证
  4. 配置fail2ban防暴力破解

这些基础工作看似与Web-Check无关,实则直接影响后续使用的稳定性。我曾经因为没做时间同步,导致SSL证书验证出现偏差,花了两个小时才找到问题根源。

3. Docker引擎:容器化部署的基石

3.1 Docker安装:一条命令的艺术

现代Linux系统安装Docker已经变得极其简单,但不同发行版仍有细微差别。以下是经过验证的安装方案:

Ubuntu/Debian最佳实践:

# 卸载旧版本(如有) sudo apt remove docker docker-engine docker.io containerd runc # 使用官方脚本安装 curl -fsSL https://get.docker.com | sudo sh # 将当前用户加入docker组(避免每次sudo) sudo usermod -aG docker $USER newgrp docker # 立即生效

CentOS特别注意事项:

# 必须先安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加官方仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装时指定版本更稳定 sudo yum install -y docker-ce-20.10.23 docker-ce-cli-20.10.23 containerd.io

安装完成后,关键的验证步骤:

# 检查版本 docker --version # 运行测试容器 docker run --rm hello-world # 检查服务状态 sudo systemctl status docker

经验之谈:生产环境建议锁定Docker版本,避免自动升级带来兼容性问题。我曾遇到一次自动升级后,某些容器网络出现异常的情况。

3.2 Docker Compose:编排利器

Web-Check虽然可以单容器运行,但使用Docker Compose管理更为专业。安装时要注意版本匹配:

标准安装流程:

# 下载指定版本(这里以2.20.0为例) DOCKER_COMPOSE_VERSION=v2.20.0 sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 设置执行权限 sudo chmod +x /usr/local/bin/docker-compose # 验证安装 docker-compose --version

遇到权限问题的解决方案:

# 如果出现权限拒绝错误 sudo chown $USER:$USER /usr/local/bin/docker-compose # 创建符号链接(某些系统需要) sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

对于国内用户,可能会遇到GitHub下载慢的问题,可以使用镜像加速:

# 使用国内镜像下载 curl -L https://get.daocloud.io/docker/compose/releases/download/v2.20.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

4. Web-Check部署实战

4.1 单容器快速启动

对于只是想快速体验的用户,可以使用最简单的运行方式:

docker run -d \ --name web-check \ -p 3000:3000 \ -e PORT=3000 \ -e MAX_ANALYSIS_DURATION=120 \ ghcr.io/lissy93/web-check:latest

参数说明:

  • -p 3000:3000:将容器内3000端口映射到主机
  • -e PORT=3000:指定容器内服务端口
  • -e MAX_ANALYSIS_DURATION=120:设置最大分析时长(秒)

这种方式的优点是即开即用,但存在明显局限:

  1. 配置无法持久化,重启后丢失
  2. 不方便管理容器生命周期
  3. 难以扩展自定义配置

4.2 Compose专业部署

生产环境推荐使用Docker Compose方案。以下是经过优化的部署流程:

项目目录结构:

mkdir -p ~/web-check/{data,config} && cd ~/web-check

docker-compose.yml:

version: '3.8' services: web-check: image: ghcr.io/lissy93/web-check:latest container_name: web-check restart: unless-stopped ports: - "6599:3000" environment: - PORT=3000 - MAX_ANALYSIS_DURATION=180 - DISABLE_CORS=true volumes: - ./data:/app/data - ./config:/app/config logging: driver: "json-file" options: max-size: "10m" max-file: "3"

关键配置解析:

  • restart: unless-stopped:异常退出时自动重启
  • volumes:挂载数据目录实现持久化
  • logging:限制日志大小防止磁盘爆满
  • DISABLE_CORS:关闭跨域限制方便API调用

启动命令:

docker-compose up -d

验证部署:

# 查看容器状态 docker-compose ps # 跟踪实时日志 docker-compose logs -f

4.3 配置调优指南

根据实际使用场景,可能需要调整以下参数:

性能相关:

environment: - TIMEOUT=10000 # 各检测项超时时间(ms) - MAX_CONCURRENT_SCANS=5 # 最大并发扫描数

安全相关:

environment: - AUTH_TOKEN=your-secret-key # API访问令牌 - ALLOWED_DOMAINS=example.com,test.com # 白名单域名

功能限制:

environment: - DISABLE_DNS=true # 禁用DNS检测 - DISABLE_WHOIS=true # 禁用WHOIS查询

配置更新后,执行以下命令生效:

docker-compose down && docker-compose up -d

5. 访问与安全加固

5.1 防火墙配置

端口暴露前必须做好安全防护,这是我的标准操作流程:

UFW防火墙(Ubuntu):

# 安装UFW sudo apt install ufw # 基本规则 sudo ufw default deny incoming sudo ufw default allow outgoing # 放行必要端口 sudo ufw allow 22/tcp # SSH sudo ufw allow 6599/tcp # Web-Check # 启用防火墙 sudo ufw enable

FirewallD(CentOS):

# 启动防火墙 sudo systemctl start firewalld sudo systemctl enable firewalld # 放行端口 sudo firewall-cmd --permanent --add-port=6599/tcp sudo firewall-cmd --permanent --add-port=22/tcp # 重新加载 sudo firewall-cmd --reload

5.2 Nginx反向代理

直接暴露端口不够安全,建议使用Nginx作为反向代理:

安装Nginx:

# Ubuntu sudo apt install nginx # CentOS sudo yum install nginx

配置示例:

server { listen 80; server_name webcheck.yourdomain.com; location / { proxy_pass http://localhost:6599; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 30分钟超时设置 proxy_read_timeout 1800; proxy_connect_timeout 1800; proxy_send_timeout 1800; } # 限制访问IP allow 192.168.1.0/24; allow 203.0.113.45; deny all; }

HTTPS配置(推荐): 使用Let's Encrypt免费证书:

sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d webcheck.yourdomain.com

5.3 访问控制策略

除了网络层防护,还应实现应用层控制:

基础认证: 在Nginx中添加:

auth_basic "Web-Check Access"; auth_basic_user_file /etc/nginx/.htpasswd;

生成密码文件:

sudo sh -c "echo -n 'username:' >> /etc/nginx/.htpasswd" sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

IP动态封禁: 使用fail2ban防御扫描:

sudo apt install fail2ban # 创建过滤规则 /etc/fail2ban/filter.d/web-check.conf [Definition] failregex = ^<HOST>.*"GET /(api/)?scan.* 404 ignoreregex =

6. 使用技巧与实战案例

6.1 核心功能解析

Web-Check的强大之处在于它能提供20+种检测项目,主要分为几大类:

网络基础设施:

  • DNS记录分析(A, AAAA, MX, TXT等)
  • IP地理位置与ASN信息
  • 服务器端口开放情况
  • CDN与WAF检测

安全配置:

  • SSL证书链完整性
  • 安全头部检查(CSP, HSTS等)
  • Cookie安全标记分析
  • TLS协议与加密套件

性能指标:

  • 资源加载瀑布图
  • HTTP/2支持检测
  • 服务器响应时间
  • 重定向链条分析

6.2 典型使用场景

场景一:网站迁移验证在将example.com迁移到新服务器后,通过Web-Check对比新旧环境的差异:

  1. DNS记录是否完全一致
  2. SSL证书是否正常续期
  3. 是否遗漏了某些安全头部
  4. 新服务器的响应时间变化

场景二:竞品技术分析分析行业领先网站的技术栈:

  1. 他们使用了哪些CDN提供商
  2. 服务器全球分布情况
  3. 采用了哪些性能优化手段
  4. 安全防护等级如何

场景三:安全审计定期扫描自有网站:

  1. 检测SSL证书到期时间
  2. 查找意外开放的端口
  3. 检查敏感信息泄露(如服务器版本)
  4. 验证安全头部的正确性

6.3 API高级用法

Web-Check提供了丰富的API接口,可以实现自动化扫描:

基础API调用:

curl -X POST \ http://localhost:6599/api/scan \ -H 'Content-Type: application/json' \ -d '{"url": "https://example.com"}'

定时扫描方案: 结合crontab实现每日自动扫描:

0 3 * * * /usr/bin/curl -X POST http://localhost:6599/api/scan -H 'Content-Type: application/json' -d '{"url": "https://your-site.com"}' > /var/log/web-check-scan.log 2>&1

结果存储与分析: 使用jq处理JSON结果:

curl -s http://localhost:6599/api/scan?url=https://example.com | jq '.dns.records[] | select(.type=="A")'

7. 故障排查手册

7.1 常见问题速查表

问题现象可能原因解决方案
扫描超时目标网站响应慢增加MAX_ANALYSIS_DURATION
DNS查询失败容器网络配置问题检查DNS服务器设置
端口扫描空白权限不足使用--cap-add=NET_RAW
证书验证错误系统时间不准配置NTP时间同步
API返回403跨域限制设置DISABLE_CORS=true

7.2 日志分析技巧

通过日志定位问题的方法:

# 查看最近错误 docker logs web-check --tail 100 | grep -i error # 跟踪实时请求 docker logs web-check -f | grep "Processing" # 统计扫描次数 docker logs web-check | grep "Scan completed" | wc -l

7.3 性能优化建议

当扫描大型网站时,可能会遇到性能瓶颈,可以考虑:

  1. 资源限制:
# 在compose文件中添加 deploy: resources: limits: cpus: '2' memory: 2G
  1. 数据库缓存: 挂载Redis容器来缓存扫描结果:
services: redis: image: redis:alpine volumes: - redis_data:/data web-check: depends_on: - redis environment: - REDIS_URL=redis://redis:6379
  1. 负载均衡: 对于高频使用场景,可以部署多个实例并通过Nginx分流。

8. 维护与升级

8.1 日常维护清单

  1. 日志轮转:
# 设置logrotate sudo tee /etc/logrotate.d/docker <<EOF /var/lib/docker/containers/*/*.log { rotate 7 daily compress delaycompress missingok copytruncate } EOF
  1. 存储清理: 定期清理无用容器和镜像:
# 删除停止的容器 docker container prune # 删除无用镜像 docker image prune -a
  1. 备份策略: 关键数据备份方案:
# 备份compose文件 tar czvf web-check-backup-$(date +%F).tar.gz ~/web-check # 定时任务示例(每周日凌晨3点) 0 3 * * 0 tar czvf /backups/web-check-$(date +\%F).tar.gz /home/user/web-check

8.2 版本升级指南

安全升级的推荐流程:

  1. 查看新版本变更日志
  2. 备份现有数据和配置
  3. 停止当前服务
  4. 拉取新版本镜像
  5. 验证新版本功能
  6. 正式切换流量

具体命令:

cd ~/web-check docker-compose down docker-compose pull docker-compose up -d

8.3 监控方案

使用Prometheus监控Web-Check运行状态:

  1. 添加监控端点:
environment: - PROMETHEUS_METRICS=true - METRICS_PORT=9091
  1. Prometheus配置示例:
scrape_configs: - job_name: 'web-check' static_configs: - targets: ['web-check:9091']
  1. 关键监控指标:
  • web_check_scans_total:总扫描次数
  • web_check_scan_duration_seconds:扫描耗时
  • web_check_errors_total:错误计数

9. 扩展应用场景

9.1 与企业工具链集成

与Slack集成: 通过webhook发送扫描报告:

curl -X POST \ -H 'Content-Type: application/json' \ -d '{"text":"New Web-Check report for example.com","attachments":[{"title":"View Report","title_link":"http://web-check:6599/report/example.com"}]}' \ https://hooks.slack.com/services/YOUR/WEBHOOK

与Jira对接: 发现问题自动创建工单:

import requests report = requests.get("http://web-check:6599/api/scan?url=https://example.com").json() if report['security']['headers']['x_xss_protection'] == 'missing': jira_data = { 'fields': { 'project': {'key': 'WEB'}, 'summary': 'Missing X-XSS-Protection header', 'description': f"Security issue found on {report['url']}", 'issuetype': {'name': 'Bug'} } } requests.post("https://your-jira/rest/api/2/issue", json=jira_data, auth=('user', 'api-token'))

9.2 二次开发建议

Web-Check是开源项目,可以根据需求进行定制:

  1. 添加新检测模块: 修改src/modules目录,参考现有模块实现新的检测逻辑

  2. 调整前端界面: 编辑src/components中的React组件,自定义展示形式

  3. 扩展API功能: 在src/routes中添加新的API端点,支持更多查询方式

构建自定义版本:

git clone https://github.com/Lissy93/web-check.git cd web-check docker build -t my-web-check .

9.3 替代方案对比

当Web-Check不能满足需求时,可以考虑:

工具名称优势劣势
OWASP ZAP专业安全测试配置复杂
Lighthouse深度性能分析功能单一
Nmap强大端口扫描无Web界面
BuiltWith技术栈识别商业产品

选择建议:

  • 简单快速分析:Web-Check
  • 深度安全测试:OWASP ZAP + Web-Check
  • 竞品技术调研:BuiltWith + Web-Check

经过半年多的使用,Web-Check已经成为我日常工作中不可或缺的工具。它最让我惊喜的不是功能有多强大,而是将原本需要多个工具配合完成的工作,变成了一个简单的URL提交。对于中小型网站的分析需求,它几乎能满足80%的场景。当然,对于特别复杂的架构或深入的安全测试,还是需要配合专业工具使用。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进