LAMP サーバーからの外部リクエストがインターネット検閲を回避できるようにするにはどうすればよいでしょうか?

LAMP サーバーからの外部リクエストがインターネット検閲を回避できるようにするにはどうすればよいでしょうか?

私はもう一つ質問askUbuntuサイトで、このバージョンをServer Faultから移行しました質問スーパーユーザーが質問するのに最適な場所だと思うからです。

背景:

仮想化された Xubuntu 12.04 OS 上で実行されている LAMP サーバーと、Ubuntu 12.04 のホスト OS で構成されるローカル (Drupal) 開発環境があります。ブリッジ ネットワークは有効になっていません。

Drupal の Web 2.0 統合の側面 (Youtube や Facebook の統合など) を試してみたいのですが、これらの Web サイトはすべて、少なくとも IP ブロッキング、DNS フィルタリング、URL フィルタリング、パケット フィルタリングを含む大規模なフィルタリング体制によってブロックされており、接続リセット パケットを使用してこれらのルールを強制しています。一部の ISP は、帯域幅が制限される SSH トンネルを検出するためにディープ パケット フィルタリングも使用しているようですが、幸いなことに、私のアパートの ISP は現在これを行っていないようです。外国人は、法律に違反する目的で使用しない限り (つまり、制限されている資料を中国国民と共有するなど)、プロキシ/VPN などを使用することを禁止されていません。

通常の Web ブラウジングや、ブロックされたコンテンツにアクセスする必要があるその他のタスクでは、別の国にあるサーバー (Ubuntu Server 10.04、ssh と openvpn のみ有効) への ssh トンネルを socks5 プロキシとして使用します。Chromium と Firefox はどちらも、socks5 プロキシを介して DNS 要求をネイティブに送信できます (前者はデフォルトで、後者は構成設定を変更することで)。このソリューションは、制限されたサイトへのすべてのブラウザー側接続に完璧に機能します。

ただし、Web 2.0 統合 Drupal モジュールの多くでは、サーバー自体が制限された外部サイトを要求することも必要です。

私の質問は次のとおりです:

SSH トンネルを経由してフィルタリング レジームを通過するための最適な方法は何でしょうか。

  • 私のApache2サーバーからのすべての外部リクエストとDNSルックアップ、

または

  • Apache2 サーバーから指定されたホストへのリクエスト (および DNS ルックアップ) のみですか?

検討した/試みた解決策

  • 最も簡単な解決策は、フィルタリング レジーム外のマシン (SSH で接続するマシン) で LAMP サーバーを使用することです。ただし、いくつかの理由 (問題が発生した場合にこのマシンに物理的にアクセスできない、ハードウェアが古い、このサーバーへの接続が失われると開発を続行できないなど) により、これを行いたくありません。
  • グローバル プロキシ設定を使用する - 私の調査によると、Xubuntu にはグローバル socks5 設定の機能がありません。また、これによって DNS ルックアップがキャッチされるかどうかもわかりません。

  • 使用tsocks: これは最良の候補のようですが、2 つの問題/質問があります。

    1. これらのコマンドの前に を付けることができるように Apache2 を起動/再起動するスクリプトはどこにありますかtsocks?

    2. socks5 プロキシを介して DNS ルックアップをキャッチしてリダイレクトするにはどうすればよいですか?

      ファイルを編集すること/etc/hosts/で限定的な回避策が提供されますが、youtube.comなどのサイトは、非常に多くの外部サイト(およびURL)からメディアやその他のコンテンツをロードするため、これらすべての(接続をリセットする可能性のある)サードパーティのURLを追跡することはほぼ不可能です。を使用して、socatsocks5プロキシを介してUDPトラフィックをキャプチャ、変換、送信します(説明されているようにここ) は良い解決策のように思えますが、リンクされたチュートリアルで説明されているように実装できませんでした。(使用がsocat私の問題を解決する適切な方法であることが確認された場合、レビューのために使用しているコマンドを投稿できます)

答え1

実際には、Apache は送信接続を行っていません。PHP が行っています。したがって、SOCKS プロキシと通信する必要があるのは PHP です。

関連する:https://stackoverflow.com/questions/10490962/php でソケット接続を確立する

HTTP プロキシがあればもっと簡単でしょうし、VPN があればもっと簡単です。OpenVPN の設定をもう一度試してみてはいかがでしょうか?

あるいは、サーバー上で Privoxy を設定して SOCKS プロキシと通信し、PHP が Privoxy を HTTP プロキシとして使用するように設定することもできます。

関連情報