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 下,似乎有 2 種方法 - ipfw 和 pf。兩者都不起作用。 IP位址:

# 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內容,然後過濾內容(例如通過),但按時間順序,第二條規則將首先命中(on $Out),然後激活第一條規則(on 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

相關內容