Comprehensive URL OSINT and Security Assessment Microservice
A production-ready, dockerized OSINT reconnaissance service for automated security assessment of web applications and domains. Part of the WatchGuard security platform by CyberLink Security.
- DNS Reconnaissance: A, AAAA, MX, NS, TXT, CAA, CNAME records, DNSSEC validation
- Subdomain Enumeration: Automated discovery of common subdomains
- TLS/SSL Analysis: Certificate validation, chain inspection, protocol support testing
- HTTP Security Headers: Comprehensive security header auditing (HSTS, CSP, CORS, etc.)
- Technology Detection: Server, CDN, and framework fingerprinting
- Sensitive File Detection: Automated checks for exposed
.git,.env,security.txt - Risk Scoring: Automated security risk assessment with severity classification
- Report Generation: Visual HTML and PDF reports with executive summaries
- Framework: FastAPI (async Python web framework)
- OSINT Tools: dig, nmap, wget, openssl, whois
- Report Engine: Jinja2 templates with WeasyPrint PDF export
- Containerization: Docker with Debian 12 (Bookworm) base
- Deployment: Render.com compatible with health checks
- Docker 20.10+
- Docker Compose 2.0+
- 2GB RAM minimum
- Clone/Navigate to project:
cd /path/to/WatchGuard/tools/OSINT_URL- Build and run with Docker Compose:
docker-compose up --build- Access the service:
- Web Interface:
http://localhost:8000 - API Documentation:
http://localhost:8000/api/docs - Health Check:
http://localhost:8000/health
curl -X POST http://localhost:8000/api/scan \
-H "Content-Type: application/json" \
-d '{"target": "example.com"}'Response:
{
"scan_id": "123e4567-e89b-12d3-a456-426614174000",
"target": "example.com",
"status": "processing",
"message": "Scan initiated for example.com. Use scan_id to retrieve results."
}curl http://localhost:8000/api/scan/{scan_id}curl -O http://localhost:8000/api/report/{scan_id}/htmlcurl -O http://localhost:8000/api/report/{scan_id}/pdf| Variable | Default | Description |
|---|---|---|
PORT |
8000 |
HTTP server port |
PYTHONUNBUFFERED |
1 |
Disable Python output buffering |
Build with custom Python version:
docker build --build-arg PYTHON_VERSION=3.11 -t osint_url .{
"target": "example.com",
"scan_timestamp": "2025-11-17T22:30:00",
"scan_duration_seconds": 45.2,
"security_assessment": {
"risk_level": "MEDIUM",
"risk_score": 12,
"summary": {
"total_issues": 15,
"critical": 0,
"high": 3,
"medium": 7,
"low": 3,
"info": 2
}
},
"dns": { ... },
"tls": { ... },
"http": { ... }
}OSINT_URL/
βββ app/
β βββ main.py # FastAPI application
β βββ osint/
β β βββ __init__.py # OSINT orchestrator
β β βββ dns_recon.py # DNS reconnaissance
β β βββ tls_analysis.py # TLS/SSL analysis
β β βββ http_analysis.py # HTTP security headers
β βββ reports/
β βββ __init__.py
β βββ generator.py # HTML/PDF report generator
βββ templates/ # Jinja2 templates
βββ static/ # Static assets
βββ reports/ # Generated reports
βββ Dockerfile # Container definition
βββ docker-compose.yml # Local orchestration
βββ render.yaml # Render.com deployment
βββ requirements.txt # Python dependencies
βββ README.md # This file
- User submits target URL via REST API
- Background task initiates OSINT scan
- Parallel execution of DNS, TLS, HTTP modules
- Security assessment engine analyzes results
- Risk score calculation and issue classification
- HTML/PDF report generation on demand
- Push to Git repository:
git init
git add .
git commit -m "Initial commit - WatchGuard OSINT_URL"
git remote add origin <your-repo-url>
git push -u origin main- Configure Render.com:
- Connect repository
- Select "Deploy from Git"
- Render will auto-detect
render.yaml - Service will deploy automatically
- Access deployed service:
https://watchguard-osint-url.onrender.com
For AWS/GCP/Azure deployment:
# Build image
docker build -t watchguard-osint-url:1.0.0 .
# Push to registry
docker tag watchguard-osint-url:1.0.0 registry.example.com/watchguard-osint-url:1.0.0
docker push registry.example.com/watchguard-osint-url:1.0.0
# Deploy to Kubernetes
kubectl apply -f k8s/deployment.yaml- Service runs as non-root user (
osint) - No sensitive credentials stored in container
- Network egress restricted to standard ports (53, 80, 443)
- Health checks prevent failed deployments
- URL sanitization and normalization
- Rate limiting recommended for production (implement via API gateway)
- CORS configured (update
allow_originsfor production)
- In-memory storage by default (use Redis/PostgreSQL for persistence)
- Generated reports stored in
/app/reports(mount persistent volume)
docker-compose exec osint_url pytest# Test against test domain
curl -X POST http://localhost:8000/api/scan \
-H "Content-Type: application/json" \
-d '{"target": "example.com"}'curl http://localhost:8000/healthResponse:
{
"status": "healthy",
"service": "OSINT_URL",
"version": "1.0.0",
"timestamp": "2025-11-17T22:30:00"
}# Docker Compose
docker-compose logs -f osint_url
# Docker
docker logs -f watchguard_osint_urlpython -m venv venv
source venv/bin/activate # Linux/Mac
pip install -r requirements.txtuvicorn app.main:app --host 0.0.0.0 --port 8000 --reload- Create module in
app/osint/ - Import in
app/osint/__init__.py - Integrate in
OSINTScanner.scan()method - Update security assessment logic
- Add to report template
| Method | Endpoint | Description |
|---|---|---|
GET |
/ |
Service landing page |
GET |
/health |
Health check |
POST |
/api/scan |
Initiate OSINT scan |
GET |
/api/scan/{scan_id} |
Retrieve scan results |
GET |
/api/report/{scan_id}/html |
Download HTML report |
GET |
/api/report/{scan_id}/pdf |
Download PDF report |
GET |
/api/docs |
Interactive API documentation (Swagger UI) |
Problem: Container fails to start
# Check logs
docker-compose logs osint_url
# Rebuild without cache
docker-compose build --no-cacheProblem: Scan times out
- Increase Docker memory limit (Settings > Resources)
- Check network connectivity from container
- Verify target domain is accessible
Problem: PDF generation fails
- Ensure WeasyPrint dependencies are installed (included in Dockerfile)
- Check
/app/reportsdirectory permissions
This tool is part of the CyberLink Security WatchGuard platform. For internal development:
- Create feature branch:
git checkout -b feature/your-feature - Make changes with comprehensive tests
- Update documentation
- Submit pull request for review
Proprietary - CyberLink Security
Internal use only. All rights reserved.
CyberLink Security - WatchGuard Platform
- Engineering Lead: Development Team
- Product Owner: Project Lead
For issues or questions:
- Internal Slack:
#watchguard-platform - Email:
[email protected] - Documentation: Internal Wiki
Version: 1.0.0
Last Updated: November 2025
Status: Production Ready