Was könnte port im lan blocken außer windows firewall?

dermoritz

Lt. Commander
Registriert
Sep. 2005
Beiträge
1.671
Ich habe das Problem, dass ich einen Dienst auf einem Rechner im Lan nicht direkt erreichen kann
http://server:8082 funktioniert nicht - Windows Firewall ist auf "server" aus. (nur zum test, es gibt auch eine Regel die den Port 8082 öffnet)

Auf dem Server läuft ein Apache auf Port 80 als reverse proxy meinedomain:443 -> 8082
Über den reverse proxy kann ich meinen Dienst auch im Lan erreichen.
Auf dem Server selbst kann ich den Dienst auch erreichen über localhost:8082

Andere Dienste auf server kann ich auch wunderbar erreichen.

Nun bin ich gerade mit meinem Latein am Ende. Was könnte den Zugriff zu diesem Port blocken?
(es ging mal ohne Probleme. habe seit her nur einmal versucht RAM zu tauschen)
 
Versuchst du den Port über den Namen oder die IP zu erreichen?

Öffne mal cmd auf dem Rechner, von dem du den Server erreichen willst und teste:

1. curl -v http://<servername>:8082
2. curl -v http://<ip>:8082
 
auf localhost erreichbar sein heisst noch nicht, dass es von anderen Rchnern übers Netzwerk erreichbar ist.
lauscht denn der Apache auf 0.0.0.0 oder auf 127.0.0.1?
 
Grundsätzlich gibr es mehrere Parameter, die stimmen müssen.

- die Firewall muss den eingehenden Port erlauben
- die Firewall muss Verbindungen von der Quell-IP erlauben
- der Dienst muss auf der angesprochenen Ziel-IP hören
- der Dienst muss Verbindungen von der Quell-IP erlauben

Mit netstat kannst du prüfen auf welcher IP der Port vom Dienst belegt wurde, zB 0.0.0.0 für alle IPs der lokalen Schnittstellen.

Ich persönlich würde im übrigen den Dienst nach Möglichkeit immer auf Standardport laufen lassen und die Portumsetzung in der Portweiterleitung handhaben.


*edit:
Hmm.. Du schreibst was von einer Portweiterleitung 443->8082, willst es lokal aber mit http://.. testen. Versuch mal https://
 
liest hier irgendwer mehr als die Überschrift??

- die Firewall ist aus
- der Dienst ist sowohl über localhost als auch aus dem internet (und jedem rechner im lan) über den reverse proxy erreichbar
- der Dienst ist aber nicht direkt aus dem lan (weder über ip noch über namen) erreichbar (nochmal windows firewall ist aus)
 
dermoritz schrieb:
liest hier irgendwer mehr als die Überschrift??

Du machst es mit deinem "Dienst" und "reverse proxy " aber auch unnötig kompliziert.

Dein "Apache-Reverse-Proxy" interessiert doch überhaupt nicht. Wenn ich es richtig verstanden habe, reagiert dein bislang nicht näher genannter "Dienst" nur auf Abfragen von Localhost, statt auf "*". Ob das wirklich so ist, kannst du mit netstat prüfen, wie es dir bereits gesagt wurde.
Wenn das der Fall ist, musst du wohl deinen Dienst selbst ändern. Und keine Blockade von Windows suchen.
 
den dienst hab ich selber programmiert (java, camel), er läuft seit Jahren. ich habe nun einerseits eine Persistenzschicht hinzugefügt (wahrscheinlich nicht relevant). andererseits hab ich auch einige Bibliotheken aktualisiert - keine Ahnung ob es das grundlegende Verhalten des Dienstes ändern kann. (Anfragen von * zu blocken) - ausschließen kann ich es nicht.
Danke für den Hinweis zu netstat - genau nach solchen Ideen hab ich gesucht.
 
dermoritz schrieb:
liest hier irgendwer mehr als die Überschrift??
Ja, und trotzdem wiedeholt man, fasst zusammen, etc. Wenn du selbst schon alles ausschließt und abblockst, brauchst du das Forum ja scheinbar nicht?

Du solltest auch mal zur Sicherheit WireShark laufen lassen, um zu sehen ob überhaupt Daten reinkommen. Am Ende suchst du dich nach einer Blockade am Server tot, obwohl vom Client gar keine Verbindung reinkommt.
 
Also netstat hat nichts sinvolles ausgegeben der port 8082 kam nicht vor. aber im resourcenmonitor (netzwerk/überwachungsports) sieht man es:
1542057050411.png


leider hilft das gar nicht. wenn noch jemand eine idee hat, her damit. ich schaue mal weiter. vielleicht drehe ich mal das log hoch.
Ich habe aber nun bemerkt, dass ich den Dienst tatsächlich von dem server nur über localhost bzw 127.0.0.1 erreichen kann aber nicht <eigene ip>:8082

So hab mal netstat anders aufgerufen:
TCP 127.0.0.1:8082 0.0.0.0:0 ABHÖREN 7608

andererseits apache hat zwei einträge:
TCP 0.0.0.0:80 0.0.0.0:0 ABHÖREN 3372
TCP [::]:80 [::]:0 ABHÖREN 3372

letzterer ist glaube ip v6, keine Ahnung ob das ein Problem ist?!
ich glaube die ip adresse ist das Problem. also 127.0.0.1 anstatt 0.0.0.0 (alle)
 
Zuletzt bearbeitet:
Ganz genau. Wenn der Dienst nur auf 127.0.0.1:8082 hört, reagiert er nicht auf IP:8082. Es wird also sogesehen nix geblockt, sondern das Betriebssystem sagt "kein Anschluss unter dieser Nummer", weil kein Dienst auf IP:8082 bzw. eben 0.0.0.0:8082 läuft. Deine Applikation muss den Port daher explizit für eine lokale IP oder für alle lokalen IPs anfordern.

Übrigens: Natürlich muss man netstat mit den richtigen Parametern aufrufen. Ohne werden die zZt aktiven Verbindungen angezeigt. Ich bin aber momentan beruflich unterwegs und kann nur am Handy antworten, daher hatte ich mir den kompletten Aufruf gespart, Asche auf mein Haupt ;-)
 
Zuletzt bearbeitet:
ja die hinweise hier haben mir geholfen wie gesagt. nur weiß ich nicht was ich dagegen tun kann im moment. aber ich weiß wo ich nach einer lösung suchen muss

danke
 
So sähe das in C# bzw. .Net aus:

Code:
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];

IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 8082);  // bindet auf eine lokale IP
// oder
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 8082);  // bindet auf alle lokalen IPs

Socket listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(localEndPoint);  // registriert  IP:Port beim OS
listener.Listen(100);

Wie das nu konkret bei Java aussieht, kann ich nicht genau sagen, weil ich kein Java programmiere.
Ergänzung ()

So, bei Java läuft das scheinbar über ein Objekt vom Typ ServerSocket. Meine kurze Recherche ergab, dass du wohl nicht der einzige bist, dessen Dienst fälschlicherweise auf 127.0.0.1 hört. ServerSocket hat mehrere Konstruktoren, mit und ohne IP. "Normalerweise" sollte das System eigentlich implizit 0.0.0.0 nehmen, wenn man nicht explizit etwas anderes angibt. Wenn sich nu der Konstruktor ohne IP die falsche IP herauspickt - zB 127.0.0.1 - dann muss man ihm eben explizit eine IP mitgeben. Da es in Java scheinbar keine Konstante wie bei .Net gibt (IPAddress.Any), muss man sich wohl folgenden workarounds bedienen:

Code:
InetAddress ipAny = new InetSocketAddress(0).getAddress();
// ServerSocket (int port, int backlog, InetAddress bindAddr) 
ServerSocket s = new ServerSocket(8082, 100, ipAny) ;

Wenn du damit nicht weiterkommst, musst du den fraglichen Abschnitt aus deinem Code posten. Evtl steckt der Teufel ja im Detail.
 
Zuletzt bearbeitet:
Zurück
Oben