web-dev-qa-db-ja.com

LANホストにプロキシを通過させる

Debianサーバー上にIPTablesファイアウォールがあり、その背後にマスカレードを備えた多数のホストがあります。アップストリームネットワークでは、インターネットに直接アクセスできないため、プロキシサーバーを経由してWebサイトにアクセスする必要があります。

ファイアウォールの背後にあるホストが、各ホストが独自にプロキシを設定する必要なしに、プロキシサーバーを自動的に通過するようにしたい(主に、プロキシが異なるため、単一のポイントでプロキシアドレスを変更できるようにしたいため)ネットワークシナリオ)。

IPTablesにポート80と443のすべての発信トラフィックをプロキシ経由で強制させる方法はありますか?そうでない場合は、他のすぐに利用できるソフトウェアを使用して、必要な動作を取得できますか?

1
Guss

これを行うには、少なくとも2つの方法があります。

  1. DHCPを介したプロキシ自動構成URL
  2. Iptablesを使用した透過的なプロキシリダイレクト

最初のオプションは [〜#〜] wpad [〜#〜] メカニズムを使用します:

DHCPサーバーの構成に、オプション252(dhcpdなど)を含める必要があります。

option local-proxy-config code 252 = text;
...
subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.20 192.168.0.30;
  ...
  option local-proxy-config "http://your_http_server/proxy.pac";
}

Proxy.pacは、ブラウザに何をプロキシするかを指示するJSのほんの一部です(例):

function FindProxyForURL(url, Host) {
    var proxy = "PROXY your_proxy_server:3128; DIRECT";
    var direct = "DIRECT";

    // no proxy for local hosts without domain:
    if(isPlainHostName(Host)) return direct;

    // proxy everything else:
    return proxy;
}

2番目のオプションは、 iptables を使用してhttpトラフィックを透過的にリダイレクトすることです(例):

iptables -t nat -A PREROUTING -i eth0 -s ! your_proxy_server -p tcp --dport 80 -j DNAT --to your_proxy_server:3128
iptables -t nat -A POSTROUTING -o eth0 -s local-network -d your_proxy_server -j SNAT --to iptables-box
iptables -A FORWARD -s local-network -d your_proxy_server -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT
2
ab77

はい、できます。これは透過的傍受プロキシと呼ばれます。トラフィックをsquidにリダイレクトし、透過プロキシとして機能するように構成するだけです。

ちなみに、クライアントにプロキシ構成を手動で展開することには利点があります。何かがプロキシと直接話している場合は、何か奇妙なことがあることがわかります。また、プロキシをIPではなくホスト名で定義できるため、このホスト名を参照してIPを変更できます。

0
jirib