ウェブサイト検索

アクセス制限付きの Squid プロキシ サーバーの構成とプロキシを使用するためのクライアントのセットアップ - パート 5


Linux Foundation 認定エンジニア は、Linux システムでのネットワーク サービスのインストール、管理、トラブルシューティングに関する専門知識を持ち、システムの設計、実装、継続的なメンテナンスを担当する熟練した専門家です。広い建築。

Linux Foundation 認定プログラムの紹介。

このシリーズのパート 1 では、Web クライアント用のプロキシ キャッシュ サーバーである Squid をインストールする方法を説明しました。まだシステムにsquidをインストールしていない場合は、続行する前にその投稿(以下のリンク)を参照してください。

  1. パート 1 – ネットワーク サービスのインストールと起動時の自動起動の構成

この記事では、インターネット アクセスを許可または制限するために Squid プロキシ サーバーを構成する方法と、そのプロキシ サーバーを使用するように http クライアントまたは Web ブラウザを構成する方法を説明します。

私のテスト環境のセットアップ

イカサーバー
Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
クライアントマシン1
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
クライアントマシン2
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

簡単に言えば、Web プロキシ サーバーは 1 つ (または複数) のクライアント コンピュータと特定のネットワーク リソース (最も一般的なものはインターネットへのアクセス) との間の仲介者であることを思い出してください。言い換えれば、プロキシ サーバーは、一方ではインターネット (またはインターネットに接続されているルーター) に直接接続され、もう一方では、プロキシ サーバーを介して World Wide Web にアクセスするクライアント コンピュータのネットワークに接続されます。

なぜネットワーク インフラストラクチャにさらに別のソフトウェアを追加する必要があるのかと疑問に思われるかもしれません。

上位 3 つの理由は次のとおりです。

1. Squid は、今後の転送を高速化するために、以前のリクエストのファイルを保存します。たとえば、client1 がインターネットから CentOS-7.0-1406-x86_64-DVD.iso をダウンロードするとします。 client2 が同じファイルへのアクセスを要求すると、squid はファイルをインターネットから再度ダウンロードする代わりに、キャッシュから転送できます。ご想像のとおり、この機能を使用すると、ある種の頻繁な更新が必要なコンピューターのネットワークでのデータ転送を高速化できます。

2. ACL (アクセス制御リスト) により、ウェブサイトへのアクセスを制限したり、ユーザーごとにアクセスを監視したりできます。たとえば、曜日や時間帯、ドメインなどに基づいてアクセスを制限できます。

3.ウェブ フィルタのバイパスは、クライアントがインターネットに直接リクエストするのではなく、リクエストが行われ、リクエストされたコンテンツをクライアントに返すウェブ プロキシを使用することで可能になります。

たとえば、client1 にログオンしており、会社のルーター経由で www.facebook.com にアクセスしたいとします。このサイトは会社のポリシーによってブロックされている可能性があるため、代わりに Web プロキシ サーバーに接続して、www.facebook.com へのアクセスをリクエストさせることができます。リモート コンテンツは、会社のルーターのブロック ポリシーをバイパスして、Web プロキシ サーバーを介して再び返されます。

Squid の構成 – 基本

Squid Web プロキシ サーバーのアクセス制御スキームは、次の 2 つの異なるコンポーネントで構成されます。

  1. ACL 要素 は、「acl」という単語で始まるディレクティブ行で、リクエスト トランザクションに対して実行されるテストの種類を表します。
  2. アクセス リスト ルール は、許可 または 拒否 アクションとその後に続く多数の ACL 要素で構成され、どのようなアクションや制限があるかを示すために使用されます。特定のリクエストに対して適用されます。これらは順番にチェックされ、ルールの 1 つが一致するとすぐにリスト検索が終了します。ルールに複数の ACL 要素がある場合、ルールはブール AND 演算として実装されます (ルールが一致するには、ルールのすべての ACL 要素が一致する必要があります)。

Squid の主な設定ファイルは /etc/squid/squid.conf です。設定ディレクティブとドキュメントの両方が含まれるため、長さは ~5000 行になります。このため、便宜上、設定ディレクティブを含む行のみを含む新しい squid.conf ファイルを作成し、空の行やコメント行は省略します。これを行うには、次のコマンドを使用します。

mv /etc/squid/squid.conf /etc/squid/squid.conf.bkp

その後、

grep -Eiv '(^#|^$)' /etc/squid/squid.conf.bkp

OR

grep -ve ^# -ve ^$ /etc/squid/squid.conf.bkp > /etc/squid/squid.conf

次に、新しく作成した squid.conf ファイルを開き、次の ACL 要素とアクセス リストを探します (または追加します)。

acl localhost src 127.0.0.1/32
acl localnet src 192.168.0.0/24

上の 2 行は、ACL 要素の基本的な使用例を表しています。

  1. 最初の単語 acl は、これが ACL 要素ディレクティブ行であることを示します。
  2. 2 番目の単語 localhost または localnet は、ディレクティブの名前を指定します。
  3. この場合の 3 番目の単語 src は、クライアント IP アドレスまたはアドレス範囲をそれぞれ表すために使用される ACL 要素タイプです。 IP (または、何らかの DNS 解決が実装されている場合はホスト名) またはネットワーク アドレスによって単一のホストを指定できます。
  4. 4 番目のパラメータは、ディレクティブに「供給」されるフィルタリング引数です。

以下の 2 行はアクセス リスト ルールであり、前述のACL ディレクティブの明示的な実装を表しています。簡単に言うと、リクエストがローカル ネットワーク (ローカルネット) または ローカルホスト から送信された場合に、http アクセス を許可する必要があることを示しています。具体的には、許可されるローカル ネットワークまたはローカル ホスト アドレスは何ですか?答えは、localhost ディレクティブと localnet ディレクティブで指定されたものです。

http_access allow localnet
http_access allow localhost

この時点で、Squid を再起動して、保留中の変更を適用できます。

service squid restart 		[Upstart / sysvinit-based distributions]
systemctl restart squid.service 	[systemd-based distributions]

次に、次のように、ローカル ネットワーク (この場合は 192.168.0.104) でプロキシ経由でインターネットにアクセスするようにクライアント ブラウザを設定します。

Firefoxの場合

1. [編集] メニューに移動し、[環境設定] オプションを選択します。

2. [詳細設定]、[ネットワーク] タブ、最後に [設定] をクリックします。

3. 手動プロキシ設定 を確認し、プロキシ サーバーのIP アドレス とリッスンするポート を入力します。接続用。

デフォルトでは、Squid はポート 3128 をリッスンしますが、アクセス リストを編集することでこの動作をオーバーライドできます。 > http_port で始まるルール (デフォルトでは http_port 3128 となります)。

4. [OK] をクリックして変更を適用すると、準備完了です。

クライアントがインターネットにアクセスしていることの確認

次のように、ローカル ネットワーク クライアントがプロキシ経由でインターネットにアクセスしていることを確認できます。

1. クライアントでターミナルを開き、次のように入力します。

ip address show eth0 | grep -Ei '(inet.*eth0)'

このコマンドにより、クライアントの現在のIP アドレス (次の図の192.168.0.104) が表示されます。

2. クライアントで、Web ブラウザを使用して任意の Web サイト (この場合は linux-console.net) を開きます。

3. サーバーで実行します。

tail -f /var/log/squid/access.log

Squid を通じて処理されるリクエストのライブビューが表示されます。

クライアントによるアクセスの制限

次に、ローカル ネットワークの残りの部分へのアクセスを維持しながら、その特定のクライアント IP アドレスへのアクセスを明示的に拒否したいとします。

1. 次のように新しい ACL ディレクティブを定義します (私は ubuntuOS という名前を付けましたが、任意の名前を付けることができます)。

acl ubuntuOS src 192.168.0.104

2. すでに存在する ローカルネット アクセス リストに ACL ディレクティブを追加しますが、先頭に感嘆符を付けます。これは、「ubuntuOS ディレクティブに一致するクライアントを除き、localnet ACL ディレクティブに一致するクライアントへのインターネット アクセスを許可する 」ことを意味します。

http_access allow localnet !ubuntuOS

3. 変更を適用するには、Squid を再起動する必要があります。その後、任意のサイトを参照しようとすると、アクセスが拒否されていることがわかります。

Squid の構成 - 微調整

ドメインおよび/または時間帯/曜日によるアクセスの制限

ドメインによって Squid へのアクセスを制限するには、次のように ACL ディレクティブで dstdomain キーワードを使用します。

acl forbidden dstdomain "/etc/squid/forbidden_domains"

forbidden_domains は、アクセスを拒否したいドメインを含むプレーン テキスト ファイルです。

最後に、上記のディレクティブに一致しないリクエストに対して Squid へのアクセスを許可する必要があります。

http_access allow localnet !forbidden

あるいは、月曜日 (M) の特定の時間帯 (午前 10:00 から午前 11:00 まで) にのみこれらのサイトへのアクセスを許可したい場合もあります。 水曜日 (W)金曜日 (F) です。

acl someDays time MWF 10:00-11:00
http_access allow forbidden someDays
http_access deny forbidden

そうしないと、それらのドメインへのアクセスがブロックされます。

ユーザー認証によるアクセス制限

Squid は、いくつかの認証メカニズム (Basic、NTLM、Digest、SPNEGO、Oauth) とヘルパー (SQL データベース、LDAP、NIS、NCSA など) をサポートしています。このチュートリアルでは、NCSA による基本認証を使用します。

次の行を /etc/squid/squid.conf ファイルに追加します。

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive on
auth_param basic realm Squid proxy-caching web server for Tecmint's LFCE series
acl ncsa proxy_auth REQUIRED
http_access allow ncsa

: CentOS 7 では、squid 用の NCSA プラグインは /usr/lib64/squid/basic_nsca_auth にあります。 なので、上記の行をそれに応じて変更します。

いくつかの説明:

  1. auth_param ディレクティブでどの認証ヘルパー プログラムを使用するかを Squid に伝える必要があります。それには、プログラムの名前 (おそらく /usr/lib/squid/ncsa_auth または /usr/lib64/squid/basic_nsca_auth)、さらに必要に応じてコマンド ライン オプション (この場合は/etc/squid/passwd) を追加します。
  2. /etc/squid/passwd ファイルは、ファイルを通じて基本認証を管理するツールである htpasswd によって作成されます。これにより、Squid の使用を許可するユーザー名 (およびそれに対応するパスワード) のリストを追加できるようになります。
  3. credentialsttl 30 分 では、30 分ごとにユーザー名とパスワードを入力する必要があります (この時間間隔は時間単位で指定することもできます)。
  4. casesensitive on は、ユーザー名とパスワードが大文字と小文字を区別することを示します。
  5. レルム は、squid への認証に使用される認証ダイアログのテキストを表します。
  6. 最後に、プロキシ認証 (proxy_auth 必須) が成功した場合にのみアクセスが許可されます。

次のコマンドを実行してファイルを作成し、ユーザー gacanepa の認証情報を追加します (ファイルがすでに存在する場合は -c フラグを省略します)。

htpasswd -c /etc/squid/passwd gacanepa

クライアント マシンで Web ブラウザを開き、任意のサイトを参照してみます。

認証が成功すると、要求されたリソースへのアクセスが許可されます。そうしないと、アクセスが拒否されます。

キャッシュを使用してデータ転送を高速化する

Squid の際立った機能の 1 つは、同じクライアントまたは他のクライアントによるそれらのオブジェクトの今後のリクエストを高速化するために、Web からリクエストされたリソースをディスクにキャッシュできることです。

次のディレクティブを squid.conf ファイルに追加します。

cache_dir ufs /var/cache/squid 1000 16 256
maximum_object_size 100 MB
refresh_pattern .*\.(mp4|iso) 2880

上記のディレクティブをいくつか説明します。

  1. ufs は Squid ストレージ形式です。
  2. /var/cache/squid は、キャッシュ ファイルが保存される最上位ディレクトリです。このディレクトリは存在し、Squid によって書き込み可能である必要があります (Squid はこのディレクトリを作成しません)。
  3. 1000 は、このディレクトリで使用する量 (MB 単位) です。
  4. 16 は第 1 レベルのサブディレクトリの数であり、256/var/spool/squid 内の第 2 レベルのサブディレクトリの数です。
  5. maximum_object_size ディレクティブは、キャッシュ内で許可されるオブジェクトの最大サイズを指定します。
  6. refresh_pattern は、特定のファイル タイプ (この場合は .mp4.iso) の処理方法と、要求されたファイルを保存する期間を Squid に指示します。キャッシュ内のオブジェクト (2880 分=2 日)。

最初と 2 番目の 2880 は、それぞれ、明示的な有効期限のないオブジェクトが最近とみなされ、キャッシュによって処理される期間の下限と上限です。一方、0% は、明示的な有効期限のない各オブジェクトが最近のものとみなされるオブジェクトの経過時間 (最後の変更からの経過時間) の割合です。

ケーススタディ: 2 つの異なるクライアントから .mp4 ファイルをダウンロードし、キャッシュをテストする

最初のクライアント (IP 192.168.0.104) は、71 MB .mp4 ファイルを 2 分 52 秒でダウンロードします。

2 番目のクライアント (IP 192.168.0.17) は、同じファイルを 1.4 秒でダウンロードします。

これは、最初のケースとは対照的に、2 番目のケースではファイルが Squid キャッシュ (TCP_HIT/200 で示される) から提供されたためです。インターネット (TCP_MISS/200 で表されます)。

HIT キーワードと MISS キーワードは、200 http 応答コードとともに、ファイルは両方とも正常に提供されたが、キャッシュは HIT であったことを示します。と逃しました。何らかの理由でリクエストをキャッシュで処理できない場合、Squid はインターネットからリクエストを処理しようとします。

結論

この記事ではSquid Web キャッシュ プロキシ を設定する方法について説明しました。プロキシ サーバーを使用すると、選択した基準を使用してコンテンツをフィルタリングしたり、待ち時間を短縮したりできます (同一の受信リクエストが実際にコンテンツを提供している Web サーバーよりもクライアントに近いキャッシュから提供されるため、結果的に高速になります)データ転送)とネットワーク トラフィックも削減されます(使用帯域幅の量が削減され、トラフィックに料金を支払っている場合はコストが節約されます)。

さらに詳しいドキュメントについては Squid Web サイトを参照してください (必ず Wiki も確認してください) が、ご質問やコメントがございましたら、お気軽にお問い合わせください。ぜひご連絡ください。