SSHリモートポート転送トンネルを介してリモートIPアドレスを取得するには?

SSHリモートポート転送トンネルを介してリモートIPアドレスを取得するには?

NATの背後でテストサーバーを運営しています。以下のように、2222他の認定IPサーバー(example.com)のリモートポートを22NATの後ろのサーバーポート()に転送してくれました。localhost

autossh -f -N -i /root/.ssh/id_rsa -R 2222:localhost:22 [email protected]

sshNATの背後にあるローカルサーバーは、::1クライアントの実際のIPアドレスに関係なく、すべてのクライアントのIPアドレスのみを取得します。

winの出力はlocalhost次のようになります。

 22:27:37 up  8:03,  2 users,  load average: 0.03, 0.03, 0.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user tty7     :0               14:24    8:03m  1.27s  0.33s /usr/bin/lxsession -s LXDE-pi -e LXDE
user pts/0    ::1              22:27    1.00s  0.34s  0.03s w

/var/log/auth.loglocalhostこのような記事があります。

Feb 28 22:27:32 localhost sshd[5201]: Accepted password for user from ::1 port 55168 ssh2

fail2banスパムIPアドレスをブロックするためにファイアウォールを実行したいと思いますcsf。だから、クライアントの実際のIPアドレスが欲しいです。どうすればいいですか?iptables NATルールを書き換えるのは役に立ちますか?

答え1

これSSHプロトコルメッセージTCP転送セッションを開くために使用されるIPアドレスとポートには、転送ポートに接続するクライアントが含まれます。 OpenSSHsshユーティリティは情報のみを記録し、他の操作は実行しません。

$ ssh -v -R 2048:localhost:22 localhost
...
debug1: client_request_forwarded_tcpip: listen localhost port 2048, originator ::1 port 49341
                                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^

この情報を活用して役に立つタスクを実行するには、次のいずれかを実行する必要があります。

  • デバッグモードで実行し、ssh関連するデバッグ出力をキャプチャして解析します。
  • 調整ssh情報を記録したり、必要な操作を行うユーティリティです。
  • 別のSSHクライアントを使用するか、自分で作成してください。ほとんどの最新のプログラミング言語用のSSHライブラリがあります。

関連情報