
felix83000/watcherWatcher是由Thales Group CERT开发的开源网络安全威胁狩猎平台,基于Django和React JS构建。该平台通过监控RSS源、社交媒体等渠道,自动检测新兴网络安全威胁(如漏洞、***软件),支持威胁情报导出至TheHive/MISP,提供邮件通知功能,并允许用户管理威胁警报和趋势词。
适用于网络安全团队、SOC(安全运营中心)、安全研究人员等,用于实时监控和狩猎网络安全威胁,整合威胁情报,提升安全响应效率。
docker-compose.yml、.env文件以及Searx、Rss-bridge目录(保持目录结构).env文件配置Watcher设置(静态配置)bashdocker-compose up
watcher | db_watcher is up, starting Watcher. watcher | Performing system checks... watcher | watcher | System check identified no issues (0 silenced). watcher | October 08, 2020 - 10:28:02 watcher | Django version 3.1.1, using settings 'watcher.settings' watcher | Starting development server at [***] watcher | Quit the server with CONTROL-C.
[***]或[***]访问WatcherbashCONTROL-C # 停止运行中的容器 docker-compose down # 完全停止所有容器
更新数据库状态以匹配当前模型和迁移文件:
bashdocker-compose down docker-compose run watcher bash python manage.py migrate
创建超级用户以访问/admin页面:
bashdocker-compose down docker-compose run watcher bash python manage.py createsuperuser
使用populate_db脚本填充数据库,包含数百个与网络安全相关的禁用词和RSS源:
bashdocker-compose down docker-compose run watcher bash python manage.py populate_db
首次运行Watcher时,首页没有新威胁是正常现象。系统每30分钟自动爬取互联网威胁信息,稍后会显示结果。
大部分设置可通过/admin页面修改,以下设置需在.env文件中配置:
生产环境中,需将DJANGO_DEBUG设为False:
DJANGO_DEBUG=False
Django密钥必须是大的随机值且保密,默认值需修改:
DJANGO_SECRET_KEY=[大的随机值]
时区设置:
# 时区 TZ=Europe/Paris
修改后重启容器:
bashdocker-compose down docker-compose up
访问Web界面时若出现"Bad Request"错误,需在.env文件中设置ALLOWED_HOST,限制为单个IP或FQDN:
ALLOWED_HOST=X.X.X.X # 或 ALLOWED_HOST=mywebsite.com
重启容器使配置生效:
bashdocker-compose down docker-compose up
在.env文件中配置:
EMAIL_FROM=*** SMTP_SERVER=smtp.example.com
邮件通知中的网站链接:
WATCHER_URL=[***]
重启容器使配置生效:
bashdocker-compose down docker-compose up
如需导出至TheHive,配置TheHive实例IP和API密钥:
# THE HIVE 配置 THE_HIVE_URL= THE_HIVE_KEY= THE_HIVE_CASE_ASSIGNEE=watcher
重启容器使配置生效:
bashdocker-compose down docker-compose up
如需导出至MISP,配置MISP实例IP和API密钥:
# MISP 配置 MISP_URL= MISP_VERIFY_SSL=False MISP_KEY=
重启容器使配置生效:
bashdocker-compose down docker-compose up
配置LDAP认证:
# LDAP 配置 AUTH_LDAP_SERVER_URI= AUTH_LDAP_BIND_DN= AUTH_LDAP_BIND_PASSWORD= AUTH_LDAP_BASE_DN= AUTH_LDAP_FILTER=(uid=%(user)s)
重启容器使配置生效:
bashdocker-compose down docker-compose up
如需完全重置数据库,删除主机系统中的数据库卷并重启:
bashdocker-compose down docker volume rm watcher-project_db_data docker volume rm watcher-project_db_log docker-compose up
操作后需重新执行数据库迁移。
后台运行容器:
bashdocker-compose up -d
进入Watcher容器交互式shell:
bashdocker-compose run watcher bash
创建普通用户、staff用户或管理员用户:
/admin页面订阅主题以接收邮件通知:
/admin页面Watcher默认提供数百个网络安全RSS源(通过填充数据库获取),可添加自定义RSS源:
/admin页面RSS-Bridge默认仅配置***,可通过修改Watcher/Rss-bridge/whitelist.txt添加其他源(如***、DuckDuckGo、GoogleSearch等)。
RSS-Bridge源URL格式示例:
[***]
自定义URL时,修改bridge和参数,保留[***]和format=Mrss。可通过公共实例测试RSS-Bridge API:[***]
导出监控的DNS至TheHive或MISP:
/website_monitoring页面若导出失败,可能是TheHive/MISP版本过旧,需更新实例至兼容版本。
阻止列表用于防止误报的趋势词再次出现。
添加单个趋势词:
添加多个趋势词:
/admin页面处理完警报后可将其归档。
归档单个警报:
归档多个警报:
/admin页面更新Watcher镜像步骤:
bashdocker-compose down
bashdocker rmi felix83000/watcher:latest searx/searx searx/searx-checker ***:latest
bashdocker-compose up
此操作将更新Watcher、Rss-bridge和Searx。
如需修改项目并提交PR,需设置开发环境。
推荐使用Linux虚拟机(如Ubuntu 20.04 LTS):
安装依赖:
bash# 安装Python 3.8、Node.js 14、Git sudo apt install -y python3.8 nodejs git # 安装python-ldap依赖 sudo apt install -y libsasl2-dev python-dev libldap2-dev libssl-dev # 安装mysqlclient依赖 sudo apt install default-libmysqlclient-dev # 安装npm sudo apt install npm
拉取代码:
bashgit clone [***] cd Watcher/Watcher
安装Python依赖:
bashpip install -r requirements.txt
安装NLTK/punkt依赖:
bashpython3 ./nltk_dependencies.py
(如有代理,可在nltk_dependencies.py中配置)
安装Node.js依赖:
bashnpm install
安装并配置MySQL:
bashsudo apt install mysql-server sudo mysql_secure_installation # 按提示配置root密码等 # 创建数据库和用户 sudo mysql CREATE USER 'watcher'@'localhost' IDENTIFIED BY 'Ee5kZm4fWWAmE9hs'; GRANT ALL PRIVILEGES ON *.* TO 'watcher'@'localhost' WITH GRANT OPTION; CREATE DATABASE db_watcher; use db_watcher; exit # 检查MySQL状态 systemctl status mysql.service
修改settings.py中的数据库配置:
pythonDATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'CONN_MAX_AGE': 3600, 'NAME': 'db_watcher', 'USER': 'watcher', 'PASSWORD': 'Ee5kZm4fWWAmE9hs', 'HOST': 'localhost', # 开发环境设为localhost 'PORT': '3306', 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", }, } }
[重要] 提交代码前需将
HOST改回db_watcher
迁移数据库并运行Watcher:
bashcd .. # 返回Watcher目录 python3 manage.py migrate # 迁移数据库 python3 manage.py runserver # 启动服务
前端代码位于/Watcher/Watcher/frontend,修改后需实时构建:
bashcd /Watcher/Watcher/ npm run dev # 后台运行,修改后自动构建至main.js
[重要] 提交代码前需运行一次:
bashnpm run build
修改注释后重建文档:
注释以下文件中的指定行:
/Watcher/Watcher/threats_watcher/core.py:
python# from .models import BannedWord, Source, TrendyWord, PostUrl, Subscriber
/Watcher/Watcher/data_leak/core.py:
python# from .models import Keyword, Alert, PastId, Subscriber
/Watcher/Watcher/site_monitoring/core.py:
python# from .models import Site, Alert, Subscriber
/Watcher/Watcher/site_monitoring/misp.py:
python# from .models import Site
/Watcher/Watcher/site_monitoring/thehive.py:
python# from .models import Site
/Watcher/Watcher/dns_finder/core.py:
python# from .models import Alert, DnsMonitored, DnsTwisted, Subscriber
构建文档:
bashcd /Watcher/docs make html
构建完成后取消注释上述行,并提交/Watcher/docs目录:
bashgit add /Watcher/docs





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务