berniebienenstock schrieb:
jug schrieb:
Es ist nämlich ein Unterschied, ob ein Port „offen für alle“ ist, zum Beispiel ein HTTP-Server auf Port 80, oder ob ein Programm temporär sagt „dieser FTP-Server auf dieser IP-Adresse, darf sich jetzt mal vorübergehend mit mir auf Port xxxxx verbinden und wenn die Daten übertragen wurden, dann machen wir den Port wieder zu“.
Gibt es für diese Einschränkung des Zugriffs einen Fachbegriff? Wie läuft die Authentifizierung des FTP-Servers am Client? Nur über die IP-Adresse?
Ich habe noch einen besseren Wiki-Artikel gefunden: Offene Ports. 😉 Die Authentifizierung läuft tatsächlich über die IP-Adresse. Der FTP-Client erwartet ja eine Verbindung vom Server – alles was nicht von der IP-Adresse des Servers kommt, wird verworfen. Solche Filter gibt es überall in Netzwerken. Zum Beispiel kann man auch den Apache so konfigurieren, dass er nur auf Anfragen aus bestimmten IP-Bereichen reagiert (zum Beispiel nur im LAN). Wenn man darüber noch mehr Kontrolle haben möchte, dann nutzt man einen Paketfilter wie iptables.
Dazu kommt noch, dass die Zeit zwischen Öffnen des Ports und dem Herstellen der Verbindung sehr kurz ist. Deshalb ist es unwahrscheinlich, dass in dieser Zeit jemand einen Portscan macht, den offenen Port findet und diesen versucht zu übernehmen.
jug schrieb:
Weißt du gerade zufällig noch ein anderes Protokoll, bei dem das so ist? Würde mich interessieren.
Generell muss für eine erfolgreiche Verbindung zwischen zwei Rechnern über TCP/IP immer ein Port auf beiden Seiten der Verbindung geöffnet werden. Üblicherweise geschieht das vom Client zum Server und sobald die Verbindung steht, sind Client und Server gleichberechtigt und können Vollduplex in beide Richtungen Daten austauschen.
Wie schon geschrieben wurde gibt es bei FTP eine Kontroll-Verbindung über die Steuerbefehle ausgetauscht und Datenverbindungen ausgehandelt werden. Diese wird immer vom Client aufgebaut und zwar von einem zufälligen lokalen Port auf den festen Port 21/tcp. Anschließend wird die Datenverbindung aufgebaut. Der Unterschied zwischen aktivem und passivem FTP bestet lediglich darin, wer diese Verbindung aufbaut, der Client (passiv) oder der Server (aktiv).
Wenn das der Server macht, dann hat das für den Server-Admin Vorteile. Diese Verbindungen sind immer ausgehend und von Port 20/tcp. Eine Firewall lässt sich darauf sehr einfach konfigurieren. Dummerweise lassen viele Clients mit ihren NAT/Routern diese eingehenden Verbindungen nicht durch. Also gibt es noch die Alternative: Passives FTP, bei dem der Client die Verbindung aufbaut, allerdings geschieht das dann auf einen zufälligen Port eingehend. Kein fester Port 20/tcp oder 21/tcp sondern was zufälliges, und eingehend. Für den Serveradmin unbequem, aber für den Client besser.
Ich stimme dir zu: es hängt prinzipiell immer von der Sicherheit des "dahinter lauschenden Programms" ab. Ich glaube aber, dass kein Programm perfekt sein wird. Also sollte das Risiko für dieses Programm vom Umfeld minimiert werden. Zum Beispiel ist der Apache ja eigentlich ganz sicher, aber dennoch sollte man ihn nicht auf Port 80 laufen lassen, wenn man den Zugriff von außen gar nicht braucht. Stimmt doch, oder?
Doch, auc Port 80 darf der schon lauschen, nur nicht auf die IP-Adressen von außerhalb. Listen 192.168.0.1:80
wäre zum Beispiel recht einfach, schon ignoriert der Apache alles, was nicht aus dem LAN kommt.
Ein Port mit ausgehender Verbindung zu einem Server (der mal als sicher angenommen werden soll) ist doch sicherer, als ein Port der - zwar mit bestimmen Beschränkungen - offen ist für eingehende Verbindungen, zu dem also nicht nur (der als sicher angenommene) FTP-Server, sondern auch ein Dritter (potenzieller Angreifer) Kontakt aufnehmen kann. Bin ich da wirklich falsch?
Jain.
Ich weiß immer noch nicht ob du den Begriff Port wirklich richtig verstehst. 😉 Ein Port ist ja nur eine Nummer. Man sendet ein TCP-Paket an eine IP-Adresse und spezifiziert eine Port-Nummer. Das kannst du immer und mit jedem „Port“ machen. Das Betriebssystem weiß, welcher Port zu welchem Programm gehört und leitet die Daten passend weiter, wenn ein Programm den Port registriert hat, sonst verwirft es die Daten mit einer entsprechenden Antwort. Da die meisten Programme einen Port für ausgehende Verbindungen öffnen (auf denen auch Daten rein kommen können) reagieren diese Programme auch nur auf Antworten von den IP-Adressen zu denen sie eine Verbindung aufbauen. Zusätzlich haben die meisten Heimnutzer einen Router mit NAT, der ebenfalls diesen Datenverkehr auswertet und nur Pakete durchlässt, die vom Client angefordert wurden. Der Router wertet also aus, mit welcher IP du eine Verbindung aufbaust (und über welchen ausgehenden Port) und erlaubt dieser IP dann auf dem Port zu antworten.
Hättest du kein NAT, dann könnte jeder beliebig versuchen Daten an beliebige Ports zu senden. Und dann kommt es wieder darauf an, wie das Betriebssystem und eventuell laufende Programme auf solche Pakete reagieren.
~jug