ユーザー名で SSH ポートを別のポートにリダイレクトするにはどうすればよいですか?

ユーザー名で SSH ポートを別のポートにリダイレクトするにはどうすればよいですか?

サーバーにがありsshd: Listen 2222、実行したいのは次のようになります。 ssh -p 2222 userA@ip、サーバーは を見つけてuserA、これを6122このサーバーのポートへの接続にリダイレクトしますが、何百人ものユーザーがいて、これらのユーザー全員が独自の Docker コンテナーを持っているため、ローカル マシン上で変更したくありません。たとえば、ユーザー の場合userA、そのコンテナーで を実行しsshd22ポートをホストのポートに公開します。そのため、または他の方法を使用して に転送し6122たいと思います。iptablesHost:2222Container: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 には、リモート マシンから 1 人のユーザーに対してルールを作成するという、必要な操作を実行するための情報がありません。

関連情報