사용자 이름으로 SSH 포트를 다른 포트로 리디렉션하는 방법은 무엇입니까?

사용자 이름으로 SSH 포트를 다른 포트로 리디렉션하는 방법은 무엇입니까?

나는 sshd: Listen 2222서버에 있고 내가 하고 싶은 것은 다음과 같습니다: ssh -p 2222 userA@ip, 서버가 찾은 userA다음 이 연결을 이 서버의 포트로 리디렉션 6122하지만 수백 명의 사용자가 있기 때문에 로컬 컴퓨터에서 수정하고 싶지 않습니다. 사용자는 자신의 도커 컨테이너를 가지고 있습니다. 예를 들어 user의 경우 해당 컨테이너에서 userA실행하고 포트를 호스트 포트에 노출합니다. 그래서 으로 전달하는 데 또는 다른 방법을 사용하고 싶습니다 .sshd226122iptablesHost: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/focus/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에는 사용자가 원하는 작업을 수행하기 위한 정보가 없습니다. 원격 시스템에서 한 사용자에 대한 규칙을 만듭니다.

관련 정보