我sshd: Listen 2222
在服务器上有,我想要做的是:
ssh -p 2222 userA@ip
,服务器找到userA
,然后将此连接重定向6122
到此服务器的端口,但我不想在本地机器上进行修改,因为有数百个用户,所有这些用户都有自己的 docker 容器,例如,对于用户userA
,我sshd
在其容器上运行,并将22
端口暴露给6122
主机的端口。所以我想使用iptables
或其他方式转发Host:2222
到Container:6122
。
我尝试过如下命令:
iptables -t nat -A userA_rules -p tcp --dport 2222 -j REDIRECT --to-port 6122
iptables -A OUTPUT -m owner --uid-owner userA -j userA_rules
但它不起作用。我是新手iptables
,所以我不知道哪里出了问题。我也尝试过修改/etc/ssh/sshd_config
以使用Match User userA
块,但我也失败了。任何建议都将不胜感激。
答案1
iptables 所有者模块仅适用于生成数据包的机器上的本地生成的数据包,而不是远程服务器上的数据包。
https://manpages.ubuntu.com/manpages/focal/en/man8/iptables-extensions.8.html
owner
This module attempts to match various characteristics of the packet creator, for locally
generated packets. This match is only valid in the OUTPUT and POSTROUTING chains.
Forwarded packets do not have any socket associated with them. Packets from kernel threads
do have a socket, but usually no owner.
但是该 UID/GID 在服务器外部不可用。
Iptables 适用于 TCP/IP 网络数据包。数据包具有目标 IP 目标端口、源 IP 和源端口,但没有属性表明:它们是由freshzy
源计算机上的用户或 UID #123 生成的。因此,远程服务器上的 iptables 根本没有信息来执行您希望它执行的操作;为远程计算机上的一位用户创建规则。