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
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
Fritz schrieb: > Wie müsste Programmiert werden, um diese Gefahr > auszuschliessen? Oder ist das gar nicht möglich? Ein Ausschalter, dann biste sicher.
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.
>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??)
>>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.
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?^^
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.