Как перенаправить порт ssh на другой порт по имени пользователя?

Как перенаправить порт ssh на другой порт по имени пользователя?

У меня есть 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, порт источника и порт источника, но нет свойства, которое говорит: они были сгенерированы пользователем freshzyили UID #123 на исходной машине. Поэтому iptables на удаленном сервере просто не имеет информации, чтобы сделать то, что вы хотите, чтобы он сделал; создать правило для одного пользователя с удаленной машины.

Связанный контент