LinuxでSquidキャッシュとCiscoルーターを使用してウェブトラフィックを制御する方法
ネットワークにおける重要なタスクの一つは、スタッフのウェブサーフィンのトラフィックを管理することです。この問題を解決するための多くのソリューションがありますが、その中で最も優れたソリューションの一つは、Linuxマシン上でのSquidキャッシュの使用です。Squidは、一つのネットワークから別のネットワーク、例えばLANからインターネットへのウェブトラフィックのフローを検査、制限、キャッシュすることができます。
クライアントのウェブリクエストをスクワイドマシンにリダイレクトする方法はいくつかあります。この文では、WCCPプロトコルを使用して、CISCOルーターからSquid Cacheマシンにウェブトラフィックをリダイレクトする方法を紹介します。
下の画像は基本的なシナリオの例です。
上記の図のように、すべてのクライアントのウェブトラフィックはまずCiscoルーター(彼らのデフォルトゲートウェイ)に行き、その後、ルーターはパケットを静かにSquidマシンにリダイレクトします。これにより、Squidは役割を果たします。主な役割はウェブコンテンツのキャッシュ、ドメイン、時間間隔、IPアドレス、ファイルサイズなどに基づいてアクセスを制限することです。
このシナリオの設定を2つの主要なステップで確認します。まず、SquidとLinuxをインストールして設定し、その後、ルーターを設定してウェブトラフィックパケットをWCCPプロトコルを使用してSquidにリダイレクトします。
テスト環境
このシナリオでは、CENTOS 6.5を私のLINUXサーバーとして、Cisco 2691を私のルーターシステムとして使用します。
Operating System: CENTOS 6.5
Application: Squid
Router: Cisco 2691
ステップ1:Squidキャッシュのインストール
SquidはCENTOSのデフォルトリポジトリに利用できるため、まずは素敵なyumコマンドを使ってインストールし、その後サービスを起動し、最後にsquidサービスの自動起動を設定します。
# yum -y install squid
service squid start
chkconfig squid on
ステップ2:Squidキャッシュの準備
今、私たちはCentOSオペレーティングシステムのいくつかのデフォルトの動作を変更する必要があります。パケットフォワーディングを有効にし、逆パスフィルター(RPF)を無効にする必要があります。CentOSを透明なフォワーダー(ルーターのように)として動作させるために、パケットフォワーディングを有効にします。
詳細に説明させてください。トラフィックがCentOSに入ると、それは送信元アドレスと宛先アドレスを持ちます。たとえば、クライアントがブラウザにwww.example.comと入力すると、HTTPリクエストパケットが生成され、クライアントマシンの送信元IPアドレス(例えば、192.168.1.20)とexample.comサーバーの宛先IPアドレス(例えば、2.2.2.2)を持っています。
したがって、CentOSがパケットを受信すると、それが間違ったパケットであると検出します。なぜなら、CentOSのIPアドレスがパケットの宛先アドレスではないからです。セキュリティ上の理由から、CentOSはそのパケットを破棄します。しかし、私たちはSquidに透過モードで動作させたいと考えています。この状況をCentOSに知らせるために、パケット転送オプションを有効にします。
次に、CentOSがSquidマシンからアクセスできないパケットや、Squidマシンと同じサブネットにIPアドレスを持たないパケットを受け入れるようにするために、リバースパスフィルタリングを無効にする必要があります。
# nano /etc/sysctl.conf
net.ipv4.ip_forward = 1 #set to 1 for enable the packet forwarding feature
net.ipv4.conf.default.rp_filter = 0 # set to 0 for disable the reverse path filter behavior
次に、CENTOSマシンでGREインタフェースを作成する必要があります。それは何のためでしょうか?もっと詳しく説明します。WCCPプロトコルはGREトンネルを介して動作します。つまり、ルーターとSquidの間の言語はGREです。したがって、CENTOSにはGREパケットをデカプセル化するためのGREインタフェースが必要です。
GREインターフェースのための設定ファイルを「/etc/sysconfig/network-script/ifcfg-gre0」パスに作成するべきです。
ifcfg-gre0 設定ファイルに以下のコードを入力してください。
DEVICE=gre0
BOOTPROTO=static
IPADDR=10.0.0.2 #unused ip address in your network
NETMASK=255.255.255.252
ONBOOT=yes
IPV6INIT=no
GREインターフェースを作成した後、ネットワークサービスを再起動する必要があります。
# service network restart
ステップ3:Squidキャッシュの設定
私たちは、ルーターからWCCPパケットを受け入れるためにSquidに伝える必要があります。以下のコードを/etc/squid/squid.confファイルに入力してください。
http_port 3128 intercept # Define SQUID listening port
wccp2_router 192.168.1.254 #ip address of the router
wccp2_forwarding_method gre
wccp2_return_method gre
wccp2_service standard 0
設定ファイルを保存して、squidサービスを再起動してください。
# service squid restart
Squidは3128ポートでパケットを待機していますが、私たちのパケットの宛先ポート番号は80です。したがって、宛先ポート80を3128に変更するためには、CENTOSに統合されたファイアウォール(その名もiptable)でNATルールを作成する必要があります。
# iptables -t nat -A PREROUTING -i gre0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -j MASQUERADE
ステップ4:Ciscoルーターの設定
まず、CiscoルーターでWCCPを有効にする必要があります。
R1(config)# ip wccp version 2
Then we must use an ACL for introducing SQUID cache machine to router
R1(config)# ip access-list standard SQUID-MACHINE
R1(config-std-nacl)# permit host 192.168.1.10
次に、2つの異なる目的のために別のアクセスリストを定義します。まず、SQUIDトラフィックをWCCPプロトコルによってリダイレクトしないようにする必要があります(そうしないと無限ループに陥ります!!)。次に、WCCPおよびSQUIDを通過させたいLANトラフィックを定義します。
R1(config)#ip access-list LAN-TRAFFICS
R1(config-ext-nacl)#deny ip host 192.168.1.10 any #Prevent SQUID to get in loop
R1(config-ext-nacl)#permit tcp 192.168.1.0 0.0.0.255 any equal www #define LAN Traffics
アクセスリストを作成した後、ルーターでWCCPプロトコルを設定する必要があります。
R1(config)# ip wccp web-cache redirect-list LAN-TRAFFIC group-list SQUID-MACHINE
すべての準備が整いました。最終ステップとして、ルーターにどのインターフェースにトラフィックをリダイレクトする必要があるかをWCCP設定を使って伝えなければなりません。
R1(config)#interface fastEthernet 0/0
R1((config-if)# ip wccp web-cache redirect in
要約
シナリオに従って、すべてのコマンドとテキストをより良い理解のために数行で要約する時が来ました。スタッフのウェブサーフィンパケット(TCPポート80)は、クライアントのデフォルトゲートウェイであるルーターから、WCCPプロトコルを使用してスキッドキャッシュマシンへリダイレクトされます。
これらのプロセスはすべて静かに行われ、クライアント側での追加の設定はありません。そのため、LAN内のウェブトラフィックに対してポリシーを制御および設定できます。たとえば、限られた時間内でのみウェブサーフィンアクセスを取得したり、最大ダウンロードサイズを制限したり、カスタムのブラックリストやホワイトリストを定義したり、インターネットの使用に関する完全なレポートを生成したりできます。
このシナリオでの興味深い事実の一つは、イカマシンがダウンすると、ルーターがこの問題を検出し、パケットのリダイレクトを停止することです。これにより、ネットワークでのゼロダウンタイムを楽しむことができます。
この記事に関して質問がある場合は、下のコメントボックスを通じて返信を残してください。

