IPs und Ports

Hallo Leute,
ich möchte die Grundprinzipien von IP und Ports richtig verstehen.
Hintergrund ist, dass man im Netz nur böses über diese angeblich bösen "offenen Ports" liest.
Mein Ziel ist es, mir Grundwissen anzueignen, um mein eigenes Sicherheitsbewusstsein zu erweitern.

Was ich bisher weiß:

IP: Adresse eines Computers
- Zahlenkombi zur Identifizierung von Computer in Netwerken
- ComputerA kann mit ComputerB über IP kommunizieren, Datenpakete austauschen.

Port: Subadresse
- Zahl zur Identifizierung/Zuordnung vom Datenpaketen
- ProgramX auf ComputerA und ProgramY auf ComputerB können sich gegenseitig Datenpakete zuschicken.
- beide schreiben dafür: eigene-IP + eigenen-Port und Ziel-IP + Ziel-Port in jedes Datenpaket.
- Port ist KEINE Tür, Tor, Durchgang oder sonstiges, sondern nichts weiter als eine Zahlenangabe/Aktenvermerk, die in Datenpaketen stehen...

Firewall:
- ein Paketfilter, der die Quell- u. Zielangaben der Datenpakete ausliest und nach seinen Vorgaben:
die Pakete: akzeptiert (accept), ablehnt (reject) oder verwirft(drop)

Beispielsession:
> Client-Computer: IP = 1.1.1.1, "Browser-Programm" hat Client-Port 34567 geöffnet
> Server-Computer: IP = 2.2.2.2, "HTTP-Dienst" hat Server-Port 80 geöffnet

> Client-Computer schickt Anfragepaket zum Server-Computer 2.2.2.2 / Server-Port 80 ab
Paket-Inhalt:
- von 1.1.1.1:34567 an 2.2.2.2:80
- Bitte um Kopie von Website

> Server-Computer schickt Antwort-Paket zum Client-Computer 1.1.1.1 / Client-Port 34567 zurück
Paket-Inhalt:
- von 2.2.2.2:80 an 1.1.1.1:34567
- hier eine Kopie von meiner Website

> Client-Computer: schließt Port 34567, Session beendet


Nun meine Fragen:
Der Client-Port 34567 wurde vom "Browser-Programm" geöffnet, aber eigentlich doch nur für den Server 2.2.2.2.
Dieser Port nimmt doch nur Pakete von diesem Server an, weil die Pakete vorher eben "angefordert" wurden.
Gilt dieser Clientport trotzdem als offen?

Der Server-Port 80 wurde vom HTTP-Dienst geöffnet (bzw. der Admin hat dies so eingestellt) und nimmt jedes Anfragepaket entgegen,
das diesen Port als Zielport hat.
Also auch unangefragte Pakete.
Ist dieser Port definitiv offen? was wäre so schlimm daran, wenn dieser Port z.B. auf meinem Rechner offen wäre?

Worin liegt der Unterschied zwischen offener Clientport und offener Serverport?
Mit dem Programm CurrPorts kann ich sehen, dass z.B. Firefox jede Menge Ports 55xxx geöffnet (klar, um Pakete von den Servern zu erhalten)
Aber ein Portscanner zeigt mir diese Ports nicht als offen an (getestet)

Was macht so eine Firewall genau?
Von innen nach außen merkt sie, dass z.B. ein Programm Datenpakete ins Internet senden will. OK.
Aber von außen nach innen? wie schützt mich eine Firewall von außen nach innen?
Ich habe doch eh alle Ports geschlossen, weil ich kein Webserver bin oder sonstige Dienste anbiete.
Und die Ports die geöffnet werden, werden vom Program doch wieder geschlossen?
 
Hallo,
zu deinen Fragen: 1. Ein Port ist offen, wenn er Packete empfängt.
2.Ja, das ist ein offener Port, oder wie soll bitte ein Client dem Webserver sagen, dass er Infos zur Seite will. Schlimm ist erstmal nichts an offenen Ports, nur kann es dir passieren, dass z.B. der Webserver eine Sicherheitslücke hat und da der Port nach außen offen ist jeder diese Lücke ausnutzen kann. Oder jemand Schadsoftware auf deinem Rechner ausführt, die ein Angreifer von aussen durch einen von der Schadsoftware geöffneten Port kontrollieren kann.
3. Auf einem Serverport lauscht eine Anwendung und wartet auf Anfragen von Clients. Ein Clientport ist nur für die jeweilige Gegenstelle offen. 4. Eine Firewalls kann auf verschiedenen Leveln prüfent. Bevor ich hier großartig rumerkläre: https://de.m.wikipedia.org/wiki/Firewall#Filtertechnologien Außerdem betreiben die meisten Endbenutzer-Router auch noch ein NAT: IP Masquerading, PAT und NAT 5. Wenn du das Programm killst, sterben auch die offenen Ports.

Edit: 2.Link ist nicht mehr der neuste tut aber seinen Zweck ;)
EDIT2: Das könnte dich noch interessieren Offene Ports ? Wiki ? ubuntuusers.de
 
Zuletzt bearbeitet:
Hallo Linus,
vielen Dank für deine Antwort :)

Ich hätte zunächst eine reine Definitionsfrage:
also ein Netzwerk-Port ist eine Zahl, die in den Adressierungsinformationen eines Paketes steht. (Hat ewig gedauert, bis ich das endlich verstanden hatte)
Port ist also keine Tür, die man schließen oder öffnen kann.
Das OS hat wiederrum eine Tabelle, in der vermerkt ist, welche Portnummer zu welchem Dienst gehört.
z.B. DienstX -> Portnummer 80

Dadurch weiß das OS was mit einem Datenpaket geschehen soll:
- accept (=an Dienst weiterreichen, der diese Portnummer zuvor beantragt und zugewiesen bekommen hat)
- reject
- drop

Analogie:
- Eine Firma hat die Chiffre 80 geöffnet.
- Dadurch weiß der Hausverwalter:
Pakete von der Post mit der Chiffre 80 muss ich annehmen und zur HTTP-Abteilung bringen.
Jedes andere Paket mit einer Chiffre ungleich 80 nehme ich garnicht erst an.

Sprich:
ein Port/Chiffre ist nur dazu da, damit das OS/Hausverwalter weiß, was es/er mit einem gelieferten Paket machen soll

"Ein Port ist offen, wenn er Packete empfängt" würde übersetzt heißen:
"Eine Chiffre ist offen, wenn sie Pakete empfängt."

Aber eine Chiffre bzw. ein Port empfängt doch garkeine Pakete?
falls doch, wie genau?

Müsste es nicht eigentlich so heißen:
Ein Port ist offen, wenn das Betriebssystem die Datenpakete behält und weiterleitet, welche die geöffnete Portnummer in ihren Adressierungsinformationen enthält?


3. Auf einem Serverport lauscht eine Anwendung und wartet auf Anfragen von Clients.
Wie lauscht die Anwendung/der Dienst genau an einem Serverport?
Ist der Serverport eine Ablage, wo das OS die Anfrage-Pakete ablegt und die Anwendung holt sich diese ab?
Oder ist es so, dass das OS sich den Header anschaut und guckt ob Portnummer belegt ist und ggf. weiterleitet?

Wenn du das Programm killst, sterben auch die offenen Ports.
was passiert da genau? also wie wird ein Port geschlossen?
Ich vermute, dass das OS die Zuordnung Port X = ProgramX einfach aus einer Tabelle streicht?
Ist das richtig?
 
Zuletzt bearbeitet:
Aber eine Chiffre bzw. ein Port empfängt doch garkeine Pakete?
falls doch, wie genau?

Müsste es nicht eigentlich so heißen:
Ein Port ist offen, wenn das Betriebssystem die Datenpakete behält und weiterleitet, welche die geöffnete Portnummer in ihren Adressierungsinformationen enthält?

Recht simpel ausgedrückt ist ein Port offen, wenn die Firewall das Paket durchlässt. Ist der Port zu, so wird das Paket an der Firewall verworfen.

Wie lauscht die Anwendung/der Dienst genau an einem Serverport?

Über das Betriebssystem. Du erstellt dir ein Socket, das ist ein Endpunkt der Interprozesskommunikation, für ein bestimmtes Protokoll z.B. IPv4. Ein IPv4 Socket kannst du dann an einen Port binden. Anschließend sagst du dem Betriebssystem, dass es auf eingehende Verbindungen horchen soll für diesen Socket. Damit hast du dem Betriebssystem mitgeteilt, dass es IPv4 Pakete mit Zielport XY über diesen Socket an die Anwendung weiterleiten soll.

Von der Netzwerkkarte bis zur Anwendung wandern die Daten so:
- Deine Netzwerkkarte (kurz engl. NIC) hat einen bestimmten Puffer, welche in den für das Betriebssystem zugänglichen Speicher gemapped wird
- Wenn die NIC ein Paket empfangen hat, löst es einen Interrupt für das Betriebssystem aus
- Das Betriebssystem weiß, dass der Interrupt zum Treiber der NIC gehört, weil der Treiber sich beim Laden so angemeldet hat und ruft daher diesen auf
- Der Treiber kopiert das Paket über irgendeinen DMA in den RAM des PCs
- Der Treiber gibt das Paket (also einfach die Adresse) an das Betriebssystem weiter
- Das Betriebssystem sieht "Oh, ein Paket für meine Adresse mit einem Port für den sich eine Anwendung angemeldet hat". Das Paket wird über den Socket an die Anwendung weitergegeben.

was passiert da genau? also wie wird ein Port geschlossen?
Ich vermute, dass das OS die Zuordnung Port X = ProgramX einfach aus einer Tabelle streicht?
Ist das richtig?

Jop. Wobei ich da jetzt keine Ahnung habe wie das genau geschieht. Ich nehme an, dass die ID der Programme bzw. richtiger wäre hier der zugehörigen Prozesse periodisch auf deren Existenz überprüft wird. Prozess weg = Socket weg = Port kann zu.
Periodisch nehme ich an, weil wenn du mal selber Netzwerkanwendungen schreibst und die zu schnell hintereinander startest, kann es schon mal sein das der gewünschte Port vom Betriebssystem als noch in Benutzung gemeldet wird, obwohl der Prozess nicht mehr vorhanden ist.
 
Zuletzt bearbeitet:
simpel ausgedrückt ist ein Port offen, wenn die Firewall das Paket durchlässt. Ist der Port zu, so wird das Paket an der Firewall verworfen.
Hey Tsjuder,
nehmen wir an, es läuft keine Firewall auf dem OS bzw. es hängt keine Firewall am Netz.
Hieße es:
Port offen = Portnummer vergeben, OS lässt Paket durch
Port geschlossen = Portnummer nicht vergeben, OS lässt Paket nicht durch
?

Die Bezeichnungen "Port öffnen", "Port schließen" suggerieren wie ich finde, Ports seien Durchgänge / Schleusen.
Verstehe ich es richtig, dass man korrekter Weise eigentlich von "Portnummer aktivieren" anstatt "Port öffnen" und "Portnummer deaktivieren" statt "Port schließen" sprechen müsste?
Denn man öffnet oder schließt doch garnix, sondern sagt dem OS doch nur, ob eine Zahl gültig ist oder nicht...


Über das Betriebssystem.
Anschließend sagst du dem Betriebssystem, dass es auf eingehende Verbindungen horchen soll für diesen Socket.
- Das Betriebssystem sieht "Oh, ein Paket für meine Adresse mit einem Port für den sich eine Anwendung angemeldet hat". Das Paket wird über den Socket an die Anwendung weitergegeben.
echt klasse Erklärung, sehr verständlich :thumb_up::P:thumb_up:
Das hieße aber doch zugleich, dass die Aussage, Anwendungen/Dienste würden an Ports lauschen doch falsch ist?
Lauschen, tut doch nur das OS, und zwar auf Pakete mit "registrierter Portnummer", um gefundene Pakete dann an die Anwendung/den Dienst weiterzuleiten, oder?
Die Anwendung lauscht doch garnicht?


erstellt dir ein Socket, das ist ein Endpunkt der Interprozesskommunikation,
Magst du mir das genauer erklären?
Eine Netzwerkadresse besteht aus: IP : Port, z.B. 192.168.1.1:80
Ein Socket ebenfalls aus IP : Port.
Wie muss man beides differenzieren?
 
Zuletzt bearbeitet:
Port offen = Portnummer vergeben, OS lässt Paket durch
Port geschlossen = Portnummer nicht vergeben, OS lässt Paket nicht durch
?

[...]
Verstehe ich es richtig, dass man korrekter Weise eigentlich von "Portnummer aktivieren" anstatt "Port öffnen" und "Portnummer deaktivieren" statt "Port schließen" sprechen müsste?
[...]

Sagen wir mal so: Wenn du einen Server auf Port X betreibst, aber die Pakete nicht an deiner Firewall vorbeikommen, dann musst du schon "Port X öffnen", sodass die Firewall für diese Pakete "offen" ist. Pakete kommen also schon durch eine Art Schleuse, denn nur Schleuse X ist offen. Wenn die Firewall die Pakete bis zu deinem PC/OS durchlässt und dort ist keine Anwendung, die sich für die Pakete interessiert, dann werden die eben weggeworfen. Da kann man jetzt schon auch sagen, dass der Port/die Schleuse nicht offen ist, weil einfach keine Anwendung dahinter existiert.

Das hieße aber doch zugleich, dass die Aussage, Anwendungen/Dienste würden an Ports lauschen doch falsch ist?
Lauschen, tut doch nur das OS, und zwar auf Pakete mit "registrierter Portnummer", um gefundene Pakete dann an die Anwendung/den Dienst weiterzuleiten, oder?
Die Anwendung lauscht doch garnicht?
Auch hier kann man das wieder drehen, sodass es passt. Die Prozesse lauschen durch das OS an einem Port/einer Schleuse ;). Ich denke aber, dass du den Kern verstanden hast und das lauschen über das OS realisiert wird ;).


Magst du mir das genauer erklären?
Eine Netzwerkadresse besteht aus: IP : Port, z.B. 192.168.1.1:80
Ein Socket ebenfalls aus IP : Port.
Wie muss man beides differenzieren?

BTW: Hier ist auch wieder so eine Sache, die wie "Port öffnen", im WWW immer etwas unpräzise daher kommt. Man hat keine "IP", sondern eine IP-Adresse ;)

Interprozesskommunikation über einen Socket muss nicht zwangsweise über das IP laufen. Du kannst über einen Socket also auch einfach zwei Prozesse, die auf deinem PC laufen miteinander kommunizieren lassen.
Des Weiteren lässt sich ein Socket unterschiedlich an das IP-Protokoll binden. Du kannst sagen, dass der Socket nur an eingehende TCP-Pakete mit Ziel IP-Adresse XY und Port Z interessiert ist, du kanns aber genauso gut sagen, dass jede beliebige Ziel-Adresse interessant ist.

Wenn du in C programmieren kannst, kannst du einfach mal irgendwelche Socket-Tutorial durchgehen und damit ein wenig rumspielen. Z.B. zwei Prozesse über Sockets miteinander kommunizieren lassen, Socket unterschiedlich binden und die Pakete an deinen PC über unterschiedliche Interfaces eingehen lassen. Dadurch ergibt sich die meiste Theorie :D. Sicherlich gibts zu Betriebssystemem, Netzwerke und Sockets auch gute Literatur.
 
Zurück
Oben