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


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

LinuxFoundation認定プログラムのご紹介。

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

  1. Part 1 – Install Network Services and Configuring Auto Startup at Boot

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

Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

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

疑問に思われるかもしれませんが、なぜネットワークインフラストラクチャにさらに別のソフトウェアを追加したいのでしょうか。

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

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

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

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

イカの設定–基本

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

  1. The ACL elements are directive lines that begin with the word “acl” and represent types of tests that are performed against any request transaction.
  2. The access list rules consist of an allow or deny action followed by a number of ACL elements, and are used to indicate what action or limitation has to be enforced for a given request. They are checked in order, and list searching terminates as soon as one of the rules is a match. If a rule has multiple ACL elements, it is implemented as a boolean AND operation (all ACL elements of the rule must be a match in order for the rule to be a match).

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. The first word, acl, indicates that this is a ACL element directive line.
  2. The second word, localhost or localnet, specify a name for the directive.
  3. The third word, src in this case, is an ACL element type that is used to represent a client IP address or range of addresses, respectively. You can specify a single host by IP (or hostname, if you have some sort of DNS resolution implemented) or by network address.
  4. The fourth parameter is a filtering argument that is “fed” to the directive.

以下の2行は、アクセスリストルールであり、前述の ACL ディレクティブの明示的な実装を表しています。つまり、リクエストがローカルネットワーク( localnet )から、または localhost から送信された場合、 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 )でクライアントブラウザを構成して、次のようにプロキシ経由でインターネットにアクセスします。

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サイト(この場合は www.tecmint.com )を開きます。

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

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

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

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

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

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

acl ubuntuOS src 192.168.0.104

2. ACL ディレクティブを既に配置されている localnet access リストに追加しますが、その前に感嘆符を付けます。これは、「 ubuntuOSディレクティブに一致するクライアントを除いてlocalnetACLディレクティブに一致するクライアントにインターネットアクセスを許可する」ことを意味します。

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時から午前11時まで)にのみこれらのサイトへのアクセスを許可したい場合もあります。 水曜日(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. We need to tell Squid which authentication helper program to use with the auth_param directive by specifying the name of the program (most likely, /usr/lib/squid/ncsa_auth or /usr/lib64/squid/basic_nsca_auth), plus any command line options (/etc/squid/passwd in this case) if necessary.
  2. The /etc/squid/passwd file is created through htpasswd, a tool to manage basic authentication through files. It will allow us to add a list of usernames (and their corresponding passwords) that will be allowed to use Squid.
  3. credentialsttl 30 minutes will require entering your username and password every 30 minutes (you can specify this time interval with hours as well).
  4. casesensitive on indicates that usernames and passwords are case sensitive.
  5. realm represents the text of the authentication dialog that will be used to authenticate to squid.
  6. Finally, access is granted only when proxy authentication (proxy_auth REQUIRED) succeeds.

次のコマンドを実行して、ファイルを作成し、ユーザー 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 is the Squid storage format.
  2. /var/cache/squid is a top-level directory where cache files will be stored. This directory must exist and be writeable by Squid (Squid will NOT create this directory for you).
  3. 1000 is the amount (in MB) to use under this directory.
  4. 16 is the number of 1st-level subdirectories, whereas 256 is the number of 2nd-level subdirectories within /var/spool/squid.
  5. The maximum_object_size directive specifies the maximum size of allowed objects in the cache.
  6. refresh_pattern tells Squid how to deal with specific file types (.mp4 and .iso in this case) and for how long it should store the requested objects in cache (2880 minutes = 2 days).

1番目と2番目の 2880 は、明示的な有効期限のないオブジェクトが最近のものと見なされる期間の下限と上限であり、したがってキャッシュによって提供されますが、 0%は、明示的な有効期限のない各オブジェクトが最近のものと見なされるオブジェクトの経過時間(最後の変更からの時間)のパーセンテージです。

最初のクライアント( 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であったことを示します。それぞれ、Missed。何らかの理由でリクエストをキャッシュで処理できない場合、Squidはインターネットからリクエストを処理しようとします。

結論

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

詳細なドキュメントについては、SquidのWebサイトを参照することをお勧めします(wikiも確認してください)が、質問やコメントがある場合は、遠慮なくお問い合わせください。ご連絡をお待ちしております。

全著作権所有。 © Linux-Console.net • 2019-2022