web-dev-qa-db-ja.com

iptablesを使用したグローバルプロキシの実装

Pacファイルを使用してインターネットアクセスを構成するWindows環境でLinuxボックス(Lubuntu 12.04)を実行しています。

proxy.pacファイル:

function FindProxyForURL(url, Host){
  var proxy_yes = "PROXY xxx.xxx.xxx.xxx:8000";
  var proxy_no = "DIRECT";
  if (shExpMatch(url, "*//yyy.*")) { return proxy_no; }
  if (shExpMatch(url, "*//zzz.zzz.*")) { return proxy_no; }
  if (shExpMatch(url, "*foo.com*")) { return proxy_no; }
  //Proxy anything else
  return proxy_yes;
}

私の知る限り、Lubuntuにはグローバルプロキシシステムがありません。

一部のプログラム(たとえばChromiumではない)のみが尊重するHTTP_PROXYのようなシェル変数をいじくり回そうとする代わりに、iptablesを使用して、プロキシを介してすべてのトラフィックを透過的にリダイレクトし、グローバルプロキシを効果的に実装できると考えていました。

これは可能ですか?可能であれば、どうすればよいですか?

編集:私は管理者ではなく、プロキシを設定しようとしていないことを明確にする必要があります。プロキシはすでに設定されており、マシンをインターエントに接続するには、自動プロキシ構成を有効にして、上記のpacファイルを指定する必要があります。直接接続はブロックされます。

すべてのアプリケーションを個別に構成する代わりに、iptablesを使用してトラフィックをプロキシ経由で自動的にルーティングしたいと考えていました。

1
pR0Ps

これは私がやったことです:

  • ALL_PROXYに環境変数HTTP_PROXYHTTPS_PROXYFTP_PROXYNO_PROXY、および/etc/environmentを設定します。
  • /etc/apt/apt.conf.d/80proxyでaptのhttp、https、およびftpプロキシを設定します(構文Acquire::http::proxy "http://xxx.xxx.xxx.xxx:8000";を使用)
  • proxychains を使用して、環境変数を尊重せず、プロキシのサポートが組み込まれていない残りのプログラム。
1
pR0Ps

これまでLubuntuを使用したことがないことを告白しますが、これは仮想マシンで実行されているUbuntu派生物にすぎないと思います。プロキシを実行するためにjavascriptに依存することは、非常にばかげたことです。多くの場合、JavaScriptは簡単にバイパスされるか、完全に無視されるためです。

squid を使用して適切なプロキシシステムを設定することから始めます。 ubuntu派生物の場合、リポジトリにはsquidまたはaptを使用して簡単にインストールできるsynapticパッケージがあります。インストール後、まず/etc/squid/squid.confを編集し、適切と思われる設定で次の設定を追加または変更します。

httpd_accel_Host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_Host_header on
acl lan src 192.168.1.1 192.168.2.0/24
http_access allow localhost
http_access allow lan

使用できる構成オプションは他にもたくさんありますが、これらはほとんどの用途にとってかなり良いスタートです。その後、次のステップは、デフォルトルーターのiptablesをDNATに設定し、トラフィックをsquidプロキシにリダイレクトすることです。

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

もちろん、ルーターが起動するたびにルールが適用されるように、それをある種の起動スクリプトに入れたいと思うでしょう。さらに、これはhttpsトラフィックに影響を与えないことに注意してください。これは、httpsがトラフィックのプロキシ(または途中の誰かによる傍受/復号化など)を許可しないように意図的に設計されているためです。 (疑わしいサイトへの)トラフィックを除外したい場合は、 SquidGuard をミックスに投入することもできます。

Httpsトラフィックをプロキシすることは可能ですが、お勧めしません。あなたが本当に-その機能を実装したいのであれば、良いガイドがあります ここ

2
TheCompWiz