Rocky Linux 8でプライベート接続にSquid Proxyを設定する方法を教えてください。
はじめに
プロキシサーバーは、ウェブトラフィックのキャッシュや曖昧化に便利な手段です。これにより、ウェブリクエストは見かけ上とは異なる入力または出力アドレスから提供されるため、接続を仲介者にオフロードすることができます。通常、一般のエンドユーザーにとっては、自分のIPアドレスとは異なるIPアドレスからウェブリクエストを行うことができるようになります。これには多くの目的があります。たとえば、ウェブが異なる管轄区域でどのように提供されるかを調査したり、一部の監視方法やウェブトラフィックの制限を回避したりすることができます。
たくさんの第三者のプロキシサービスプロバイダーが存在しますが、彼らは信頼性に欠ける場合があります。特に、プロキシを使用してトラフィックをインターネットサービスプロバイダーから遠ざけることが主な目的である場合、商業的なプロキシプロバイダーの方が実際にはセキュリティが低く、法的にも制約が少ないケースもあるかもしれません。
以下の日本語表現の一つをご提供いたします。:
Squidは安定した人気のあるオープンソースのHTTPプロキシです。このチュートリアルでは、Rocky Linux 8上にHTTPプロキシを提供するためにSquidをインストールおよび設定します。
前提条件 (Zentei jōken)
このガイドを完成させるには、以下が必要です:
- A Rocky Linux 8 server and a non-root user with sudo privileges. You can learn more about how to set up a user with these privileges in our Initial Server Setup with Rocky Linux 8 guide.
このチュートリアルでは、your_domainというドメイン名を使用しますが、ご自身のドメイン名またはIPアドレスに置き換えてください。
ステップ1:Squidプロキシのインストール
イカは個々のユーザーのアウトバウンドトラフィックをルーティングする以外にも、さまざまな用途があります。大規模なサーバーデプロイメントのコンテキストでは、分散キャッシングメカニズム、ロードバランサー、またはルーティングスタックの別のコンポーネントとして使用されることがあります。ただし、通常はプロキシサーバーに関与するであろうサーバートラフィックの水平スケーリングの一部は、Kubernetesなどのコンテナ化フレームワークによって人気によって超えられています。同時に、個々のユーザーとしてウェブリクエストをリダイレクトするためにプロキシサーバーを使用してプライバシーを保護することがますます人気になっています。これは、低い優先順位のメンテナンスモードで多数の機能を持っているように見えるオープンソースのプロキシサーバーを使用するときに頭に入れておくと役立ちます。プロキシの使用用途は時代とともに変わってきましたが、基本的な技術は変わっていません。
ロッキーリナックスのデフォルトパッケージソースにはSquidパッケージが含まれていません。代わりに、EPELリポジトリを通じてSquidをインストールすることができます。EPELは、ロッキーリナックスのようなRHELベースのディストリビューションで最も人気のある追加パッケージリポジトリであり、公式のソースから提供されない信頼できるサードパーティのパッケージがいくつか含まれています。
Rocky LinuxのEPELリポジトリを追加するには、dnf install epel-releaseを使用してください。
- sudo dnf install epel-release
次に、dnfを使用してSquidをインストールできます。
- sudo dnf install squid
Rocky LinuxでSquidをインストールした後、自動的に起動されません。systemctl statusを使用して、作成されたサービスが非アクティブであることを確認できます。
- systemctl status squid.service
● squid.service – Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disa> Active: inactive (dead) Docs: man:squid(8)
Rocky Linux 8には、viという非常に強力なテキストエディタがデフォルトで付属していますが、viは経験のないユーザーにとっては少々理解しづらいかもしれません。そのため、Squidを有効にする前に、/etc/squid/squid.confという設定ファイルを編集する必要があります。Rocky Linux 8サーバーで設定ファイルを編集するのを容易にするために、nanoといったより使いやすいエディタをインストールすることをお勧めします。
- sudo dnf install nano
nanoまたはお気に入りのテキストエディタでスクイッドの設定ファイルを開いてください。
- sudo nano /etc/squid/squid.conf
最初に、フレーズ「http_access deny all」が含まれている行に移動してください。Squidのデフォルトのアクセス規則について説明しているテキストのブロックが表示されるはずです。
「/etc/squid/squid.conf」
. . .
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
# 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は許可され、他の接続は許可されません。これらのルールは順次解析されるため、この構成ブロックの最下部にはすべてを拒否するルールを保持することが良いアイデアです。あなたはそのルールを変更してすべてを許可することができますが、おそらくそれはしたくないでしょう。代わりに、自分のIPアドレスを含む行をlocalhostを許可するhttp_accessの上に追加することができます。
「/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 means an Access Control List, a common term for permissions policies
- localnet in this case is the name of your ACL.
- src is where the request would originate from under this ACL, i.e., your IP address.
もし自分のローカルIPアドレスを知らない場合は、What’s my IPなどのサイトにアクセスすると、どこからアクセスされたかを教えてくれます。その変更をしたら、ファイルを保存して閉じてください。もしnanoを使っている場合は、Ctrl+Xを押し、プロンプトが表示されたらYを入力し、Enterを押してください。
この時点で、Squidを再起動して接続できますが、最初にそれを安全にするためにもっとできることがあります。
ステップ2—スキッドの確保
ほとんどのプロキシやプロキシに接続するクライアントサイドのアプリ(例:ウェブブラウザ)は、複数の認証方法をサポートしています。これには共有キー、または別個の認証サーバーが含まれますが、最も一般的なのは通常のユーザー名とパスワードの組み合わせです。Squidでは、組み込みのLinux機能を使用してユーザー名とパスワードの組み合わせを作成し、プロキシへのアクセスをIPアドレスで制限するための追加または代替手段として使用することができます。そのためには、/etc/squid/passwordsというファイルを作成し、Squidの設定ファイルでそれを指定します。
最初に、Squidが好むパスワード生成ユーティリティにアクセスするため、Apacheプロジェクトからいくつかのユーティリティをインストールする必要があります。
- sudo dnf install httpd-tools
このパッケージは、新しいSquidユーザーのためにパスワードを生成するために使用できるhtpasswdコマンドを提供しています。Squidのユーザー名は、システムのユーザー名とは一切重複しないため、ログインに使用したと同じ名前を使用することができます。パスワードの追加も求められます。
- sudo htpasswd -c /etc/squid/passwords your_squid_username
これにより、あなたのユーザー名と新しいパスワードのハッシュが/etc/squid/passwordsに保存され、Squidが認証ソースとして使用します。後でファイルをcatコマンドで表示し、その内容を確認することができます。
- sudo cat /etc/squid/passwords
sammy:$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/lib64/squid/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
…
これらの追加ディレクティブは、基本的な_ncsa_authメカニズムを使用して解析できるパスワードハッシュを新しいパスワードファイルでSquidが確認するように指示し、プロキシへのアクセスに認証が必要であることを要求します。これに関する詳細な情報や他の認証方法については、Squidのドキュメンテーションを参照することができます。その後、変更した設定でSquidを最終的に起動することができます。これには少し時間がかかる場合があります。
- sudo systemctl start squid.service
再び “systemctl status” を使用して、正しく起動したことを確認することができます。
- sudo systemctl status squid.service
● squid.service – Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disa> Active: active (running) since Fri 2022-10-28 19:17:04 UTC; 21s ago Docs: man:squid(8) Process: 263480 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/> Main PID: 263485 (squid) Tasks: 3 (limit: 11152) Memory: 15.7M CGroup: /system.slice/squid.service ├─263485 /usr/sbin/squid –foreground -f /etc/squid/squid.conf ├─263489 (squid-1) –kid squid-1 –foreground -f /etc/squid/squid.conf └─263490 (logfile-daemon) /var/log/squid/access.log Oct 28 19:17:03 rocky systemd[1]: Starting Squid caching proxy… Oct 28 19:17:04 rocky squid[263485]: Squid Parent: will start 1 kids Oct 28 19:17:04 rocky squid[263485]: Squid Parent: (squid-1) process 263489 star> Oct 28 19:17:04 rocky systemd[1]: Started Squid caching proxy.
ファイアウォールを使用している場合は、ポート3128用の規則を追加して、Squidが通過するように忘れないでください。
- sudo firewall-cmd –permanent –add-port=3128/tcp
- firewall-cmd –reload
次のステップでは、ついにプロキシに接続します。
ステップ3-スクイッドを介して接続する
スクイッドサーバーをデモンストレーションするために、さまざまな種類のウェブリクエストを行うために人気のあるコマンドラインプログラムであるcurlを使用します。一般的に、ブラウザで理想的な状況下で接続が正常に動作するかどうかを確認する場合は、常に最初にcurlでテストする必要があります。このために、ローカルマシン上で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プロトコルを使用し、ユーザー名とパスワードをこのサーバーに指定して、google.comのような正常に動作するウェブサイトに接続します。コマンドが成功した場合、次の出力が表示されます。
* Trying 165.227.119.46:3128… * Connected to 165.227.119.46 (165.227.119.46) port 3128 (#0) * Proxy auth using Basic with user ‘squid’ > GET http://www.google.com/ HTTP/1.1
さらなる設定変更を行わずに、Squidプロキシを使用してhttps://ウェブサイトにアクセスすることも可能です。これらは、クライアントとサーバー間のSSLを保持するためにCONNECTと呼ばれる別のプロキシ指示を利用しています。
- curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 https://www.google.com/
* Trying 165.227.119.46:3128… * Connected to 165.227.119.46 (165.227.119.46) port 3128 (#0) * allocate connect buffer * Establish HTTP proxy tunnel to www.google.com:443 * Proxy auth using Basic with user ‘squid’ > CONNECT www.google.com:443 HTTP/1.1 > Host: www.google.com:443 > Proxy-Authorization: Basic c3F1aWQ6c3F1aWQ= > User-Agent: curl/7.83.1 > Proxy-Connection: Keep-Alive > < HTTP/1.1 200 Connection established < * Proxy replied 200 to CONNECT request * CONNECT phase completed
新しいプロキシサーバーを使用したい場所で、curlに使用した資格情報を使えるようになりました。
結論について、以下のように日本語で言い換えます:
このチュートリアルでは、ほとんどのオーバーヘッドなくトラフィックのプロキシを行うための人気のあるオープンソースAPIエンドポイントを展開する方法を学びました。多くのアプリケーションは、数十年前からオペレーティングシステムレベルで組み込みのプロキシサポートを持っており、これによりこのプロキシスタックは非常に再利用可能です。
プロキシサーバーの最も一般的な使用例の一つは、異なるグローバル地域間のトラフィックのプロキシ化です。そのため、他のデータセンターでこの設定を複製したいと思った場合に備えて、サーバーの自動展開をAnsibleでどのように行うかを確認することをおすすめします。