
Eu tenho sshd: Listen 2222
no servidor, e o que eu quero fazer é:
ssh -p 2222 userA@ip
, e o servidor encontra userA
, então redireciona essa conexão para 6122
a porta deste servidor, mas não quero modificar na minha máquina local, pois existem centenas de usuários, todos esses os usuários têm seu próprio contêiner docker, por exemplo, para user userA
, eu executo sshd
em seu contêiner e exponho 22
a porta à 6122
porta do host. Então, eu quero usar iptables
ou outras maneiras de encaminhar Host:2222
para Container:6122
.
Eu tentei comandos como abaixo:
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
Mas não funciona. Sou novo em iptables
, então não tenho certeza de onde estou errado. Também tentei modificar /etc/ssh/sshd_config
para usar Match User userA
o bloco, mas também falhei. Qualquer sugestão seria apreciada.
Responder1
O módulo proprietário do iptables funciona apenas em pacotes gerados localmente na máquina onde os pacotes são gerados e não em um servidor remoto.
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.
Mas esse UID/GID não está disponível fora do servidor.
Iptables funciona em pacotes de rede TCP/IP. Os pacotes têm um IP de destino, porta de destino, IP de origem e porta de origem, mas nenhuma propriedade que diga: eles foram gerados pelo usuário freshzy
ou UID #123 na máquina de origem. Portanto, o iptables no servidor remoto simplesmente não possui as informações para fazer o que você deseja; crie uma regra para um usuário de uma máquina remota.