Kann ich mit nc und / oder stunnel einen transparenten SSL-Proxy so erstellen, dass ich den ausgehenden Quellport angeben kann?

2042
Joseph Weissman

Ich habe ein bisschen mit verschiedenen Variationen herumgespielt und kann anscheinend nichts finden, was gut funktioniert.

Ich möchte eine SSL-Verbindung über einen bestimmten Gateway-Knoten im Netzwerk "überbrücken" können. Insbesondere möchte ich den ausgehenden Quellport für die TCP-Verbindung weiter steuern können.

Ich kann stunnel für einen Teil davon verwenden, um die SSL-Verbindung zu überbrücken. Ich weiß, dass ich ncden Quellport für eine Verbindung festlegen kann. Wie kann ich diese beiden jedoch verbinden, um den Quellport für die ausgehende Verbindung anzugeben? (Oder gibt es hier eine alternative Lösung, über die ich nachdenken sollte?)


Ich denke, wenn ich ncals transparenter Proxy arbeiten kann, wird dies in Ordnung sein, da ich den Quellport damit einstellen kann. Ich habe das Gefühl, dass mir etwas an der Funktionsweise fehlt nc. Um nur etwas mehr Kontext zu bieten, versuche ich hier folgendes. Angenommen, ich habe einen SSL-Server, der lokal auf 1235 ausgeführt wird. Ich möchte eine Verbindung mit einem SSL-Client herstellen, aber ich möchte sicherstellen, dass mein ausgehender Quellport für die Verbindung immer 1234 ist. Ich kann mich direkt mit verbinden der Client, aber ich habe einen beliebigen Port mit hoher Nummer, ich muss ihn angeben können.)

Mein Gedanke versuchte nchier als Brücke zu dienen, mit etwas wie:

# nc -l localhost:1234 | nc localhost:1235 

Dies stellt definitiv Proxies etwas - ich sehe den Datenverkehr zwischen den richtigen Endpunkte fließt - aber es scheint nicht zu den SSL sehr gut, überhaupt zu behandeln. Die sichere Verbindung wird nicht hergestellt und ich kann nicht wirklich mit den beiden Clients über den OpenSl-Client / Server kommunizieren.

Was muss ich tun, damit das funktioniert? Ich werde versuchen herauszufinden, ob Stunnel mir hier helfen kann; Ich dachte, zwischen den beiden könnte ich das vielleicht schaffen.


Okay, ich habe mit socatein bisschen gespielt, was die Verbindung zu überbrücken scheint - aber ich kann nicht herausfinden, wie ich den Quellport spezifizieren soll. Irgendwelche Gedanken?

0
Ein transparenter Proxy bietet Proxying, ohne dass die Proxy-Einstellungen im Client festgelegt werden müssen. Wollen Sie das auch - Sie berühren es in der Beschreibung nicht. Paul vor 12 Jahren 1
Ich muss fragen * Warum * ist die Angabe des Quellports erforderlich? Dies ist äußerst ungewöhnlich für TCP-Verbindungen, insbesondere wenn der angeforderte Port "willkürlich" ist. Wenn dies für eine Firewall erforderlich ist, sollte diese Firewall verworfen werden. grawity vor 12 Jahren 0

1 Antwort auf die Frage

1
grawity

Pipes used by | are one-way. When you run nc | nc, the second connection's output goes to your terminal; the first connection's input is read from your keyboard. Basically, the full form of it would be </dev/tty nc | nc >/dev/tty.

To create a bidirectional tunnel, you would have to use something else, such as...

socat tcp-l:localhost:1234 tcp:localhost:1235 

(Or create a named pipe and use it with two nc's, but that's less efficient.)


However, that will not do what you want. It will not make 1234 become the source port of the second connection; you will only have it as the destination port of the first connection, and the two connections are unrelated: stunnel simply receives bytes from both connections and resends them to the opposite end.

If you want simply to specify the source port of a connection, it's simpler:

nc -l 56789 localhost 1235 socat stdio tcp:localhost:1235,sourceport=56789 

Since stunnel does not have a "local port" option, you can take one of the above commands and use it in the exec= option.