
Tengo sshd: Listen 2222
en el servidor, y lo que quiero hacer es:
ssh -p 2222 userA@ip
y el servidor encuentra userA
, luego redirige esta conexión al 6122
puerto de este servidor, pero no quiero modificar en mi máquina local, porque hay cientos de usuarios, todos estos los usuarios tienen su propio contenedor acoplable, por ejemplo, para el usuario userA
, lo ejecuto sshd
en su contenedor y expongo 22
el puerto al 6122
puerto del host. Por eso quiero usar iptables
u otras formas de reenviar Host:2222
a Container:6122
.
He probado comandos como los siguientes:
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
Pero no funciona. Soy nuevo en iptables
, así que no estoy seguro de dónde me equivoqué. También intenté modificar /etc/ssh/sshd_config
para usar Match User userA
el bloque, pero tampoco fallé. Cualquier sugerencia sera apreciada.
Respuesta1
El módulo propietario de iptables solo funciona con paquetes generados localmente en la máquina donde los paquetes se generan, no en un 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.
Pero ese UID/GID no está disponible fuera del servidor.
Iptables funciona con paquetes de red TCP/IP. Los paquetes tienen una IP de destino, un puerto de destino, una IP de origen y un puerto de origen, pero ninguna propiedad que diga: fueron generados por el usuario freshzy
o el UID n.º 123 en la máquina de origen. Por lo tanto, iptables en el servidor remoto simplemente no tiene la información para hacer lo que usted quiere que haga; cree una regla para un usuario desde una máquina remota.