初版: 2010-01-29
最終更新日:
2010-01-17
+---------+ +-----------+ +---------+ |(A)client|----|(B)Dual NIC|----|(C)server| +---------+ +-----------+ +---------+で、(A)→(C)に向かうパケットを(B)で横取りして (B)をプロキシに使えないかなぁ…と考えたのが発端です(2008年末ごろ)。
え、それってMan-in-the-middle攻撃ちゃうのか? という声もあるかもしれませんが。
実際にはsquidによるインライン透過キャッシュみたいなことを HTTP(80/tcp) 以外でも簡単にできないものかなぁと。
目標は、(C)でtelnetd(8)が動いていて、 この状態で(A)から(C)にtelnetをかけたら応答するのは(B)としました。
+---------+ |(A)client| +---------+ | 192.168.1.2 | | [udav0] not assinged +-----------+ |(B)Dual NIC| +-----------+ | [rl0] 192.168.1.3 | | 192.168.1.1 +---------+ |(C)server| +---------+
ifconfig_rl0="inet 192.168.1.3 netmask 255.255.255.0" ifconfig_udav0="up" cloned_interfaces="bridge0" ifconfig_bridge0="addm rl0 addm udav0 up"この状態では、(B)は単なるブリッジとして動作し、 (A)→(C)、(C)→(A)にはそのままパケットが流れます。
right_if="rl0" left_if="udav0" no rdr on lo0 from any to any rdr on $left_if proto tcp from any to any port 23 -> ($right_if) port 23 pass in all pass out allと設定し、/etc/rc.confでpfを有効にする
pf_enable="YES" pflog_enable="YES"と、なぜか(B)が応答するようになりました。