我的理解是,当创建到远程计算机的 ssh 隧道时,该计算机上的端口将打开,任何人都可以使用并连接回我的本地计算机(而不仅仅是打开隧道的用户)。有没有办法将对远程计算机上打开的端口的访问限制为指定的 unix 组?我认为这可能可以通过 iptables 规则或其他 TCP/IP 端口限制来实现,但我并不完全确定。
谢谢
答案1
您可以使用 iptablesowner
模块来匹配原始套接字的 UID 或 GID,但这仅适用于本地发起的数据包(即来自远程机器)。
% ssh -fNR 20022:localhost:22 localhost
% sudo iptables --append OUTPUT --destination 127.0.0.1 --protocol tcp --dport 20022 --match owner \! --uid-owner mgorven --jump REJECT
% sudo iptables -nvL OUTPUT
Chain OUTPUT (policy ACCEPT 40 packets, 6349 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT tcp -- * * 0.0.0.0/0 127.0.0.1 tcp dpt:20022 ! owner UID match 1000 reject-with icmp-port-unreachable
% telnet 127.0.0.1 20022
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
^]
telnet> Connection closed.
% sudo telnet 127.0.0.1 20022
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused