Service Rule とは
Service Rule とは、リクエストの内容に応じて Action を適用する機能です。Action としては、以下の機能を適用できます。
- 許可(リクエストを permit します)
- 拒否(リクエストを deny します)
- 検証(リクエストの有効性を確認します)
- リダイレクト(リダイレクトします)
- 書き換え(リクエスト内のURLやヘッダの内容を書き換えます)
- キャッシュ無効(レスポンスをキャッシュしないようにします)
Service Rule を設定する方法としては、Service Rule File を使用する方法と、デバイスごとに1行ずつ設定する方法の2通りがありますこのうち Service Rule File を使用する方法は、バージョン 2.5.7 以降でサポートされています。2.5.7 以降、2.6.1 以前のバージョンでは WebEngine でのみ Service Rule File がサポートされており、2.6.1 以降では Flash Media Streaming でも Service Rule Fule を使用した Service Rule の設定ができるようになっています。
なお、Service Rule を使用するためには、別途ライセンスの購入が必要となりますのでご注意ください。
Authorization Service の有効化
Service Rule を使用するにあたっては、 Authorization Service を有効にしておく必要があります。デフォルトで有効となっていますが、もし明示的に無効にしてある場合には、以下のように有効にしておきます。
(config)# authsrv enable
Service Rule File の例
Service Rule File の例を以下に示します。
<CDSRules xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema\CDSRules.xsd"> <Revision>1.0</Revision>
<CustomerName>cisco</CustomerName>
<Rule_Patterns>
<PatternListGrp id = "grp1">
<UrlRegex>rule[Tt]est</UrlRegex>
<Domain>web.cdn.japan-tac.local</Domain>
</PatternListGrp>
</Rule_Patterns>
<Rule_Actions>
<Rule_Block matchGroup = "grp1" protocol = "http" />
</Rule_Actions>
</CDSRules>
この XML file では、以下ような動作を定義しています。
- URL に "rule[Tt]est" という正規表現が match するか (グループID は grp1)
match する場合は、grp1 に該当する rule である Rule Block が動作し、deny される
Service Rule File の Vaildation 方法
バージョン 2.5 では、configuration guide 内に XML Schema file が記載されています。
この Schema File と適当な XML Validation ツールを使用して、妥当性検証を行うことができます。
以下に Perl の XML::Validator::Schema を使用したサンプルスクリプトを示します。
schema file は "rule.xsd"、Service Rule File は、"text.xml" として保存しておきます。
#!/usr/bin/perl
use XML::SAX::ParserFactory;
use XML::Validator::Schema;
my $validator = XML::Validator::Schema->new(file => 'rule.xsd');
my $parser = XML::SAX::ParserFactory->parser(Handler => $validator);
eval { $parser->parse_uri('test.xml') };
if ($@){
die "File failed validation: $@" ;
}else {
print "Correct XML file\n";
}
Service Rule File のアップロード
CDSM 上の以下の画面からアップロードすることができます。
動作確認
URL に ruleTest 又は ruletest を含めると、Rule Block により、403 Forbidden が返されます。
$ curl -v "http://se0.se.web.cdn.japan-tac.local/videos.html?ruletest"
* About to connect() to se0.se.web.cdn.japan-tac.local port 80
* Trying 192.168.20.7... connected
* Connected to se0.se.web.cdn.japan-tac.local (192.168.20.7) port 80
> GET /videos.html?ruletest HTTP/1.1
> User-Agent: curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3
libidn/0.6.5
> Host: se0.se.web.cdn.japan-tac.local
> Accept: */*
>< HTTP/1.1 403 Forbidden
< Connection: Keep-Alive
< Keep-Alive: timeout=15
< Accept-Ranges: bytes
< Content-Length: 25
< Date: Sat, 10 Dec 2011 17:10:37 GMT
< Server: Cisco-CDS
Auth Server Query Denied
* Connection #0 to host se0.se.web.cdn.japan-tac.local left intact
* Closing connection #0
このとき、transaction-log を enable にしておくと、以下のログにdeny メッセージが出力されます。
se0# type-tail logs/authsvr/working.log
192.168.20.201 2011-12-10 17:10:37 http://se0.se.web.cdn.japan-tac.local/videos.html?ruletest http deny [Pattern match error] Rules
リクエストが rule にマッチするかどうかの処理はAuthSvr が行っているため、AuthSvr の統計情報を見ることで、
Rule が動作しているか確認することができます。 (deny した場合、Blocked カウンタが増加します)
se0# show statistics authsvr
Authserver Statistics
---------------------
Allowed : 154
Blocked : 48
Unknown Server Allowed : 0
Unknown Server Blocked : 0
Errors : 0