
サーバーにがあり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 には、リモート マシンから 1 人のユーザーに対してルールを作成するという、必要な操作を実行するための情報がありません。