web-dev-qa-db-ja.com

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

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

# pfctl -ef /etc/pf.anchors/com.Appleを実行した後、何も起こりません。 /etc/pf.anchors/910.Customにガベージを追加した場合、またはrdrルールの後にuser theuserをあえて追加した場合でも、ファイアウォールは構文の誤りについて適切に文句を言います。

OS XカーネルはNATルーティングをもう実行できますか、それともAppleはその機能を無効にしましたか?可能であれば、何かが足りませんか?

LE。修正されたiptables構文

5
foxx1337

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

順序は必然的に次のようになります。rdrスタッフ、次にフィルタースタッフ(パスなど)ですが、時系列で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
9
Dan