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

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

これまで一度も使用したことがないことを告白しますLubuntuが、これは仮想マシンで実行される派生的なものにすぎないのではないかと思いますUbuntu。プロキシを実行するために JavaScript に頼るのは非常に愚かなことです。多くの場合、JavaScript は簡単にバイパスされたり、完全に無視されたりするためです。結局、プロキシを使用する利点が失われてしまいます。

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

最終的に私がやったことは次の通りです:

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

関連情報