A web-based DNSSEC validation tool that provides comprehensive analysis DNSSEC for any domain.
10K+
A professional-grade web-based DNSSEC validation tool that provides comprehensive analysis of DNS Security Extensions (DNSSEC) for any domain. This tool validates the complete chain of trust from root servers down to your domain, similar to Verisign's DNSSEC Debugger but with modern architecture and enhanced features.
๐ Try the live version at: https://dnssec-validator.bondit.dkโ
The production deployment includes:
/api/docs/# Run the container
docker run -p 8080:8080 maboni82/dnssec-validator:latest
# Open your browser to http://localhost:8080
git clone https://github.com/BondIT-ApS/dnssec-validator.git
cd dnssec-validator
pip install -r requirements.txt
python app.py
Open your browser to http://localhost:8080
bondit.dk)# Validate a domain via API
curl "http://localhost:8080/api/validate/bondit.dk"
# Response format
{
"domain": "bondit.dk",
"status": "valid",
"chain_of_trust": [
{
"zone": ".",
"status": "valid",
"algorithm": 8,
"key_tag": 20326
},
{
"zone": "dk.",
"status": "valid",
"algorithm": 13,
"key_tag": 20109
},
{
"zone": "bondit.dk.",
"status": "valid",
"algorithm": 13,
"key_tag": 48993
}
],
"records": {
"dnskey": [...],
"ds": [...],
"rrsig": [...]
}
}
The application provides dedicated health check endpoints for monitoring and container orchestration:
# Detailed health check (JSON response)
curl "http://localhost:8080/health"
# Response format
{
"status": "healthy",
"timestamp": "2025-08-06T07:23:12Z",
"version": "1.0.0",
"checks": {
"application": "ok",
"dns_resolver": "ok",
"memory_usage": "ok"
},
"uptime": "2h 15m 32s"
}
# Simple health check (plain text response)
curl "http://localhost:8080/health/simple"
# Response: "healthy"
Health Status Levels:
healthy: All systems operational (HTTP 200)degraded: Some non-critical issues detected (HTTP 200)unhealthy: Critical issues affecting functionality (HTTP 503)graph TB
subgraph "User Interface"
WEB["๐ Web Frontend<br/>(HTML/CSS/JS)"]
API["๐ REST API<br/>(/api/validate)"]
end
subgraph "Application Layer"
FLASK["๐ Flask App<br/>(Python)"]
ENGINE["๐ DNSSEC Engine<br/>(dnspython)"]
end
subgraph "External Services"
DNS["๐ DNS Servers<br/>(Root, TLD, Authoritative)"]
VALIDATION["โ
DNSSEC Validation<br/>(Chain of Trust)"]
end
WEB --> FLASK
API --> FLASK
FLASK --> ENGINE
ENGINE --> DNS
ENGINE --> VALIDATION
style WEB fill:#e1f5fe
style API fill:#e8f5e8
style FLASK fill:#fff3e0
style ENGINE fill:#fce4ec
style DNS fill:#f3e5f5
style VALIDATION fill:#e0f2f1
The DNSSEC Validator now includes comprehensive request logging and analytics using InfluxDB, a time-series database optimized for monitoring and analytics.
All DNSSEC validation requests are automatically logged to InfluxDB with detailed metadata:
Database logging is configured via environment variables:
# Enable/disable request logging
REQUEST_LOGGING_ENABLED=true
# InfluxDB connection settings
INFLUX_URL=http://influxdb:8086
INFLUX_TOKEN=my-super-secret-auth-token
INFLUX_ORG=dnssec-validator
INFLUX_BUCKET=requests
The logging system provides built-in analytics methods for monitoring:
The database logging works seamlessly with Docker Compose:
services:
influxdb:
image: influxdb:2.7-alpine
ports:
- "8086:8086"
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_ORG=dnssec-validator
- DOCKER_INFLUXDB_INIT_BUCKET=requests
- DOCKER_INFLUXDB_INIT_RETENTION=90d
volumes:
- influx_data:/var/lib/influxdb2
healthcheck:
test: ["CMD", "influx", "ping"]
interval: 30s
timeout: 10s
retries: 3
dnssec-validator:
environment:
- REQUEST_LOGGING_ENABLED=true
- INFLUX_URL=http://influxdb:8086
- INFLUX_TOKEN=my-super-secret-auth-token
depends_on:
- influxdb
The InfluxDB measurement structure:
dnssec-validatorrequests (90-day retention)requestdomain, ip_address, dnssec_status, sourcecount, http_status, user_agentThis logging system creates the foundation for:
dnssec-validator/
โโโ app/
โ โโโ app.py # Flask web application
โ โโโ models.py # InfluxDB logging and analytics
โ โโโ cli.py # Command-line management tools
โโโ dnssec_validator.py # Core DNSSEC validation logic
โโโ static/
โ โโโ css/
โ โ โโโ style.css # Web interface styling
โ โโโ js/
โ โโโ app.js # Frontend JavaScript
โโโ templates/
โ โโโ index.html # Main web interface
โโโ requirements.txt # Python dependencies
โโโ Dockerfile # Docker container definition
โโโ docker-compose.yml # Docker Compose setup with InfluxDB
โโโ README.md # This file
python -m pytest tests/
export FLASK_ENV=development
python app.py
# Build the image
docker build -t dnssec-validator .
# Run the container
docker run -p 8080:8080 dnssec-validator
docker-compose up -d
The application can be deployed to:
heroku create your-app-namegcloud run deployWe welcome contributions! Please see our Contributing Guidelinesโ for details.
git checkout -b feature-namepython -m pytestThe DNSSEC Validator includes comprehensive rate limiting to ensure fair usage and prevent abuse. Rate limits are applied per IP address and are configurable via environment variables.
| Endpoint Type | Limit | Description |
|---|---|---|
| Global | 5000/day, 1000/hour | Overall requests per IP across all endpoints |
| API | 200/minute, 2000/hour | REST API endpoints (/api/validate/*) |
| Web Interface | 50/minute, 500/hour | Web UI and direct domain URLs |
Rate limits can be customized using environment variables:
# Global rate limits (applied to all requests)
RATE_LIMIT_GLOBAL_DAY=5000 # Requests per IP per day
RATE_LIMIT_GLOBAL_HOUR=1000 # Requests per IP per hour
# API-specific rate limits
RATE_LIMIT_API_MINUTE=200 # API requests per IP per minute
RATE_LIMIT_API_HOUR=2000 # API requests per IP per hour
# Web interface rate limits
RATE_LIMIT_WEB_MINUTE=50 # Web requests per IP per minute
RATE_LIMIT_WEB_HOUR=500 # Web requests per IP per hour
services:
dnssec-validator:
build: .
ports:
- "8080:8080"
environment:
- FLASK_ENV=production
# Custom rate limits for high-traffic deployment
- RATE_LIMIT_GLOBAL_DAY=500
- RATE_LIMIT_GLOBAL_HOUR=100
- RATE_LIMIT_API_MINUTE=15
- RATE_LIMIT_API_HOUR=150
- RATE_LIMIT_WEB_MINUTE=30
- RATE_LIMIT_WEB_HOUR=300
When rate limits are exceeded:
API Endpoints return structured JSON:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "API rate limit exceeded",
"details": {
"limit": "10 per 1 minute",
"retry_after": 45,
"reset_time": "2024-01-15T14:30:00Z"
}
}
}
Web Interface shows a user-friendly error page with:
For production deployments:
# Conservative limits for public services
RATE_LIMIT_GLOBAL_DAY=1000
RATE_LIMIT_GLOBAL_HOUR=100
RATE_LIMIT_API_MINUTE=5
RATE_LIMIT_API_HOUR=50
RATE_LIMIT_WEB_MINUTE=10
RATE_LIMIT_WEB_HOUR=100
# More generous limits for internal/enterprise use
RATE_LIMIT_GLOBAL_DAY=5000
RATE_LIMIT_GLOBAL_HOUR=500
RATE_LIMIT_API_MINUTE=30
RATE_LIMIT_API_HOUR=1000
RATE_LIMIT_WEB_MINUTE=50
RATE_LIMIT_WEB_HOUR=1000
The DNSSEC Validator includes comprehensive health monitoring capabilities designed for container orchestration and monitoring systems.
| Endpoint | Purpose | Response Format | Rate Limited |
|---|---|---|---|
/health | Detailed health status | JSON | No |
/health/simple | Basic health check | Plain text | No |
Health monitoring behavior can be customized using environment variables:
# Health check configuration
HEALTH_CHECK_ENABLED=true # Enable/disable detailed health checks
HEALTH_CHECK_DNS_TEST=true # Test DNS resolution capability
HEALTH_CHECK_MEMORY_THRESHOLD=90 # Memory usage warning threshold (%)
Both Docker Compose configurations include health checks:
Development (docker-compose.yml):
healthcheck:
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8080/health/simple')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
Production (docker-compose.prod.yml):
healthcheck:
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8080/health/simple')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
The detailed health endpoint (/health) monitors:
example.com)Prometheus scraping configuration:
scrape_configs:
- job_name: 'dnssec-validator'
static_configs:
- targets: ['localhost:8080']
metrics_path: '/health'
scrape_interval: 30s
Kubernetes liveness probe:
livenessProbe:
httpGet:
path: /health/simple
port: 8080
initialDelaySeconds: 60
periodSeconds: 30
timeoutSeconds: 10
failureThreshold: 3
This project is licensed under the MIT License - see the LICENSEโ file for details.
/docs when runningThis project is maintained and developed by BondIT ApSโ , a Scandinavian IT consultancy specializing in secure web applications and infrastructure solutions. Just like our fellow Danish company LEGO, we believe in building things one brick at a time โ except our bricks are lines of code, and instead of stepping on them barefoot at 3 AM, you'll actually enjoy using what we build! ๐งฑ๐ป
Made with โค๏ธ by BondIT ApS
Content type
Image
Digest
sha256:165d1c8b9โฆ
Size
74.1 MB
Last updated
4 months ago
docker pull maboni82/dnssec-validator