Die großen, gut gepflegten Linux-Distributionen Debian, Ubuntu, Fedora und Open Suse sind auch für den Einsatz auf Servern geschaffen. Sie müssen im Grundzustand, also nach einer Installation, in einer sicheren Konfiguration vorliegen und dürfen nicht ungefragt Serverdienste starten, die Ports ins Netzwerk öffnen. Wer schon mal kleine Server von der Sorte Raspberry Pi eingerichtet hat, weiß, dass dieser geschlossene Ansatz auf Kosten von Komfort und Bequemlichkeit geht. Er verhindert aber, dass ein Linux-System schon in seiner Standardkonfiguration angreifbar ist oder mit unzureichenden Standardpasswörtern Zugriff auf laufende Serverdienste eröffnet.
Übersicht: Server und geöffnete Ports
Auf einem Server verschaffen Tools in der Kommandozeile per Innenansicht den Überblick, welche laufenden Prozesse auf einem Netzwerkport geöffnet haben. Diese bieten einen unverstellten Blick auf die Zuordnung von Ports und Diensten über den Kernel, ohne dabei einen vorgeschalteten Portfilter zu beachten.
Netstat: Der traditionelle Weg, geöffnete Ports anzuzeigen, führt über das Tool netstat . In aktuellen Linux-Distributionen ist es nicht mehr vorinstalliert, liegt aber im Paket „net-tools“ in den verbreiteten Linux-Distributionen bereit und ist in Debian/Ubuntu mit dem Befehl
sudo apt install net-tools
zu installieren. Anschließend liefert
sudo netstat -tulp
eine tabellarische Übersicht zu Protokollart (TCP oder UDP), verwendeten Netzwerkadressen und verbundenen Adresse bei aktiven Verbindungen. In den letzten beiden Spalten namens „PID/Programname“ und „State“ zeigt das Tool Status und Prozessnamen der Dienste. Steht beim Status „LISTEN“, dann wartet der Prozess auf eingehende Verbindungen. Die Portzuordnung erfolgt in der Spalte „Local Address“ hinter einem Doppelpunkt. Steht hier also beispielsweise „0.0.0.0:22“, bedeutet das, dass ein Dienst auf allen verfügbaren Netzwerkadressen („0.0.0.0“) auf dem Port 22 lauscht. Dies ist üblicherweise der SSH-Server und am Ende der Zeile werden hier eine Prozessnummer und der Prozessname angegeben sein – „sshd“ in diesem Beispiel.
Lsof: In neueren Linux-Distributionen wird zunehmend statt dem älteren, nicht stetig weiterentwickelten netstat das Tool lsof empfohlen. Die Eingabe
sudo lsof -P -i tcp | grep LISTEN
erstellt eine ähnliche, etwas übersichtlichere Tabelle lauschender Prozesse mit Namen und Portnummer. Die Dienst- und Prozessnamen stehen hier gleich am Anfang jeder Zeile.
Zuordnung von Prozess und Dienst: Zum grundsätzlichen Verständnis offener Ports gehört die Tatsache, dass sich ein Netzwerkport nicht wie eine Tür schließen lässt. Vielmehr muss der verantwortliche Task oder Dienst beendet sein, um damit auch den Port zu schließen. Noch wichtiger ist die Tatsache, dass offene Ports im lokalen Heimnetz kein Risiko bedeuten, solange diese nicht per Portfreigabe im Router für das Internet geöffnet werden. Die von lsof oder netstat angezeigten Namen verweisen entweder auf ein Programm oder auf einen Dienst. Die meisten Linux-Distributionen nutzen heute Systemd zur Diensteverwaltung und ein Befehl wie dieser
sudo systemctl status sshd
zeigt dann Informationen zum befragten Dienst an. In diesem Beispiel handelt es sich um den Open-SSH-Server. Alle diese Schritte dienen zur Identifizierung, was auf einem Linux-System unter der Haube läuft. Wenn es klar ist, dass ein Dienst überflüssig ist, so hilft ein Trick dabei, diesen testweise abzuschalten: Das Kommando
sudo shutdown -r 10
setzt einen automatischen Neustart des Systems in zehn Minuten an und
sudo systemctl stop sshd
stoppt den angegebenen Dienst, hier den Open-SSH-Server. Nun hat man zehn Minuten Zeit zu testen, ob der Linux-Server weiterhin wie gewünscht funktioniert. Klar, ausgerechnet den SSH-Dienst abzuschalten, dürfte in den meisten Fällen kontraproduktiv sein, denn nun ist keine neue Anmeldung mehr über das Netzwerk per SSH möglich. Dies ist aber nicht weiter schlimm, denn nach zehn Minuten startet der Server neu und reaktiviert den Dienst wieder. Erst das Kommando
sudo systemctl disable --now sshd
würde den angegebenen Dienst dauerhaft abschalten.
Opensnitch: Check für Desktopsysteme

Von Mac-OS X ist das Tool Little Snitch bekannt, das die angeforderten Netzwerkverbindungen von Programmen überwacht. Das grafische Python-Tool Opensnitch überträgt das Konzept auf den Linux-Desktop und erlaubt einen Blick darauf, was Anwendungen ins Netzwerk senden und von dort empfangen. Das englischsprachige Tool für Fortgeschrittene liegt unter https://github.com/evilsocket/opensnitch/releases auf der Github-Webseite des Entwicklers. Die Installation unter Ubuntu und Abkömmlingen wie Linux Mint erfolgt über die angebotenen DEB-Dateien „opensnitch_[ Version]_amd64.deb“ und „python3- opensnitch-ui_[Version].deb“, die man in ein leeres Verzeichnis herunterlädt und dort dann mit dem Befehl
sudo dpkg -i *.deb
sudo apt -f install
installiert. Der zweite Befehl löst die weiteren Abhängigkeiten auf und Opensnitch wird dann noch einige Python-Pakete automatisch nachinstallieren.
Ubuntu ab Version 22.04: Bevor die Oberfläche von Opensnitch funktioniert, ist noch die Installation einer zusätzlichen Bibliothek mittels
sudo apt install python3-pip
pip3 install --ignore-installed grpcio
nötig. Auf dem Linux-System startet Opensnitch einen Systemd-Dienst und legt ein Symbol im Infobereich der Systemleiste ab, das in einem Fenster die Netzwerkverbindungen nach Prozessen aufschlüsselt. Außerdem schlägt Opensnitch immer Alarm und zeigt die Verbindungsdetails an, sobald eine Anwendung zum ersten Mal eine Netzwerkverbindung herstellt. Die Verbindung kann der Button „Allow connection“ erlauben oder mit „Block connection“ verbieten. Wer das Tool später nicht mehr benötigt, kann es mit dem Befehl
sudo apt remove --purge opensnitch
wieder vom System entfernen (und damit auch den zugehörigen Wächterdienst).
Paketfilter: UFW-Regeln erstellen
Paketfilter sind sinnvoll, wenn Serverports für das Internet freigegeben sind und somit Dienste öffentlich nach außen anbieten. Auf üblichen Desktopsystemen ist dies standardmäßig nicht der Fall und Linux-Distributionen installieren deshalb auch keine Firewallregeln. Ubuntu macht es aber heute mit dem Tool ufw (Uncomplicated Firewall) vergleichsweise einfach, Regeln für das nicht ganz triviale Kernel-Paketfilter zu erstellen.
Mit dem Kommando
sudo apt install ufw
ist das Tool bei Bedarf installiert. Die Syntax ist einfach gehalten und erstellt im Hintergrund die komplexeren nftables-Regeln. Um beispielsweise nur den Port 22 (SSH) zu erlauben, genügt dieser Befehl:
sudo ufw allow 22
Anschließend wird die Firewall mit
sudo ufw enable
gestartet und mit
sudo ufw status
überprüft.
“Well known ports”: Bekannte Hausnummern
Die Portnummern zwischen 1 und 1023 sind reservierte Ports für häufig verwendete Serverdienste, auf die Clients einen typischen Dienst erwarten dürfen. So nutzen beispielsweise Webserver für HTTP den Port 80 und für HTTPS den Port 443. Diese „Well Known Ports“ ermöglichen den Clients die Verbindung zu Servern, ohne dass eine explizite Konfiguration notwendig wäre. Um die Organisation dieser Portnummern kümmert sich die Internet Assigned Numbers Authority (IANA) und stellt die aktuelle Liste mit weiteren Dokumenten hier bereit. Eine deutschsprachige Übersicht hat Wikipedia .