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 の 2 つの方法があるようです。どちらも機能しません。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

(pf ドキュメントには rdr ルールのそのようなオプションがリストされていないため、ここ/etc/pf.anchors/910.Customではユーザーについて何も言及していないことに注意してください)。

実行後、# pfctl -ef /etc/pf.anchors/com.apple何も起こりません。ルールにゴミを追加したり、ルールの後に/etc/pf.anchors/910.Custom敢えて追加したりすると、ファイアウォールは構文が間違っていると断続的に警告します。user theuserrdr

OS X カーネルは NAT ルーティングを実行できるようになりましたか、それとも Apple がその機能を削除したのでしょうか? できる場合、私が何か見逃している点はありますか?

LE. 固定iptables構文

答え1

PF でも同様に実行できます。ただし、rdr着信パケットのみを受け入れます。したがって、最初にそれらのパケットを lo0 にルーティングし、次にrdrそこに -rule を追加して (「どこか」からルーティングされるので、それらをキャッチします)、ローカル SSH サーバーに送信する必要があります。

順序は必然的に、rdrstuff、filter stuff(pass など)となりますが、時系列的には 2 番目のルールが最初にヒットし($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

関連情報