Linuxルーターで透過プロキシを構成してみた

前回まででDMZを構築し、内部セグメントとの間にLinuxルーター(兼F/W)を挟むことができたため、その流れで透過プロキシを構成してみた。

透過プロキシは、80番ポートへの接続をルーターでNATし、プロキシ経由で接続を行う方式である。PC側での設定が不要なため、キャッシングや、URL書き換えなど、フォワードプロキシの機能をPCの設定無しで使いたいときに便利な構成である。。

ネットワーク構成図はこちらを参照。。
http://d.hatena.ne.jp/aaabbb_200904/20100127/1264609527
透過プロキシのプロキシサーバーは br0x251につなぎ、NAT用のルーターとしてfedora-virt5を使用している。(端末はbr0x11に直つなぎ)

透過プロキシの構成方法はこの辺を参照。<<ルーター側>>
http://www.atmarkit.co.jp/flinux/rensai/iptables02/iptables02e.html
<>
http://suzuka.turbolinux.co.jp/products/server/11s/user_guide/squidiptables.html

上記のリンク先ではiptablesのルールとして、DNAT以外に、戻りパケット向けのSNATも行っているが、上記のDMZにプロキシサーバーを置く構成では、次の1行だけで構成できた。(構成図でbr0x11にプロキシサーバーをつなぐ場合には、SNATも必要と思われる。。 )

# iptables -t nat -A PREROUTING -i eth0+ -p tcp --dport 80 -j DNAT --to 192.168.251.136:3128

なお、192.168.251.136がプロキシサーバーのIPアドレスとなる。

squid側では/etc/squid/squid.confで、次の書き換えを行う必要がある。(2.5, 系列と2.6, 3.0 系列で設定方法が違うらしいので注意。 筆者は3.0系列で試した。)

 > http_port 3128
 < http_port 3128 transparent

この構成で、br0x11の端末から、プロキシ設定無しで外部サイトが閲覧できることを確認できた。

なお、透過プロキシは色々と便利そうなのだが、
1. プロキシ認証に対応しない
2. HTTPSに対応しない
などの制限があるので、実際には使う場合は注意が必要そうだ。。 orz HTTPSSSLのman-in-the-middleの制限にかかるらしく、透過プロキシと連携するのは困難らしい。実際にこの構成を使うときには、確実に要件を確認する必要がありそうだ。。