Add malware domains (URLhaus) + Israeli IPs in hosts-file format + Technitium updater script
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
# Technitium DNS Blocklist Updater for DNS1 (Windows)
|
||||
# Run as a scheduled task — pulls malware domains + Israeli IPs from shared-bans repo
|
||||
# and tells Technitium to reload its blocklists.
|
||||
#
|
||||
# Requires:
|
||||
# - Technitium DNS API token set as TECHNIITIUM_DNS_TOKEN (env var or vault)
|
||||
# - Git repo checked out somewhere (C:\shared-bans)
|
||||
# - TASK_TOKEN set in vault
|
||||
#
|
||||
# Schedule: Daily at 3 AM + on-demand via Hermes cron
|
||||
|
||||
param(
|
||||
[string]$TaskToken = $env:TASK_TOKEN
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "SilentlyContinue"
|
||||
|
||||
# Config
|
||||
$RepoDir = "C:\shared-bans"
|
||||
$TechnitiumBase = "http://localhost:5380"
|
||||
$LogFile = "C:\shared-bans\logs\technitium-update.log"
|
||||
$Token = $env:TECHNITIUM_DNS_TOKEN
|
||||
|
||||
function Write-Log {
|
||||
param([string]$Msg)
|
||||
$ts = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
|
||||
"$ts $Msg" | Out-File -Append -FilePath $LogFile -Encoding UTF8
|
||||
}
|
||||
|
||||
# ── Auth check ──────────────────────────────────────────────────────────────
|
||||
if (-not $Token) {
|
||||
Write-Log "ERROR: TECHNITIUM_DNS_TOKEN env var not set"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# ── Pull latest from repo ────────────────────────────────────────────────────
|
||||
Set-Location $RepoDir
|
||||
git fetch origin main
|
||||
$changed = git reset --hard origin/main 2>&1
|
||||
Write-Log "Git pull: $changed"
|
||||
|
||||
# ── Count entries we're about to feed ───────────────────────────────────────
|
||||
$malwareCount = (Get-Content "$RepoDir\static\malware-domains.txt" | Measure-Object -Line).Lines
|
||||
$israelCount = (Get-Content "$RepoDir\static\israel-hosts.txt" | Measure-Object -Line).Lines
|
||||
Write-Log "Malware domains: $malwareCount | Israeli hosts: $israelCount"
|
||||
|
||||
# ── Build the combined blockListUrls list ────────────────────────────────────
|
||||
# Technitium supports file:// URLs on Windows (v13+)
|
||||
$Urls = @(
|
||||
"file:///$RepoDir/static/malware-domains.txt",
|
||||
"file:///$RepoDir/static/israel-hosts.txt"
|
||||
)
|
||||
|
||||
# ── Get current settings to preserve everything else ─────────────────────────
|
||||
$current = Invoke-RestMethod -Uri "$TechnitiumBase/api/settings/get" `
|
||||
-Headers @{ Authorization = "Bearer $Token" } `
|
||||
-UseBasicParsing
|
||||
|
||||
$currentBlockLists = $current.response.blockListUrls
|
||||
Write-Log "Current blockListUrls: $currentBlockLists"
|
||||
|
||||
# ── Update DNS settings with new block list URLs ────────────────────────────
|
||||
$body = @{
|
||||
blockListUrls = ($Urls -join ",")
|
||||
} | ConvertTo-Json -Compress
|
||||
|
||||
$resp = Invoke-RestMethod -Uri "$TechnitiumBase/api/settings/set" `
|
||||
-Method POST `
|
||||
-Headers @{ Authorization = "Bearer $Token"; "Content-Type" = "application/json" } `
|
||||
-Body $body `
|
||||
-UseBasicParsing
|
||||
|
||||
if ($resp.status -eq "ok") {
|
||||
Write-Log "Settings updated OK"
|
||||
} else {
|
||||
Write-Log "ERROR setting blockListUrls: $($resp | ConvertTo-Json -Compress)"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# ── Force block list reload ──────────────────────────────────────────────────
|
||||
$force = Invoke-RestMethod -Uri "$TechnitiumBase/api/settings/forceUpdateBlockLists" `
|
||||
-Headers @{ Authorization = "Bearer $Token" } `
|
||||
-UseBasicParsing
|
||||
|
||||
Write-Log "ForceUpdateBlockLists: $($force | ConvertTo-Json -Compress)"
|
||||
Write-Log "Done at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
|
||||
Reference in New Issue
Block a user