我正在 NAT 后面运行测试服务器。我已将远程端口2222
从另一个公共 IP 服务器 ( example.com
) 转发到22
NAT 后面的服务器端口 ( localhost
),如下所示。
autossh -f -N -i /root/.ssh/id_rsa -R 2222:localhost:22 [email protected]
ssh
现在, NAT 后面的本地服务器仅获取::1
所有客户端的 IP 地址,而不考虑客户端的实际 IP 地址。
w
in的输出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.log
有localhost
这样的条目
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 库。