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 theuser
rdr
OS X カーネルは NAT ルーティングを実行できるようになりましたか、それとも Apple がその機能を削除したのでしょうか? できる場合、私が何か見逃している点はありますか?
LE. 固定iptables
構文
答え1
PF でも同様に実行できます。ただし、rdr
着信パケットのみを受け入れます。したがって、最初にそれらのパケットを lo0 にルーティングし、次にrdr
そこに -rule を追加して (「どこか」からルーティングされるので、それらをキャッチします)、ローカル SSH サーバーに送信する必要があります。
順序は必然的に、rdr
stuff、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