Squid とは、「プロキシ」と「リバースプロキシ」のサーバー機能を持つソフトウェアです。
プロキシサーバーとは、クライアントの代わりに外部サーバーにアクセスするサーバーです。
リバースプロキシサーバーとは、外部からのアクセスを内部サーバーに転送するサーバーです
本記事では、Squid の用途や使い方を解説します。
関連記事:サーバー | ||||
---|---|---|---|---|
Squid の用途
Squid、つまりプロキシやリバースプロキシサーバーを置く理由は以下のとおりです。
プロキシサーバーを置く理由
クライアントの次にプロキシサーバーを置く理由は、主に以下の3つです。
- セキュリティの向上 (フィルタリング)
- キャッシュサーバーとして利用 (レスポンスの高速化)
- 踏み台サーバー (プライベートネットワークにいるクライアントから、パブリックネットワークにいるプロキシを経由してインターネットにアクセス)
リバースプロキシサーバーを置く理由
リバースプロキシサーバーをバックエンドサーバーの前段に置く理由は、主に以下の5つです。
- キャッシュサーバーとして利用 (レスポンスの高速化とバックエンドサーバーの負荷を軽減)
- レスポンスを圧縮 (レスポンスの転送を高速化)
- SSL ターミネーション (暗号化や復号化の処理をリバースプロキシにオフロード)
- セキュリティの向上 (リバースプロキシでフィルタリング、バックエンドサーバーを隠蔽)
- 拡張性 (クライアントはリバースプロキシと通信するので、バックエンドサーバーを変更可能)
なお、レスポンスを生成してクライアントに返すまでの時間を短縮する、上3つ方法を Web アクセラレーションと言います。
Squid の使い方
Squid の以下の4つについて説明します。
プロキシの設定
まずは Squid をプロキシサーバーとして稼働させます。
プロキシを利用する別のホストで http_proxy 環境変数を設定します。
赤線箇所は Squid サーバーのプライベート IP アドレスを入力してください。
HTTP/1.1 200 OK Via: 1.1 ip-192-0-2-1 (squid/3.5.20)
Squid サーバー 192.0.2.1 を経由して www.google.com へのアクセスに成功したことがわかります。
Squid の設定ファイル
Squid の設定ファイル(/etc/squid/squid.conf)でよく利用するディレクティブは、以下のとおりです。
ディレクティブ | 説明 |
---|---|
acl | ACL(Access Control List)を定義 書式は「acl <name> <type> <argument> 」 |
http_access | ACL を許可 or 拒否 |
http_port | listen ポートを指定 |
例えば、初期設定の一部は以下の意味となります。
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl Safe_ports port 80 # http http_access deny !Safe_ports #ACL 名が Safe_ports (port 80)以外は拒否 http_access allow localnet #ACL 名が localnet (10.0.0.0/8)は許可 http_access deny all #上記以外の条件は全部拒否 http_port 3128 #3128 ポートで listen
ディレクティブの一覧は以下のドキュメントにあります。
Basic 認証の設定
Squid に Basic 認証を設定します。
hoge ユーザーで Basic 認証用のファイルを作成します。パスワードは「test」で検証します。
New password: Re-type new password:
設定ファイルの一番上に以下を記載します。
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/.htpasswd acl password proxy_auth REQUIRED http_access allow password
http_proxy 環境変数 (http://192.0.2.1:3128) を設定した別のホストを利用して、プロキシ経由で www.google.com にアクセスします。
HTTP/1.1 407 Proxy Authentication Required
設定したとおり、Basic 認証をしないとプロキシを通過できなくなりました。
次に Basic 認証情報 http_proxy 環境変数に含めます。
赤線箇所はプロキシのプライベート IP アドレスに変更します。
HTTP/1.1 200 OK Via: 1.1 ip-172-31-41-193.ap-northeast-1.compute.internal (squid/3.5.20)
http_proxy 環境変数に Basic 認証を含めたのでリクエストが成功しました。
リバースプロキシの設定 (アクセラレータ)
Squid にリバースプロキシの設定をします。
まずは、転送先のホストで Web サーバーを起動しておきます。
今回は Web サーバーに nginx を利用します。nginx の詳細は以下の記事でまとめています。
次に Squid の稼働するホストで以下の設定をします。
赤線箇所は Web サーバー (nginx) の稼働するホストの IP アドレスを入力します。
http_port 3129 accel
cache_peer 192.0.2.2 parent 80 0 no-query originserver
http_port の後ろに "accel" をつけるとアクセラレータ(リバースプロキシ)となります。
cache_peer で転送先の Web サーバーの設定をします。
HTTP/1.1 200 OK Server: nginx/1.20.0 Via: 1.1 ip-192-0-2-1.ap-northeast-1.compute.internal (squid/3.5.20)
Squid サーバー (192.0.2.1) を経由して、nginx サーバー (192.0.2.2) に到達できたことを確認できました。
関連記事
関連記事:サーバー | ||||
---|---|---|---|---|