From 802aeaaedb591d9521a0938a9644b722736f01c8 Mon Sep 17 00:00:00 2001 From: ARIA Date: Tue, 21 Jul 2026 11:38:44 +0000 Subject: [PATCH] Deinstall-Script hinzufuegen (komplett oder nur Testserver) --- README.md | 34 ++++++++++ uninstall_aria_geoblock.sh | 123 +++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100755 uninstall_aria_geoblock.sh diff --git a/README.md b/README.md index 8821c02..54f03a9 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ und droppt Pakete bereits auf Netzwerk-Ebene. | `aria_geoblock_checkmk` | checkmk local-check Plugin (manuell kopieren) | | `aria_geoblock_testserver.py` | Kleiner Test-Webserver, um die Regeln von aussen zu pruefen | | `aria-geoblock-testserver.service` | systemd-Unit, startet den Test-Webserver dauerhaft | +| `uninstall_aria_geoblock.sh` | Deinstaller: raeumt Timer/Service/Testserver/Regeln wieder ab (siehe unten) | ## Installation @@ -66,6 +67,39 @@ und **einmal taeglich** (mit bis zu 15min Zufallsversatz, damit nicht alle Hosts gleichzeitig ipdeny.com anfragen). Verpasste Laeufe (Host war aus) werden dank `Persistent=true` beim naechsten Boot nachgeholt. +## Deinstallation + +`uninstall_aria_geoblock.sh` macht die Installation wieder rueckgaengig. +Zwei Modi: + +```bash +# Alles runter: Timer/Service, Testserver (falls installiert), +# iptables/ipset-Regeln, Installationsverzeichnis +sudo ./uninstall_aria_geoblock.sh + +# Nur den Test-Webserver entfernen, Geoblocking selbst bleibt aktiv +sudo ./uninstall_aria_geoblock.sh --testserver-only +``` + +Weitere Optionen: + +```bash +sudo ./uninstall_aria_geoblock.sh --purge-logs # zusaetzlich /var/log/aria_geoblock loeschen +sudo ./uninstall_aria_geoblock.sh /opt/aria-geoblock # abweichendes Zielverzeichnis (Default: /opt/aria-geoblock) +``` + +Ohne `--purge-logs` bleiben die bisherigen Logs unter +`/var/log/aria_geoblock` erhalten. Bei der Komplett-Deinstallation wird +VOR dem Loeschen automatisch `aria_geoblock.py --remove` ausgefuehrt, damit +die iptables-Regel und das `ipset` sauber aus dem Kernel entfernt werden +(kein verwaistes DROP, keine offene Verbindung bleibt blockiert). Fehlen +Script/Config bereits, wird gewarnt und man sollte manuell pruefen: + +```bash +iptables -L -n | grep -i geoblock +ipset list -n | grep -i geoblock +``` + ## Manuelle Nutzung (ohne systemd) ```bash diff --git a/uninstall_aria_geoblock.sh b/uninstall_aria_geoblock.sh new file mode 100755 index 0000000..bab372b --- /dev/null +++ b/uninstall_aria_geoblock.sh @@ -0,0 +1,123 @@ +#!/usr/bin/env bash +# ARIA Geoblocking - Deinstaller +# +# Macht die Installation von install_aria_geoblock.sh wieder rueckgaengig. +# Standardmaessig wird ALLES entfernt: Timer/Service, ggf. der Testserver, +# die iptables/ipset-Regeln und das Installationsverzeichnis. Mit +# --testserver-only wird NUR der Test-Webserver entfernt, das eigentliche +# Geoblocking (Timer, Regeln, Config) bleibt unangetastet. +# +# Nutzung (als root): +# sudo ./uninstall_aria_geoblock.sh [--testserver-only] [--purge-logs] [ZIELVERZEICHNIS] +# +# Beispiele: +# sudo ./uninstall_aria_geoblock.sh # alles runter +# sudo ./uninstall_aria_geoblock.sh --testserver-only # nur Testserver runter +# sudo ./uninstall_aria_geoblock.sh --purge-logs # alles + Logs loeschen +# sudo ./uninstall_aria_geoblock.sh /opt/aria-geoblock # abweichendes Zielverzeichnis +# +# Ohne --purge-logs bleibt /var/log/aria_geoblock erhalten (falls vorhanden), +# damit alte Laeufe/Fehler weiter nachvollziehbar sind. +# +# Ohne --testserver-only werden VOR dem Entfernen der Regeln automatisch +# "aria_geoblock.py --remove" ausgefuehrt, damit iptables/ipset sauber +# aufgeraeumt werden (kein verwaistes DROP, kein verwaistes ipset). + +set -euo pipefail + +if [[ $EUID -ne 0 ]]; then + echo "Bitte als root ausfuehren (sudo ./uninstall_aria_geoblock.sh)." >&2 + exit 1 +fi + +TESTSERVER_ONLY=0 +PURGE_LOGS=0 +INSTALL_DIR="" +for arg in "$@"; do + case "$arg" in + --testserver-only) + TESTSERVER_ONLY=1 + ;; + --purge-logs) + PURGE_LOGS=1 + ;; + -h|--help) + grep '^# ' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//' + exit 0 + ;; + *) + INSTALL_DIR="$arg" + ;; + esac +done +INSTALL_DIR="${INSTALL_DIR:-/opt/aria-geoblock}" +LOG_DIR="/var/log/aria_geoblock" + +stop_disable_rm_unit() { + local unit="$1" + if systemctl list-unit-files "$unit" >/dev/null 2>&1 && systemctl list-unit-files "$unit" | grep -q "$unit"; then + echo "==> Stoppe/deaktiviere $unit" + systemctl stop "$unit" >/dev/null 2>&1 || true + systemctl disable "$unit" >/dev/null 2>&1 || true + fi + if [[ -f "/etc/systemd/system/$unit" ]]; then + rm -f "/etc/systemd/system/$unit" + fi +} + +# --- Nur Testserver entfernen ----------------------------------------------- +if [[ "$TESTSERVER_ONLY" -eq 1 ]]; then + echo "==> --testserver-only: entferne NUR den Test-Webserver, Geoblocking bleibt aktiv" + stop_disable_rm_unit "aria-geoblock-testserver.service" + rm -f "$INSTALL_DIR/aria_geoblock_testserver.py" + systemctl daemon-reload + echo "" + echo "==> Fertig. Testserver entfernt, Geoblock-Timer/Regeln unveraendert." + exit 0 +fi + +# --- Komplett-Deinstallation ------------------------------------------------- +echo "==> Deinstalliere ARIA Geoblocking komplett ($INSTALL_DIR)" + +# Testserver zuerst (falls vorhanden), damit kein Dienst mehr auf die +# Config/das Verzeichnis zugreift, waehrend wir aufraeumen. +stop_disable_rm_unit "aria-geoblock-testserver.service" +rm -f "$INSTALL_DIR/aria_geoblock_testserver.py" + +# iptables/ipset-Regeln sauber abbauen, SOLANGE Script+Config noch da sind. +if [[ -f "$INSTALL_DIR/aria_geoblock.py" && -f "$INSTALL_DIR/aria_geoblock.ini" ]]; then + echo "==> Entferne iptables/ipset-Regeln (aria_geoblock.py --remove)" + if command -v python3 >/dev/null 2>&1; then + python3 "$INSTALL_DIR/aria_geoblock.py" --config "$INSTALL_DIR/aria_geoblock.ini" --remove || \ + echo "WARNUNG: --remove ist fehlgeschlagen - iptables/ipset ggf. manuell pruefen (iptables -L, ipset list)." >&2 + else + echo "WARNUNG: python3 nicht gefunden - Regeln konnten nicht automatisch entfernt werden. Manuell pruefen (iptables -L, ipset list)." >&2 + fi +else + echo "WARNUNG: $INSTALL_DIR/aria_geoblock.py oder .ini nicht gefunden - ueberspringe automatischen Regel-Abbau. Manuell pruefen (iptables -L, ipset list)." >&2 +fi + +echo "==> Stoppe/deaktiviere Timer + Service" +stop_disable_rm_unit "aria-geoblock.timer" +stop_disable_rm_unit "aria-geoblock.service" + +systemctl daemon-reload + +echo "==> Entferne Installationsverzeichnis $INSTALL_DIR" +rm -rf "$INSTALL_DIR" + +if [[ "$PURGE_LOGS" -eq 1 ]]; then + echo "==> --purge-logs gesetzt: entferne $LOG_DIR" + rm -rf "$LOG_DIR" +else + if [[ -d "$LOG_DIR" ]]; then + echo "==> Logs bleiben erhalten: $LOG_DIR (mit --purge-logs zusaetzlich loeschen)" + fi +fi + +echo "" +echo "==> Fertig. ARIA Geoblocking wurde komplett deinstalliert." +echo " Kurze Kontrolle falls gewuenscht:" +echo " iptables -L -n | grep -i geoblock" +echo " ipset list -n | grep -i geoblock" +echo " systemctl list-timers | grep -i geoblock"