6

I have an Apache webserver running on a local machine through reverse ssh tunnel, i.e.:

ssh -R *:80:local_machine:8080 username@gateway_machine

In other words, all traffic from port 80 on gateway_machine is sent to port 8080 on local_machine.

For monitoring purposes, I wish to know IP addresses of the remote clients connected to gateway_machine. However my local Apache server sees all traffic coming from the IP address of gateway_machine.

My question: Is there any way to setup ssh server running on gateway_machine such that it sends all traffic to local_machine with actual remote IP addresses ?

4

1 に答える 1

2

SSH プロトコルは、TCP 接続の転送に「direct-tcpip」と呼ばれるチャネル タイプを使用します。これらのチャネルの 1 つを開くためのプロトコル メッセージには、接続が転送されるクライアントのアドレスとポートが含まれます。したがって、必要な情報はsshクライアントで利用できます(この場合、転送のターゲットへの接続を開いています)。

OpenSSHクライアントは発信元のアドレスとポートをデバッグ レベル メッセージに記録するため、次のオプションsshを指定して ssh を実行すると確認できます。-v

$ ssh -v -R 2000:localhost:1000 localhost
...
debug1: client_request_forwarded_tcpip: listen localhost port 2000, originator ::1 port 51101

ここで、オリジネーター アドレスは ::1 (IPv6 localhost) で、ポートは 51101 でした。sshユーティリティはこの情報に対して他に何もしません。

したがって、ニーズに応じて、この情報を収集する 3 つの方法があります。

  1. sshこれらの転送を作成するプロセスをオプションで呼び出し、-v関連するデバッグ情報を収集して解析するように手配します。
  2. ソースコードに変更を加えてssh、情報を使ってやりたいことができるようにします。
  3. 必要なことを行う独自の ssh クライアントを作成します。SSH クライアント ライブラリは、ほとんどの最新のプログラミング言語で利用できます。
于 2017-12-02T14:47:17.770 に答える