
Ich habe sshd: Listen 2222
auf einem Server und möchte Folgendes tun:
ssh -p 2222 userA@ip
Der Server findet userA
und leitet diese Verbindung dann an 6122
den Port dieses Servers um. Ich möchte dies jedoch auf meinem lokalen Computer nicht ändern, da es dort Hunderte von Benutzern gibt und alle diese Benutzer ihre eigenen Docker-Container haben. Für den Benutzer userA
führe ich beispielsweise sshd
seinen Container aus und lege 22
den Port dem 6122
Port des Hosts frei. Daher möchte ich iptables
oder andere Möglichkeiten zur Weiterleitung Host:2222
an verwenden Container:6122
.
Ich habe Befehle wie die folgenden ausprobiert:
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
Aber es funktioniert nicht. Ich bin neu bei iptables
, also bin ich mir nicht sicher, wo der Fehler liegt. Ich habe auch versucht, es so zu ändern, /etc/ssh/sshd_config
dass es Block verwendet Match User userA
, aber auch das hat nicht geklappt. Ich bin für alle Vorschläge dankbar.
Antwort1
Das iptables-Eigentümermodul funktioniert nur mit lokal generierten Paketen auf dem Computer, auf dem die Pakete generiert werden, nicht auf einem Remote-Server.
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.
Aber diese UID/GID ist außerhalb des Servers nicht verfügbar.
Iptables arbeitet mit TCP/IP-Netzwerkpaketen. Pakete haben eine Ziel-IP, einen Zielport, eine Quell-IP und einen Quellport, aber keine Eigenschaft, die besagt: Sie wurden vom Benutzer freshzy
oder von UID #123 auf der Quellmaschine generiert. Daher verfügt iptables auf dem Remote-Server einfach nicht über die Informationen, um das zu tun, was Sie möchten: eine Regel für einen Benutzer von einer Remote-Maschine aus zu erstellen.