質問: iptablesを使用して特定のipからのweb接続だけをリバースプロキシの待ち受けポートへポートフォワードしたいのですが うまく動作してくれません。 【構成】 ubuntu16.04を使用しています。 NW構成 Client A ------- vyOS -------- ルーター ---- インターネット Server A Server B 各ネットワーク設定 Client A 192.168.0.1 vyOS 192.168.0.254 Server A 192.168.0.2 Server B 192.168.0.3 ルーター 172.16.1.254 【前提】 上記のような構成のネットワークを作り、ClientA、ServerA、ServerBからソフトウェアルーターであるvyOSを抜けてルーター⇒インターネットへ 通信ができています。またServer Aはnginxでリバースプロキシのフロントエンドとして、Server BにはそのバックエンドとしてWebサーバーが 稼働している状態です。 透過プロキシーを実装するため、Client AからvyOSを抜ける際に、vyOSのPolicyでClient AのipのみServer Aへパケットを転送するように 設定しており、他のPCからはそのままインターネットへ抜けられるようになっています。 Server AではSquidを稼働させ、8080でプロキシーの待ち受けができています。(8080をクライアントから指定してインターネットへ出ることが可能) 【問題】 下記の設定を Server Aに設定し、vyOSから転送されてきたパケットのうち、80番ポート宛ての通信を8080番へポートフォワードしたいのですが、 下記の通り送信元のipアドレスを指定しても、すべての80番ポート向けの通信が8080へ転送されてしまい、リバースプロキシも正常に動作しなくなります。 透過プロキシ用の設定 iptables -t nat -A PREROUTING -s 192.168.0.1/32 -p tcp --dport 80 -j DNAT --to 192.168.0.2:8080 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 正しい構文をご存知の方、ご教示お願い致します。
回答: まず、透過プロキシーということですので、squid の 8080 番ポートとは別のポートを用意する必要があります。 ``` (squid.conf 抜粋) http_port 8080 # 通常のフォワードプロキシー用 http_port 8081 intercept # 透過プロキシー用 ``` 次に ClientA ->(vyOS)-> ServerA のパケット(src 192.168.0.1:任意, dst 任意:80)を 8081 番ポートに REDIRECT します。 ``` iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.0.1/32 --dport 80 -j REDIRECT --to-port 8081 ```