序章

プロキシサーバーは、エンドユーザーとインターネットリソース間のゲートウェイとして機能するサーバーアプリケーションの一種です。 エンドユーザーは、プロキシサーバーを介して、プライバシー、セキュリティ、キャッシュなど、さまざまな目的でWebトラフィックを制御および監視できます。 たとえば、プロキシサーバーを使用して、自分のIPアドレスとは異なるIPアドレスからWeb要求を行うことができます。 また、プロキシサーバーを使用して、管轄区域ごとにWebがどのように提供されるかを調査したり、監視やWebトラフィックの抑制のいくつかの方法を回避したりすることもできます。

Dante は、安定した人気のあるオープンソースのSOCKSプロキシです。 このチュートリアルでは、Ubuntu20.04サーバーにSOCKSプロキシを提供するようにDanteをインストールして構成します。

前提条件

このガイドを完了するには、次のものが必要です。

このチュートリアルではドメイン名your_domainを使用しますが、これを独自のドメイン名またはIPアドレスに置き換える必要があります。

ステップ1—Danteのインストール

DanteはオープンソースのSOCKSプロキシサーバーです。 SOCKSはあまり広く使用されていないプロトコルですが、一部のピアツーピアアプリケーションではより効率的であり、一部の種類のトラフィックではHTTPよりも優先されます。 root以外のユーザーとして次のコマンドを実行して、パッケージリストを更新し、Danteをインストールすることから始めます。

  1. sudo apt update
  2. sudo apt install dante-server

Danteはまた、バックグラウンドサービスを自動的にセットアップし、インストール後に開始します。 ただし、すべての機能が無効になっているため、最初の実行時にエラーメッセージが表示されて正常に終了するように設計されています。 これは、systemctlコマンドを使用して確認できます。

  1. systemctl status danted.service
Output
● danted.service - SOCKS (v4 and v5) proxy daemon (danted) Loaded: loaded (/lib/systemd/system/danted.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Wed 2021-12-15 21:48:22 UTC; 1min 45s ago Docs: man:danted(8) man:danted.conf(5) Main PID: 14496 (code=exited, status=1/FAILURE) Dec 15 21:48:21 proxies systemd[1]: Starting SOCKS (v4 and v5) proxy daemon (danted)... Dec 15 21:48:22 proxies systemd[1]: Started SOCKS (v4 and v5) proxy daemon (danted). Dec 15 21:48:22 proxies danted[14496]: Dec 15 21:48:22 (1639604902.102601) danted[14496]: warning: checkconfig(): no socks authentication methods enabled. This means all socks requests will be blocked after negotiation. Perhaps this is not intended?

Danteのサービスを正常に開始するには、構成ファイルでそれらを有効にする必要があります。

Danteの設定ファイルは、デフォルトで/etc/danted.confで提供されます。 nanoまたはお気に入りのテキストエディタを使用してこのファイルを開くと、構成オプションの長いリストが表示され、それらはすべて無効になっています。 このファイルをナビゲートして、いくつかのオプションを1行ずつ有効にすることもできますが、実際には、このファイルを削除して最初から置き換える方が効率的で読みやすくなります。 これを行うことについて心配する必要はありません。 オンラインマニュアルに移動すると、いつでもDanteのデフォルト構成を確認できます。また、必要に応じて、Ubuntuのパッケージリストからパッケージを手動で再ダウンロードして、ストック構成ファイルを再取得することもできます。 それまでの間、先に進んで削除してください。

  1. sudo rm /etc/danted.conf

これで、より簡潔なものに置き換えることができます。 テキストエディタでファイルを開くと、ファイルが存在しない場合は自動的に作成されるため、nanoまたはお気に入りのテキストエディタを使用して、空の構成ファイルを取得する必要があります。

  1. sudo nano /etc/danted.conf

次の内容を追加します。

/etc/danted.conf
logoutput: syslog
user.privileged: root
user.unprivileged: nobody

# The listening network interface or address.
internal: 0.0.0.0 port=1080

# The proxying network interface or address.
external: eth0

# socks-rules determine what is proxied through the external interface.
socksmethod: username

# client-rules determine who can connect to the internal interface.
clientmethod: none

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}

これで、SOCKSの一般的な規則であるポート1080で実行される使用可能なSOCKSサーバー構成ができました。 この構成ファイルの残りの部分を1行ずつ分類することもできます。

  • logoutputは、Danteが接続をログに記録する方法を示します。この場合、通常のシステムログを使用します。
  • user.privilegedにより、danteはパーミッションをチェックするためのrootパーミッションを持つことができます
  • user.unprivilegedは、非特権ユーザーとして実行するためのアクセス許可をサーバーに付与しません。これは、より詳細なアクセス許可を付与しない場合は不要であるためです。
  • internal接続の詳細は、サービスが実行されているポートと接続できるIPアドレスを指定します
  • external接続の詳細は、アウトバウンド接続に使用されるネットワークインターフェイスを指定します。ほとんどのサーバーではデフォルトでeth0です。

構成の残りの詳細は、次のセクションで説明する認証方法を扱います。 ufwを使用している場合は、ファイアウォールでポート1080を開くことを忘れないでください。

  1. sudo ufw allow 1080

この時点で、Danteを再起動して接続することはできますが、全世界に公開されているSOCKSサーバーがあり、おそらく望ましくないので、最初にそれを保護する方法を学びます。

ステップ2—ダンテを確保する

これまでこのチュートリアルに従った場合、Danteは認証に通常のLinuxユーザーアカウントを利用します。 これは便利ですが、その接続に使用されるパスワードはプレーンテキストで送信されるため、他のログイン権限を持たない専用のSOCKSユーザーを作成することが重要です。 これを行うには、useraddを使用して、ユーザーにログインシェルを割り当てないフラグを設定してから、パスワードを設定します。

  1. sudo useradd -r -s /bin/false your_dante_user
  2. sudo passwd your_dante_user

また、セキュリティで保護されていないワイヤレス接続を介してこのアカウントにログインしたり、サーバーを広く共有したりすることは避けてください。 そうしないと、悪意のある攻撃者が繰り返しログインしようとする可能性があります。

Danteは他の認証方法をサポートしていますが、SOCKSプロキシに接続する多くのクライアント(つまり、アプリケーション)は基本的なユーザー名とパスワードの認証しかサポートしていないため、その部分はそのままにしておくことをお勧めします。 別の方法としてできることは、特定のIPアドレスのみへのアクセスを制限することです。 これは最も洗練されたオプションではありませんが、ここで使用されているテクノロジーの組み合わせを考えると、賢明なオプションです。 前提条件のチュートリアルから、ufwを使用して特定のIPアドレスへのアクセスを制限する方法をすでに学習している場合がありますが、Dante内で直接行うこともできます。 /etc/danted.confを編集します:

  1. sudo nano /etc/danted.conf
/etc/danted.conf
…
client pass {
    from: your_ip_address/0 to: 0.0.0.0/0
}

複数のIPアドレスをサポートするには、 CIDR表記を使用するか、別のclient pass {}構成ブロックを追加します。

/etc/danted.conf
client pass {
    from: your_ip_address/0 to: 0.0.0.0/0
}

client pass {
    from: another_ip_address/0 to: 0.0.0.0/0
}

その後、構成を変更して、最終的にDanteを再起動できます。

  1. sudo systemctl restart danted.service

今回、サービスステータスを確認すると、エラーなしで実行されていることがわかります。

  1. systemctl status danted.service
Output
● danted.service - SOCKS (v4 and v5) proxy daemon (danted) Loaded: loaded (/lib/systemd/system/danted.service; enabled; vendor preset: enable> Active: active (running) since Thu 2021-12-16 18:06:26 UTC; 24h ago

次のステップでは、最後にプロキシに接続します。

ステップ3—Danteを介した接続

Danteサーバーをデモンストレーションするために、curlと呼ばれるコマンドラインプログラムを使用します。これは、さまざまなタイプのWeb要求を行うために一般的です。 一般に、特定の接続が理想的な状況でブラウザで機能するかどうかを確認する場合は、常に最初にcurlでテストする必要があります。 これを行うには、 local マシンでcurlを使用します。これは、すべての最新のWindows、Mac、およびLinux環境にデフォルトでインストールされるため、任意のローカルシェルを開いて次のコマンドを実行できます。

  1. curl -v -x socks5://your_dante_user:your_dante_password@your_server_ip:1080 http://www.google.com/
Output
* Trying 138.197.103.77... * TCP_NODELAY set * SOCKS5 communication to www.google.com:80 * SOCKS5 connect to IPv4 142.250.189.228 (locally resolved) * SOCKS5 request granted. * Connected to 138.197.103.77 (138.197.103.77) port 1080 (#0) > GET / HTTP/1.1 …

curlに使用した資格情報は、新しいプロキシサーバーを使用する可能性のある他の場所でも機能するはずです。

結論

このチュートリアルでは、オーバーヘッドをほとんどまたはまったく発生させずにトラフィックをプロキシするための、人気のあるオープンソースAPIエンドポイントをデプロイする方法を学びました。 多くのアプリケーションには、数十年前に(多くの場合OSレベルで)プロキシサポートが組み込まれているため、このプロキシスタックは非常に再利用可能です。

次に、 Squid をデプロイする方法を学びたいと思うかもしれません。これは、さまざまなタイプのWebトラフィックをプロキシするためにDanteと一緒に実行できるHTTPプロキシです。

プロキシサーバーの最も一般的な使用例の1つは、さまざまなグローバルリージョンとの間のトラフィックのプロキシであるため、複製したい場合に備えて、Ansibleを使用してサーバーの展開を自動化する方法を確認することをお勧めします。他のデータセンターでのこの構成。