OS X 10.8:将本地发起的 ssh 连接重定向到 localhost:22

OS X 10.8:将本地发起的 ssh 连接重定向到 localhost:22

我需要破解 OS X pf,以便将用户的所有 ssh 连接重定向到此计算机。我希望在执行以下操作时

$ ssh google.com

获得与以下相同的结果

$ ssh localhost

即与我本地运行的 sshd 的连接。

在最新的 Linux 下,这将只是:

# iptables -t nat -A OUTPUT -p tcp --dport 22 -m owner --uid-owner theuser -j REDIRECT

在 OS X 10.8 下,似乎有两种方法 - ipfw 和 pf。两种方法都不起作用。Ipfw:

# ipfw flush
# ipfw add 50 fwd 127.0.0.1,22 tcp from any to any 22 uid theuser

如果我删除该uid theuser部分,重定向会起作用,但用户操作除外。如果我将uid指令留在那里,网络堆栈会死机,系统很快就会变得不可用;不再ipfw,不再ps,不再kill

根据手册页,ipfw 已被弃用,因此应使用数据包过滤器:

# sysctl -w net.inet.ip.forwarding=1

然后我补充说

anchor "910.Custom/*"
load anchor "910.Custom" from "/etc/pf.anchors/910.Custom"

/etc/pf.anchors/com.apple

rdr on en1 proto TCP from any to any port 22 -> 127.0.0.1 port 22

/etc/pf.anchors/910.Custom(请注意,我在这里没有提到有关用户的任何信息,因为 pf 文档没有列出 rdr 规则的此类选项)。

运行后# pfctl -ef /etc/pf.anchors/com.apple什么都没发生。如果我在规则中添加垃圾/etc/pf.anchors/910.Custom,甚至胆敢在规则user theuser后添加垃圾rdr,防火墙就会断断续续地抱怨语法错误。

OS X 内核还能执行 NAT 路由吗?还是 Apple 已经取消了该功能?如果可以,我是否遗漏了什么?

LE. 固定iptables语法

答案1

您也可以使用 PF 来实现。但是,rdr它只接受传入数据包。因此,您必须首先将这些数据包路由到 lo0,然后rdr在那里添加一个 -rule(它将捕获它们,因为它们将从“某处”路由进来),以将它们发送到您的本地 SSH 服务器。

顺序必然是:rdr东西,然后过滤东西(如通过),但按时间顺序,第二条规则将首先命中(在$Out),然后将激活第一条规则(在lo0)。

# Output interface
Out = en0

# A macro to shorten rules below
Packets = "proto tcp from" $Out "to any port 22"

# Rule 1: Redirect those connections _after_ they were routed to lo0 below
rdr pass log on lo0 $Packets -> 127.0.0.1

# Rule 2: Route _first_ new IPv4 TCP connections leaving $Out to lo0
pass out on $Out route-to lo0 inet $Packets

相关内容