#!/bin/bash
# Wächter 2b – Fernwächter auf einem ZWEITEN Gerät (alter Laptop, zweiter Pi, kleiner Mietserver) – nicht auf dem Server selbst.
# Er sieht den Server von außen: antwortet die Seite, stimmt die DNS-Adresse, ist das Zertifikat gültig, sind nur die erwarteten
# Ports offen? Fällt der Server ganz aus, merkt es nur ein Fernwächter. Per cron alle 5 Minuten:
#   */5 * * * * /usr/local/bin/fernwaechter.sh
set -uo pipefail
HOST=${HOST-example.org}
ERWARTET_PORTS=${ERWARTET_PORTS-"22 80 443"}   # was offen sein darf
MELDEN=${MELDEN-""}                            # eigener ntfy-Server o. Ä.
melden() { logger -t fernwaechter "$1"; [ -n "$MELDEN" ] && curl -fsS -m 10 -d "$1" "$MELDEN" >/dev/null 2>&1; }

curl -fsS -m 15 -o /dev/null "https://$HOST/" || melden "$HOST antwortet nicht"
[ -n "$(dig +short "$HOST" A "$HOST" AAAA)" ] || melden "DNS für $HOST leer"
if command -v nmap >/dev/null; then
    offen=$(nmap -Pn --top-ports 1000 -oG - "$HOST" 2>/dev/null | grep -oE '[0-9]+/open' | cut -d/ -f1 | tr '\n' ' ')
    for p in $offen; do [[ " $ERWARTET_PORTS " == *" $p "* ]] || melden "Unerwarteter offener Port $p auf $HOST"; done
fi
