Compare commits

..

21 Commits

Author SHA1 Message Date
ac21922178 Release: Version v0.8.2 2026-04-19 16:17:56 +02:00
edd8cd4806 fix: IPv4-Erkennung korrigiert – Hostnamen mit führender Ziffer werden nicht mehr fehlklassifiziert 2026-04-19 16:15:10 +02:00
44936e9f20 Merge branch 'main' of https://git.techniverse.net/scriptos/adguard-shield 2026-04-17 13:40:46 +02:00
440694925e Merge pull request 'fix: Offense-Cleanup-Worker mit niedrigster CPU/IO-Priorität ausführen' (#16) from v0.8.1 into main
Reviewed-on: #16
2026-04-16 20:23:48 +00:00
c97e327f0d Merge pull request 'fix: Offense-Cleanup-Worker mit niedrigster CPU/IO-Priorität ausführen' (#16) from v0.8.1 into main
Reviewed-on: #16
2026-04-16 20:23:48 +00:00
12745c3fef Release: Version v0.8.1 2026-04-16 22:22:13 +02:00
c2d6f872f5 Release: Version v0.8.1 2026-04-16 22:22:13 +02:00
ccdc555246 fix: Offense-Cleanup-Worker mit niedrigster CPU/IO-Priorität ausführen 2026-04-16 21:33:47 +02:00
633331748f fix: Offense-Cleanup-Worker mit niedrigster CPU/IO-Priorität ausführen 2026-04-16 21:33:47 +02:00
2559ed89ea Merge pull request 'v0.8.0' (#15) from v0.8.0 into main
Reviewed-on: #15
2026-04-14 19:30:31 +00:00
6f9f7eba8e Merge tag 'v0.8.0' of https://git.techniverse.net/scriptos/adguard-shield into v0.8.0 2026-04-14 21:24:44 +02:00
a132b2a0f1 Merge pull request 'v0.8.0' (#14) from v0.8.0 into main
Reviewed-on: #14
2026-04-14 19:17:15 +00:00
70818698d1 Release: Version v0.8.0 2026-04-14 21:06:52 +02:00
0264e1e896 feat: Offense-Cleanup-Worker für automatisches Aufräumen abgelaufener Offense-Zähler 2026-04-14 21:01:51 +02:00
df15a587ee update: Konfigurationsdatei aufräumen – Kommentare gekürzt, Verweis auf Doku ergänzt, fehlende Variable EXTERNAL_WHITELIST_CACHE_DIR hinzugefügt 2026-04-14 20:44:06 +02:00
3d60771a1b feat: GeoIP-Länderfilter mit MaxMind Auto-Download 2026-04-14 20:30:37 +02:00
4d7e053ce7 Merge pull request 'v0.7.1' (#13) from v0.7.1 into main
Reviewed-on: #13
2026-04-12 12:37:09 +00:00
23deae7d81 Release: Version v0.7.1 2026-04-12 14:35:47 +02:00
0602fbb596 docs: README für docs-Verzeichnis hinzugefügt 2026-04-12 14:28:37 +02:00
a27c093d83 docs: Projektstruktur entfernt 2026-04-12 14:19:08 +02:00
cfd6fa9b70 feat: Watchdog-Service für automatischen Health-Check und Recovery bei Service-Ausfall 2026-04-12 14:17:59 +02:00
9 changed files with 27 additions and 14 deletions

View File

@@ -8,7 +8,7 @@
# Lizenz: MIT # Lizenz: MIT
############################################################################### ###############################################################################
VERSION="v0.8.0" VERSION="v0.8.2"
set -euo pipefail set -euo pipefail
@@ -1271,8 +1271,8 @@ start_offense_cleanup_worker() {
return return
fi fi
log "INFO" "Starte Offense-Cleanup-Worker im Hintergrund..." log "INFO" "Starte Offense-Cleanup-Worker im Hintergrund (nice 19, idle I/O)..."
bash "$worker_script" start & nice -n 19 ionice -c 3 bash "$worker_script" start &
OFFENSE_CLEANUP_WORKER_PID=$! OFFENSE_CLEANUP_WORKER_PID=$!
log "INFO" "Offense-Cleanup-Worker gestartet (PID: $OFFENSE_CLEANUP_WORKER_PID)" log "INFO" "Offense-Cleanup-Worker gestartet (PID: $OFFENSE_CLEANUP_WORKER_PID)"
} }

View File

@@ -137,7 +137,7 @@ Das ermöglicht:
├── external-blocklist-worker.sh # Externer Blocklist-Worker ├── external-blocklist-worker.sh # Externer Blocklist-Worker
├── external-whitelist-worker.sh # Externer Whitelist-Worker (DNS-Auflösung) ├── external-whitelist-worker.sh # Externer Whitelist-Worker (DNS-Auflösung)
├── geoip-worker.sh # GeoIP-Länderfilter-Worker ├── geoip-worker.sh # GeoIP-Länderfilter-Worker
├── offense-cleanup-worker.sh # Automatisches Aufräumen abgelaufener Offense-Zähler ├── offense-cleanup-worker.sh # Aufräumen abgelaufener Offense-Zähler (nice 19, idle I/O)
├── unban-expired.sh # Cron-basiertes Entsperren ├── unban-expired.sh # Cron-basiertes Entsperren
└── geoip/ # Auto-Download MaxMind GeoLite2 DB (optional) └── geoip/ # Auto-Download MaxMind GeoLite2 DB (optional)

View File

@@ -284,7 +284,7 @@ sudo /opt/adguard-shield/geoip-worker.sh flush-cache
## Offense-Cleanup-Worker ## Offense-Cleanup-Worker
Der Offense-Cleanup-Worker räumt abgelaufene Offense-Zähler (progressive Sperren) automatisch auf. Er startet automatisch mit dem Hauptservice, wenn progressive Sperren aktiviert sind, und prüft stündlich ob Zähler aufgeräumt werden können. Der Offense-Cleanup-Worker räumt abgelaufene Offense-Zähler (progressive Sperren) automatisch auf. Er startet automatisch mit dem Hauptservice, wenn progressive Sperren aktiviert sind, und prüft stündlich ob Zähler aufgeräumt werden können. Der Worker läuft mit niedrigster CPU- und I/O-Priorität (`nice 19`, `ionice idle`), um den DNS-Dienst nicht zu beeinträchtigen.
Der Worker kann auch standalone gesteuert werden: Der Worker kann auch standalone gesteuert werden:

View File

@@ -116,12 +116,12 @@ Bei Sperren aus der **externen Blocklist** werden Benachrichtigungen separat üb
### Service gestartet ### Service gestartet
**Überschrift:** ✅ AdGuard Shield **Überschrift:** ✅ AdGuard Shield
> 🟢 AdGuard Shield v0.8.0 wurde auf dns1 gestartet. > 🟢 AdGuard Shield v0.8.2 wurde auf dns1 gestartet.
### Service gestoppt ### Service gestoppt
**Überschrift:** 🚨 🛡️ AdGuard Shield **Überschrift:** 🚨 🛡️ AdGuard Shield
> 🔴 AdGuard Shield v0.8.0 wurde auf dns1 gestoppt. > 🔴 AdGuard Shield v0.8.2 wurde auf dns1 gestoppt.
### Watchdog — Service wiederhergestellt ### Watchdog — Service wiederhergestellt
**Überschrift:** 🔄 AdGuard Shield Watchdog **Überschrift:** 🔄 AdGuard Shield Watchdog

View File

@@ -100,7 +100,7 @@ Wiederholungstäter werden wie bei fail2ban stufenweise länger gesperrt. Wird e
| 4. Mal | 4 | 8 Stunden | 3600 × 8 | | 4. Mal | 4 | 8 Stunden | 3600 × 8 |
| 5. Mal | 5 | **PERMANENT** | Max-Stufe erreicht | | 5. Mal | 5 | **PERMANENT** | Max-Stufe erreicht |
> **Hinweis:** Abgelaufene Offense-Zähler werden automatisch vom **Offense-Cleanup-Worker** aufgeräumt, der stündlich prüft, ob das letzte Vergehen einer IP länger als `PROGRESSIVE_BAN_RESET_AFTER` zurückliegt. Der Worker startet automatisch zusammen mit dem Hauptservice, wenn progressive Sperren aktiviert sind. Manuelles Zurücksetzen ist jederzeit mit `reset-offenses` möglich. Permanente Sperren werden **nicht** automatisch aufgehoben sie müssen manuell mit `unban` oder `flush` entfernt werden. > **Hinweis:** Abgelaufene Offense-Zähler werden automatisch vom **Offense-Cleanup-Worker** aufgeräumt, der stündlich prüft, ob das letzte Vergehen einer IP länger als `PROGRESSIVE_BAN_RESET_AFTER` zurückliegt. Der Worker startet automatisch zusammen mit dem Hauptservice, wenn progressive Sperren aktiviert sind. Er läuft mit niedrigster CPU- und I/O-Priorität (`nice 19`, `ionice idle`), sodass andere Dienste nicht beeinträchtigt werden. Manuelles Zurücksetzen ist jederzeit mit `reset-offenses` möglich. Permanente Sperren werden **nicht** automatisch aufgehoben sie müssen manuell mit `unban` oder `flush` entfernt werden.
### Logging ### Logging

View File

@@ -501,8 +501,8 @@ parse_blocklist_ips() {
log "WARN" "Eintrag übersprungen (ungültige IPv6-Adresse oder IP:Port): $line" log "WARN" "Eintrag übersprungen (ungültige IPv6-Adresse oder IP:Port): $line"
fi fi
elif [[ "$line" =~ ^[0-9] ]]; then elif [[ "$line" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(/[0-9]+)?$ ]]; then
# ── IPv4 ────────────────────────────────────────────────────────── # ── IPv4 (nur Ziffern, Punkte und optionaler CIDR-Suffix) ────────
[[ "$line" == "0.0.0.0"* ]] && continue [[ "$line" == "0.0.0.0"* ]] && continue
if _is_valid_ipv4 "$line"; then if _is_valid_ipv4 "$line"; then
echo "$line" echo "$line"

View File

@@ -218,8 +218,8 @@ parse_whitelist_entries() {
log "WARN" "Whitelist-Eintrag übersprungen (ungültige IPv6): $line" log "WARN" "Whitelist-Eintrag übersprungen (ungültige IPv6): $line"
fi fi
elif [[ "$line" =~ ^[0-9] ]]; then elif [[ "$line" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(/[0-9]+)?$ ]]; then
# IPv4 # IPv4 (nur Ziffern, Punkte und optionaler CIDR-Suffix)
[[ "$line" == "0.0.0.0"* ]] && continue [[ "$line" == "0.0.0.0"* ]] && continue
if _is_valid_ipv4 "$line"; then if _is_valid_ipv4 "$line"; then
echo "$line" echo "$line"

View File

@@ -6,7 +6,7 @@
# Lizenz: MIT # Lizenz: MIT
############################################################################### ###############################################################################
VERSION="v0.8.0" VERSION="v0.8.2"
set -euo pipefail set -euo pipefail

View File

@@ -8,7 +8,7 @@
# #
# Autor: Patrick Asmus # Autor: Patrick Asmus
# E-Mail: support@techniverse.net # E-Mail: support@techniverse.net
# Datum: 2026-04-14 # Datum: 2026-04-16
# Lizenz: MIT # Lizenz: MIT
############################################################################### ###############################################################################
@@ -25,6 +25,12 @@ fi
# shellcheck source=adguard-shield.conf # shellcheck source=adguard-shield.conf
source "$CONFIG_FILE" source "$CONFIG_FILE"
# ─── Niedrigste Priorität setzen (CPU + I/O) ─────────────────────────────────
# Stellt sicher, dass der Worker auch bei manuellem Start nie andere Dienste
# verdrängt. nice 19 = niedrigste CPU-Priorität, ionice idle = nur bei freier I/O.
renice -n 19 $$ >/dev/null 2>&1 || true
ionice -c 3 -p $$ >/dev/null 2>&1 || true
# ─── Worker PID-File ────────────────────────────────────────────────────────── # ─── Worker PID-File ──────────────────────────────────────────────────────────
WORKER_PID_FILE="/var/run/adguard-offense-cleanup-worker.pid" WORKER_PID_FILE="/var/run/adguard-offense-cleanup-worker.pid"
@@ -80,6 +86,7 @@ cleanup_expired_offenses() {
now=$(date '+%s') now=$(date '+%s')
local cleaned=0 local cleaned=0
local batch_count=0
for offense_file in "${STATE_DIR}"/*.offenses; do for offense_file in "${STATE_DIR}"/*.offenses; do
[[ -f "$offense_file" ]] || continue [[ -f "$offense_file" ]] || continue
@@ -101,6 +108,12 @@ cleanup_expired_offenses() {
rm -f "$offense_file" rm -f "$offense_file"
cleaned=$((cleaned + 1)) cleaned=$((cleaned + 1))
fi fi
# Alle 10 Dateien kurz pausieren, um I/O-Bursts zu vermeiden
batch_count=$((batch_count + 1))
if (( batch_count % 10 == 0 )); then
sleep 0.1
fi
done done
if [[ $cleaned -gt 0 ]]; then if [[ $cleaned -gt 0 ]]; then