Forum: PC-Programmierung Ports für selbst programmierten Java-Server freischalten


von Fritz (Gast)


Lesenswert?

Hallo zusammen.
Ich habe ein multiplayer Java-Spiel programmiert. Bisher konnte ich es 
jedoch nur vom eigenen Computer aus testen. Um es auch über zwei 
Computer spielen zu können oder mehr, müsste ich ja einen Port 
freischalten am Router (und PC?)?

Nun habe ich Bedenken bezüglich der Sicherheit, da auch ein Unternehmen 
im selben Netz läuft.
Welche Gefahren bestehen bei der Öffnung eines Portes? Wie ich es bisher 
gelesen habe gibt es nur Gefahren, wenn ein Programm den entsprechenden 
Port auf dem Computer verarbeitet. Stimmt das? Also wäre der Computer 
nur bedroht, während mein Server läuft?
Für die Kommunikation werden Objekte versendet welche das jeweilige 
Protokoll darstellen. Wie müsste Programmiert werden, um diese Gefahr 
auszuschliessen? Oder ist das gar nicht möglich?

Ja, sind einiges an Fragen... Und ich bin mir darüber bewusst, dass es 
auch einiges unter Google zu dem Thema zu finden gibt allgemein. Doch wo 
nun genau die Gefahren liegen und ob sich die verhindern lassen usw habe 
ich noch  nicht herausfinden können.

Liebe Grüsse Fritz

von Andreas (Gast)


Lesenswert?

Hallo Fritz,

prinzipiell hast Du recht.

Vorweg, Du hast eine sogenannte öffentliche IP-Adresse (vor dem Router), 
die Dein Router von Deinem Internetprovider bekommt und mehrere private 
IP-Adressen (hinter dem Router) z.B. 192.168.0.1, 192.168.0.10 usw. die 
Du selber vergeben kannst.

Freund, die mit Deinem Rechner kommunizieren wollen, müssen also Deine 
öffentliche IP-Adresse kennen. Die IP-Adresse wird aber idR. alle 24 
Stunden von Deinem Provider geändert, die neue IP-Adresse müßtest Du 
dann immer Deinen Freunden bekanntgeben. Um das zu umgehen gibt es 
Anbieter wie z.B. DynDns.

Wenn Du jetzt einen Port z.B. 12345 TCP/IP an Deinem Router öffnest, 
dann sagst Du ihm auch an welche private IP-Adresse (also z.B. 
192.168.0.10) die Anforderung geschickt werden soll. Das heißt, alle 
Anfragen von "draußen", also an die öffentliche IP-Adresse über den Port 
12345 TCP/IP werden zu dem Gerät mit dieser IP-Adresse geschickt. Andere 
Rechner in dem Netzwerk können nicht über diesen Port erreicht werden.

Wenn Du eine Firewall auf deinem Rechner hast, dann mußt Du bei dieser 
auch den Port 12345 TCP/IP öffnen (zulassen), damit die Anfragen von 
"draußen" auch Deinen Rechner erreichen können.

Damit Dein Rechner auch auf diese Anfrage reagiert, mußt Du einen 
sogenannten LISTENER auf Deinem Rechner laufen haben, den Du in Deinem 
Java-Spiel festgelegt hast und der nur aktiv ist, wenn Dein Spiel auch 
läuft. Ist dieser LISTENER nicht vorhanden, reagiert auch niemand auf 
die Anfrage von "draußen".

Was Dein Programm jetzt an Möglichkeiten zuläßt, ist dann entscheidend 
was ein möglicher Angreifer alles bewirken kann, also welche 
"Freiheiten" Deine Objekte haben.

Theoretisch sollte Dein Netzwerk damit "sicher" sein, aber man weiß ja 
nicht was im kranken Hirn eines Cyberkriminellen so alles umher 
geistert.

Gruß
Andreas

von Fail-safe (Gast)


Lesenswert?

Fritz schrieb:
> Wie müsste Programmiert werden, um diese Gefahr
> auszuschliessen? Oder ist das gar nicht möglich?

Ein Ausschalter, dann biste sicher.

von IP (Gast)


Lesenswert?

Ich möchte noch etwas differenzierter darauf eingehen:

Wenn ich dich richtig verstehe, gibt es auf beiden Rechner zwei 
verschiedene Arten: Einmal eine eigehende und einmal eine ausgehende 
Verbindung.

Die ausgehende Verbindung macht häufig keine Probleme, da viele 
Firewalls ausgehende Verbindung pauschal zulassen. Wenn das nicht der 
Fall ist, kann man natürlich versuchen einen Port zu wählen, der schon 
bereits für andere Zwecke verwendet wird (z.B. HTTP 80, sofern kein 
Proxy dazwischen hängt).

Dadurch, dass viele Router NAT implementieren, kann normalerweise keine 
Verbindung von draussen zu deinem PC hergestellt werden. Dazu musst du 
eine Firewall Regel einbinden, der festlegt, wohin die externe Anfrage 
intern umgeleitet werden soll. Diese Regel kann eine Sicherheitslücke 
darstellen, da jetzt von aussen auf deinem PC zugegriffen werden kann. 
Im schlimmsten Fall muss dazu nicht mal ein Program auf dem Port 
lauschen, es reicht vielleicht schon ein fehlerhafter TCP/IP Stack, 
dessen Fehler vom Angreifer ausgenutzt werden können.

Um auf eine Eingehende Verbindung zu verzichten könnte man das z. B. so 
umsetzen: Jeder deiner beiden PCs bauen eine ausgehende Verbindung zu 
einem im Internet erreichbaren Rechner auf, der als Vermittler dient. 
Über diese Verbindung machen sich beide dann bekannt (Port und 
öffentliche IP). Über diese Information können dann beide über eine 
UDP-Verbindung (funktioniert nicht mit TCP) gegenseitig Kontakt 
aufnehmen, ohne dass eine eingehende Regel auf der Firewall erstellt 
werden muss.

von Robert L. (lrlr)


Lesenswert?

>Stimmt das? Also wäre der Computer
>nur bedroht, während mein Server läuft?

ja
(ausser ein "virus/torjaner" usw. würde den "offenen port" 
missbrauchen..)



>Für die Kommunikation werden Objekte versendet welche das jeweilige
>Protokoll darstellen. Wie müsste Programmiert werden, um diese Gefahr
>auszuschliessen? Oder ist das gar nicht möglich?

am "gefährlichten" wäre vermutlich, direkt SQL befehle zuzulassen (siehe 
SQL injects usw. )


da du in JAVA arbeitest, hast du aber eh schon 100te Probleme nicht,die 
ein C Programm hätte .. ;-) (buffer overruns usw. )

ausserdem kannst du dem Server ja möglich wenig (lokale) rechte 
zukommen lasse (bzw. vielleicht sogar in einer art SAandbox laufen 
lassen??)

von IP (Gast)


Lesenswert?

>>Stimmt das? Also wäre der Computer
>>nur bedroht, während mein Server läuft?
>
>ja
>(ausser ein "virus/torjaner" usw. würde den "offenen port"
>missbrauchen..)

Bin da leicht anderer Meinung. Die Wahrscheinlichkeit bei nicht 
laufenden Server ist sicherlich wesentlich geringer als bei laufenden 
Server. Aber trotzdem können fehler im TCP/IP Stack Probleme bereiten. 
Zum Beispiel beschreibt 
http://doa.alaska.gov/ets/security/S_Advisory/sa2011-061.pdf einen 
Angriff auf einem "closed port" der zu einem Integer überlauf führt und 
dazu genutzt werden kann um das System anzugreifen.

von Fritz (Gast)


Lesenswert?

Vielen Dank schon mal für die vielen Antworten! Haben mir schon stark 
geholfen.
Also gesendet werden nur recht primitive Objekte, welche nur aus jeweils 
ein paar Variablen und zum Teil Vektoren bestehen.

Nun ist oft der Ausdruck gefallen: "es besteht eine (erhöhte) Gefahr"
Wie muss man sich diese Gefahr denn vorstellen? Muss man sich da 
vorstellen, dass täglich irgendwelche Hackerprogramme versuchen auf 
beliebigen Rechnern einzudringen, oder gibt es sowieso nur ein paar 
Hacker weltweit, die zu sowas fähig sind, welche es sowieso auf grössere 
Ziele abgesehen haben?
Also besteht da wirklich eine reelle Gefahr oder ist die Gefahr grösser 
von einem Meteoriten getroffen zu werden?^^

von IP (Gast)


Lesenswert?

Risikoabwägungen sind immer schwierig. Grundsätzlich musst du das selbst 
beurteilen. Veilleicht ein paar Gedanken dazu:
Deine beiden Rechner mit den offenen Ports werden gezielt vermutlich 
eher durch Zufall gefunden als durch absicht. Und selbst wenn, wird der 
Aufwand vermutlich zu hoch sein, so dass andere Opfer bevorzugt werden. 
Wenn es aber jemand auf die Firma abgesehen hat, dann wird er natürlich 
jede Schwachstelle ausnutzen, also auch dein offener Port.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.