Ubuntu20.04でプライベート接続用のSquidプロキシを設定する方法

提供:Dev Guides
移動先:案内検索

序章

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

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

前提条件

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

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

ステップ1—SquidProxyをインストールする

Squidには、個々のユーザーのアウトバウンドトラフィックのルーティング以外にも多くのユースケースがあります。 大規模なサーバー展開のコンテキストでは、分散キャッシングメカニズム、ロードバランサー、またはルーティングスタックの別のコンポーネントとして使用できます。 ただし、通常はプロキシサーバーが関与するサーバートラフィックを水平方向にスケーリングするいくつかの方法は、アプリケーションのより多くのコンポーネントを分散するKubernetesなどのコンテナ化フレームワークによって人気が上回っています。 同時に、個々のユーザーがプライバシーを保護するために、プロキシサーバーを使用してWebリクエストをリダイレクトすることがますます一般的になっています。 これは、優先度の低いメンテナンスモードで数十の機能を備えているように見えるオープンソースプロキシサーバーを使用する場合に留意するのに役立ちます。 プロキシのユースケースは時間の経過とともに変化しましたが、基本的なテクノロジーは変化していません。

root以外のユーザーとして次のコマンドを実行して、パッケージリストを更新し、SquidProxyをインストールすることから始めます。

sudo apt update
sudo apt install squid

Squidは自動的にバックグラウンドサービスをセットアップし、インストール後に開始します。 サービスが正しく実行されていることを確認できます。

systemctl status squid.service
Output● squid.service - Squid Web Proxy Server
     Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-12-15 21:45:15 UTC; 2min 11s ago

デフォルトでは、Squidはクライアントがこのサーバーの外部からSquidに接続することを許可していません。 これを有効にするには、/etc/squid/squid.confに保存されている構成ファイルにいくつかの変更を加える必要があります。 nanoまたはお気に入りのテキストエディタで開きます。

sudo nano /etc/squid/squid.conf

Squidのデフォルトの構成ファイルは非常に長く、#を行の先頭に置くことで一時的に無効にされた多数のオプションが含まれていることに注意してください。これは、[X226Xとも呼ばれます。 ]コメントアウト。 ほとんどの場合、ファイルを検索して、編集する行を見つけます。 nanoでは、Ctrl+Wを押して検索語を入力し、Enterを押してから、Alt+Wを繰り返し押して、その次のインスタンスを検索します。必要に応じて用語。

フレーズhttp_access deny allを含む行に移動することから始めます。 Squidのデフォルトのアクセスルールを説明するテキストのブロックが表示されます。

/etc/squid/squid.conf

. . . 
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all
. . . 

これから、現在の動作を確認できます–localhostが許可されています。 他の接続はそうではありません。 これらのルールは順番に解析されるため、この構成ブロックの下部にdeny allルールを保持することをお勧めします。 そのルールをallow allに変更して、誰でもプロキシサーバーに接続できるようにすることもできますが、おそらくそうしたくないでしょう。 代わりに、次のように、http_access allow localhostの上に独自のIPアドレスを含む行を追加できます。

/etc/squid/squid.conf

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
  • acl は、 A ccess C ontrol L istを意味し、権限ポリシーの一般的な用語です。
  • この場合のlocalnetはACLの名前です。
  • src は、このACLの下でリクエストが発信される場所、つまりIPアドレスです。

ローカルIPアドレスがわからない場合は、 What's my IP のようなサイトにアクセスすると、どこからアクセスしたかがわかります。 その変更を行った後、ファイルを保存して閉じます。 nanoを使用している場合は、Ctrl+Xを押し、プロンプトが表示されたらYEnterの順に押します。

この時点で、Squidを再起動して接続できますが、最初にSquidを保護するためにできることは他にもあります。

ステップ2—イカを確保する

ほとんどのプロキシ、およびプロキシに接続するほとんどのクライアント側アプリ(Webブラウザーなど)は、複数の認証方法をサポートしています。 これらには、共有キーまたは個別の認証サーバーを含めることができますが、最も一般的には、通常のユーザー名とパスワードのペアが必要です。 Squidを使用すると、IPアドレスによってプロキシへのアクセスを制限するための追加または代替の手順として、組み込みのLinux機能を使用してユーザー名とパスワードのペアを作成できます。 これを行うには、/etc/squid/passwordsというファイルを作成し、Squidの構成をそのファイルにポイントします。

まず、Squidが好むパスワードジェネレータにアクセスするには、Apacheプロジェクトからいくつかのユーティリティをインストールする必要があります。

sudo apt install apache2-utils

このパッケージは、htpasswdコマンドを提供します。このコマンドを使用して、新しいSquidユーザーのパスワードを生成できます。 Squidのユーザー名は、システムのユーザー名と重複しないため、必要に応じて、ログインに使用したのと同じ名前を使用できます。 パスワードを追加するように求められます。

sudo htpasswd -c /etc/squid/passwords your_squid_username

これにより、ユーザー名と新しいパスワードのハッシュが/etc/squid/passwordsに保存され、Squidによって認証ソースとして使用されます。 後でファイルをcatして、次のように表示されます。

sudo cat /etc/squid/passwords
Outputsammy:$apr1$Dgl.Mtnd$vdqLYjBGdtoWA47w4q1Td.

ユーザー名とパスワードが保存されていることを確認したら、新しい/etc/squid/passwordsファイルを使用するようにSquidの構成を更新できます。 nanoまたはお気に入りのテキストエディタを使用して、Squid構成ファイルを再度開き、次の強調表示された行を追加します。

sudo nano /etc/squid/squid.conf

/etc/squid/squid.conf

…
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
http_access allow authenticated
# And finally deny all other access to this proxy
http_access deny all
…

これらの追加のディレクティブは、basic_ncsa_authメカニズムを使用して解析できるパスワードハッシュについて、新しいpasswordsファイルをチェックインし、プロキシへのアクセスに認証を要求するようにSquidに指示します。 この認証方法または他の認証方法の詳細については、Squidのドキュメントを確認してください。 その後、構成を変更してSquidを最終的に再起動できます。 これが完了するまでに少し時間がかかる場合があります。

sudo systemctl restart squid.service

また、ufwを使用している場合は、ファイアウォールでポート3128を開くことを忘れないでください。

sudo ufw allow 3128

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

ステップ3—イカを介して接続する

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

curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 http://www.google.com/

-x引数は、プロキシサーバーをcurlに渡します。この場合、http://プロトコルを使用して、このサーバーのユーザー名とパスワードを指定し、正常に機能するWebサイトに接続します。 google.comのように。 コマンドが成功すると、次の出力が表示されます。

Output*   Trying 138.197.103.77...
* TCP_NODELAY set
* Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0)
* Proxy auth using Basic with user 'sammy'
> GET http://www.google.com/ HTTP/1.1

さらに構成を変更せずに、Squidプロキシを使用してhttps://Webサイトにアクセスすることもできます。 これらは、クライアントとサーバー間のSSLを維持するために、CONNECTと呼ばれる別個のプロキシディレクティブを利用します。

curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 https://www.google.com/
Output*   Trying 138.197.103.77...
* TCP_NODELAY set
* Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to www.google.com:443
* Proxy auth using Basic with user 'sammy'
> CONNECT www.google.com:443 HTTP/1.1
> Host: www.google.com:443
> Proxy-Authorization: Basic c2FtbXk6c2FtbXk=
> User-Agent: curl/7.55.1
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
<
* Proxy replied OK to CONNECT request
* CONNECT phase completed!

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

結論

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

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

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