Rocky Linux 9でのプライベート接続のためのSquidプロキシのセットアップ方法を教えてください。
日本語:
イントロダクション
プロキシサーバーは、ウェブトラフィックのキャッシングや曖昧化の便利な方法です。つまり、ウェブリクエストは接続を中継することで、外部から見えるよりも異なる送信元または送信先のアドレスから提供されることがあります。通常、一般のエンドユーザーにとっては、自分自身のIPアドレスとは異なるアドレスからウェブリクエストを行うことができるということです。これには、ウェブが異なる管轄区域ごとにどのように提供されているかを調査したり、監視やウェブトラフィック制御の一部の方法を回避したりするといった多くの目的があります。
多くの第三者のプロキシサービスプロバイダはありますが、信頼性に欠けることがあります。特に、プロキシを使用してトラフィックをインターネットサービスプロバイダからルーティングすることが主な目的である場合、商用のプロキシプロバイダの方が実際にはより安全で法的に拘束力が低い場合もあります。
スクイッドは、安定して人気のあるオープンソースのHTTPプロキシです。このチュートリアルでは、Rocky Linux 9上にHTTPプロキシを提供するために、スクイッドのインストールと設定方法を説明します。
前提条件
このガイドを完成させるために必要なものは次の通りです。
- A Rocky Linux 9 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 9 guide.
このチュートリアルでは、your_domainというドメイン名を使用しますが、ご自身のドメイン名またはIPアドレスに置き換えてください。
ステップ1 — Squidプロキシのインストール
イカは個々のユーザーの送信トラフィックをルーティングする以外にも、さまざまな用途があります。大規模なサーバーデプロイメントの文脈では、分散キャッシングメカニズム、負荷分散装置、またはルーティングスタックの別のコンポーネントとして使用することができます。ただし、通常プロキシサーバーが関連するであろうサーバートラフィックの水平スケーリングのいくつかの方法は、コンテナ化フレームワークであるKubernetesなどの人気が高まり、アプリケーションのより多くのコンポーネントを分散させることによって取って代わられています。同時に、個々のユーザーのウェブリクエストをリダイレクトするためにプロキシサーバーを使用することは、プライバシー保護のためにますます人気が高まっています。これは、優先度の低いメンテナンスモードに多くの機能があるように見えるオープンソースのプロキシサーバーを使用する際に心に留めておくと役立ちます。プロキシの用途は時間とともに変化しましたが、基本的な技術は変わっていません。
ロッキーリナックスのデフォルトのパッケージソースにはSquidパッケージは提供されていません。しかし、EPELリポジトリを通じてSquidをインストールすることができます。EPELはRocky LinuxなどのRHELベースのディストリビューションで最も人気のある追加パッケージリポジトリであり、公式ソースで提供されていない多くの信頼できるサードパーティパッケージを含んでいます。
Rocky LinuxのEPELリポジトリを追加するには、dnfパッケージマネージャーを使用して、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)
Squidを有効にする前に、その設定ファイルを変更する必要があります。設定ファイルは/etc/squid/squid.confに保存されています。Rocky Linux 9にはデフォルトのテキストエディタとしてviが付属しています。viは非常に強力なテキストエディタですが、経験のないユーザーにとってはやや分かりにくいかもしれません。Rocky Linux 9サーバーで設定ファイルを編集するために、より使いやすいエディタであるnanoをインストールすることをお勧めします。
- sudo dnf install nano
ナノまたはお気に入りのテキストエディタでSquidの設定ファイルを開いてください。
- sudo nano /etc/squid/squid.conf
最初に、フレーズ「http_access deny all」が含まれている行に移動してください。Squidのデフォルトのアクセス規則について説明されたテキストのブロックが表示されるはずです。
. . .
#
# 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は許可されていますが、他の接続は許可されていません。これらのルールは順番に解析されるため、この設定ブロックの一番下には拒否のルールを置くことが良いアイデアです。プロキシサーバーに接続する人を誰でも許可するために、そのルールをすべて許可に変更することもできますが、おそらくそうしたくないでしょう。代わりに、localhostを許可するhttp_accessの上に、自分のIPアドレスを含めた行を追加することができます。
#
# 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機能を使ってユーザー名とパスワードの組み合わせを作成し、プロキシへのアクセスを制限するための追加または代替手段として利用することができます。そのためには、/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
…
以下の追加指令により、Squidは基本のncsa_authメカニズムを使用して解析できるパスワードハッシュのための新しいパスワードファイルを確認し、プロキシへのアクセスに対して認証を要求します。この他の認証方法についての詳細は、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 — スクイッドを介して接続
Squid サーバーをデモンストレーションするために、さまざまな種類のウェブリクエストを行うために人気のあるコマンドラインプログラムである 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エンドポイントを展開する方法を学びました。多くのアプリケーションは、数十年前から(しばしばOSレベルで)組み込みのプロキシサポートを持っており、それによりこのプロキシスタックは非常に再利用性が高くなっています。
プロキシサーバーの最も一般的な使用方法の1つは、異なるグローバル地域間のトラフィックをプロキシすることです。したがって、他のデータセンターでこの構成を複製したい場合に備えて、サーバーのデプロイを自動化するためにAnsibleの使用方法を確認しておくことをお勧めします。