DNSBL V5 maintains an active registry of working proxies and current Tor exit nodes. Legacy DNSBL_V5.iplist is only used as a candidate source and is not the runtime model.
DnsblProxyServiceProvider registers:
php artisan dnsbl:proxy-sweep
every five minutes with overlap protection and background execution. Output is appended to:
storage/logs/dnsbl-proxy-sweep.log
The server must still run Laravel schedule:run from cron or another system scheduler.
A normal sweep:
Use --no-tor-sync to skip the Tor snapshot and --no-import to skip the legacy import.
An open TCP port is not enough. The checker actually connects through the candidate and fetches Tools' nonce-based endpoint:
/dnsbl/proxy-probe
Known endpoints are tried first, followed by the configured common ports. Results for each protocol and port are stored in dnsbl_proxy_endpoints, including status, latency, last check and last successful check.
Default ports:
80,443,1080,3128,8000,8080,8081,8118,8888,9050,9150
Override the list with DNSBL_PROXY_PORTS.
Ordinary proxies use:
DNSBL_PROXY_FAILURES_BEFORE_PURGE=1
This value is the number of consecutive failed verifications required before a candidate may be removed.
Behavior:
sync_error for retryThis prevents a temporary network failure from delisting a proxy before the configured threshold has actually been reached.
When a proxy verifies successfully, the checker sends the actual working endpoint to the proxy-sync API. Each DNSBL owner receives a separate checker-managed TXT value containing IP, port, protocol and anonymity status.
Example:
Proxy verification: 203.0.113.10:8080; protocol=http; verified=yes; anonymous=yes; proxy_bitmask=130; proxy_flags=IP_CONFIRMED,IP_ANONYMOUS; schema=1; source=Tools proxy checker
IPv6 addresses are wrapped in brackets so the endpoint port remains unambiguous.
These records are separate from other source-registration TXT records. Proxy sync only replaces or removes TXT values beginning with Proxy verification: and leaves unrelated TXT records untouched.
TXT is supplemental metadata, not the DNSBL client contract. Clients that only support A records continue to use the bitmask exactly as before. When metadata is exposed through ToolsAPI, Tools should resolve and normalize the TXT information for the client; clients should not need to implement their own TXT parsing.
When a proxy reaches its purge threshold, its checker-managed proxy TXT is removed together with the checker-owned proxy flags.
Tor is handled as an authoritative feed rather than an ordinary proxy candidate. Every normal sweep refreshes the current export from Tor Project:
https://check.torproject.org/exit-addresses
A successful snapshot is used to:
dnsbl_proxy_hoststor_managed and refresh tor_last_seen_atdnsbl.tornevall.org and opm.tornevall.orgTor exit: TXT metadataTor cleanup does not use the slower ordinary proxy failure threshold.
If Tor Project cannot be read, returns an invalid response, or the export contains no usable ExitAddress records, the snapshot is treated as unknown. No negative Tor cleanup is performed in that case, so a source outage cannot be interpreted as the entire Tor network disappearing.
Tor TXT example:
Tor exit: 203.0.113.20; current=yes; tor_bitmask=160; tor_flags=IP_SECOND_EXIT,IP_ANONYMOUS; schema=1; source=Tor Project
The checker uses current ToolsAPI semantics:
| Result | Mask |
|---|---|
| Working transparent proxy | 2 |
| Working anonymous proxy | 130 (2 + 128) |
| Current Tor exit | 160 (32 + 128) |
| Current Tor exit that also works as a proxy | 162 (2 + 32 + 128) |
Deprecated bit 1 is removed when the checker rewrites a record. Other active reputation bits are preserved.
The checker writes through:
POST /api/dnsbl/proxy-sync
The endpoint requires an active DnsblApiToken. Proxy synchronization is scoped to:
dnsbl.tornevall.org
opm.tornevall.org
It manages checker-owned proxy/Tor bits and checker-owned proxy/Tor TXT values without deleting unrelated reputation flags or unrelated TXT records.
Minimum production configuration:
DNSBL_PROXY_API_TOKEN=
DNSBL_PROXY_API_BASE_URL=https://tools.tornevall.net
DNSBL_PROXY_PUBLIC_BASE_URL=https://tools.tornevall.net
The token needs both add and delete permissions for automatic updates and cleanup.
Common tuning values:
DNSBL_PROXY_STALE_AFTER_DAYS=7
DNSBL_PROXY_WORKING_RECHECK_HOURS=24
DNSBL_PROXY_FAILURE_RETRY_MINUTES=10
DNSBL_PROXY_FAILURES_BEFORE_PURGE=1
DNSBL_PROXY_IMPORT_BATCH_SIZE=2000
DNSBL_PROXY_CHECK_BATCH_SIZE=20
DNSBL_PROXY_CONNECT_TIMEOUT_MS=800
DNSBL_PROXY_REQUEST_TIMEOUT_MS=3500
DNSBL_PROXY_PORTS=80,443,1080,3128,8000,8080,8081,8118,8888,9050,9150
DNSBL_PROXY_TOR_SYNC_ENABLED=true
DNSBL_PROXY_TOR_TIMEOUT_SECONDS=10
DNSBL_PROXY_TOR_CACHE_MINUTES=30
DNSBL_PROXY_TOR_RECHECK_MINUTES=5
Choose DNSBL_PROXY_FAILURES_BEFORE_PURGE according to the desired tolerance. The threshold now controls both when a dead ordinary proxy may be delisted and when its local row may be deleted.
The read-only registry is available at:
/dnsbl/proxies
It shows:
protocol://ip:portTor-only rows do not need to expose a proxy port. They are present because the IP is a current exit node according to the authoritative feed.
DNSBL V5 migrations live under:
database/migrations/dnsblv5
Tor synchronization additively introduces:
tor_managedtor_last_seen_atMigrations are forward-only and their down() methods are intentionally non-destructive.