web-dev-qa-db-ja.com

iptablesを使用してプロキシ経由の透過的なHTTP / Sリダイレクトを有効にする方法は?

私の現在のセットアップは、次の要素で構成されています。

  • 2つのインターフェイスを持つOpenWRTでフラッシュされたルーター:eth0はゲートウェイへのアクセスであり、eth1はローカルネットワーク(192.128.2.0/24)を管理します
  • DMZ(192.168.1.0/24)でルーターを許可するように設定されたボックス(ブリッジモードでは使用できません)
  • ルーター上で稼働し、ポート4000でリッスンするプライベートサーバー(インターフェイスeth1

HTTPおよびHTTPSプロキシとして192.168.2.1:4000を使用するようにeth1のクライアントを設定すると、すべてうまくいきます。しかし、iptablesを使用してこのリダイレクトプロセスを自動化しようとする私の試みは、これまですべて失敗しています。これが私が行った最後の試みです:

iptables -t mangle -A PREROUTING -i eth1 -p tcp -m multiport --dport 80,443 -j TPROXY --on-ip 0.0.0.0 --on-port 4000 --tproxy-mark 1/1
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A PREROUTING -i eth0 -d 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A PREROUTING -i eth0 -m multiport --sport 80,443 -j MARK --set-mark 1/1

私の理解は次のとおりです。

  1. 最初のルールは、ローカルクライアントからのHTTP/S(dport = 80または443)パケットをマークし、プロキシサーバーにリダイレクトします
  2. 2番目と3番目のルールは、2つのローカルネットワーク間のローカルトラフィックを許可します
  3. 最後のルールは、残りの着信トラフィックをマーク1/1でマークします

次に、ipを使用して、iptablesで設定したマークに基づいて、ポリシールーティングのルートを定義しました。

ip rule add fwmark 1/1 table 1
ip route add local 0.0.0.0/0 dev lo table 1

そしてもちろん、それは機能せず、理由もわかりません...多分私のプロキシサーバーはTPROXY機能をサポートしていないので、MARKルールのみを使用する必要があります。 。しかし、それでも私はここで少し迷っています。

2
Rerito

まず最初に、こちらをご覧ください。 インターセプトキャッシングの概念 透過プロキシを使用することの利点、欠点、または起こり得る問題についてのアイデアがあります。

次に、HTTPSまたはsslトラフィックは、通常の透過プロキシでは機能しません。 ssl-bump と呼ばれる特別な設定が必要です。これには、プライバシーに関して考慮すべき独自の問題があります。

第三、

  • イカがトランスペアレント/インターセプトモード用に正しく設定されている場合(ポート3128で実行)、および
  • eth0を外部およびeth1を内部(lan、192.168.1.0/24)インターフェースと仮定して、httpトラフィックをリダイレクトするための2つのサンプルiptablesルールを次に示します。

    iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

これには、Tproxyを使用しません。

3
Diamond