Squid〜プロキシサーバのOSS〜
Squidとは、プロキシサーバの機能を持つオープンソースソフトウェアです。Squidは、主にWebプロキシサーバ、Webキャッシュサーバとして機能し、安定性に優れていることから、幅広い用途で利用されています。Squidの歴史は古く、既にメジャーなプロキシサーバとして、RedHat Enterprise Linuxなどの多くのLinuxディストリビューションで標準で採用されています。しかし最近では、ネットサービス(Office 365等)の利用時におけるインターネット回線の分離や、IoTデバイスの認証などにSquidが利用されることも多く、再び注目が集まっています。この記事では、Linuxで利用できるプロキシサーバとして有名な、Squidの機能や用途について説明します。
Squidとは
Squidとは、プロキシサーバやWebキャッシュサーバとして利用されているオープンソースソフトウェアです。RedHat Enterprise Linux、CentOS、Ubuntuなど、多くのLinuxディストリビューションで標準で採用されており、プロキシサーバとしては最も有名なソフトウェアです。Squidは当初、UNIX系の一部のOS向けに開発されていましたが、現在はWindowsを含むほとんどのOSで利用可能で、GNU GPLライセンス下で利用することができます。
Squidは、HTTP、HTTPS、FTPを始めとする多くのプロトコルに対応しています。また、SquidのWebキャッシュ機能により、特にフォワーディングプロキシとして利用される場合、利用する組織外へのウェブ系のトラフィックを削減することができます。
ちなみに、Squidという名称は、英語で「いか」を意味しています。プロキシサーバでは、複数のクライアントからの通信を集約し、いか足のようなシステム構成になることから、この名前が付けられたと言われています。
Squidのプロキシモードの種類
Squidのプロキシサーバは、以下の4つのプロキシモードで動作することができます。
フォワーディングプロキシ
フォワーディングプロキシとは、インターネット上のWebサーバなどに接続する際に、単純にWebアクセスの処理を中継するプロキシです。フォワーディングプロキシを使う場面として、クライアントとサーバが直接的に通信を行えない場合や、直接通信を行うとセキュリティ上のリスクがある場合などが挙げられます。フォワーディングプロキシは、主にローカルネットワークの出口に設置されます。
Squidでは、このフォワーディングプロキシとしての機能が最もポピュラーです。クライアントは、Webブラウザの「プロキシ設定」で、Squidをプロキシサーバとして指定することができます。
フォワーディングプロキシを利用することで、次のようなメリットがあります。
- キャッシュ機能と組み合わせて、ネットワーク外部へのトラフィックを軽減することができる
- アクセス元のIPアドレスの匿名性が確保され、直接サーバへアクセスするよりもセキュリティを強化できる
- リダイレクト機能と組み合わせて、内部ネットワークからアクセス先を制限することができる(ペアレントコントロールもこの機能を利用)
- 認証機能と組み合わせて、ネットワーク内からのWebアクセスを個人レベルで制限することができる
- 接続サイトによってインターネット回線を使い分けることができる
なお、Squidをフォワーディングプロキシとして動作させる場合、標準ではTCP 3128ポートで動作します。ポート番号は設定ファイルで編集可能です。
多段プロキシ
多段プロキシとは、何段階もプロキシを経由して通信を行うプロキシです。Squidを多段プロキシとして動作させる場合、中継したWebのリクエストを直接Webサーバに接続して処理するだけでなく、後段のプロキシサーバに中継します。そうすることで、巨大なネットワーク内でプロキシの階層構造を組むことができます。
また、外部のSaaS(Software as a Service)として提供されているウィルスチェックプロキシへの中継としてもSquidを使うことができます。さらに、ウィルスチェックプロキシが処理できないURLがあるような場合などには、Squidに特定のURLを設定し、上位のプロキシをバイパスするように設定することも可能です。
リバースプロキシ
リバースプロキシとは、インターネットからのWebアクセスを代表して受信し、内部にあるWebサーバ群との通信を中継するプロキシです。リバースプロキシの場合、Squidは、サーバ群の前の入り口部分に窓口として設置されます。
Squidをリバースプロキシとして動作させた場合、以下のような用途例があります。
- Webサーバの負荷分散
代表して受信したウェブアクセスを、複数のWebサーバへアクセスを振り分けることができます。実際に負荷分散を実行する場合の注意点として、Squidサーバの冗長化も検討する必要があります。
- URLごとにサーバを振り分け
代表して受信したウェブアクセスを、WebサイトのURLごとに複数のサーバへ振り分けることができます。Squidをこの用途で使う場面としては、アプリケーションサーバを別々に用意している場合や、同一ドメインながら、コンテンツを別々の開発会社が作成しそれぞれ別のサーバに収容されている場合などがあります。
- SSL/TLSのオフロード
通常、SSL/TLSで利用する証明書は有償であるため、Webサーバの台数が増えるとコストがかかります。しかし、クライアントとSquidの間でSSL/TLSの暗号通信を行い、Squidが暗号をデコードすることで、証明書の使用をリバースプロキシサーバのみに限定し、コストを抑えることができます。
透過プロキシ
透過プロキシとは、利用者がプロキシの存在を意識することなく利用できるプロキシのことであり、ネットワークの出口に設置されたルータなどと組み合わせて利用します。広い意味では、リバースプロキシも透過プロキシと見ることができます。一般的なプロキシでは、すべてのクライアントに対して、プロキシサーバのアドレスを明示的に設定する必要があり、非常に手間がかかります。しかし、透過型プロキシを使うことで、クライアントからサーバへのリクエストを強制的に曲げて中継処理を行います。そのため、クライアントに対してプロキシサーバの設定を行う必要がありません。
Squidを透過プロキシとして動作させた場合、特定ポートへ向けたアクセスのみをルータから透過プロキシサーバに対して振り向け、透過プロキシは通常のHTTPなどのリクエストを受け付けたふりをして接続先のHTTPサーバへリクエストを中継します。Linuxサーバでは、Squidとパケットリダイレクト機能を組み合わせることによって透過プロキシを実現することができます。
Squidのキャッシュ機能
Squidは、Webキャッシュサーバとして、コンテンツをキャッシュする機能もあります。キャッシュサーバとしての設定は、透過プロキシやリバースプロキシの場合にも使用することができます。
Squidをキャッシュサーバとして使う場合、以下のような機能を利用することができます。
キャッシュの管理
Squidは、デフォルトではキャッシュをメモリ上に取得します。利用可能なメモリ使用量には制限があるため、Squidではキャッシュサイズの上限やキャッシュ管理のポリシーを柔軟に設定できるようになっています。また、Squidではメモリキャッシュだけではなく、ディスクキャッシュも利用できます。ディスク上にキャッシュするデータの最小、最大サイズなどもチューニングが可能です。
キャッシュ管理ポリシーとして、Squidでは次の4つが利用可能です。
- LRU(Least Recentlry Used)
- 最も古くに使われたキャッシュをから削除する
- heap GDSP(Greedy Dual Size Frequency)
- もっとも利用確率の低いキャッシュを削除する
- heap LFUDA(Least Freqently Used with Dynamic Aging)
- もっとも利用された確率の高いキャッシュを残すが、サイズを考慮して破棄するデータを決める
- heal LRU
- ヒープを利用したLRUポリシー
キャッシュの更新
Squidでは、キャッシュしたデータの特性に合わせて、キャッシュの更新方法を詳細に設定することができます。URLのパターンを正規表現で指定して、キャッシュの有効期間やリフレッシュパターンなどを設定できます。
キャッシュマネージャ
Squidには、キャッシュマネージャとよばれるキャッシュ管理用のページが付属しています。キャッシュマネージャでは、以下のようにキャッシュに関連する統計情報を表示することができます。
Squidの用途
Squidのプロキシサーバは、以下のような目的で利用することができます。
セキュリティの強化
Squidのプロキシサーバを利用することで、組織内から組織外へのWebトラフィックに対するセキュリティを強化することができます。
多彩なアクセス制御機能
SquidのACL(Access Control List)機能を利用することで、多彩なアクセス制御を実現することができます。具体的なアクセス制御の内容は以下の通りです。
- 利用者に関するアクセス制御
- クライアントIPアドレスをベースにアクセスを制御する機能
- ユーザ認証によりアクセスを制御する機能
- 接続先に関するアクセス制御
- 接続先によってアクセスを制御する機能
- アクセス制御の方法
- 利用を許可もしくは不許可とする
- 認証を必要とするかどうか
- URLフィルタリングなど外部フィルタと連携するかどうか
- 特に接続先URLに関して、実際の接続先を制御
Squidには、これらの機能以外にも様々なアクセス制御が存在します。多彩な制御方法を組み合わせることにより、きめ細かにアクセスの振り分けや制御を行うことが可能です。
規制プログラムとの連携
Squidは、URLフィルタリングなどのWebリダイレクトプログラムと連携することが可能です。アクセス制御と組み合わせ、指定したユーザに対してURLフィルタリングをかけることで、特定のWebサイトへのアクセス制限の機能を持たせることも可能です。規制プログラムとの連携では、ICAP(Internet Content Adaptation Protocol)をサポートしています。
外部認証プログラムとの連携
Squidは、外部のプログラムと連携することで、ユーザ認証やIoTデバイスの認証を実現することができます。標準パッケージにバンドルされている下記のような認証方式はもちろん、より複雑な認証ポリシーをSquidで実現したい場合は、認証プログラムを自作して利用することも可能です。
- パスワードのダイジェスト認証
- SASL認証
- SMB認証
- Kerberos認証
- LDAP認証
- NIS認証
- クライアント証明書での認証
- ワンタイムパスワードでの認証
- ActiveDirectory
アクセス監査
Squidには、キャッシュログとアクセスログの2つのログがあります。そのうち、アクセスログには利用者が閲覧しているすべてのURLの情報が記録されています。組織内からのすべてのWebアクセスをSquid経由にしておくことで、誰がどのサイトを閲覧したか、どのファイルをアップロード・ダウンロードしたかといった監査ログを確認することが可能です。
経路制御
プロキシサーバの経路制御や多段プロキシを活用して、通信の相手や内容によって利用する通信経路を切り替えることができます。これにより、複数の通信回線の経路を使い分けることができます。デージーネットでは、お客様が社内に導入したOffice365を常にスムーズに利用できるよう、Squidを使ってOffice365の通信だけを自動で別の回線に分けるシステムを提案した事例があります。詳細は以下の記事を参照してください。
「Squidを利用したOffice365用プロキシサーバ構築事例」へ
他のソフトウェアとの比較
プロキシサーバを構築する際は、ソフトウェアの特徴を踏まえて、用途に合ったソフトウェアを選択することをお勧めします。以下では、Squidと同じ機能を持ったOSSのHAProxyとNginxを紹介し、それぞれの利用が適した場面について解説します。
HAProxy
HAProxyとは、プロキシ/ロードバランサとして動作する高機能なオープンソースソフトウェアです。サービスの冗長性(High Availability)を確保するために使われるプロキシ(Proxy)ということで、HAProxyという名称が付けられています。HAProxyはRedHat Enterprise Linuxなどでパッケージが提供されているソフトウェアで、安定して動作します。OpenStackなどの内部や、KubernetesのロードバランシングサービスでもHAProxyが使われており、実績が豊富で安心して利用できる汎用的なプロキシサーバです。
HAProxyは、HTTPだけでなく、メール(SMTP/IMAP/POP)やデータベース(MySQL/PostgreSQL)などの様々なTCPプロトコルに対応しています。Webプロキシとしての機能が豊富で、リクエストURLによるサーバの振り分け、TLS/SSLのオフロードなどの処理を行うことが可能です。ロードバランサとしては、バックエンドのサーバのヘルスチェック機能も充実しています。HAProxyは、Proxy Protocolにも対応しています。
Nginx
Nginxとは、軽量で高速なWebサーバのオープンソースソフトウェアです。大容量のデータ配信や大量同時接続に耐えることを目的に設計されています。Nginxは、Webサーバの代表格であるApacheの問題点を解決していることで、急速に導入が進んでいるWebサーバです。
Nginxも、HTTPだけでなく、SMTP、POP3、IMAPなどのTCPプロトコルに対応しています。リバースプロキシとしても豊富な機能を持っており、Nginxが静的コンテンツをキャッシュしておくことで、バックエンドのWebサーバやアプリケーションサーバの負荷を減らすことに繋がります。また、ロードバランサの機能もサポートしており、パフォーマンスも優れています。NginxもHAProxyと同様、Kubernetesのロードバランシングサービスにも採用されているため、信頼できるプロキシソフトウェアです。またNginxも、Proxy Protocolに対応しています。
Squidは非常に歴史のあるソフトウェアであるため、他のプロキシサーバのソフトウェアと比べて安定性という点で優れています。しかし、設計が古いことから、HAProxyやNginxと比べると性能面では劣ります。また、ロードバランサとしての機能は限定的で、Proxy Protocolにも対応しているHAProxyやNginxの方が高機能となっています。以上のことからSquidは、高いパフォーマンスは不要で、基本の機能だけを必要としている場合に手軽に利用するソフトウェアとして活用できます。
デージーネットの取り組み
デージーネットでは、1年間に300台近いインターネットサーバをLinuxで構築しており、とても豊富な実績を持っています。中でも、インターネットサービスプロバイダなどで認証やセキュリティ配慮したシステム構築を多く手がけています。
特にSquidは、そうした厳しい環境でよく利用されます。特に、ISPでの利用に耐えられるURLフィルタリングやウィルスチェックの仕組みを、オープンソースソフトウェアで構築する場合などが多いです。これはSquidに、外部認証プログラムやICAPなどを使って外部と連携できる仕組みが用意されているからです。デージーネットでは、このようなインタフェースを利用したカスタマイズなどの事例も多くございます。
また、デージーネットでシステムの構築をしたお客様には、Open Smart Assistanceという保守サービスに加入することができます。OSSそのものではなく、運用中のシステムが適切に運用できることをサポートしています。 保守サービスでは、使い方から運用方法まで幅広い範囲でのQ&Aや、適正に運用できるようなセキュリティの情報提供、障害調査、回避を行い、安心して利用して頂けるよう管理者の業務をサポートします。
サポートについて
Squidは、多くのLinuxディストリビューションで採用されています。そのため、脆弱性が発見された場合のアップデートなども簡単に入手可能です。さらに、RedHat Enterprise Linuxなどの商用ディストリビューションを利用すれば、設定方法に関するQ&Aや、問題が発生した場合の問い合わせを受けることもできます。
情報の一覧
無料で使えるプロキシサーバ/ロードバランサおすすめ20選
プロキシやロードバランサは、クライアントとサーバーの間に配置して、サーバーや回線のリソースを活用し、システムの性能を最大限引き出したり、セキュリティを高めるために使われます。この記事では、OSSのプロキシとロードバランサの種類、メリットなどを項目ごとに比較をします。
IoTプラットフォームで使われるOSS「IoTネットワークインフラ」
IoTネットワークインフラは、インターネットを構成する、ルータ、セキュリティデバイスなどのインフラです。IoTプラットフォームは、7つのパートからできており、それぞれのパートで使われている技術はIoT用の特別なものというわけではなく、汎用的な技術を選択することもできます。ここでは、IoTプラットフォームで利用できるOSSについて、まとめて解説します。
Squid、delegateによるプロキシサーバ構築事例
現行のプロキシサーバの老朽化のため、クラウド環境上に影響なくリプレースしたいというご要望をいただきました。今回は、OSSのsquid、delegateのインストール・設定を行い、http/ftpのプロキシを行うサーバを構築しました。エンドユーザ様の設定も変更することなく、シームレスに移行を完了させることができました。
Squidを利用したOffice365用プロキシサーバ構築事例
Office365を社内導入したが、同時接続数が多いため、インターネットの閲覧が遅いというご相談をいただきました。そこで、Squidを使い、Office365への通信だけをプロキシサーバに送るように専用のインターネット回線を用意しました。また、プロキシサーバのサイジングを行い、冗長化の構成をとりました。
RADIUSサーバ構築事例
オープンソースソフトウェアだけでWi-Fiホットスポットサービスの提供を行うシステムを構築しました。FreeRADIUSと既存システムとの連携も実現し、従来の仕組みを大きく変えることなくシステムを導入することができました。