Wer Ports auf fremden Rechnern abtastet, gilt nach vorherrschender Meinung nicht als Angreifer. Allerdings geht einer ernst gemeinten Attacke fast immer ein Portscan voraus. Mütter der Porzellankiste reagieren auf Portscans deshalb vorsorglich ("proaktiv" auf Consultingdeutsch), indem sie von der IP-Adresse, die den Portscan ausgeführt hat, für eine Zeit lang keine weiteren Verbindungen annehmen. Das dazu passende Werkzeug heißt Portsentry http://1 und gehört zum Umfang der meisten Distributionen. Der Daemon erkennt und loggt Portscans und führt daraufhin Kommandos aus.
In der Datei »/etc/default/portsentry«
stelle ich den Erkennungsmodus ein:
TCP_MODE="tcp"
UDP_MODE="udp"
Wenn ich nicht will, dass Portsentry UDP-Ports überwacht, lösche ich die zweite Zeile. Ersetze ich »tcp«
und »udp«
durch »stcp«
und »sudp«
, reagiert das Tool sensibler und erkennt auch Stealth-Scans. Gebe ich »atcp«
und »audp«
an, bindet es alle unbenutzten Ports unterhalb von 1024 und meldet sie dem Angreifer als offen, woraufhin der Verdutzte genau so schlau ist wie vor seinem Scan.
Weiteren Raum fürs Setup öffnet »/etc/portsentry/portsentry.conf«
. Hier darf ich Triggerports definieren, die als Portscan-Detektoren dienen. Die vorgegebene Auswahl ist recht gut, ich würde sie nur ändern, wenn ich auf einem dieser Ports einen Daemon betriebe.
Wichtiger ist es, die Sensibilität mit der Variablen »SCAN_TRIGGER«
festzulegen. Beim Default »0«
reagiert Portsentry sofort, wenn ein Triggerport anspricht. Werte wie »1«
oder »2«
reduzieren die Empfindlichkeit und damit die falsch-positiven Alarme. Dem gleichen Ziel dient »ADVANCED_EXCLUDE_TCP=«
: Ports, die oft von fremden Hosts angesprochen werden wie Ident (Port 113) und Netbios (Port 139), klammert der »atcp«
-Modus explizit aus, ebenso wie -»ADVANCED_EXCLUDE_UDP-«
die UDP-Ports 67, 137, 138 und 520 (DHCP, Netbios, RIP).
Per Default reagiert Portsentry nicht auf Scans, sondern schreibt nur einen Log-Eintrag. Dieses Verhalten steuern:
BLOCK_UDP="0"
BLOCK_TCP="0"
Eine »1«
an dieser Stelle bewirkt, dass IP-Adressen, von denen Portscans ausgehen, sich nicht mehr verbinden können, weil Portsentry das Kommando
/sbin/route add -host $TARGET$ reject
ausführt, das alle Anfragen mit Connection Refused abbügelt (Abbildung 1). Die IP-Adresse, von der der Portscan ausging, landet außerdem in der Datei »/var/lib/portsentry/portsentry.blocked«
und bleibt dort bis zum Neustart des Daemon.
Abbildung 1: Portsentry initialisiert sich und detektiert Portscans entsprechend seiner Konfiguration.
Waffe gesichert
Um zu verhindern, dass eigene Systeme in Portsentrys Fänge geraten, gibt es die Datei »/etc/portsentry/portsentry.ignore.static«
. Hier kann ich einzelne Hosts oder ganze Netze definieren, die von allen Gegenmaßnahmen verschont bleiben. Apropos: Wenn ich »BLOCK_TCP«
und »BLOCK_UDP«
auf »2«
stelle, führt Portsentry jeden Befehl aus, den ich in »KILL _RUN_CMD«
hinterlege – das Alarmieren per SMS oder Ähnliches, es bedient aber auch die Großkaliberwaffe Metasploit für brutale Gegenschläge. Bedenke: Es wirkt ungehobelt, jedem die Doppelläufige in die Nasenlöcher zu schieben, der zaghaft an die Tür klopft.
Anlässlich von Charlys 10-jährigem Magazin-Jubiläum bietet die Redaktion eine Sammlung seiner sämtlichen Kolumnen als PDF für 19,95 Euro an – statt der knapp 120 Euro beim Erwerb der Einzelartikel.