#!/usr/bin/env bash # Geoblocking - Deinstaller # # Macht die Installation von install_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_geoblock.sh [--testserver-only] [--purge-logs] [ZIELVERZEICHNIS] # # Beispiele: # sudo ./uninstall_geoblock.sh # alles runter # sudo ./uninstall_geoblock.sh --testserver-only # nur Testserver runter # sudo ./uninstall_geoblock.sh --purge-logs # alles + Logs loeschen # sudo ./uninstall_geoblock.sh /opt/geoblock # abweichendes Zielverzeichnis # # Ohne --purge-logs bleibt /var/log/geoblock erhalten (falls vorhanden), # damit alte Laeufe/Fehler weiter nachvollziehbar sind. # # Ohne --testserver-only werden VOR dem Entfernen der Regeln automatisch # "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_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/geoblock}" LOG_DIR="/var/log/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 "geoblock-testserver.service" rm -f "$INSTALL_DIR/geoblock_testserver.py" systemctl daemon-reload echo "" echo "==> Fertig. Testserver entfernt, Geoblock-Timer/Regeln unveraendert." exit 0 fi # --- Komplett-Deinstallation ------------------------------------------------- echo "==> Deinstalliere 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 "geoblock-testserver.service" rm -f "$INSTALL_DIR/geoblock_testserver.py" # iptables/ipset-Regeln sauber abbauen, SOLANGE Script+Config noch da sind. if [[ -f "$INSTALL_DIR/geoblock.py" && -f "$INSTALL_DIR/geoblock.ini" ]]; then echo "==> Entferne iptables/ipset-Regeln (geoblock.py --remove)" if command -v python3 >/dev/null 2>&1; then python3 "$INSTALL_DIR/geoblock.py" --config "$INSTALL_DIR/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/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 "geoblock.timer" stop_disable_rm_unit "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. 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"