Zum Inhalt springen
SHIELDMYSERVER

Angriffsfläche von außen messen: vierteljährlich, in einer halben Stunde

Ein wiederholbarer Selbsttest: Portscan, TLS-Prüfung, Kopfzeilen, vergessene Pfade und öffentliche Suchdienste. Mit Ergebnisdatei, damit Veränderungen auffallen.

mittelDiesen Monat. Wichtig, aber kein Feuer.

veröffentlicht 18.08.2026 · 3 min

Titelbild: Angriffsfläche von außen messen: vierteljährlich, in einer halben Stunde

Auf der Maschine sieht man die Absicht: Konfigurationsdateien, aktivierte Dienste, Firewallregeln. Was tatsächlich erreichbar ist, sieht man nur von außen und der Unterschied zwischen beidem ist die interessante Größe.

Warum mittel

Regelmäßige Selbstprüfung findet keine unbekannten Lücken. Sie findet Abweichungen: den Port, den ein Update wieder geöffnet hat, den Testdienst von vorletzter Woche, das Zertifikat kurz vor Ablauf. Das sind die Befunde, die in der Praxis tatsächlich vorkommen.

Voraussetzung: von wo aus geprüft wird#

Nicht von der Maschine selbst und nicht aus demselben internen Netz, sonst misst man an der Firewall vorbei. Geeignet sind ein zweiter Server bei einem anderen Anbieter, ein Rechner am Heimanschluss (ohne VPN) oder ein Mobilfunkzugang.

Der Durchlauf#

ZIEL=example.org
IP4=$(dig +short A "$ZIEL" | head -1)
IP6=$(dig +short AAAA "$ZIEL" | head -1)
STAND=/tmp/aussenpruefung-$(date +%F).txt

{
  echo "== $ZIEL  $IP4  $IP6   $(date -u +%FT%TZ)"

  echo "-- Ports IPv4"
  nmap -Pn -sS --top-ports 1000 --reason "$IP4"

  echo "-- Ports IPv6"
  [ -n "$IP6" ] && nmap -Pn -6 --top-ports 1000 "$IP6"

  echo "-- Dienste und Versionen auf offenen Ports"
  nmap -Pn -sV -p 22,80,443 "$IP4"

  echo "-- TLS"
  echo | openssl s_client -connect "$ZIEL:443" -servername "$ZIEL" 2>/dev/null \
    | openssl x509 -noout -subject -issuer -dates

  echo "-- Kopfzeilen"
  curl -sSI "https://$ZIEL/" | grep -Ei 'server|strict-transport|content-security|x-frame|x-powered'

  echo "-- Vergessene Pfade"
  for p in /.env /.git/config /server-status /phpinfo.php /adminer.php /wp-admin/ /backup.sql; do
    printf '%s %s\n' "$(curl -sS -o /dev/null -w '%{http_code}' "https://$ZIEL$p")" "$p"
  done
} | tee "$STAND"

Danach der eigentliche Zweck, der Vergleich:

diff /tmp/aussenpruefung-2026-05-18.txt "$STAND"

Ein leerer diff ist das gewünschte Ergebnis. Jede Zeile darin will erklärt werden.

IPv6 ist die halbe Miete

Der häufigste Befund bei dieser Prüfung ist nicht ein exotischer Dienst, sondern IPv4 sauber gefiltert und IPv6 offen, weil die Regeln nur in der ip-Tabelle stehen und nicht in ip6. Deshalb steht die getrennte Prüfung oben im Ablauf und nicht als Fußnote. Ergänzend: Eingehend dichtmachen.

Was noch dazugehört#

Öffentliche Suchdienste. Scandienste veröffentlichen, was sie zu einer IP-Adresse gefunden haben. Ein Blick auf den eigenen Eintrag zeigt, was Dritte sehen, inklusive Zeitverlauf. Für gemietete Adressen ist das gleichzeitig eine Erinnerung daran, dass Vormieter Spuren hinterlassen haben können.

DNS. Alte Einträge zeigen auf Systeme, die es nicht mehr gibt, oder auf fremde. Einmal auflisten:

dig +noall +answer "$ZIEL" ANY
dig +short TXT "$ZIEL"        # SPF/DMARC-Reste, Verifizierungsschnipsel

Mail. Wer eine Domain betreibt, prüft SPF, DKIM und DMARC, nicht nur wegen Zustellbarkeit, sondern weil eine fehlende Richtlinie die eigene Domain zum bequemen Absender für Phishing macht.

Was diese Prüfung nicht ist#

Kein Penetrationstest. Sie sagt, was erreichbar ist, nicht ob eine erreichbare Anwendung ausnutzbar ist. Und: Nur gegen eigene Systeme richten. Ein Scan gegen fremde Adressen ist je nach Umfang und Ort ein Problem, beim eigenen Anbieter vorher in die Nutzungsbedingungen sehen.

Das Ergebnis gehört in dieselbe Ablage wie die Bestandsliste und liefert nebenbei den Nachweis für die Wirksamkeitsprüfung aus Technische Maßnahmen belegen.

Warum das Ergebnis eine Datei sein muss#

Eine Prüfung, deren Ergebnis nur auf dem Bildschirm stand, beantwortet die wichtigste Frage nicht: Ist das neu? Ein offener Port 8080 ist für sich genommen weder gut noch schlecht, entscheidend ist, ob er beim letzten Lauf schon da war und ob jemand weiß, warum. Deshalb ist die Ablage kein Ordnungsfimmel, sondern der eigentliche Mechanismus: Der Vergleich macht aus einer Momentaufnahme eine Beobachtung.

Zwei Details erhöhen den Nutzen deutlich. Erstens gehört zu jedem erwarteten Port eine Zeile Begründung, direkt in derselben Datei, damit sie nicht in einem anderen Dokument verwaist:

443  öffentliche Anwendung, hinter Proxy
51820 UDP  WireGuard, Verwaltungszugang
22   nur aus 10.99.0.0/24, sonst gefiltert

Zweitens sollte der Lauf im Kalender stehen, nicht im Vorsatz. Vierteljährlich reicht für einen stabilen Betrieb; nach größeren Änderungen, neuer Dienst, Umzug, Anbieterwechsel, sofort, denn dort entstehen die Abweichungen. Wer die Prüfung an eine Person bindet, verliert sie beim nächsten Urlaub; wer sie an ein Datum bindet, behält sie.

MRMedia

Geschrieben aus dem laufenden Betrieb: MRMedia betreibt eigene Hosts, Kundendienste und deren Härtung in der EU. Eine veraltete Anleitung ist hier ein Sicherheitsproblem, kein Schönheitsfehler. Korrekturen bitte über Discord.