ubuntuusers.de

ubuntuusers.deWikiOffene Ports

Offene Ports

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Was ist ein Port?

Den meisten Benutzern ist sicherlich schon mindestens einmal der Begriff "Netzwerkport" unter die Augen gekommen, vor allem im Zusammenhang mit Computer-Sicherheit. Hier wird dann oft von "offenen Ports" gesprochen, die man per "Firewall" oder auf andere Art schließen müsse. Vielen ist dabei gar nicht so klar, was "Ports" eigentlich sind, wozu man sie genau braucht, wie sie funktionieren, was es bedeutet, wenn sie offen sind, und wie man sie schließt, wenn man sie nicht braucht.

Die Protokolle TCP und UDP

Die Dienste im Internet werden allgemein über zwei unterschiedliche Protokolle abgewickelt, TCP und UDP. Beide benutzen nummerierte sogenannte "Ports", um die ankommenden Netzwerk-Pakete zu den passenden Programmen zu leiten. Jedes dieser Protokolle hat 65535 solcher Ports, die aber unabhängig voneinander sind. Port "22/tcp" ist also ein anderer Port als "22/udp".

Client- und Server-Ports

Jede Verbindung benötigt, um eindeutig zu sein, zwei Ports, den Quell- und den Ziel-Port. Ein sogenannter "Client" kontaktiert einen "Server". Meist haben Serverdienste feste Ports, auf denen sie bekanntermaßen zu erreichen sind. So lauscht ein Webserver meist auf Port 80/tcp und SSH auf 22/tcp auf Verbindungsanfragen. Der Port des Clients ist variabel, denn der Server erfährt ihn ja gleich bei der Verbindungsanfrage, weil es der Quell-Port der Anfrage ist.

Es gibt aber noch einen Unterschied zwischen Server- und Client-Ports. Server-Ports sind "offen für alles" und warten darauf, dass irgendwer sich verbindet. Client-Ports sind nur für den jeweiligen Server geöffnet und nehmen Pakete von anderen Gegenstellen nicht an.

Offen, Geschlossen, Gefiltert

Was heißt es nun, wenn ein Port "offen" oder "geschlossen" ist? Ein Port ist offen, wenn ein Programm an einem Port nach Paketen lauscht, die an ihn geschickt wurden, ohne dass das Programm diese Pakete vorher angefordert hat.

Ein Port ist "geschlossen", wenn keine Anwendung an diesem Port lauscht. Werden trotzdem Netzwerkpakete an diesen Port geschickt, so weist der Rechner diese Pakete sofort als "unzustellbar" zurück.

Es gibt noch einen dritten Zustand, der aber nur bei Verwendung eines Paketfilters auftritt: "gefiltert". Eine Firewall, die Pakete filtert, lässt keine Verbindung auf dem jeweiligen Port durch, schickt aber auch keine Fehlermeldung zurück. Das soll einem potentiellen Angreifer weniger Informationen über das Ziel liefern, aber der Nutzen ist umstritten.

Legitime Programme, die nur irrtümlich auf diesen Port zugreifen wollen, werden dagegen klar behindert. Anstatt sofort zu erfahren, dass sie die falsche Adresse kontaktiert haben, gehen sie davon aus, die Daten seien unterwegs verlorengegangen und senden sie noch ein paar Mal eine Kopie, während sie auf Antwort warten. Erst nach einiger Zeit geben sie auf. Es kommt so also zu einer merklichen Verzögerung von bis zu mehreren Minuten. Die meisten Firewalls können jedoch auch so eingestellt werden, dass sie korrekte Fehlermeldungen zurücksenden.

Ports öffnen

Wie öffnet man denn nun einen Port? Normalerweise braucht man nichts zu tun, um einen Port zu öffnen, da die einzelnen Programme das bei Bedarf selber tun. Nur wenn man eine Firewall benutzt, muss man den Port dort bei Bedarf freischalten.

Client-Ports

Verbindungen von innen nach außen sind auch bei den meisten Firewalls standardmäßig erlaubt. Deswegen braucht man nichts weiter zu unternehmen. Da die Client-Ports ja auch nur die Antworten der selbst gewählten Gegenstelle beachten, ist eine Filterung auch ziemlich unnötig, es sei denn, man will seine Benutzer aus bestimmten Gründen beschränken.

Server-Ports

Auch Serverdienste öffnen ihre Ports selbständig, sofern sie nicht durch eine Firewall blockiert werden. Das einzige, was in bestimmten Fällen noch aktiviert werden muss, ist eine sogenannte Portweiterleitung.

Wer einen handelsüblichen Router (oder auch einen Linux-Rechner als Router) an einer gängigen Einwähl- oder DSL-Leitung betreibt, benutzt mit Sicherheit die sogenannte "Network Address Translation (NAT)", auch "Masquerading" genannt. Erkennbar ist das daran, dass die IP-Adressen der eigenen Rechner aus einem der privaten Adressbereiche stammen.

In diesem Fall sind die Rechner aus dem Internet nicht zu erreichen, was sich schon mal positiv auf die Sicherheit im lokalen Netz auswirkt. Wer aber dennoch einen Server im lokalen Netz platzieren will, muss dafür sorgen, dass die gewünschten Ports vom Router explizit weitergeleitet werden. Informationen dazu findet man sicherlich im Handbuch des Routers.

Wer also keine Personal Firewall auf seinem Rechner installiert hat - was in den allermeisten Fällen sowieso unnötig ist - braucht auf dem Ubuntu-Rechner also nichts weiter zu unternehmen, um Ports zu öffnen, außer die entsprechenden Dienste zu starten.

Ports schließen

Dienst beenden

Der einfachste Weg ist der naheliegendste. Hat man einen Computer, wo ein oder mehrere Dienste an verschiedenen Ports lauschen, man aber nicht möchte, dass dieser Rechner Dienste im Netzwerk anbietet, dann sollte man die Dienste beenden. Wo kein Dienst mehr an Ports lauscht, da ist auch kein Port mehr offen. Informationen zu den Diensten und deren Verwaltung findet man hier im Wiki.

Dienst auf bestimmte Schnittstellen beschränken

Nicht immer möchte man Dienste gleich ganz beenden. Hat man beispielsweise zu Hause einen Rechner stehen, der als Router und Webserver zum Testen von Webseiten fungieren soll, so wäre es nicht sinnvoll, den Webserver zu beenden, denn man möchte ihn ja benutzen. Er soll nur nicht aus dem Internet erreichbar sein.

In solchen Fällen kann man Dienste an eine bestimmte Netzwerkschnittstelle binden. Eine Verbindung in das Internet wird beispielsweise oft über eine Einwahlverbindung (also über ein analoges Modem oder ein DSL-Modem) realisiert. Diese Netzwerkschnittstellen nennen sich immer "ppp0". Eine "normale" Netzwerkschnittstelle immer "eth0" usw.

In der Konfiguration der meisten Dienste kann man die zu nutzende Netzwerkschnittstelle bestimmen. Anfragen, die nicht über die angegebene Schnittstelle auf den Server-Dienst kommen, werden dann gar nicht erst beachtet.

Dienst auf bestimmte Adressbereiche beschränken

Über die Konfigurationen der meisten Dienste kann man IP-Adressbereiche bestimmen, auf die der Dienst reagieren soll, bspw. das eigene lokale Netz. Erreichen Pakete aus einem IP-Bereich außerhalb der spezifizierten Adressen den Dienst, so reagiert dieser nicht darauf.

TCP-Wrapper

Da es überflüssige Arbeit wäre, wirklich in jeden klitzekleinen Dienst eigene derartige Konfigurationsmöglichkeiten einzubauen, wurde die TCP-Wrapper-Bibliothek erfunden, die inzwischen von vielen Diensten genutzt wird. Wie man diese konfiguriert, steht hier.

Paketfilter

Letztendlich bleibt immer noch ein Paketfilter oder in der Umgangssprache eine Firewall. Solch ein Paketfilter sitzt vor den Diensten und schaut, ob Pakete an bestimmte Netzwerkports geschickt werden dürfen oder nicht. Existiert eine Regel, dass auf einem bestimmten Port Pakete empfangen werden dürfen, so leitet der Paketfilter diese Pakete an den Dienst weiter. Wird ein Port explizit gesperrt, so werden alle Pakete an diesen fallen gelassen, auch wenn ein Dienst auf diesem Port im Netzwerk lauschen würde.

Auf jeder Ubuntu-Installation läuft von Haus aus der Paketfilter iptables. Allerdings werden bei der Installation keinerlei Regeln für den Filter gesetzt. Warum auch, denn dort, wo keine Dienste im Netzwerk auf Pakete hören, braucht man auch keine Ports zu filtern. Weitere Informationen zum Thema Ubuntu und Firewalls findet man hier im Wiki.

„Keine-offene-Ports“-Philosophie von Ubuntu

Die Entwickler von Ubuntu hatten sich zu Beginn der Entwicklung die Strategie „Keine offene Netzwerkports“ (siehe DefaultNetworkServices) vorgenommen. Damals war es üblich, dass beispielsweise auf fast jeder Linux-Installation ein SSH-Server lief, um sich aus dem Netzwerk auf dem Rechner anmelden zu können, egal ob das der Nutzer nun braucht oder nicht.

Dies ist bei Ubuntu nicht der Fall. Auf einer neuen Installation von Ubuntu läuft kein einziger Dienst, der Daten aus dem Internet empfangen kann, also einen Port zum Internet hin öffnet. Man kann dies über den Befehl [1]

sudo netstat -tulpen | grep -v '127.0.0.1'  | grep -v '::1:' 

selber überprüfen. Weitere Informationen zum Befehl netstat liefert die gleichnamige Wiki-Seite.

Ausnahmen

Ohne gewisse Dienste gibt es aber auch kein einfach zu nutzendes Netzwerk. Daher existieren zum heutigen Zeitpunk genau zwei Ausnahmen von dieser Regel. Diese Ausnahmen dienen ausschließlich dazu, andere Dienste im Netzwerk zu entdecken und um diese Dienste nutzen zu können. Ohne diese Ausnahmen müsste eine Ubuntu-Installation erst für das Netzwerk tauglich gemacht werden.

Dhclient

Netzwerkgeräte beziehen heutzutage üblicherweise über DHCP von einem DHCP-Server ihre Konfiguration, also IP-Adresse, Gateway usw. So braucht man diese Konfiguration nicht von Hand einzutragen und kann das Gerät auch in verschiedenen Netzwerken (also zuhause, im Büro usw.) nutzen, ohne dass man die Netzwerkeinstellungen ändern muss. Solch ein DHCP-Server ist mittlerweile auch in allen gängigen DSL-Hardware-Routern eingebaut, so dass man auch zuhause in den Genuss dieser bequemen Art der Netzwerkkonfiguration kommt.

DHCP funktioniert jedoch nur, wenn der Rechner in der Lage ist, die für ihn bestimmten Informationen zu empfangen. Dafür öffnet die DHCP-Client-Anwendung "dhclient" einen Port

udp   0   0 0.0.0.0:68      0.0.0.0:*   100   20370   6086/dhclient       

Alle Pakete, die nicht von einem DHCP-Server des lokalen Netzwerks stammen bzw. nicht vom dhclient erwartet werden, werden von diesem aber ebenfalls verworfen, so dass dieser Port zwar offen ist, aber real nicht für Angriffe genutzt werden kann.

Avahi

Ein zweiter Dienst, der von Haus aus zwei Ports öffnet, ist Avahi. Avahi (oder auch Zeroconf) ist eine Technik zur Vernetzung von Geräten in einem lokalen Netzwerk, ohne dass diese konfiguriert zu werden brauchen. So ist es möglich, zwei Rechner über ein Netzwerkkabel zu verbinden und sofort Daten auszutauschen. Man kommt also theoretisch sogar ohne DHCP-Server aus.

udp   0   0 0.0.0.0:32768   0.0.0.0:*   105   19889   5996/avahi-daemon:  
udp   0   0 0.0.0.0:5353    0.0.0.0:*   105   19888   5996/avahi-daemon:  

Dabei verarbeitet Avahi aus Prinzip nur Daten aus dem lokalen Netzwerk, der Port ist also nicht zum Internet hin offen, falls der Rechner beispielsweise über ein DSL-Modem direkt im Internet hängt. Es gilt hier also dasselbe wie für den dhclient. Wer diesen Dienst nicht benötigt, kann ihn natürlich trotzdem abschalten, was u.a. auf der Wiki-Seite Avahi erklärt wird. Genauere Angaben zu den Sicherheitsvorkehrungen im Avahi-Daemon liefert die Seite Avahi Security Considerations, die eigens erstellt wurde, um die Ubuntu-Macher von der Ungefährlichkeit dieses Dienstes zu überzeugen.

Diese Revision wurde am 25. Januar 2012 17:14 von Germrolf erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, System, Sicherheit