Compare commits
21 Commits
df8b18ae08
...
v0.8.2
| Author | SHA1 | Date | |
|---|---|---|---|
| ac21922178 | |||
| edd8cd4806 | |||
| 44936e9f20 | |||
| 440694925e | |||
| c97e327f0d | |||
| 12745c3fef | |||
| c2d6f872f5 | |||
| ccdc555246 | |||
| 633331748f | |||
| 2559ed89ea | |||
| 6f9f7eba8e | |||
| a132b2a0f1 | |||
| 70818698d1 | |||
| 0264e1e896 | |||
| df15a587ee | |||
| 3d60771a1b | |||
| 4d7e053ce7 | |||
| 23deae7d81 | |||
| 0602fbb596 | |||
| a27c093d83 | |||
| cfd6fa9b70 |
@@ -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)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
# Lizenz: MIT
|
# Lizenz: MIT
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
VERSION="v0.8.0"
|
VERSION="v0.8.2"
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user