如何通过 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]

ssh现在, NAT 后面的本地服务器仅获取::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防火墙csf来阻止垃圾邮件IP地址。所以,我想要客户端的实际 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 库。

相关内容