Blue Coat® Systems ProxySG® アプライアンス Content Policy Language リファレンス バージョン SGOS 6.4 Copyright© 1999-2013 Blue Coat Systems, Inc. All rights reserved worldwide. No part of this document may be reproduced by any means nor modified, decompiled, disassembled, published or distributed, in whole or in part, or translated to any electronic medium or other means without the written consent of Blue Coat Systems, Inc. All right, title and interest in and to the Software and documentation are and shall remain the exclusive property of Blue Coat Systems, Inc. and its licensors. ProxyAV™, ProxyOne™, CacheOS™, SGOS™, SG™, Spyware Interceptor™, Scope™, ProxyRA Connector™, ProxyRA Manager™, Remote Access™ and MACH5™ are trademarks of Blue Coat Systems, Inc. and CacheFlow®, Blue Coat®, Accelerating The Internet®, ProxySG®, WinProxy®, PacketShaper®, PacketShaper Xpress®, PolicyCenter®, PacketWise®, AccessNow®, Ositis®, Powering Internet Management®, The Ultimate Internet Sharing Solution®, Cerberian®, Permeo®, Permeo Technologies, Inc.®, and the Cerberian and Permeo logos are registered trademarks of Blue Coat Systems, Inc. All other trademarks contained in this document and in the Software are the property of their respective owners. BLUE COAT SYSTEMS, INC. AND BLUE COAT SYSTEMS INTERNATIONAL SARL (COLLECTIVELY “BLUE COAT”) DISCLAIM ALL WARRANTIES, CONDITIONS OR OTHER TERMS, EXPRESS OR IMPLIED, STATUTORY OR OTHERWISE, ON SOFTWARE AND DOCUMENTATION FURNISHED HEREUNDER INCLUDING WITHOUT LIMITATION THE WARRANTIES OF DESIGN, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL BLUE COAT, ITS SUPPLIERS OR ITS LICENSORS BE LIABLE FOR ANY DAMAGES, WHETHER ARISING IN TORT, CONTRACT OR ANY OTHER LEGAL THEORY EVEN IF BLUE COAT SYSTEMS, INC. HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Americas: Blue Coat Systems, Inc. 420 N. Mary Ave. Sunnyvale, CA 94085 Rest of the World: Blue Coat Systems International SARL 3a Route des Arsenaux 1700 Fribourg, Switzerland ドキュメント番号 : 231-03019-ja_JP ドキュメント改訂 : SGOS 6.4.2 - 2012 年 12 月 ii 目次 序章 : Content Policy Language の導入 ドキュメントの構成について......................................................................................................................... xv サポートされるブラウザ................................................................................................................................ xvi 注および警告................................................................................................................................................... xvii 第 1 章 : Content Policy Language の概要 17 概念 ......................................................................................................................................................................17 トランザクション .....................................................................................................................................18 ポリシー モデル ........................................................................................................................................18 CPL のロール.............................................................................................................................................19 CPL 言語の基本 .................................................................................................................................................19 コメント .....................................................................................................................................................20 ルール .........................................................................................................................................................20 メモ .............................................................................................................................................................21 引用符の使用 .............................................................................................................................................22 レイヤ .........................................................................................................................................................22 セクション .................................................................................................................................................23 定義 .............................................................................................................................................................24 参照整合性 .................................................................................................................................................26 代入値 .........................................................................................................................................................26 CPL を使用したポリシーの記述 .....................................................................................................................26 認証および拒否 .........................................................................................................................................27 ポリシーのインストール .........................................................................................................................28 CPL 一般文字および書式設定.................................................................................................................29 トラブルシューティング ポリシー.................................................................................................................30 アップグレード / ダウングレードに関する問題 ..........................................................................................30 CPL 構文廃止.............................................................................................................................................30 条件付きコンパイル .................................................................................................................................31 第 2 章 : Content Policy Language の概要 33 トランザクションとタイミングの理解..........................................................................................................33 <Admin> トランザクション...................................................................................................................34 <Proxy> トランザクション .....................................................................................................................34 <DNS-Proxy> トランザクション ...........................................................................................................36 <Cache> トランザクション.....................................................................................................................37 <Exception> トランザクション..............................................................................................................37 iii Blue Coat ProxySG Content Policy Language リファレンス <Forwarding> トランザクション .......................................................................................................... 38 <SSL> トランザクション ........................................................................................................................ 38 タイミング ................................................................................................................................................. 38 レイヤの理解...................................................................................................................................................... 39 <Admin> レイヤ ...................................................................................................................................... 40 <Cache> レイヤ ........................................................................................................................................ 40 <Exception> レイヤ ................................................................................................................................. 41 <Forward> レイヤ.................................................................................................................................... 42 <Proxy> レイヤ......................................................................................................................................... 42 <DNS-Proxy> レイヤ............................................................................................................................... 43 <SSL-Intercept> レイヤ ........................................................................................................................... 44 <SSL> レイヤ ............................................................................................................................................ 44 レイヤ ガード ............................................................................................................................................ 45 タイミング ................................................................................................................................................. 45 セクションの理解.............................................................................................................................................. 46 [Rule] .......................................................................................................................................................... 47 [url] ............................................................................................................................................................. 47 [url.domain] .............................................................................................................................................. 48 [url.regex] .................................................................................................................................................. 48 [server_url.domain].................................................................................................................................. 48 セクション ガード .................................................................................................................................... 48 ポリシーの定義.................................................................................................................................................. 49 ブラックリストおよびホワイトリスト ................................................................................................. 50 全般的なルールおよび全般的なルールに対する例外 ......................................................................... 50 ベスト プラクティス......................................................................................................................................... 53 第 3 章 : 条件リファレンス 55 条件の構文.......................................................................................................................................................... 55 パターン タイプ................................................................................................................................................. 56 使用できない条件.............................................................................................................................................. 57 レイヤ タイプの制限 ................................................................................................................................ 57 グローバル制限 ......................................................................................................................................... 57 条件リファレンス.............................................................................................................................................. 58 admin.access=................................................................................................................................................... 59 ami.config.threat-protection.malware-scanning.config_setting=............................................................. 60 attribute.name= ................................................................................................................................................ 61 authenticated= .................................................................................................................................................. 68 bitrate=............................................................................................................................................................... 69 category= ........................................................................................................................................................... 71 client.address=.................................................................................................................................................. 72 client.address.login.count=............................................................................................................................. 73 client.certificate.common_name= .................................................................................................................. 74 iv 目次 client.certificate.requested=............................................................................................................................ 75 client.certificate.subject= ................................................................................................................................. 76 client.connection.dscp= ................................................................................................................................... 77 client.connection.negotiated_cipher= ........................................................................................................... 78 client.connection.negotiated_cipher.strength=............................................................................................ 79 client.connection.negotiated_ssl_version=................................................................................................... 80 client.host= ........................................................................................................................................................ 81 client.host.has_name= ..................................................................................................................................... 82 client.protocol=................................................................................................................................................. 83 condition= ......................................................................................................................................................... 84 console_access= ................................................................................................................................................ 86 content_admin=................................................................................................................................................ 87 content_management ...................................................................................................................................... 88 date[.utc]= ......................................................................................................................................................... 89 day= ................................................................................................................................................................... 90 dns.client_transport=....................................................................................................................................... 91 dns.request.address=....................................................................................................................................... 92 dns.request.category= ..................................................................................................................................... 93 dns.request.class= ............................................................................................................................................ 94 dns.request.name=........................................................................................................................................... 95 dns.request.opcode=........................................................................................................................................ 96 dns.request.type=............................................................................................................................................. 97 dns.response.a= ................................................................................................................................................ 98 dns.response.aaaa= .......................................................................................................................................... 99 dns.response.cname= .................................................................................................................................... 100 dns.response.code=........................................................................................................................................ 101 dns.response.nodata=.................................................................................................................................... 102 dns.response.ptr=........................................................................................................................................... 103 exception.id= .................................................................................................................................................. 104 ftp.method= .................................................................................................................................................... 106 group= ............................................................................................................................................................. 107 has_attribute.name= ...................................................................................................................................... 109 has_client= ...................................................................................................................................................... 111 health_check= ................................................................................................................................................. 112 hour=................................................................................................................................................................ 113 http.connect= .................................................................................................................................................. 115 http.method= .................................................................................................................................................. 116 http.method.custom= .................................................................................................................................... 117 http.method.regex= ....................................................................................................................................... 118 http.request.body.size= ................................................................................................................................. 119 http.request.body.max_size_exceeded= ..................................................................................................... 120 http.request_line.regex= ............................................................................................................................... 121 http.request.version=..................................................................................................................................... 122 http.response.apparent_data_type=............................................................................................................ 123 http.response.code=....................................................................................................................................... 124 http.response.data= ....................................................................................................................................... 125 http.response.version= .................................................................................................................................. 126 http.transparent_authentication=................................................................................................................ 127 http.x_method= .............................................................................................................................................. 128 v Blue Coat ProxySG Content Policy Language リファレンス icap_error_code=............................................................................................................................................ is_healthy.health_check_name= .................................................................................................................. im.buddy_id= ................................................................................................................................................. im.chat_room.conference=............................................................................................................................ im.chat_room.id= ........................................................................................................................................... im.chat_room.invite_only=........................................................................................................................... im.chat_room.type=....................................................................................................................................... im.chat_room.member=................................................................................................................................ im.chat_room.voice_enabled= ..................................................................................................................... im.client=......................................................................................................................................................... im.file.extension= ........................................................................................................................................... im.file.name= .................................................................................................................................................. im.file.path=.................................................................................................................................................... im.file.size= ..................................................................................................................................................... im.message.opcode=...................................................................................................................................... im.message.reflected= ................................................................................................................................... im.message.route= ......................................................................................................................................... im.message.size=............................................................................................................................................ im.message.text= ............................................................................................................................................ im.message.type=........................................................................................................................................... im.method=..................................................................................................................................................... im.user_agent= ............................................................................................................................................... im.user_id= ..................................................................................................................................................... im.user_agent.supported=............................................................................................................................ iterator= ........................................................................................................................................................... ldap.attribute.ldap_attribute_name= .......................................................................................................... ldap.attribute.ldap_attribute_name.as_number= ..................................................................................... ldap.attribute.ldap_attribute_name.count= ............................................................................................... ldap.attribute.ldap_attribute_name.exists= ............................................................................................... live=.................................................................................................................................................................. minute= ........................................................................................................................................................... month= ............................................................................................................................................................ proxy.address= ............................................................................................................................................... proxy.card= ..................................................................................................................................................... proxy.port= ..................................................................................................................................................... p2p.client=....................................................................................................................................................... raw_url.regex= ............................................................................................................................................... raw_url.host.regex=....................................................................................................................................... raw_url.path.regex= ...................................................................................................................................... raw_url.pathquery.regex= ............................................................................................................................ raw_url.port.regex= ....................................................................................................................................... raw_url.query.regex= .................................................................................................................................... realm= .............................................................................................................................................................. release.id= ....................................................................................................................................................... release.version=.............................................................................................................................................. request.header.content-length.as_number= .............................................................................................. request.header.header_name= ..................................................................................................................... request.header.header_name.address= ...................................................................................................... request.header.header_name.exists= ............................................................................................................. vi 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 173 174 175 176 178 179 目次 request.header.header_name.count=............................................................................................................. request.header.header_name.length=............................................................................................................ request.header.Referer.url=.......................................................................................................................... request.header.Referer.url.category=.......................................................................................................... request.header.Referer.url.host.is_private=............................................................................................... request.raw_headers.count= ........................................................................................................................ request.raw_headers.length= ....................................................................................................................... request.raw_headers.regex=......................................................................................................................... request.x_header.header_name=................................................................................................................. request.x_header.header_name.address= .................................................................................................. request.x_header.header_name.count=......................................................................................................... request.x_header.header_name.exists=......................................................................................................... request.x_header.header_name.length= ....................................................................................................... response.header.content-length.as_number=............................................................................................ response.header.header_name= .................................................................................................................. response.raw_headers.count=...................................................................................................................... response.raw_headers.length= .................................................................................................................... response.raw_headers.regex= ...................................................................................................................... response.x_header.header_name= .............................................................................................................. server.certificate.hostname=......................................................................................................................... server.certificate.hostname.category= ........................................................................................................ server.certificate.subject=.............................................................................................................................. server.connection.client_keyring ................................................................................................................. server.connection.dscp=................................................................................................................................ server.connection.negotiated_cipher= ........................................................................................................ server.connection.negotiated_cipher.strength= ........................................................................................ server.connection.negotiated_ssl_version= ............................................................................................... server_url= ...................................................................................................................................................... server_url.category=...................................................................................................................................... server_url.host.is_private= ........................................................................................................................... service.group= ................................................................................................................................................ service.name= ................................................................................................................................................. session-monitor.attribute.attribute_name=................................................................................................ socks=............................................................................................................................................................... socks.accelerated=.......................................................................................................................................... socks.method=................................................................................................................................................ socks.version= ................................................................................................................................................ source.port= .................................................................................................................................................... ssl.proxy_mode= ............................................................................................................................................ streaming.client=............................................................................................................................................ streaming.content= ........................................................................................................................................ streaming.rtmp.app_name= ......................................................................................................................... streaming.rtmp.method=.............................................................................................................................. streaming.rtmp.page_url=............................................................................................................................ streaming.rtmp.stream_name=.................................................................................................................... streaming.rtmp.swf_url= .............................................................................................................................. time= ................................................................................................................................................................ tunneled= ........................................................................................................................................................ url= ................................................................................................................................................................... 180 181 182 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 205 206 207 209 210 211 214 215 216 217 218 220 221 222 223 224 225 226 227 228 229 230 231 232 233 235 236 vii Blue Coat ProxySG Content Policy Language リファレンス url.application.name= ................................................................................................................................... url.application.operation= ............................................................................................................................ url.category=................................................................................................................................................... url.host.is_private= ........................................................................................................................................ user=................................................................................................................................................................. user.authentication_error= ........................................................................................................................... user.authorization_error=............................................................................................................................. user.domain= .................................................................................................................................................. user.is_guest= ................................................................................................................................................. user.login.address=........................................................................................................................................ user.login.count= ........................................................................................................................................... user.login.time=.............................................................................................................................................. user.regex=...................................................................................................................................................... user.x509.issuer= ............................................................................................................................................ user.x509.serialNumber= .............................................................................................................................. user.x509.subject= .......................................................................................................................................... virus_detected= .............................................................................................................................................. weekday= ........................................................................................................................................................ year= ................................................................................................................................................................ 244 245 246 247 248 250 251 252 253 254 255 256 257 258 259 260 261 262 263 第 4 章 : プロパティ参照 265 プロパティ参照................................................................................................................................................ 265 access_log( ) .................................................................................................................................................... 266 access_server( ) ............................................................................................................................................... 267 action( ) ............................................................................................................................................................ 268 adn.connection.dscp( )................................................................................................................................... 269 adn.server( ) .................................................................................................................................................... 270 adn.server.optimize( ).................................................................................................................................... 271 adn.server.optimize.inbound( ) ................................................................................................................... 272 adn.server.optimize.outbound( ) ................................................................................................................. 273 advertisement( ).............................................................................................................................................. 274 allow................................................................................................................................................................. 275 always_verify( ) .............................................................................................................................................. 276 authenticate( ) ................................................................................................................................................. 277 authenticate.authorization_refresh_time( ) ................................................................................................ 279 authenticate.charset()..................................................................................................................................... 280 authenticate.credential_refresh_time() ....................................................................................................... 281 authenticate.credentials.address() ............................................................................................................... 282 authenticate.guest()........................................................................................................................................ 283 authenticate.force() ........................................................................................................................................ 284 authenticate.force_307_redirect()................................................................................................................. 285 authenticate.form()......................................................................................................................................... 286 authenticate.mode() ....................................................................................................................................... 287 authenticate.new_pin_form() ....................................................................................................................... 290 authenticate.query_form() ............................................................................................................................ 291 authenticate.redirect_stored_requests()...................................................................................................... 292 authenticate.surrogate_refresh_time() ........................................................................................................ 293 authenticate.tolerate_error() ......................................................................................................................... 294 authenticate.use_url_cookie( )...................................................................................................................... 295 viii 目次 authorize.add_group() .................................................................................................................................. authorize.tolerate_error().............................................................................................................................. bypass_cache( ) ............................................................................................................................................... cache( ) ............................................................................................................................................................. check_authorization( ) ................................................................................................................................... client.address.login.log_out_other()............................................................................................................ client.certificate.require( ) ............................................................................................................................. client.certificate.validate( )............................................................................................................................ client.certificate.validate.check_revocation() ............................................................................................. client.connection.dscp()................................................................................................................................. cookie_sensitive( ) .......................................................................................................................................... delete_on_abandonment( ) ........................................................................................................................... deny( ) .............................................................................................................................................................. deny.unauthorized( ) ..................................................................................................................................... detect_protocol( ) ........................................................................................................................................... direct( )............................................................................................................................................................. dns.respond( ) ................................................................................................................................................. dns.respond.a( ) .............................................................................................................................................. dns.respond.aaaa( ) ........................................................................................................................................ dns.respond.ptr( )........................................................................................................................................... dynamic_bypass( ) ......................................................................................................................................... exception( )...................................................................................................................................................... exception.autopad( ) ...................................................................................................................................... force_cache( ) .................................................................................................................................................. force_deny( ) ................................................................................................................................................... force_exception( ) ........................................................................................................................................... force_patience_page( )................................................................................................................................... force_protocol( ) ............................................................................................................................................. forward( ) ........................................................................................................................................................ forward.fail_open( ) ....................................................................................................................................... ftp.match_client_data_ip( ) ........................................................................................................................... ftp.match_server_data_ip( ).......................................................................................................................... ftp.server_connection( )................................................................................................................................. ftp.server_data( ) ............................................................................................................................................ ftp.transport( ) ................................................................................................................................................ ftp.welcome_banner( )................................................................................................................................... http.allow_compression( ) ............................................................................................................................ http.allow_decompression( ) ........................................................................................................................ http.client.allow_encoding( )........................................................................................................................ http.client.persistence( ) ................................................................................................................................ http.client.recv.timeout( ).............................................................................................................................. http.compression_level( ).............................................................................................................................. http.force_ntlm_for_server_auth( ) ............................................................................................................. http.refresh.recv.timeout( ) ........................................................................................................................... http.request.body.max_size() ....................................................................................................................... http.request.version( ) ................................................................................................................................... http.response.parse_meta_tag.Cache-Control( ) ....................................................................................... http.response.parse_meta_tag.Expires( ).................................................................................................... http.response.parse_meta_tag.pragma-no-cache( ) .................................................................................. 296 297 298 299 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 320 321 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 344 345 346 347 348 349 ix Blue Coat ProxySG Content Policy Language リファレンス http.response.version( )................................................................................................................................. http.server.accept_encoding( ) ..................................................................................................................... http.server.accept_encoding.allow_unknown() ........................................................................................ http.server.connect_attempts( ).................................................................................................................... http.server.connect_timeout( ) ..................................................................................................................... http.server.persistence( ) ............................................................................................................................... http.server.recv.timeout( ) ............................................................................................................................ icp( ).................................................................................................................................................................. im.block_encryption( ) .................................................................................................................................. im.reflect( ) ...................................................................................................................................................... im.strip_attachments( ).................................................................................................................................. im.transport( )................................................................................................................................................. im.tunnel()....................................................................................................................................................... integrate_new_hosts( ) .................................................................................................................................. iterator.append( ) ........................................................................................................................................... iterator.delete( ) .............................................................................................................................................. iterator.rewrite( ) ............................................................................................................................................ limit_bandwidth( ) ......................................................................................................................................... log.rewrite.field-id( )...................................................................................................................................... log.suppress.field-id( )................................................................................................................................... max_bitrate( ).................................................................................................................................................. never_refresh_before_expiry( ) .................................................................................................................... never_serve_after_expiry( ) .......................................................................................................................... patience_page( ).............................................................................................................................................. pipeline( ) ........................................................................................................................................................ reflect_ip( ) ...................................................................................................................................................... refresh( )........................................................................................................................................................... remove_IMS_from_GET( )............................................................................................................................ remove_PNC_from_GET( ) .......................................................................................................................... remove_reload_from_IE_GET( ).................................................................................................................. request.filter_service( ) .................................................................................................................................. request.icap_service( ) ................................................................................................................................... request.icap_service.secure_connection()................................................................................................... response.icap_feedback( ) ............................................................................................................................. response.icap_feedback.force_interactive( )............................................................................................... response.icap_feedback.interactive( ) ......................................................................................................... response.icap_feedback.non_interactive( ) ................................................................................................ response.icap_service( )................................................................................................................................. response.icap_service.secure_connection() ................................................................................................ response.raw_headers.max_count()............................................................................................................ response.raw_headers.max_length()........................................................................................................... response.raw_headers.tolerate() .................................................................................................................. server.authenticate.basic() ............................................................................................................................ server.authenticate.constrained_delegation()............................................................................................ server.authenticate.constrained_delegation.spn() .................................................................................... server.certificate.validate() ........................................................................................................................... server.certificate.validate.check_revocation()............................................................................................ server.certificate.validate.ignore() ............................................................................................................... server.connection.dscp() ............................................................................................................................... x 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 382 384 386 388 390 392 394 396 398 399 400 401 403 404 405 406 407 408 目次 server_url.dns_lookup()................................................................................................................................ 409 shell.prompt( ) ................................................................................................................................................ 410 shell.realm_banner( ) ..................................................................................................................................... 411 shell.welcome_banner( ) ............................................................................................................................... 412 socks.accelerate( ) ........................................................................................................................................... 413 socks.allow_compression( ) .......................................................................................................................... 414 socks.authenticate( )....................................................................................................................................... 415 socks.authenticate.force( )............................................................................................................................. 416 socks_gateway( ) ............................................................................................................................................ 417 socks_gateway.fail_open( )........................................................................................................................... 418 socks_gateway.request_compression( )...................................................................................................... 419 ssl.forward_proxy( ) ...................................................................................................................................... 420 ssl.forward_proxy.hostname( ) .................................................................................................................... 421 ssl.forward_proxy.issuer_keyring( ) ........................................................................................................... 422 ssl.forward_proxy.preserve_untrusted ...................................................................................................... 423 ssl.forward_proxy.server_keyring( )........................................................................................................... 424 ssl.forward_proxy.splash_text( ).................................................................................................................. 425 ssl.forward_proxy.splash_url( ) ................................................................................................................... 426 streaming.fast_cache( ) .................................................................................................................................. 427 streaming.rtmp.tunnel_encrypted( ) ........................................................................................................... 428 streaming.transport( ).................................................................................................................................... 429 terminate_connection( )................................................................................................................................. 430 trace.destination( ).......................................................................................................................................... 431 trace.request( ) ................................................................................................................................................ 432 trace.rules( )..................................................................................................................................................... 433 trust_destination_ip() .................................................................................................................................... 434 ttl( ) ................................................................................................................................................................... 435 ua_sensitive( ) ................................................................................................................................................. 436 user.login.log_out( )....................................................................................................................................... 437 user.login.log_out_other( ) ........................................................................................................................... 438 webpulse.categorize.mode( )........................................................................................................................ 439 webpulse.categorize.send_headers()........................................................................................................... 440 webpulse.categorize.send_url() ................................................................................................................... 441 webpulse.notify.malware()............................................................................................................... 442 第 5 章 : アクション リファレンス 443 引数の構文........................................................................................................................................................ 443 アクション リファレンス............................................................................................................................... 443 append( ) ......................................................................................................................................................... 444 delete( ) ............................................................................................................................................................ 445 delete_matching( ).......................................................................................................................................... 446 im.alert( ) ......................................................................................................................................................... 447 iterate()............................................................................................................................................................. 448 log_message( ) ................................................................................................................................................ 449 notify_email( )................................................................................................................................................. 450 notify_snmp( ) ................................................................................................................................................ 451 redirect( ) ......................................................................................................................................................... 452 request_redirect( ) .......................................................................................................................................... 454 rewrite( ) .......................................................................................................................................................... 456 xi Blue Coat ProxySG Content Policy Language リファレンス set( ) .................................................................................................................................................................. 459 transform ......................................................................................................................................................... 461 第 6 章 : 定義参考 463 定義名................................................................................................................................................................ 463 define action.................................................................................................................................................... 464 define active_content ..................................................................................................................................... 466 define category ............................................................................................................................................... 468 define condition.............................................................................................................................................. 470 define javascript ............................................................................................................................................. 472 define policy.................................................................................................................................................... 474 define server_url.domain condition............................................................................................................ 475 define string .................................................................................................................................................... 477 define subnet................................................................................................................................................... 478 define url condition ....................................................................................................................................... 479 define url.domain condition ......................................................................................................................... 481 define url_rewrite........................................................................................................................................... 483 restrict dns....................................................................................................................................................... 485 restrict rdns ..................................................................................................................................................... 486 transform active_content .............................................................................................................................. 487 transform url_rewrite .................................................................................................................................... 488 付録 A: 用語集 付録 B: テストおよびトラブルシューティング ルール トレースの有効化 ...................................................................................................................... 493 要求トレースの有効化 ........................................................................................................................... 494 トレース情報を使用したポリシーの改善 ........................................................................................... 495 付録 C: 認識されている HTTP ヘッダー 付録 D: CPL 代入値 使用可能な代入値............................................................................................................................................ 504 アクセス ログ フィールド.............................................................................................................................. 504 タイムスタンプ修飾子 ........................................................................................................................... 538 文字列修飾子 ........................................................................................................................................... 539 ホスト修飾子 ........................................................................................................................................... 541 付録 E: 正規表現の使用 正規表現の構文................................................................................................................................................ 543 正規表現の詳細................................................................................................................................................ 544 円記号 ....................................................................................................................................................... 545 曲折アクセント記号とドル記号 ........................................................................................................... 547 xii 目次 ピリオド ( ドット ) .................................................................................................................................. 547 角かっこ ................................................................................................................................................... 547 縦棒 ........................................................................................................................................................... 548 小文字の区別 ........................................................................................................................................... 549 サブパターン ........................................................................................................................................... 549 繰り返し ................................................................................................................................................... 550 後方参照 ................................................................................................................................................... 552 アサーション ........................................................................................................................................... 552 1 回実行のサブパターン ........................................................................................................................ 553 条件付きサブパターン ........................................................................................................................... 554 コメント ................................................................................................................................................... 555 パフォーマンス ....................................................................................................................................... 555 RE ENGINE と Perl の違い ........................................................................................................................... 555 xiii Blue Coat ProxySG Content Policy Language リファレンス xiv 序章 : Content Policy Language の導入 Blue Coat® Content Policy Language (CPL) は、さまざまな認証、Web アクセス、およびネットワーキング ポリシーを指定できる、強力で柔軟な言語です。SG ポリシーは CPL で記述されており、各 Web 要求は インストール済みのポリシーに基づいて評価されます。この言語は、組織の特定のユーザーのセット と固有の適用ニーズに合わせてポリシーをカスタマイズできるように設計されています。 仕様に合わせて SG を設定するときに作成された設定を使用します。 CPL は、 CPL には、次の機能が備わっています。 • SG の動作のさまざまな側面に対する微調整 • 各要求に対する複数のポリシー決定を可能にするレイヤ化されたポリシー • 特定の条件によってトリガされる複数のアクション • ユーザー定義条件とアクションの柔軟性 • 定義済みの共通するアクションと変換の便宜性 • ユーザーやグループ設定を含む、認証に基づくポリシー • 複数の認証レルムのサポート • 設定可能なポリシー イベント ログ • 組み込み型デバッグ機能 ドキュメントの構成について このドキュメントは、簡単に参照できるように、次のセクションと章に分けて構成されています。 第 1 章 : Content Policy Language の 概要 この章では、概念、CPL の基本、ポリシーの記述とトラブルシュー ティング、およびアップグレード / ダウングレードに関する問題な ど、CPL の概要を説明します。 第 2 章 : CPL の管理 第 1 章を掘り下げ、この章では、トランザクション、タイミング、 レイヤ、およびセクションの理解、ポリシーの定義、およびベスト プラクティスについて説明します。 第 3 章 : 条件 このリファレンス ガイドには、CPL がサポートする条件のリストが 含まれます。また、その使用方法についても説明します。 第 4 章 : プロパティ このリファレンス ガイドには、CPL がサポートするプロパティのリ ストが含まれます。また、その使用方法についても説明します。 第 5 章 : アクション このリファレンス ガイドには、CPL がサポートするアクションのリ ストが含まれます。また、その使用方法についても説明します。 xv SGOS 6.4 Content Policy Language リファレンス 第 6 章 : 定義 このリファレンス ガイドには、CPL がサポートする定義のリストが 含まれます。また、その使用方法についても説明します。 付録 A: 用語集 この付録では、このマニュアルで使用される用語が定義されてい ます。 付録 B: トラブルシューティング この付録では、ポリシー トレース プロパティの使用を説明します。 付録 C: 認識される HTTP ヘッダー この付録には、認識されるすべての HTTP 1.1 ヘッダーがリストさ れており、SG アプライアンスとの連携が示されています。 付録 D: CPL 代入値 この付録には、CPL で使用できるすべての代入変数がリストされて います。 付録 E: 正規表現の使用 この付録では、正規表現とその使用方法について説明します。 サポートされるブラウザ SG Management Console で は、Microsoft® Internet Explorer Internet Explorer 7.0、Internet Explorer 6.0 (SP1 以降)、Firefox 1.0、Netscape 7.2 がサポートされています。これら以降のバージョンでも機能す る可能性はありますが、テストは実施されていません。 Management Console は、Java Runtime Environment を使用します。JRE 1.5.0_15 以上 ( および 1.6) が サポートされています。 表記法 定義 太字体 新規用語または BlueCoat 固有の用語の初出時を示す。 Courier フ ォ ン ト 画面出力。コマンド ライン テキスト、ファイル名、および Blue Coat CPL (Content Policy Language) など。 Courier フ ォ ン ト の ネットワーク システムの該当するファセットに関連するリテラル名 または値で代入するコマンド ラインの変数。 斜体 Courier フ ォ ン ト の 太字体 表示のように入力される Blue Coat のリテラル。 Arial フォントの Management Console の画面要素。 太字体 xvi { } 括弧で囲まれているもののうち 1 つを指定する必要のあるパラメータ。 [ ] オプションの 1 つ以上のパラメータ。 | パイプ文字の前後いずれかのパラメータは一方は選択可能であり、選 択が必須であるが、両方を選択することはできない。 序章 : Content Policy Language の導入 注および警告 以下では、データ損失や人体への負傷が起こるおそれのある行為に対する情報や注意を提供します。 注意 : 注意が必要な情報です。 重要 : 機器への損害または人体への負傷に関連しない重大な情報 ( データ損失など )。 警告 : 人体の負傷または機器への物理的な損害のある危険をユーザーに通知するため にのみ使用される。例として、機器の設置時の静電気の放電 (ESD) に対する警告が挙げ られます。 xvii SGOS 6.4 Content Policy Language リファレンス xviii 第 1 章 : Content Policy Language の概要 Blue Coat® Content Policy Language (CPL) とは、独自の概念とルールを備えたプログラミング言語の ユーザーは、この概念とルールに従って CPL を使用する必要があります。 1 つです。 この章のトピック この章は、次のトピックに関する情報で構成されています。 • 17 ページの「概念」 • 19 ページの「CPL 言語の基本」 • 26 ページの「CPL を使用したポリシーの記述」 • 30 ページの「トラブルシューティング ポリシー」 • 30 ページの「アップグレード / ダウングレードに関する問題」 概念 ここで使用される「ポリシー」という語は、認証の要件、アクセス権、サービス品質、またはコンテンツ 変換 ( 要求または応答を処理するのに使用すべき書き換えとオフボックス サービスを含む ) に関する 決定を下す場合に適用される、 設定の値とルールのことを指します。 ポリシーは通常、一部の設定のデ フォルト値用システム設定を参照し、それらの設定をオーバーライドすべきかどうかを確認するルー ルを評価します。 CPL は、SG アプライアンスのポリシー ルールを指定するための言語です。CPL は主に、次の項目を制 御します。 • ユーザー認証の要件 • Web 関連リソースへのアクセス権 • コンテンツのキャッシュ • 要求と応答処理のさまざまな側面 • アクセス ログ記録 ポリシー ルールを作成するには、Management Console からアクセス可能な Visual Policy Manager (VPM) を使用するか、CPL を作成します。 Blue Coat は、サンプルの CPL を読んだり、CPL で自分でポリシーを作成してみる前に、 SG アプライ アンスでのポリシー実施の基礎となる基本概念を把握しておくことを推奨します。 このセクションで は、重要な概念の概要を説明します。 17 SGOS 6.4 Content Policy Language リファレンス トランザクション 「トランザクション」とは、サービスに対する要求、およびポリシー評価と実施を CPL の文脈における 目的とした、関連する応答すべてのカプセル化のことを指します。多くの場合、トランザクションは サービスに対する一意の要求それぞれに対し作成されます。そして、 トランザクションは要求を処理 し、 応答を配信するのに要する時間だけ存在します。 トランザクションは次の目的を達成します。 • ポリシー評価中、テスト用に要求と応答のステータスを表示します。 これにより、要求のさまざまな側面 ( クライアントの IP アドレス、使用された URL、または HTTP ヘッダーの内容などの応答 ) をテストできます。 • 処理中、ポリシーの整合性を保証します。 トランザクションのライフタイムが比較的長くなる場合があります ( サイズの大きなオブジェク トを低速ネットワークから取得し、コンテンツ フィルタリングおよびウイルス スキャンなどのオ フボックス処理サービスを行う場合など )。この間、設定またはポリシー ルールへの変更が行われ ると、結果としてポリシー決定が変更され、トランザクションに影響する場合があります。要求が ポリシーのあるバージョンに照らして評価され、その後に応答が同じポリシーの別のバージョン に照らして評価されると、結果は予測不可能となり、不整合が生じる恐れがあります。 トランザクションにより、要求と応答の両者が、トランザクション作成時に最新であったポリシー のバージョンに照らして評価されることが保証されます。新しいポリシーが考慮されるようにす るため、ストリーミングやサイズの大きなファイルのダウンロードに関連する寿命の長いトラン ザクションは、 新しいポリシーの下で再評価されます。再評価は要求と応答の両者に適用され、 履 行不可能な新しい決定 ( 新しい認証の要件など ) が生じた場合、トランザクションは終了します。 • 要求と応答の処理に関するポリシー決定を維持します。 • 個々のプロトコルの異なるポリシー評価要件をサポートするため、 さまざまなタイプのトランザ クション ( 管理者、キャッシュ、およびプロキシ トランザクション ) が使用されます。 • 一部の特殊な場合では、 単一の要求に対して複数のトランザクションが作成されることがありま す。たとえば、SOCKS プロキシ経由 (SG アプライアンスのポート 1080) で HTTP 要求が行われる と、SOCKS プロキシ トランザクションと HTTP プロキシ トランザクションの 2 つのトランザク ションが作成される場合があります。ポリシー トレースを有効にすることでこれらのトランザク ションを確認できます。各トランザクションのポリシー トレース ファイルに新しいエントリが追 加されます。 ポリシー モデル 各トランザクションは、決定のデフォルト セットが設定された状態で開始します。これらは、システム の設定から取得されます。これらのデフォルトには、転送ホストまたは SOCKS ゲートウェイなどが含 まれます。最重要デフォルト決定は、要求を許可または拒否すべきかを決めます。 18 第 1 章 : Content Policy Language の概要 さまざまなトランザクション タイプのデフォルト値を次に示します。 • 管理者トランザクション : デフォルト値は、要求の拒否です。 デフォルトでは、管理は、ポリシー評価をバイパスするいずれかの方法を通じてのみ実行可能で す。これらの方法を次に示します。 S シリアル コンソール経由で CLI にアクセスする S RSA 認証 SSH 経由で CLI にアクセスする S Management Console またはコンソール認証情報を使用して CLI にログインする その他の管理方法を有効にするには、ポリシー経由で特定の権限を付与する必要があります。 • キャッシュ トランザクション : デフォルト値は、要求の許可です。 これらの要求は SG アプライアンス自体から送信され、主にコンテンツのステータスの維持に使 用されます。さらに、 特定コンテンツへの要求を限定的に拒否したり、 その他のキャッシュ トラン ザクションからコンテンツ管理要求を区別するためのポリシーを追加できます。 • プロキシ トランザクション : デフォルト値はシステム設定から取得されます。 新しい SG アプライアンスでは、デフォルト値はすべての要求を拒否です。4.x からアップグレー ドされた SG アプライアンスでは、デフォルト値はすべての要求を許可です。いずれの場合でも、 いずれかの値をデフォルトとするように SG アプライアンスを設定できます。ポリシー リストに デフォルト設定が表示されます。 デフォルト値が要求の許可か拒否で <proxy> レイヤ ポリシーを記述するための適切なアプローチは、 あるかによって異なります。デフォルト プロキシ ポリシーは設定可能であり、プロキシ トランザク ションの記述の起点を表します。デフォルト プロキシ ポリシーは、SG アプライアンスにより生成され る各ポリシー リストの一番上に表示されます。 ; Default proxy policy is DENY ポリシー リストの当該行は CPL コメントであり、プロキシ ポリシーの起点を定義します。 CPL のロール CPL とは、各トランザクションの実行時評価により変化するポリシーを記述するのに使用される言語 です。 ポリシーは CPL により記述され、 SG アプライアンスにインストールされ、要求処理中に評価さ れ、設定から取得されたデフォルト決定をオーバーライドします。 CPL 言語の基本 次のセクションでは、CPL 言語の概要を説明します。より高レベルのテーマに集中するため、CPL 要素 については簡潔に紹介して説明します。これら要素それぞれの詳細な仕様については、このマニュア ルのリファレンス部分を参照してください。 19 SGOS 6.4 Content Policy Language リファレンス コメント ';' で始まる行はコメントです。 後ろにスペースまたはタブが続くセミコロン (;) は、行末までコメントであることを表します ( トリガ パターン式またはプロパティ設定などの一部として、引用符内部に現れるセミコロンを除く )。 例を示します。 ; This is a comment. コメントは、ポリシーの任意の場所に記述できます。 ルール ポリシーのルールは、1 つの条件といくつかのプロパティ設定 ( 記述順 ) で構成されます。ルールは通 常、1 行に記述されますが、 特別な行連結文字を使用して複数行に分割できます。ルールが評価される とき、その特定トランザクションの条件がテストされます。条件が真に評価されると、リストされたプ ロパティ設定すべてが実行され、現在のレイヤの評価が終了します。このとき、ルールは一致と呼ばれ ます。 当該トランザクションの条件が偽に評価されると、そのルールは不一致と呼ばれます。 また、 条件とは、 トリガ式のブール式の組み合わせのことです。 トリガとは、 要求 (url=)、 応答 (response. 関連ユーザー (user=、group=)、 またはシステム ステータス (time=) などの header.Content-Type=)、 コンポーネントに照らして実行できる個別のテストのことです。 一部の注意を要する例外を除いて、トリガは要求、応答、 または関連ステータスの 1 つの側面を値の ブール式に照らしてテストします。 各トリガは論理積としてまとめられます。 つまり、すべてのトリガ式が真の 1 つのルール内の条件で、 場合にのみ条件が真になります。 プロパティとは、トランザクション処理を制御する設定のことです。deny や、オブジェクトの処理法 ( オブジェクトをローカルでキャッシュしないことを示す cache(no)) などが例です。トランザクショ ンの開始時点では、すべてのプロパティはデフォルト値に設定されます。ポリシーが順番に評価され るにつれ、一致するルールにより、プロパティが特定の値に設定されることがあります。評価が終了す ると、プロパティは最終的な値を保持し、それに従ってトランザクションが処理されます。ポリシー内 で設定されないプロパティは、デフォルト値を維持します。 ポリシー ルールの論理的な形式は次のように表記できます。 if condition is true then set all listed properties as specified 次に、 簡単なポリシー ルールの例を示します。 url.domain=example.com time=0900..1700 exception(policy_denied) これは、次のトリガの両者が真である場合に、 exception( ) プロパティが policy_denied に設定さ れることを示します。 20 • 要求が、ドメイン example.com 内のページに対して行われる • 要求が、午前 9 時から午後 5 時の間に行われる 第 1 章 : Content Policy Language の概要 メモ • CPL トリガは、trigger_name=pattern_expression という形式です。 • CPL プロパティは、一部の allow と deny などの命令ジェスチャを例外として、 property_name(setting) という形式です。 • ポリシー ルール内のテキストには、 次の章で特定する一部の例外を除いて、 大文字小文字の区別が あります。 • 非 ASCII 文字は CPL ソース ファイルに含められません。 • ポリシー リストはいくつかの方法で正規化されます。 まず、 ソース内の任意の場所に記述可能な条件 とアクション定義が、 ポリシー ルールに従ってグループ化されます。 次に、1 つのルール内の条件 とプロパティの順番が変更される場合があります。CPL コンパイラによりルールの先頭に deny または allow が配置されます。条件を並べ替えることで評価を最適化するためです。最後に、一部 のフレーズは優先されるフレーズのシノニムです。show policy の出力では、シノニムの代わりに 優先される形式がリストされます。 次に、 該当する 4 つのシノニムを示します。 • exception(authorization_failed)。優先する deny.unauthorized のシノニムです。 • 優先する force_deny.unauthorized のシノニ force_exception(authorization_failed)。 ムです。 • • 優先する deny のシノニムです。 exception(policy_denied)。 • 優先する allow のシノニムです。 exception(no)。 トリガの pattern_expression には、より複雑なブール式を使用できます。たとえば、上記の簡単 なルールに含まれる 2 番目の条件を 「午前 9 時から正午まで、 または午後 1 時から午後 5 時まで」 にするには、次のように記述します。 ... time=(0900..1200 || 1300..1700) ... およびグルー ブール式は、トリガで使用可能な特定の値、および ! (否定)、&& (論理積)、 || (論理和)、 プ化のための () のブール演算子で構成されます。詳細は、 「トリガ リファレンス」の章を参照して ください。選択可能な値はコンマで区切ることもできます。通常はこのほうが '||' 演算子を使用す る場合と比べ、より読みやすくなります。たとえば、次のルールでは、リストされた 2 ドメインのい ずれかのページへの要求に対するサービスが拒否されます。 url.domain=(example.com, another.com) deny • 長い行は '\' を行連結文字として使用して分割できます。'\' はその行の最後の文字であり、スペー スまたはタブが前置される必要があります。例を示します。 url.domain=example.com time=0900..1700 \ deny このような連結された行には、セミコロンを使用してコメントを追加しないでください。セミコロ ン後のすべての文字が、 連結された行のテキストも含め、 コメントの一部として処理されます。例 を示します。 21 SGOS 6.4 Content Policy Language リファレンス url.domain=example.com \ ; misplaced comment deny は、次のように解釈されます。 url.domain=example.com ; misplaced comment deny つまり、このように指定すると、コメントが続くことになります。 引用符の使用 CPL で特定の文字が特殊文字とみなされ、その言語で句読点の要素としての意味を持つようになりま す。 たとえば、= ( 等号) を使用するとトリガ名とその関連値が区切られ、スペースを使用すると、ルール の式が区切られます。これらの特殊文字を含む値を使用するには、値を一重引用符 (') または二重引用 そうすることで、 特殊文字が句読点として解釈されなくなります。一重 符 (") で囲む必要があります。 引用符で囲まれたテキストの中には、一重引用符以外の任意の文字を含めることができます。 二重引 用符で囲まれたテキストの中には、二重引用符以外の任意の文字を含めることができます。次に、引用 符を使用する必要のある例をいくつか示します。 user="John Doe" ; value contains a space url="www.example.com/script.cgi?param=value" ; value contains ‘=’ deny( "You don’t have access to that page!" ) ; several special chars 引用符を使用しないと表示されない文字のフル リストについては、 リファレンス マニュアルを参照 してください。引用符が厳密に必要ではなく、 CPL で解釈に影響のない文字列を引用符で囲むことは 可能です。便宜上、文字と数字以外の文字列からなる値を引用符で囲むことができます。 user="john.doe" ; quotes not required, but can be used 重要 : 一重引用符 (') ではな define action または define url_rewrite ステートメント内では、 く二重引用符 (") を使用して文字列を区切る必要があります。 レイヤ ポリシー レイヤは CPL の構成要素で、一連のルールを評価して一定の決定を行うのに使用します。決 定を区切ると、ポリシーの複雑さを制御できます。決定を区切るには、それぞれの決定を別のレイヤに 記述します。各レイヤの形式は次のとおりです。 <layer_type [action]> [layer_condition][layer_properties] ... layer_content 各引数の意味は次のとおりです。 • このポリシーに照らし合わせて評価されるトランザクションが定義 layer_type により、 され、レイヤで使用するルール内で許可されるトリガおよびプロパティが制限されます。 詳細は、39 ページの「レイヤの理解」を参照してください。 22 第 1 章 : Content Policy Language の概要 • CPL のユーザー定義 ID で layer_type とスペースで区切られた action, ( 省略可能 ) は、 「セクションの理解」を参照 )、基本的にアルファベットの後に英数字または下 (46 ページの 線が続きます。 • これらのトリガをすべて true に評 layer_condition ( 省略可能 ) はトリガのリストです。 価してからレイヤの内容を評価する必要があります。 • このリストは、レイヤで一致 layer_properties ( 省略可能 ) はプロパティのリストです。 したルールのプロパティに対するデフォルトの設定となります。レイヤ内の特定のルール で、プロパティに別の値を明確に設定することで、これらのプロパティをオーバーライド できます。 • 多くの場合セクションにまとめられています ( 以下 layer_content はルールのリストで、 を参照 )。 レイヤには、少なくとも 1 つのルールを含める必要があります。 一般的に layer_condition と layer_properties を総称して レイヤガード式といいます。 ルールに「if (condition is true) then set properties」 という論理式が含まれる場合、レイヤの形 式は次のようになります。 if (layer_condition is true) then { if (rule1_condition is true) then set layer_properties then set rule1 properties else if (rule2_condition is true) then set layer_properties then set rule2 properties else if (rule3_condition is true) then set layer_properties then set rule3 properties ... } レイヤ内で一致する最初のルールにより、そのレイヤの評価が終了します。 ポリシー内のレイヤは上から下に評価され、 後のレイヤのルールが前のレイヤのルールよりも優 先されます。 レイヤのヘッダー CPL では、すべてのポリシー ルールはレイヤの中に書き込まれます。ルールは、 よりも前に置くことはできません。 セクション レイヤのルールは、必要に応じて 1 つまたは複数のセクションにまとめることができます。これはルー ルをグループ化する方法の 1 つです。セクションは、セクション ヘッダーとそれに続く一連のルール からなります。 セクションの形式は次のとおりです。 [section_type [action]] [section_condition][section_properties] section_content 各引数の意味は次のとおりです。 23 SGOS 6.4 Content Policy Language リファレンス • セクションで使用するルールの構文と、それらのルールの評価に section_type により、 使用する戦略が定義されます。セクション名 ( および任意のアクション ) は、角かっこ ([ ]) で囲む必要があります。 • section_type とスペースで区切られた action, ( 省略可能 ) は、CPL のユーザー定義 ID で、レイヤのアクションと同様です。 • これらのトリガをすべて true に section_condition ( 省略可能 ) はトリガのリストです。 評価してからセクションの内容を評価する必要があります。 • このリストは、セクション section_properties ( 省略可能 ) はプロパティのリストです。 で一致したルールのプロパティに対するデフォルトの設定となります。セクション内の ルールでプロパティに別の値を明確に設定することで、レイヤのプロパティのデフォル トを同様にオーバーライドできます。 • セクションには、少なくとも 1 つのルールを含 section_content はルールのリストです。 める必要があります。 一般的に section_condition と section_properties を総称して セクションガード式といいます。 セクション付きのレイヤの論理形式は、次のとおりです。 if (layer_condition is true) then { if (section1_condition is true then { if (rule1A_condition is true) then set layer_properties then section_properties then rule1A properties else if (rule1B_condition is true) then set layer_properties then section_properties then set rule1B properties .... } else if (section2_condition is true then { if (rule2A_condition is true) then set layer_properties then section_properties then rule2A properties else ... } ... } 定義 次の 2 つのタイプの定義が使用されます。 CPL では、 24 • ポリシーによって明確に参照される名前付き定義 • すべてのポリシーの評価に適用され、ルールで直接参照されない匿名定義 第 1 章 : Content Policy Language の概要 名前付き定義 名前付き定義にはさまざまなタイプがあります。各定義にユーザー定義の名前が与えられています。こ の名前は、 ルールで定義を指すのに使用される名前です。 このセクションでは、 トピックの概要としてい くつかの定義のタイプを取り上げます。 詳細は、 を参照してください。 463 ページの 第 6 章「定義参考」 : サブネットの定義 サブネットの定義は、クライアントのアドレスまたは要求の送信先アドレスなど、トランザクション に関連付けられる IP アドレスのテストに使用できる、IP アドレスと IP サブネット マスクのリストを 定義するのに使用します。 条件の定義 条件の定義には、条件を参照するレイヤで正規のトリガを含めることができます。condition= トリガ は、そのトリガでトランザクションの特定部分のみをテストできるルールに対する例外です。条件の 定義に他のトリガを含めることができるため、condition= トリガでトランザクション状態の複数部 分をテストできます。また条件の定義により、トリガ式のブール演算を任意に組み合わせることがで きます。 カテゴリの定義 カテゴリの定義は、ベンダのコンテンツ カテゴリの拡張、または独自のカテゴリの作成に使用します。 これらのカテゴリは、(ベンダ定義のカテゴリと合わせて) category= トリガを使用してテストします。 アクションの定義 アクションは引数をとり、名前付きのアクション定義ブロックでラップされます。 アクションは、 トランザクションに対して有効または無効になります。アク action( ) プロパティの設定により、 ション プロパティの構文により、 アクションを個別に有効または無効にできます。 アクションの定義 を有効にすると、その定義に含まれるアクションが、個々の引数で動作します。 トランスフォーマの定義 トランスフォーマの定義はある種の名前付き定義で、HTTP 応答に適用される変換を指定します。 url_rewrite 定義、 active_content 定義、 javascript 定義の 3 つのタイプがあります。 匿名定義 ルールで参照されることはありま 2 つのタイプの匿名定義によりポリシーの評価が変更されますが、 せん。これらの定義により DNS 参照および DNS 逆引き参照が制限されます。また、正引き DNS 解決 または逆引き DNS 解決が制限されている、またはこれらの解決に問題がある場合、これらの定義が役 立ちます。 25 SGOS 6.4 Content Policy Language リファレンス 参照整合性 ポリシーでは、認証レルム、転送ホスト、SOCKS ゲートウェイなど、システム設定で定義されるさまざ まなオブジェクトを参照します。 ポリシーをコンパイルする時点でポリシーに名前付きの CPL では、 エンティティがあることと、そのエンティティに適切な特性があることを確認して、これらの参照の 整合性を確保します。実行時に現在アクティブなポリシーで参照する設定済みオブジェクトを削除し ようとしても失敗します。 レルムなど、 ポリシーで参照する設定済みエンティティを削除するには、削除しようとしているレル ムに対するすべての参照で、新しいポリシーをインストールする必要があります。レルムが不要な バージョンのポリシーに照らし合わせて、新しいトランザクションが開きます。 レルムへの参照が必 要な未処理のトランザクションがすべて完了すれば、レルムを設定から削除できるようになります。 代入値 URL 要求の書き換え、または HTTP 要求ヘッダー/HTTP 応答ヘッダーの変更に使用するアクション では、 多くの場合、 新しい URL またはヘッダーの値を構成するときに、 トランザクション状態のさまざ まな要素の値を参照する必要があります。CPL では、さまざまな代入値がサポートされています。これ らの値により、実行時に所定のトランザクション値を展開できます。代入値の形式は次のとおりです。 $(name) トランザクションに関連付けられている認証済みユーザー名に たとえば、$(user) という代入値は、 展開されます。 ポリシーでそのユーザーの認証が不要だった場合、この代入値は空の文字列に展開さ れます。 また、ユーザーに表示されるメッセージのテキストを設定する場合など、一部の CPL プロパティに指 定した値で代入値を直接使用することもできます。 代入値はさまざまな目的で使用できます。 使用可能な代入値のカテゴリ別リストについては、付録 D: 「CPL 代入値」を参照してください。 CPL を使用したポリシーの記述 ポリシー ファイルは、ポリシーのアセンブルに使用する統合の単位です。 CPL で記述されるポリシーは、SG アプライアンスで次の 4 つのファイルのいずれかに保存されます。 それらのファイルを次に示します。 26 • VPM: このファイルは、Visual Policy Manager で使用するために予約されています。 • ローカル (Local): VPM が使用中でない場合、通常このローカル ファイルにシステムのポリシー ルールの大半が含まれています。 このファイルは空の状態か、VPM で使用 VPM が使用中の場合、 できない高度なポリシー機能のルールが含まれているか、 またはその他の方法で VPM ポリシー を補完します。 • 中央 (Central): このファイルは、通常 Blue Coat Systems で管理されていますが、SG アプライアン スでカスタムの中央ポリシー ファイルを代わりに指定することもできます。 第 1 章 : Content Policy Language の概要 • 転送 (Forward): 転送ポリシー ファイルは、通常すべての転送ポリシーに使用しますが、他の 3 つ のポリシー ファイルで作成したポリシーの補完に使用することもできます。 旧バージョンの 転送ポリシー ファイル SGOS (2.x) または CacheOS (4.x) からしステムをアップグレードすると、 に高度な転送ルールが追加されます。 個々のファイルにルールと定義が含まれている場合もありますが、ファイルが空の場合もあります(空 のファイルではポリシーが指定されていないため、SG アプライアンスに影響しません )。 ファイルの相互参照は許可されていますが、参照する前に定義をインストールする必要があります。 また、 定義を削除する前に参照を削除する必要があります。 最終的にインストールするポリシーは、4 つのファイルの内容を連結することで、これらのファイルに 保存されたポリシーからアセンブルされます。 ポリシー ファイルのアセンブリは、VPM、中央、 および ローカルの順に設定できます。評価は VPM、ローカル、 中央の順が推奨されます。転送ポリシー ファイ ルは常に最後となります。 認証および拒否 最も重要なタイミングの関係の 1 つは、認証と拒否の関係の認識です。拒否は認証の前後で行うことが でき、 組織により異なる要件があります。たとえば、ある組織で次のことが要求されているとします。 • 企業のサブネット以外の送信元からのトラフィックを拒否することによる、 サービス拒否攻撃か らの保護。 • ユーザーからの要求が拒否された場合でも、 企業ユーザーのユーザー名をアクセス ログに表示する こと。 次の例では、正しい CPL プロパティの選択方法を示します。まず、 完全に正しいとは言えないポリシー の例を次に示します。 define subnet corporate_subnet 10.10.12.0/24 end <Proxy> client.address=!corporate_subnet deny ; filter out strangers authenticate(MyRealm) ; this has lower precedence than deny <Proxy> ; user names will NOT be displayed in the access log for the denied requests category=Gambling exception(content_filter_denied) このポリシーの場合、企業のサブネット外部からの要求は拒否されますが、企業サブネット内部の ユーザーが認証を要求されます。 コンテンツ カテゴリが要求 URL から決定され、認証前に決定できます。認証よりも拒否が優先されて いるため、このポリシーにより、ユーザーの認証チャレンジを行う前にユーザーの要求が拒否されて しまいます。そのため、ユーザー名をアクセス ログで使用できません。拒否と認証の優先順位の関係 は、レイヤの順序に依存しないため、レイヤの順序を変更しても結果は同じです。 ただし、force_authenticate() という CPL プロパティは拒否よりも優先されるため、次のようにポ リシーを修正すると、ユーザー名がアクセス ログに表示されるようになります。 27 SGOS 6.4 Content Policy Language リファレンス define subnet corporate_subnet 10.10.12.0/24 end <Proxy> client.address=!corporate_subnet deny ; filter out strangers force_authenticate(MyRealm) ; this has higher precedence than deny <Proxy> ; user names will be displayed in the access log for the denied requests category=Gambling exception(content_filter_denied) SOCKS プロトコル経由での認証のタイミングは異なります。SOCKS 認証メカニズムを使用している 場合、接続が確立された時点でチャレンジが発生するため、要求を受ける前にユーザー ID を使用でき ます。 したがって、次のポリシーが適切です。 define subnet corporate_subnet 10.10.12.0/24 end <Proxy> client.address=!corporate_subnet deny ; filter out strangers socks.authenticate(MyRealm) ; this happens earlier than the category test <Proxy> ; user names be displayed in the access log for the denied requests category=Gambling exception(content_filter_denied) これは、SOCKS 認証済みユーザーに対してのみ機能します。 ポリシーのインストール ポリシーは、 4 つのポリシー ファイル (VPM、Local、Central、または Forward) の 1 つをインストール することによってインストールされます。1 つ新しいファイルをインストールすると、他の 3 つのファ イルの最新バージョンが読み込まれて、コンテンツが現在の設定で指定された順序で連結され、連結 後のポリシー全体がコンパイルされます。 コンパイル エラーが検出された場合、新しいポリシー ファイルはインストールされず、有効なポリ シーは変更されません。 ポリシー ファイルのインストールについての具体的な手順については、 「Visual Policy Manager」 を参 照してください。 28 第 1 章 : Content Policy Language の概要 CPL 一般文字および書式設定 次の文字および書式設定は、条件式で使用される引数、プロパティ ステートメントで使用される値、お よびアクションで使用される引数を除いた、ポリシー ファイル全般で重要性を持ちます。 文字 例 意義 セミコロン (;) ; Comment インパスまたはポリシー評価時に無視する テキストを入力する行の先頭に使用しま す。通常、コメントを追加するために使用 します。 <Proxy> ; Comment 改行文字 deny server_url.scheme=mms deny server_url.domain=xyz.com CPL は、ほとんどの構成要素 ( レイヤ、セ クション、ルール、定義 ) は新しい行で始 まると想定しています。行連結文字が前に ない場合、改行文字はレイヤ ヘッダー、セ クション ヘッダー、現在のルール、定義済 み条件内の句、またはアクション定義内の アクションを終結します。 行連結 \ 行連結文字は、現在の行が前の行の一部で あることを示します。 スペース < proxy > weekday = ( 3 || 7 ) deny 読みやすさを改善するために使用します。 この例で示すように、スペースは処理に影 響を与えることなく、トークン間に挿入で きます。また、引用符で囲まれた文字列に はスペースを含めることができます。ただ し、weekday = 1..7 などの数値の範囲 にはスペースを含めることはできません。 山かっこ (< >) <Proxy> レイヤ見出しを示すために使用します。 角かっこ ([ ]) [Rule] セクション名を示すために使用します。 等号 (=) server_url.scheme=mms 条件がテストする値を示すために使用し ます。 かっこ ( ) max_bitrate(no) プロパティが設定される値またはテストの グループ コンポーネントを囲むために使 用します。 29 SGOS 6.4 Content Policy Language リファレンス トラブルシューティング ポリシー インストール済みポリシーが予想通りに動作しない場合、インストール済みポリシーの動作を理解す るため、ポリシー トレースを使用します。 トレースはトランザクションに関する追加情報を記録し、終了時にトランザクションを再評価しま す。ただし、トランザクション処理を通した評価のタイミングは示しません。必要とされる追加処理は パフォーマンスに大きく影響するため、 問題を再現して診断する必要がない限り運用環境におけるト レースは有効にしないでください。 運用環境のシステム上でトレースを使用する場合、 トレースするト ランザクションの制限を試します。 たとえば、 ワークステーションの IP アドレスをテストする client.address= トリガを条件としてトレース ルールを定義して、テスト ワークステーションからの要 求のみをトレースすることができます。 ポリシー トレースの生成および取得についての詳細は、 「付録 B:「テストおよびトラブルシューティン グ」 」を参照してください。 ポリシー トレースはルール評価動作を示すことができますが、 HTTP ヘッダーや URL 変更などのポ リシー アクションの最終的な効果は示しません。それらのポリシー アクションの結果を確認するに は、 多くの場合、実際に送受信されたパケットを表示するのが有効です。PCAP ファシリティはトレー スと合わせて、マッチング ルールで設定されたアクションの効果の確認に使用できます。 アップグレード / ダウングレードに関する問題 具体的なアップグレード / ダウングレードに関する問題については、ご使用の SGOS のバージョンに 添付されているリリース ノートで言及しています。このセクションでは、CPL で書かれたポリシーに 関連する一般的なアップグレード / ダウングレードに関する問題に焦点を当てています。 CPL 構文廃止 CPL の機能が増すにつれ、 CPL 言語が進歩してきました。進歩を続けるため、 CPL 言語構成要素の規 則性および柔軟性は向上し続けています。古い言語構成要素は、それと同等かそれ以上の機能を備え た新しい構成要素に置き換えられてきました。 ただし、これは、評価のランタイム効率の維持するため、古い言語構成要素のサポートは最終的に打ち 切られることも意味しています。 移行戦略の一環として、 CPL コンパイル警告に廃止予定の構成要素 の使用に関する警告が含まれる場合があります。この警告のクラスは特殊なもので、SGOS の次のメ ジャー リリースではサポートされない CPL 言語要素が使用されていることを示しています。 警告で 特定されたポリシーをより新しい構文 ( 通常、 警告メッセージに示される ) に移行して廃止警告を除去 します。すべての廃止警告が除去されていない限り、次のメジャー リリースへのアップグレードの試 行が失敗し、ポリシーの読み込みも失敗する可能性があります。 30 第 1 章 : Content Policy Language の概要 条件付きコンパイル 時々、異なるバージョンの SGOS を実行しており、異なる CPL を必要とするアプライアンスに適用で きるポリシーを維持する必要が生じる場合があります。CPL は、SGOS バージョン (2.1.06 など ) をテス トする、次の条件付きコンパイル ディレクティブを提供します。 release.version= <version number range> 最小値と最大値は両方とも省略可能です。 範囲は、標準 CPL 範囲テスト min..max であり、 および PATCH は省略可能です。 min および max は、 MAJOR.MINOR.DOT.PATCH となります。 MINOR、 DOT 、 そのため、2.1.07 で導入された文法を含むルールは、次のように入力して保護できます。 #if release.version=2.1.07.. ; guarded rules ... #endif 2.2 で導入された文法は、次のように入力して保護できます。 #if release.version=2.2.. ; guarded rules ... #endif 31 SGOS 6.4 Content Policy Language リファレンス 32 第 2 章 : Content Policy Language の概要 第 1 章で説明した通り、 さまざまな条件で Content Policy Language ポリシーはルールに組み込まれ、 テストされたトランザクションから成ります。 この章のトピック この章は、次のトピックに関する情報で構成されています。 • 33 ページの「トランザクションとタイミングの理解」 • 39 ページの「レイヤの理解」 • 46 ページの「セクションの理解」 • 48 ページの「ポリシーの定義」 • 53 ページの「ベスト プラクティス」 トランザクションとタイミングの理解 トランザクションは、いくつかのタイプに分類されます。 • <Admin> • <Proxy> • <Cache> • <DNS-Proxy> • <Exception> • <Forwarding> • <SSL> • <SSL-Intercept> これら 4 つのトランザクション タイプのそれぞれについて適切なのは、レイヤ タイプ、条件、 プロパ ティ、アクションのサブセットのみです。 33 SGOS 6.4 Content Policy Language リファレンス <Admin> トランザクション 管理者トランザクションは、<Admin> レイヤ内のポリシーのみを評価します。ポリシーは、次の 2 つの 段階で評価されます。 • 認証チャレンジ前 • 認証チャレンジ後 管理ユーザーが SG Management Console にログインし、管理者の Web ブラウザがその SG を通じて プロキシ処理されている場合、プロキシ トランザクションが作成され、 <Proxy> ポリシーは管理者ト ランザクションが作成される前に評価され、それから <Admin> ポリシーが評価されます。この場合、 管理者の Management Console へのアクセスが拒否される可能性があります。 Proxy ポリシーにより、 重要 : シリアル コンソール アクセス、RSA 認証済み SSH アクセス、コンソール アカウント資格情報 を使用したマネージャのログイン、または SNMP トラフィックについては、ポリシーは評価 されません。 <Proxy> トランザクション クライアントがセキュアプロキシ アプライアンス上に設定されたプロキシ サービス ポートの 1 つに 接続するとき、 要求とそれに関連づけられた応答の両方に対応するためにプロキシ トランザクションが 作成されます。 DNS プロキシ サービスの要求は、より高次のサービスの要求とは別に処理されます。 次の <DNS-Proxy> トランザクション セクションを参照してください。 プロキシ トランザクションは、 および <Exception> レイヤでポリ <Proxy>、 <Cache>、 <Forward>、 シーを評価します。<Forward> レイヤは、トランザクションが要求を満たすために配信元サーバーに 接続する段階に至った場合のみ評価されます ( 要求がキャッシュから提供されるデータで満たされる 場合、 あるいはトランザクションが例外により終了する場合は当てはまりません )。 <Exception> レイ ヤは、 トランザクションが例外によって終了した場合にのみ評価されます。 プロトコル固有のプロキシ トランザクションはそれぞれ、テスト可能な特定の情報を持っており、 こ の情報は他のプロトコルからは取得できず、他のプロトコルとの関連性もありません。HTTP ヘッダ およびインスタント メッセージングのバディ名は、2 つともプロトコル固有の情報の例です。 プロキシ トランザクション サブタイプのうち、他の主要な識別因子となるものは、個別のプロトコル によって決定される情報が利用可能になる順序および特定のアクションが実行される必要のあるタ イミングです。個別のプロトコルで継承されるバリエーションがタイミングまたはトランザクション が処理されるときに発生する評価のシーケンスを決定します。 34 第 2 章 : Content Policy Language の概要 次の表に、各プロトコル固有のプロキシ トランザクションのポリシー評価の順序を概説します。 表 2.1: ポリシーが評価されるとき トランザクション タイプ ポリシーが評価されます。 トンネル処理された TCP トラ ンザクション 配信元サーバーへの接続を確立する前 HTTP プロキシ トランザク ション 認証チャレンジ前 認証チャレンジ後、かつ要求されたオブジェクトがフェッチされる前 必要な場合は、アップストリーム接続を確立する前 オブジェクトをフェッチした後 FTP over HTTP トランザク ション 認証チャレンジ前 認証チャレンジ後、かつ要求された FTP コマンドが実行される前 必要な場合は、アップストリーム接続を確立する前 オブジェクトをフェッチした後 透過 FTP トランザクション 要求されたオブジェクトをフェッチする前にポリシーを確認します。 Real-Media ストリーミング トランザクション 認証チャレンジ前 認証チャレンジ後、かつオブジェクト情報の取得前 必要な場合は、アップストリーム接続を確立する前 オブジェクト情報が利用可能になった後、かつストリーミング開始前 ストリーミング開始後 ( この評価は、たとえば再生を一時停止して再開した 後など、複数回実行可能 )。 Windows-Media MMS スト リーミング トランザクション 認証チャレンジ前 必要な場合は、アップストリーム接続を確立する前 認証チャレンジ後、かつオブジェクト情報の取得前 オブジェクト情報が利用可能になった後、かつストリーミング開始前 ストリーミング開始後 ( この評価は、たとえば再生を一時停止して再開した 後など、複数回実行可能 )。 35 SGOS 6.4 Content Policy Language リファレンス 表 2.1: ポリシーが評価されるとき ( 続き ) トランザクション タイプ ポリシーが評価されます。 Windows-Media HTTP スト リーミング トランザクション 認証チャレンジ前 認証チャレンジ後、かつ要求されたオブジェクトがフェッチされる前 必要な場合は、アップストリーム接続を確立する前(ここまでは HTTP トラン ザクションと同様です。) 推奨する接続数は、ICAP サーバーの能力に応じて異なります。 • 配信元サーバーに接続後、User Agent ヘッダが Windows メディア プレー ヤーを表し、Microsoft ストリーミング HTTP 拡張をサポートするサーバーの 場合は、MMS トランザクションと同様に終了します。オブジェクト情報 は、この段階で利用可能ですが、ストリーミングはまだ始まっていません。 • User Agent ヘッダが Windows メディア プレーヤーを表していないか、 サーバーが Microsoft ストリーミング HTTP 拡張をサポートしない場合 は、HTTP トランザクションと同様に終了します。要求されたオブジェク トをフェッチし、ポリシーを評価します。 一部の条件は、最初の段階では評価できません。たとえば、ユーザー情報およびグループ情報は、ス テージ 2 になるまで判明しません。同様に、応答ヘッダおよび MIME タイプはステージ 3 になるまで テストできません。条件に関して、これは最早利用可能時間として知られています。 ポリシー決定でも同様のタイミングの考慮が行われますが、これは最遅コミット時間として知られて います。この例では、認証の要件はステージ 1 で既知である必要があり、 転送ホストまたはゲートウェ イはステージ 3 までに決定する必要があります。 <DNS-Proxy> トランザクション クライアントが SG 上に設定された DNS プロキシ サービス ポートの 1 つに接続するとき、要求とそ れに関連づけられた応答の両方に対応するために <DNS-Proxy> トランザクションが作成されます。 他のレイヤ <DNS-Proxy> トランザクションは、<DNS-Proxy> レイヤ内のポリシーのみを評価します。 のポリシーは、<DNS-Proxy> トランザクションに影響しません。 <DNS-Proxy> トランザクションのポリシーは 2 つの段階で評価されます。 36 • DNS 要求を受信した後 • DNS 応答が利用可能になった後 第 2 章 : Content Policy Language の概要 <Cache> トランザクション キャッシュ トランザクションは、SG が適応リフレッシュ中またはパイプライン中にローカル オブ ジェクト ストア内のコンテンツを読み込みまたは保守するか、content distribute CLI コマンドの 結果開始されます。 これらのトランザクションは、 HTTP、FTP またはストリーミング メディア トラン ザクションです。これらのトランザクションと特定のユーザーが関連付けられていないため、キャッ シュ トランザクションのコンテンツ関連ポリシーは評価されますが、ユーザー関連ポリシーは評価さ れません。 キ ャ ッ シ ュ ト ラ ン ザ ク シ ョ ン は、<Cache> お よ び <Forward> レ イ ヤ で ポ リ シ ー を 評 価 し ま す。 トランザクションを完了するため配信元サーバーに接続する必要がある場合に <Forward> レイヤは、 のみ評価されます。 キャッシュ トランザクションのリストを次に示します。 • content distribute CLI コマンドによって開始されるコンテンツ配信トランザクションコンテ ンツ配信トランザクションは、次のプロトコルのいずれかを使用することができます。HTTP、 HTTPS、Real-Media または Windows-Media 管理者はコマンドを使用するために認証と承認を必 要とするので、このタイプのトランザクションの前には、別の管理者トランザクションが実行され る可能性があります。 • パイプライン トランザクション (HTTP のみ ) • アドバタイズメント トランザクション (HTTP のみ ) • If-modified-since トランザクション (HTTP のみ ) • リフレッシュ トランザクション (HTTP のみ ) • ICP トランザクション キャッシュ トランザクションは SG によって内部的に生成されるためクライアント ID はなく、認証 および承認はどちらのサポートしていません。 そのため、client.address=、group= などの条件、 authenticate() プロパティはサポートしていません。 HTTP キャッシュ トランザクションは 2 つの段階で確認されます。 • 配信元サーバーからオブジェクトを取得する前 • オブジェクトを取得した後 <Exception> トランザクション Exception トランザクションには、例外によって終了した <Proxy> トランザクションが含まれます。 37 SGOS 6.4 Content Policy Language リファレンス <Forwarding> トランザクション SG がリモート ホストにアクセスする前に転送ポリシーを評価する必要がある場合に、<Forwarding> トランザクションが作成されます。 プロキシ トランザクションおよびキャッシュ トランザクション はこのアクティビティには関連しません。例としては、ハートビート メッセージの送信、HTTP サー バーからのインストール可能リストのダウンロードなどがあります。 <Forwarding> トランザクションは、<Forward> レイヤ内のポリシーのみを評価します。 <SSL> トランザクション 2 種類の <SSL> トランザクションがあります。 • <SSL>: これには、<SSL-Intercept> トランザクション以外のキャッシュおよびプロキシ トラン ザクションが含まれます。VPM では、 <SSL> トランザクションは SSL アクセス トランザクション と呼ばれます。 • <SSL-Intercept>: SSL 接続をインターセプトおよび復号化するかどうか、または暗号化された ままにして単にトンネル処理するかどうかを決定することが目的の、プロキシ トランザクション です。 タイミング プロキシ トランザクションについての説明で述べているように、トランザクション情報のさまざまな 部分が評価のさまざまなポイントで利用可能になり、各プロトコルにはそれぞれの決定が行われるタ イミングについての特定の要件があります。 CPL トリガおよびプロパティは、 CPL が課すタイミング 要件にすべてのプロトコルを含めることで、できる限りポリシー ライターがプロトコル間の変動から 保護されるように設計されています。 それができない場合には ( 最も制限の強いタイミングを使用す ると他のプロトコル用の機能が大きく損なわれるため )、プロトコル固有トリガが導入されます。他の プロトコルに対して評価されるとき、それらのトリガは not applicable 値 または N/A を返します。 これによって、ルールがスキップされます ( 内容に関係なく、式の評価の結果は false になります )。 そ のようなルールが適切なトランザクションに対してのみ評価されるようにすることで、ルールを明示 的に保護できます。 トリガおよびプロパティ タイミングの相違は、ポリシー ルール内で、 評価シーケンスの比較的遅い段 階でのみテストされる条件と、 評価シーケンスの比較的早い段階で設定する必要があるプロパティの 間で競合が発生する可能性があることを示しています。こうしたルールは、コンパイル時のエラーに つながります。 たとえば、次のルールはトランザクションの評価で不正となります。 ユーザーがグループ xyz 内にいる場合、認証が必要になる。 グループ メンバシップは認証後まで判別できず、このルールはグループ メンバシップをテストし、 認 証チャレンジを発行するために設定する必要がある認証レルムおよびプロパティを指定するため、こ のルールは不正となります。次のコードは、不正なルールおよび結果としてコンパイル時間に表示さ れるメッセージを示しています。 group=xyz authenticate(MyRealm) Error: Late condition guards early action: 'authenticate(MyRealm)' 38 第 2 章 : Content Policy Language の概要 ただし、 クライアント アドレス (client.address=) およびプロキシ ポート (proxy.port=) はクライ アント接続の確立時に判別でき、 プロキシ トランザクションの開始時から利用可能となるため、 認証 要件がそれらを条件とするのは有効です。 HTTP プロトコルの場合、authenticate() は URL (url=) を条件にできますが、 MMS ストリーミング の場合、URL のホスト部分のみテストできます (url.host=)。 33 ページの「トランザクションとタイミ ングの理解」で示した Windows Media トランザクションの評価モデルの概要を参照してください。 レイヤの理解 ポリシー ファイルでは 8 つのタイプのレイヤが使用できます。レイヤ タイプによって、ルールが機能 するトランザクションの種類が決まります。 ヘッダーで使用されるトークンによって、レイヤ タイプ が識別されます。 • <Admin>: 管理コンソールおよびコマンド ラインへのアクセス権限を制御するポリシーを定義す るために使用します。ただし、シリアル コンソール アクセスおよび SNMP トラフィックについて は、 ポリシーは評価されません。 • <Cache>: キャッシュ トランザクションとプロキシ トランザクションの両方で評価されるポリシー ルールのリストを表示するために使用します。 • プロキシ トランザクションが例外によって終了した時に評価されます。 <Exception>: 例外レイヤは、 • 現在のトランザクションがアップストリーム接続を必要とする場合に <Forward>: 転送レイヤは、 のみ評価されます。通常、転送ポリシーは一意で、他のポリシーから独立しており、多くの場合、 ネットワーク トポロジ管理の一環として使用されます。 • <Proxy>: プロキシ トランザクションで評価されるポリシー ルールのリストを表示するために使 用します。 • <DNS-Proxy>: <DNS-Proxy> トランザクションを制御するポリシーを定義するために使用します。 <DNS-Proxy> トランザクションのみ、<DNS-Proxy> レイヤに対して評価されます。 • <SSL-Intercept>: SSL 接続がインターセプトおよび復号化される、またはトンネル処理される条 件を定義するポリシー トリガおよびプロパティのリストを表示するために使用します。このレイ ヤは、SSL-Intercept トランザクションで評価されます。SSL-Intercept レイヤでは、トンネルまたは インターセプトの決定に不可欠な条件、アクション、およびプロパティのみ使用できます。 • <SSL>: SSL インターセプトに関連付けられていない追加 SSL トリガおよびプロパティを格納す るために使用します。このレイヤは VPM では SSL Access レイヤと呼ばれ、SSL-Intercept および <DNS-Proxy> トランザクション以外のすべてのキャッシュおよびプロキシ トランザクションで 評価されます。 重要 : 各レイヤ タイプでは、ポリシー言語で使用可能な条件、プロパティ、およびアクションのサブ セットのみ許可されてます。それ以外はコンパイル時にエラーになります。それらの条件、プ ロパティ、およびアクションが使用できる場面については、このマニュアルの対応する章を参 照してください。 39 SGOS 6.4 Content Policy Language リファレンス <Admin> レイヤ Administrator トランザクションで実行されるポリシーを保持します。このポリ <Admin> レイヤは、 シーは、認証レルムの指定、クライアントの IP アドレス、 資格情報、 および要求された管理者アクセス のタイプ ( 読み取りまたは書き込み ) の許可または拒否、および管理アクセスのための追加ログの実施 のために使用します。 重要 : トラフィックが非透過プロキシされると、それは SG アプライアンスの IP アドレスに設定さ れたクライアント IP アドレスを備えた <Admin> レイヤに到達するため、 client.address= 条件は非透過プロキシトラフィックには有効ではありません。 構文は次のとおりです。 <Admin [“comment”]> [admin_condition][admin_properties] ... admin_rules 各引数の意味は次のとおりです。 • レイヤ タイプとスペースで区切られた “comment” ( 省略可能 ) は、 レイヤの目的を特定す るためポリシー トレースで表示される ID または引用符で囲まれた文字列です。 • レイヤ コンテンツを評価する前に評価の結果が true と admin_condition ( 省略可能 ) は、 なる必要があるトリガのリストです。 条件の使用についての詳細は、 58 ページの「条件リ ファレンス」を参照してください。 次の 「レイヤ ガード」 のセクションも参照してください。 • レイヤ内のルールのどれかが一致した場合に設定され admin_properties ( 省略可能 ) は、 るプロパティのリストです。 これらはデフォルトとして機能し、レイヤ内の特定のルール のプロパティ設定によってオーバーライドできます。プロパティの使用についての詳細 は、 を参照してください。次の 「レイヤ ガード」 のセ 265 ページの 第 4 章「プロパティ参照」 : クションも参照してください。 • このポリシー レイヤによって行われる決定を表すルールのリストです。 admin_rules は、 <Cache> レイヤ キャッシュ トランザクションとプロキシ トランザクション両方で実行されるポ <Cache> レイヤは、 リ シ ー を保 持 し ま す。キャ ッ シ ュ ト ラ ン ザク シ ョ ンに は ク ラ イア ン ト の概 念 が な く、すべ て の <Cache> レイヤ ポリシーがクライアントなしであるため、 client.address=, user=, group= など を使用してクライアント ID をテストできません。 キャッシュの一貫性を保つため、 プロキシ トランザクションおよびキャッシュ トランザクションには特 定のタイプのポリシーを一貫して適用する必要があります。 こうしたポリシーではクライアント ID また は時間を条件にはできず、 例としては、 次のようなものが挙げられます。 <Cache> レイヤに属します。 40 • 応答ウイルス スキャン。 • キャッシュ制御ポリシー (bypass_cache 以外 )。 • 要求ヘッダーに加えた変更 ( その変更が Web サーバーが返すコンテンツに影響せず、コンテンツ がキャッシュされる場合 ) 第 2 章 : Content Policy Language の概要 • キャッシュ URL ではなくサーバー URL を変更する要求 URL の書き換え。( キャッシュ URL およ びサーバー URL を変更する要求 URL の書き換えは <Proxy> レイヤ内の同じ値に置きます。) 安全に <Cache> レイヤで時間またはクライアント ID を条件にできるのは次のプロパティのみです。 • パイプライン • トレース、ログ • 更新チェック • リダイレクト • コンテンツ変換 構文は次のとおりです。 <Cache [“comment”]> [cache_condition][cache_properties] ... cache_rules 各引数の意味は次のとおりです。 • レイヤ タイプとスペースで区切られた “comment” ( 省略可能 ) は、 レイヤの目的を特定す るためポリシー トレースで表示される ID または引用符で囲まれた文字列です。 • レイヤ コンテンツを評価する前に評価の結果が true と cache_condition ( 省略可能 ) は、 なる必要があるトリガのリストです。 条件の使用についての詳細は、 58 ページの「条件リ ファレンス」を参照してください。 次の 「レイヤ ガード」 のセクションも参照してください。 • レイヤ内のルールのどれかが一致した場合に設定され cache_propertie ( 省略可能 ) は、 るプロパティのリストです。 これらはデフォルトとして機能し、 レイヤ内の特定のルール のプロパティ設定によってオーバーライドできます。プロパティの使用についての詳細 は、265 ページの 第 4 章「プロパティ参照」 を参照してください。次の「レイヤ ガード」 のセ : クションも参照してください。 • このポリシー レイヤによって行われる決定を表すルールのリストです。 cache_rules は、 <Exception> レイヤ プロキシ トランザクションが例外によって終了した時に評価されます。 これ <Exception> レイヤは、 は、 不正な要求 ( 要求 URL が存在しないサーバーを指定している場合など ) が行われるか、ポリシーに 発生する可能性があります。例外レイヤのポリ deny または exception() プロパティが設定されると、 シーは、authentication_failed などの例外へのアクセス ログの実行方法の制御に使用できます。ま た、 クライアントに送信された例外ページの HTTP 応答ヘッダーの変更にも使用できます。 構文は次のとおりです。 <Exception [“comment”]> [exception_condition][exception_properties] ... exception_rules 各引数の意味は次のとおりです。 • レイヤ タイプとスペースで区切られた “comment” ( 省略可能 ) は、 レイヤの目的を特定す るためポリシー トレースで表示される ID または引用符で囲まれた文字列です。 41 SGOS 6.4 Content Policy Language リファレンス • • レイヤ コンテンツを評価する前に評価の結果が exception_condition ( 省略可能 ) は、 true となる必要があるトリガのリストです。条件の使用についての詳細は、58 ページの 「条件リファレンス」を参照してください。 次の 「レイヤ ガード」のセクションも参照して ください。 レイヤ内のルールのどれかが一致した場合に設定される exception_properties ( 省略可能 ) は、 プロパティのリストです。 これらはデフォルトとして機能し、 レイヤ内の特定のルールのプロパティ 設定によってオーバーライドできます。 プロパティの使用についての詳細は、 265 ページの 第 4 章 : 「プロパティ参照」を参照してください。次の「レイヤ ガード」のセクションも参照してください。 • exception_rules は、このポリシー レイヤによって行われる決定を表すルールのリストです。 <Forward> レイヤ 現在のトランザクションがアップストリーム接続を必要とする場合に評価され <Forward> レイヤは、 ます (この場合のみ、転送ポリシーがキャッシュ ヒットと評価されません)。<Forward> レイヤは、URL を再書き込みするポリシーの優先が保証されるよう、 url= テストではなく server_url= テストを使 用します。 構文は次のとおりです。 <Forward [“comment”]> [forward_condition][forward_properties] ... forward_rules 各引数の意味は次のとおりです。 • レイヤ タイプとスペースで区切られた “comment” ( 省略可能 ) は、 レイヤの目的を特定す るためポリシー トレースで表示される ID または引用符で囲まれた文字列です。 • レイヤ コンテンツを評価する前に評価の結果が true forward_condition ( 省略可能 ) は、 となる必要があるトリガのリストです。条件の使用についての詳細は、次の「レイヤ ガー ド」 のセクションも参照してください。 • レイヤ内のルールが一致する場合に設定されるプロ forward_properties (省略可能) は、 パティのリストです。 これらはデフォルトとして機能し、 レイヤ内の特定のルールのプロ パティ設定によってオーバーライドできます。 プロパティの使用についての詳細は、 次の 「レイヤ ガード」セクションを参照してください。 • このポリシー レイヤによる決定を表すルールのリストです。 forward_rules は、 <Proxy> レイヤ ユー <proxy> レイヤは設定されたプロキシ サービス ポートの 1 つを使用するサービスに対する、 ザーの要求を認証および承認するためのポリシーを定義します。Proxy レイヤ ポリシーには、 クライ アントの ID とコンテンツの両方が関与します。 プロキシ ト <Proxy> レイヤに対して評価されるのは、 ランザクションのみです。 注意 : <DNS-Proxy> トランザクションのポリシーは、他のプロキシ サービスのポリシーとは異なりま す。次の「<DNS-Proxy> レイヤ」セクションを参照してください。 42 第 2 章 : Content Policy Language の概要 構文は次のとおりです。 <Proxy [“comment”]> [proxy_condition][proxy_properties] ... proxy_rules 各引数の意味は次のとおりです。 • レイヤ タイプとスペースで区切られた “comment” ( 省略可能 ) は、 レイヤの目的を特定す るためポリシー トレースで表示される ID または引用符で囲まれた文字列です。 • proxy_condition ( 省略可能 ) はトリガのリストで、レイヤ コンテンツが評価される前に、こ れらのすべてが true に評価されている必要があります。条件の使用についての詳細は、次 の「レイヤ ガード」のセクションも参照してください。 • レイヤ内のルールが一致する場合に設定されるプロパ proxy_properties ( 省略可能 ) は、 ティのリストです。 これらはデフォルトとして機能し、 レイヤ内の特定のルールのプロパ ティ設定によってオーバーライドできます。次の「レイヤ ガード」のセクションも参照し てください。 • このポリシー レイヤによる決定を表すルールのリストです。 proxy_rules は、 <DNS-Proxy> レイヤ <DNS-Proxy> レイヤは、<DNS-Proxy> トランザクションを制御するポリシーを定義します。 <DNS-Proxy> トランザクションのみ、<DNS-Proxy> レイヤに対して評価されます。 構文は次のとおりです。 <DNS-Proxy [“comment”]> [dns_proxy_condition][dns_proxy_properties] ... dns_proxy_rules 各引数の意味は次のとおりです。 • レイヤ タイプとスペースで区切られた “comment” ( 省略可能 ) は、 レイヤの目的を特定す るためポリシー トレースで表示される ID または引用符で囲まれた文字列です。 • dns_proxy_condition ( 省略可能 ) はトリガのリストで、レイヤ コンテンツが評価される 前に、これらのすべてが true に評価されている必要があります。条件の使用についての詳 細は、次の 「レイヤ ガード」のセクションも参照してください。 • dns_proxy_properties ( 省略可能 ) は、レイヤ内のルールが一致する場合に設定される プロパティのリストです。これらはデフォルトとして機能し、レイヤ内の特定のルールの プロパティ設定によってオーバーライドできます。 プロパティの使用についての詳細は、 次の「レイヤ ガード」セクションを参照してください。 • このポリシー レイヤによる決定を表すルールのリストです。 dns_proxy_rules は、 <SSL-Intercept> レイヤ <SSL-Intercept> レイヤは、SSL 接続のインターセプト条件を定義するトリガとプロパティをリスト します。このレイヤは、SSL-Intercept トランザクションによってのみ評価されます。 43 SGOS 6.4 Content Policy Language リファレンス 構文は次のとおりです。 <SSL-Intercept [“comment”]> [SSL-Intercept_condition][SSL-Intercept_properties] ... SSL-Intercept_rules 各引数の意味は次のとおりです。 • レイヤ タイプとスペースで区切られた “comment” ( 省略可能 ) は、 レイヤの目的を特定す るためポリシー トレースで表示される ID または引用符で囲まれた文字列です。 • レイヤ コンテンツが評価 SSL-Intercept_condition ( 省略可能 ) はトリガのリストで、 される前に、これらのすべてが true に評価されている必要があります。条件の使用につい ての詳細は、次の 「レイヤ ガード」のセクションも参照してください。 • レイヤ内のルールが一致する場合に設定さ SSL-Intercept_properties ( 省略可能 ) は、 れるプロパティのリストです。 これらはデフォルトとして機能し、レイヤ内の特定のルー ルのプロパティ設定によってオーバーライドできます。プロパティの使用についての詳 細は、次の「レイヤ ガード」セクションを参照してください。 • このポリシー レイヤによる決定を表すルールのリストです。 SSL-Intercept_rules は、 <SSL> レイヤ このレ <SSL> レイヤは、 SSL 接続のインターセプト条件を定義するトリガとプロパティをリストします。 イヤは、SSL-Intercept トランザクションを除くすべてのトランザクションによって評価されます。 構文は次のとおりです。 <SSL [“comment”]> [SSL_condition][SSL_properties] ... SSL_rules 各引数の意味は次のとおりです。 • スペースによってレイヤ タイプから分離されている「comment」( 省略可能 ) は、 レイヤの 目的を識別するために、ポリシー トレースに表示される ID または引用符で囲まれた文字 列です。 • レイヤ コンテンツが評価される前に、 SSL_condition ( 省略可能 ) はトリガのリストで、 これらのすべてが true に評価されている必要があります。条件の使用についての詳細は、 次の 「レイヤ ガード」のセクションも参照してください。 • レイヤ内のルールが一致する場合に設定されるプロパ SSL_properties ( 省略可能 ) は、 ティのリストです。 これらはデフォルトとして機能し、 レイヤ内の特定のルールのプロパ ティ設定によってオーバーライドできます。 プロパティの使用についての詳細は、 次の 「レイヤ ガード」セクションを参照してください。 • 44 SSL_rules は、 このポリシー レイヤによる決定を表すルールのリストです。 第 2 章 : Content Policy Language の概要 レイヤ ガード 一連の同じ条件またはプロパティがレイヤの各ルールに出現することがあります。たとえば、何かが 拒否された個別のケースが多数存在する特定のユーザー グループがあったとします。 <Proxy> group=general_staff url.domain=competitor.com/jobs deny group=general_staff url.host=bad_host deny group=general_staff condition=whatever deny ; etc. group=general_staff allow 共通する要素をガード式で取り除くことができます。共通する要素は、group=general_staff と deny です。 次は同じポリシーですが、guard 式を使ったレイヤとして表現されています。 <Proxy> group=general_staff deny url.domain=competitor.com/jobs url.host=bad_host condition=whatever ; etc. allow 明示的な allow によって、レイヤ ガードに指定された deny がオーバーライドされています。これは、 特定のプロパティ設定が、 guard 式で指定されたデフォルトのプロパティ設定をオーバーライドする ルールの一例です。 タイミング ルール内で発生する可能性のある late guards early タイミング エラーは、レイヤのルール全体で発生す る可能性があります。トリガを評価できない間、ポリシーも、 そのレイヤ内のすべての後続のルールの 評価を延期する必要があります ( トリガが true となり、 ルールが一致する場合に、そのレイヤの評価は 停止します。トリガが false となり、ルールが一致しない場合、最初の一致が見つかるまで、 そのレイヤ 内の残りのルールについて評価が続行されます )。したがって、ルールは、その上にあるレイヤ内の最後 のルールの最初の評価ポイントのタイミングを継承します。 たとえば、先に述べたように、次のルールは、タイミングの競合エラーとなります。 group=xyz authenticate(MyRealm) Error: Late condition guards early action: 'authenticate(MyRealm)' 次のレイヤは、同様のエラーとなります。 <Proxy> group=xyz deny authenticate(MyRealm) Error: Late condition 'group=xyz' guards early action: 'authenticate(MyRealm)' ガード条件はレイヤ内のいずれのルールよりも先に評価される必要があるため、 これもガード式に拡 張されます。例を示します。 <Proxy> group=xyz deny authenticate(MyRealm) Error: Late condition 'group=xyz' guards early action: 'authenticate(MyRealm)' 45 SGOS 6.4 Content Policy Language リファレンス セクションの理解 レイヤのルールは、必要に応じて 1 つまたは複数のセクションにまとめることができます。これは ルールをグループ化する方法の 1 つです。セクションは、セクション ヘッダーとそれに続く一連の ルールからなります。 4 つのセクション タイプが、標準 CPL ファイルでサポートされています。 • [Rule] • [url] • [url.domain] • [server_url.domain] および [server_url.domain]) これらのセクション タイプの内 3 つのセクション ([url]、 [url.domain]、 は、URL テストの最適化を提供します。これらのセクションの名前は、セクションの各ルールで最初の テストとして使用される CPL URL トリガ (url=、url.domain= 、および server_url.domain=) に対 応しています。[url.regex] セクションには、分解と構成の利点がありますが、[Rule] セクションと 明示的な url.regex= テストを使用した場合に比べ、それらを上回るパフォーマンスはありません。 例として、次のポリシー レイヤを使用します。 <Proxy> url.domain=abc.com/sports deny url.domain=nbc.com/athletics deny ; etc, suppose it's a substantial list url.regex="sports|athletics" access_server(no) url.regex="\.mail\." deny ; etc url=www.bluecoat.com/internal group=!bluecoat_employees deny url=www.bluecoat.com/proteus group=!bluecoat_development deny ; etc これは、3 つのセクションに書き直すことができます。 <Proxy> [url.domain] abc.com/sports deny nbc.com/athletics deny ; etc. [Rule] url.regex="sports|athletics" access_server(no) url.regex="\.mail\." deny [url] www.bluecoat.com/internal group=!bluecoat_employees deny www.bluecoat.com/proteus group=!bluecoat_development deny 各行のはじめは、ラベル付けされた CPL トリガではありませんが、セクション タイプによって想定さ れたトリガの引数です。また、最初の行の後、残りの行は見慣れた形式になっています。 パフォーマンスの観点で、[url]、[url.domain]、または [server_url.domain] セクションを使用す る利点は、テストされる URL の数がおおよそ 100 に達すると測定できます。数百個や数千個にもおよ ぶ URL のリストの場合は、当然著しいパフォーマンスの利点が得られます。 46 第 2 章 : Content Policy Language の概要 明示的なセクションが指定されていない場合、 レイヤのすべてのルールは、 [Rule] セクションに存在 するとみなされます。つまり、最初の例は、次に相当します。 <Proxy> [Rule] url.domain=abc.com/sports deny url.domain=nbc.com/athletics deny ; etc, suppose it's a substantial list url.regex="sports|athletics" access_server(no) url.regex="\.mail\." deny ; etc url=www.bluecoat.com/internal group=!bluecoat_employees deny url=www.bluecoat.com/proteus group=!bluecoat_development deny ; etc [Rule] ポリシー ルールをセクションに論理的に整理するために使用し、含まれ [Rule] セクション タイプは、 ポリシーのすべてのルールを受 るルールにガードを適用することもできます。 [Rule] セクションは、 け入れることができるため、 そのように名づけられています。セクションが指定されていない場合、 レ イヤのすべてのルールは、[Rule] セクションに存在するとみなされます。 • 大きなレイヤの構造を明確にするには、[Rule] セクションを使用します。レイヤに多数のルール が含まれており、 そのルールの多くに 1 つ以上の共通する条件が含まれる場合、[Rule] セクショ ンを定義すると便利な場合があります。 • 上から下に、 順番に評価されます。 評価に掛かる時間は、 セクション内 [Rule] セクションのルールは、 のルールの数に比例します。 • 任意のレイヤで使用できます。 [Rule] セクションは、 [url] URL をテストする複数のルールをグループ化するために使用します。 [url] セクション タイプは、 セクション内のルールの構文を制限します。 ルール行の最初のトークンには、 [url] セクションは、 トリガ名は含まれません。 url= トリガに適切なパターンが使用されている必要があります。 評価に掛かる時間は、 セクション内のルールの数に関係なく、ハッシュ [url] セクションのルールは、 テーブル法で評価されます。 • [url] セクションは、 <Admin> または <Forward> レイヤで使用できません。 [url.domain] URL ドメインをテストする複数のルールをグループ化するために使用し [url.domain] セクションは、 ます。 セクション内のルールの構文を制限します。 ルール行の最初のトー [url.domain] セクションは、 トリガ名は含まれ クンには、 url.domain= トリガに適切なパターンが使用されている必要があります。 ません。 ([url.domain] セクションは、 CPL の以前のバージョンで使用されていた [domain-suffix] セクションに置き換わるものです。) 47 SGOS 6.4 Content Policy Language リファレンス • 評価に掛かる時間は、セクション内のルールの数に関係な [url.domain] セクションのルールは、 く、 ハッシュ テーブル法で評価されます。 • [url.domain] セクションは、 <Admin> または <Forward> レイヤで使用できません。 [url.regex] URL をテストするために使用します。[url.regex] セクションは、セク [url.regex] セクションは、 ション内のルールの構文を制限します。ルール行の最初のトークンには、url.regex= トリガに適切な パターンが使用されている必要があります。トリガ名は含まれません。([url.regex] セクションは、 CPL の以前のバージョンで使用されていた [Regex] セクションに置き換わるものです。) • 上から下に、順番に評価されます。評価に掛かる時間は、 セク [url.regex] セクションのルールは、 ション内のルールの数に比例します。 • [url.regex] セクションは、 <Admin>、< DNS-Proxy>、ま た は <Forward> レイヤで使用できま せん。 [server_url.domain] 配信元サーバーからコンテンツをフェッチするのに使用する [server_url.domain] セクションは、 URL のドメインをテストするために使用します。[server_url.domain] セクションでは、セクション の構文およびルールを制限します。ルール行の最初のトークンは server_url.domain= トリガに対し て適切なパターンである必要があります。トリガ名は含まれません。 [server_url.domain] セクションには、 [url.domain] セクションときわめて似ているポリシー ルールが含まれています。 ただし、これらのポリシー ルールが server_url をテストし、 要求 URL へ の書き換えをすべて反映するという点は異なります。 • ハッシュ テーブル手法により評価されます。その [server_url.domain] セクションのルールは、 ため、かかる時間はセクションのルール数で異なるわけではありません。 • [server_url.domain] セクションは、 <Proxy>、<Cache>、<Forward>、<SSL>、<SSL-Intercept> の 各レイヤで使用できます。 セクション ガード レイヤで可能なように、 ルールをセクションにグループ化し、 一般的な条件およびプロパティをセク ション ヘッダーに続くガード式に変換することにより、ポリシーの明確性および保守性を向上させる ことができます。ガード式では、 すべてのルールに適用する条件を取 [Rule] group=sales のように、 得し、セクション ヘッダーの隣に一般的な条件を記述します。 ガードは、基本的に、トリガおよびプロパティの一般的なセットを取り除く方法で、毎回それらを反復 する必要性をなくします。 ポリシーの定義 このセクションは、CPL を使用したポリシーの定義に関するいくつかのガイドラインで構成されてい ます。 48 第 2 章 : Content Policy Language の概要 • ルールまたはセクションを記述する前に、明示的なレイヤ ヘッダー (<Proxy>、<Cache>、<Admin>、 または <Exception>) を記述します。最初のレイヤ ヘッダーの前に記述する必要のあ <Forward>、 る唯一の構成要素は、条件関連の定義およびコメントです。 • ポリシー ファイルの先頭に [Rule] などのセクションを記述しないでください。すべてのセク ションをレイヤ内に記述します。 • 不必要に [Rule] セクションを使用しないでください。 • 空または不正な形式のポリシーを記述しないようにします。 一見適切な形式の CPL でも、 その CPL が実際に機能することを確認してください。 次の例では、 一見適切な CPL であるものの、CPL は実際には機能しません。レイヤ ヘッダーおよび ルール行はありません。 ルールがないため、 ポリシーもあ [Rule] セクション ヘッダーはありますが、 りません。 <Admin> group=Administrators [Rule] allow グループ「administrators」にアクセス権を許可する正しいポリシーは、次のとおりです。 <Admin> group=Administrators allow 次の例では、最初のルールしか実行されないため、レイヤはみせかけだけのものになります。 <Proxy> authenticate(MyRealm) ; this rule is unconditional ;all following rules are unreachable Group=administrator allow Group=clerk time=0900..1700 allow deny ほとんどの場合、特定のレイヤで 1 つのルールが実行されます。条件に合う最初のルールが実行されま すが、 レイヤのその他すべてのルールは無視されます。 複数のルールを実行するには、 複数のレイヤを 使用します。ポリシーについて正しく定義するには、次のように 2 つのレイヤが必要です。 <Proxy> authenticate(MyRealm) <Proxy> Group=administrator allow Group=clerk time=0900..1700 allow deny • CacheOS 4.x フィルタ ファイル構文と CPL 構文を混同しないでください。 新しい構文 Content Policy Language には、フィルタ ファイル構文との下位互換性がありますが、 を古い構文と併用しないでください。たとえば、フィルタ ファイル構文は異なる評価順序を使用 するため、古い構文と新しい構文を併用すると問題が発生する可能性があります。Blue Coat では これら 2 つの構文を併用しないよう強くお勧めします。 49 SGOS 6.4 Content Policy Language リファレンス ブラックリストおよびホワイトリスト 管理ポリシーが意図するのは、使いやすさよりセキュリティを重んじる慎重かつ、 堅実なポリシーで す。 明確に記述されていないすべての要素は拒否されることが前提となります。このアプローチは、ホ ワイトリスト アプローチと呼ばれ、アクセス権についてのセキュリティまたは法的な問題を懸念して いる企業では一般的に使用されています。この概念を通常のインターネット アクセスに拡張する必要 のある組織では、デフォルトの拒否プロキシ ポリシーも選択します。 デフォルトで、すべてが許可されるという考えに基づいています。 一部の要 2 番目のアプローチでは、 求が拒否されることがありますが、 それは実際は例外です。 これは、拒否する ( ブラックリストに載せ る ) べきすべての要素を明確に記述する必要があるため、ブラックリスト ポリシーとして知られてい ます。ブラックリスト ポリシーは、 セキュリティや法的な責任よりアクセスの方が重要な組織が使用 します。 この 2 つの目のアプローチは、キャッシュ トランザクションに使用されますが、インターネット サー ビス プロバイダなどの組織のデフォルトのプロキシ ポリシーとしても一般的です。 ブラックリストおよびホワイトリストは、戦術的なアプリーチですが、 相互に排他的なわけではあり ません。最良の全体的なポリシー戦略は、多くの場合、 この 2 つのアプローチを組み合わせたもので す。 たとえば、デフォルトの拒否ポリシーから始めると、ユーザーは、一般的に提供されるべき要求を 明示的にフィルタインするためにホワイトリスト アプローチを使用できます (内部サブネットから発 生したすべての要求など。その一方で、外部要求にはデフォルトの拒否ポリシーが適用される )。 さら に、 その後、ポリシー レイヤで不要な要求 ( コンテンツ フィルタ ポリシーに準拠しない要求など ) を フィルタアウトするためにブラックリスト モードでより明確な制限を適用できます。 また、ホワイトリストおよびブラックリストは、単なるサービスの許可または拒否だけではなく、特定 の要求にさらなる処理を適用することもできます。たとえば、 各フィルタ タイプが示すウイルス感染 のリスクまたは不正な実行可能コンテンツのリスクが均等ではないとします。その場合、 ユーザーは ウイルス スキャナに特定のファイル タイプのみ ( おそらく、実行可能コンテンツの潜むファイルとし て知られているファイル タイプ ) を送信し ( ブラックリスト )、安全とみなすことのできるホワイトリ ストのタイプ ( 画像ファイルなど ) のファイルを除くすべてのファイルにウイルス スキャンをかける ことを選択します。 全般的なルールおよび全般的なルールに対する例外 ポリシーを作成するときは、多くの組織は全般的なルールを使用してから、ルールに対する複数の例 外を定義します。例外に対する例外がある場合があります。 全般的なルールに対する例外は次のいず れかを表現できます。 • レイヤ内のルール順序で表現する • ポリシー内のレイヤ順序で表現する ルール順序を使用した例外の定義 レイヤ内のポリシー ルールを評価するときは、 評価は上から下に実行されますが、 最初のルールに一 致すると、そのレイヤのそれ以降の評価は行われません。そのため、最も明確な条件または例外は最初 に定義する必要があります。レイヤ内では、最も明確なポリシーから最も一般的なポリシーという シーケンスを使用します。 50 第 2 章 : Content Policy Language の概要 次の例は、レイヤ内で定義される例外です。企業が人事部のスタッフのみに限定されている給与情報 にアクセスする必要があります。管理者は、次のように HR_staff グループのメンバシップを使用し て、 HR スタッフの例外を定義し、続けて全般ルールを定義します。 <Proxy> ; Blue Coat uses groups to identify HR staff, so authentication is required authenticate(MyRealm) define condition payroll_location url=hr.my_company.com/payroll/ end <Proxy> condition=payroll_location allow group=HR_staff ; exception deny ; general rule このアプローチでは、 ポリシーが 1 つのレイヤ内にある必要があります。 また、 レイヤ定義を複数のポリ シー ファイルに分割することはできないので、ルールおよび例外を同じファイルに記述する必要があ ります。ルールおよび例外は異なるグループで維持されている場合は、機能しない可能性があります。 ただし、これは、1 か所で給料ファイルに関連するすべてのポリシーを維持するために推奨される手法 です。このアプローチは、ブラックリスト モードまたはホワイトリスト モードのいずれかで使用でき ます (50 ページの「ブラックリストおよびホワイトリスト」を参照 )。また、誤ってセキュリティ ホール が生じないように記述することができます。上記の例はホワイトリスト モデルです。このモデルでは、 明示的に記述されていないすべてのものにデフォルトで拒否ルールが適用されます。 レイヤ順序を使用した例外の定義 順序が後のレイヤは前のレイヤをオーバーライドするため、1 つのレイヤに全般的なルールを記述し、 それに続くレイヤに例外を記述することで、明確な例外をファイルの後に配置することができます。 人事部の例は、次のように書き換えることができます。 <Proxy> ; Blue Coat uses groups to identify HR staff, so authentication is required authenticate(MyRealm) define condition payroll_location url=hr.my_company.com/payroll/ end <Proxy> condition=payroll_location deny ; general rule <Proxy> condition=payroll_location allow group=HR_staff ; exception なお、このアプローチでは、一般的な条件をレイヤ間で数回繰り返す必要があります。この例では、 例外が allow を使用してその他の制限を condition=payroll_location を繰り返す必要があります。 意図せず取消すことがないようにすることは非常に重要です。 レイヤ定義は独立しているので、個別のファイル ( 作成者が異なる場合がある ) にインストールできま す。 給料情報の場所の条件などの定義を 1 つのファイルに配置し、別のファイルで参照することができ ます。ルールを他のファイルの定義にリンクさせる場合は、ファイルの順序は重要ではありませんが、 インストール順序は重要です。定義はそれらを参照するポリシーがコンパイルされる前にインストー 51 SGOS 6.4 Content Policy Language リファレンス ルされている必要があります。複数のファイルで使用する定義を複数のファイルに分散するのではな く、唯一のファイルで維持することにより、参照の問題の連鎖が原因で変更が拒絶される可能性がな くなります。なお、 このアプローチを使用する場合は、例外は全般的なルールに準拠し、ユーザーは現 在設定されているポリシー ファイルの評価順序を認識する必要があります。ポリシー ファイルの評 価順序の変更は、細心の注意をもって管理する必要があります。 なお、ファイルの後の方でオーバーライドされない限り、プロパティはすべての設定を保持します。そ のため、多数のプロパティを設定することで、順序の早いレイヤで全般的なポリシーを実装してから、 順序が後ろのレイヤで選択したプロパティをオーバーライドすることができます。 アクションの競合の回避 ポリシー ファイル内のポリシー ルールはアクションのプロパティを繰り返し設定し、 処理されるト ランザクションに対して個々のアクションをオンにしたりオフにしたりするので、特定のアクション が競合する可能性があります。 • 1 つのアクション定義ブロックに 2 つの競合するアクションがある場合、コンパイル時エラーが発 生します。この競合は、たとえば、2 つの response.icap_service( ) アクションで構成されるア クション定義で構成される場合に発生します。 • それらに競合するアクションが含まれランタイム 2 つの異なるアクション定義が実行されており、 エラーになる場合は、 ポリシーエラーはイベント ログにログ記録され、1 つのアクションが実行す るために任意に選択されます。 次に、 さまざまなアクション間で発生する可能性のある競合について説明します。 • 2 つのインスタント メッセージのテキスト変更アクションが競合する。インスタント メッセージ のテキスト変更アクションには、append(im.message.text,...) アクションおよび set(im.message.text,...) アクションが含まれます。 • 2 つの同じタイプの transform アクションが競合する。 • 2 つの rewrite( ) アクションが競合する。 • 2 つの response.icap_service( ) アクションが競合する。 ポリシーを確定させる 次の 2 つの方法でポリシーを確定させることができます。まず、そのポリシーをファイル、つまり、 評価 順序の最後のファイルに記述します。( なお、転送ファイルは必ず最後のポリシー ファイルです )。 たと えば、サブネットによって識別可能な企業のユーザーにサービスが制限されているとします。次のよ うなルールを <Proxy> client.address=!my_subnet deny 転送ファイルの末尾に追加することで、その他のポリシーによる許可の意図しない使用によりこの制 限がオーバーライドされないようにします。この目的での使用は一般的ではありませんが、転送ファ イルが常に最後であり、 他の 3 つのファイルの順序は設定可能であることにより、 この場所が一部の 組織では確定的なポリシーの適切な場所になります。 52 第 2 章 : Content Policy Language の概要 もう 1 つの方法は、 確定的な拒否で提供されています。 deny または exception() プロパティは順序が後 のルールの許可によってオーバーライドできるので、 CPL では、 force_deny および force_exception() を提供しています。CPL では force_allow を提供しません。そのため、返されるエラーは、後続の 最終的には、その要 force_deny または force_exception() 意思表示によってリセットされるため、 求は拒否されます。このため、これらのプロパティはポリシーが記述されている場所にかかわらず確 実に否定されます。 ベスト プラクティス • 個別の決定は個別のレイヤで表します。 ポリシーが拡大し、 より複雑になると、保守が重要な問題になります。 ポリシーのそれぞれの側面 のロジックが独立しており、明確であると、保守がより容易になります。 ポリシーの決定をできる限り独立したものにし、1 つのレイヤまたは隣接する 2 つのレイヤに各ポ リシーを表現します。 • モデルとの一貫性を持たせます。 デフォルトのプロキシ ポリシーをポリシー モデルに合わせて設定し、適宜ブラックリストまたは ホワイトリスト アプローチを使用します。 推奨するアプローチは、デフォルトの拒否プロキシ ポリシーから設定を開始することです。順序 の早いレイヤで要求の許可を行い、順序が後ろレイヤで要求の拒否を行います。要求を許可するす べてのレイヤは要求を否定するレイヤの前に配置するようにします。次の例は、このモデルの単純 な例を示しています。 define subnet corporate_subnet 10.10.12.0/24 end ; First, explicitly allow access to our users <Proxy> client.address=corporate_subnet ALLOW ; Next, impose any authentication requirements <Proxy> authenticate(corp_realm) ; all access must be authenticated ; And now begin to filter-out unwanted requests <Proxy> url.domain=forbidden.com deny category=(Gambling, Hacking, Chat) deny ; more layers… 53 SGOS 6.4 Content Policy Language リファレンス • 必要な内容のみを公開します。 多くの場合、ルールはあるグループで保守し、定義は他のグループで保守できるように、ルール ロ ジックおよび条件定義を分割して維持すると便利です。ルールには変更すべきではない例外の詳 細またはその他のロジックが含まれている可能性があります。ただし、影響を受けるグループまた はコンテンツなどの条件は頻繁に変更される可能性があります。 ルールおよび条件を慎重に分割 することで、ルールはローカル ポリシー ファイルで表すことが可能になり、CPL に不慣れなユー ザーは、VPM を介して条件定義を更新することができます。 この手法では、 インストール順序が重要です。 条件定義は、一般的な利用のために公開する必要の ある条件がローカル ポリシー ファイルで参照される前に VPM で定義する必要があるため、これ らの条件を参照するポリシーがコンパイルされる前に使用可能である必要があります。 54 第 3 章 : 条件リファレンス この章では、条件および条件の異なるタイプについて説明します。 さらに、条件のパターンをその制限 と共に説明します。 この章のトピック この章は、次のトピックに関する情報で構成されています。 • 55 ページの「条件の構文」 • 56 ページの「パターン タイプ」 • 57 ページの「使用できない条件」 • 58 ページの「条件リファレンス」 条件とは、 評価されるときに true または false を返す式です。条件は次で使用することができます。 • ポリシー ルール。 • セクションおよびレイヤ ヘッダー ( ガードとして指定 )。次に例を示します。 [Rule] group=(“bankabc\hr” || “cn=humanresources,ou=groups,o=westernnational”) • および define url condition 定義ブロック。 define condition、 define domain condition、 条件の構文 条件には次の形式を使用ます。 condition=pattern-expression condition は条件変数の名前です。url などの単純な名前から、 url.path.case_sensitive または request.header.Cookie などのサブオブジェクト指定子および修飾子を含めた名前まで指定できま す。条件にスペースを含めることはできません。 pattern-expression には次のいずれかの形式を使用できます。 • 単純なパターン。条件値に対して照合されます。 • 単純なパターンのブール値の組み合わせ、 またはかっこで囲まれた単純なパターンのコンマ区切 りのリスト。 pattern-expression に指定できる値は、次のいずれかです。 • 文字列 : 文字列の引数にスペースまたはその他の特殊文字が含まれる場合、その引数を引用符で囲 む必要があります。たとえば、条件式は category=”self help” のようになります。 • 単一引数 : live= などの条件では、1 つの引数 ( この場合は yes または no) のみを指定できます。 55 SGOS 6.4 Content Policy Language リファレンス • ブール式 : server_url.scheme= などの条件には、ブール演算子を使用して 1 つ以上の引数をまと めて指定できます。たとえば、server_url.scheme=!http と指定できます。 • 整数または整数の範囲 : 数値条件には、ブール式および 2 つのピリオド (..) を使用して包含数値 範囲を指定できます。数値範囲にスペースを使用することは で き ま せん 。次に、minute= 条件を使用 した範囲の例を示します。 • minute=10..40: 毎時 10 分 ~ 40 分。 • • minute=10..: 毎時 10 分 ~ 60 分。 • minute=..40: 毎時 0 分 ~ 40 分。 • minute=40..10: 毎時 40 分 ~ 次の正時 10 分後。 正規表現 : 一部のヘッダー関連の条件および 2 つの URL 関連の条件では、正規表現を使用します。 正規表現の記述についての詳細は、付録 E:「正規表現の使用」を参照してください。 次に、 バッカスナウア記法 (BNF) の構文を示します。 • condition ::= condition "=" expression • condition ::= identifier | identifier "." word • expression ::= term | list • list ::= "(" ((pattern ",")* pattern)? ")" • disjunction ::= conjunction | disjunction "||" conjunction • conjunction ::= term | conjunction "&&" term • term ::= pattern | "(" disjunction ")" | "!" term • pattern ::= word | 'string' | "string" • word ::= sequence of characters not including whitespace, & | ( ) < > [ ] ; ! = " ' • string ::= sequence of characters that may including whitespace, & | ( ) < > [ ] ; ! =.The characters " and ' may be enclosed within a string delimited by the alternate delimiter. パターン タイプ 各条件は異なるパターン構文をサポートしています。 ブール条件のパターンには、次のいずれかの形式を使用します。 boolean ::= yes | no | true | false | on | off 数値条件のパターンには、 整数または整数の範囲を使用できます。数値パターンにスペースを含める ことはできません。 condition=I Test if condition == I. 56 第 3 章 : 条件リファレンス condition=I..J Test if condition >= I and condition <= J (where I <= J).For time=0900..1700 tests if the time is between 9:00 and 17:00 inclusive. example, condition=J..I Test if condition >= J or condition <= I (where J > I).For example, minute=45..15 tests if the minute of the hour is between 45 and 15 inclusive. condition=I.. Test if condition >= I. For example, bitrate=56k.. tests if the bitrate is greater than or equal to 56000. condition=..J Test if condition <= J. For example, bitrate=..56k tests if the bitrate is less than or equal to 56000. 一部の条件には IP アドレスのパターンが含まれます。1.2.3.4 などの IP アドレスをそのまま使用する か、 1.2.0.0/16 などの IP サブネット パターン、または define subnet ステートメントで定義され た名前を使用することができます。 一部の条件には Regex パターンが含まれます。これは条件のサブ文字列を照合する Perl 5 正規表現 で、 パターンの一部としてアンカーが指定されていない場合、照合はアンカーされません。 使用できない条件 一部の条件は、トランザクションによっては使用できない場合があります。特定の条件を使用できな い場合、その条件を含むすべての条件は、パターン式に関わらず false になります。たとえば、現在のト ランザクションが認証されない場合 (つまり、 認証プロパティが no に設定されている場合)、user 条件 は使用できません。user=kevin と user=!kevin の両方とも false になります。 パターンが条件値に一致しない場合、または条件が使用できない場合、その条件は false になります。ポ リシー ルール トレースでは、前者には miss、後者には N/A を使用してこの 2 つの状況を区別します。 レイヤ タイプの制限 各条件は、その条件を使用できるレイヤのタイプに応じて制限されます。許可されていないレイヤの 条件を直接使用した場合、コンパイル時のエラーが発生します。許可されていないレイヤの条件を間 接的に (condition= および条件定義により ) 使用する場合でも、コンパイル時のエラーが発生します。 グローバル制限 ポリシーからの DNS および RDNS 参照の抑制を許可するため、次の制限がサポートされています。こ れらの制限によって、 適切な url、url.host、および url.domain テストで no_lookup 修飾子がある と仮定されます。これらの制限は、オンボックス コンテンツ カテゴリの参照によって実行される参照 にも適用されます。DNS および RDNS 制限についての詳細は、463 ページの 第 6 章「定義参考」 を参照 : してください。 57 SGOS 6.4 Content Policy Language リファレンス restrict dns domain_list すべてのレイヤに適 用されます。 end すべてのトラ ンザクション に適用され ます。 URL で指定されたドメインが domain_list で 指定されたドメイン パターンのいずれかと一致 する場合、 server_url=, server_url.address=、 server_url.domain=、または server_url.host= test では DNS 参照は実 行されません。 参照が条件の評価に必要な場合、その条件は false と評価されます。 restrict rdns subnet_list すべてのレイヤに適 用されます。 end すべてのトラ ンザクション に適用され ます。 要求された URL が IP 形式でホストを指定して いる場合、 server_url=、 server_url.domain=、または server_url.host= condition の照合で RDNS 参照は実行されません。 参照が条件の評価に必要な場合、その条件は false と評価されます。 条件リファレンス この章の残りの部分では、 条件とその指定可能な値について説明します。各条件を使用できる場所の ヒント、および各条件の使用例も含まれています。 58 第 3 章 : 条件リファレンス admin.access= 現在の管理トランザクションで必要な管理アクセス方法をテストします。 書き込みアクセス権限が必要な場合、管理者による設定の変更が許可されるかどうかを判断するた め、ポリシーが admin.access=WRITE で評価されます。たとえば、CLI ユーザーが enable モードに入る ことが許可されるかどうか、または Management Console から変更の保存をいつ試みるかを判断する ため、管理ポリシーが評価されます。読み取りアクセス権限のみが必要な場合、 管理者に読み取り専用 アクセスが許可されるかどうかを判断するため、ポリシーが admin.access=READ で評価されます。 構文 admin.access=READ|WRITE レイヤおよびトランザクション メモ • <Admin> レイヤで使用します。 • 管理トランザクションに適用されます。 例 この例では、Read_only_admins と Full_admins の 2 つのユーザー クラスで管理アクセス権限を制御 できる方法を示します。ユーザーが両方のグループに属する場合、そのユーザーはより広範囲の権限 セットを継承します。 define condition Full_admins user=paul group=operations end define condition Read_only_admins user=george group=help_desk end <Admin> authenticate(my_realm) <Admin> ALLOW condition=Full_admins ALLOW condition=Read_only_admins admin.access=READ DENY メモ • すべての管理トランザクションは READ または WRITE アクセス権限が必要であり、 admin.access= (READ,WRITE) のような条件は常に true になるため、CPL ルールに影響することなく削除でき ます。 • このトリガは、<admin> レイヤの method=READ|WRITE の代わりになります。 59 SGOS 6.4 Content Policy Language リファレンス ami.config.threat-protection.malware-scanning.config_setting= プロキシ SG でマルウェア スキャンが有効になっている場合に呼び出されるルールを指定します。構 成内の設定によって、脅威保護ポリシー ファイルの対応するセクションが呼び出されます。その後、プ ロキシ SG で使用するためにコンパイルされます。 現在、 次の構成設定がサポートされています。 • enabled ( タイプ名 : ブール値 ) • level ( タイプ名 : BC-Malware-Scanning-Scan-Level) • secure-connection ( タイプ名 : BC-Malware-Scanning-Secure-Connection) • failure-mode ( タイプ名 : BC-Malware-Scanning-Failure-Mode). 構文 ami.config.threat-protection.malware-scanning.config_setting ='(type_name "setting_value")' ami.config.threat-protection.malware-scanning.config_setting = yes|no 各引数の意味は次のとおりです。 • config_setting: この条件で現在サポートされている構成設定名を指定します。 • type_name: 構成内で定義される設定値のタイプを指定します。設定タイプがブール値の 場合、 2 番目の構文形式が使用されます。2 番目の形式では、type_name を指定する必要 はありません。 • setting_value: 照合する設定の値を指定します。 レイヤおよびトランザクション メモ • すべてのレイヤで使用することができます。 • すべてのトランザクションに適用されます。 例 次の例では、 リスクの低いファイルの threat-protection を拡張するユーザー ポリシーを示します。 この 例の 2 番目の部分は、 プライベート URL が存在してマルウェアのスキャン レベルが high-performance に設定されている場合、ファイルでウイルスがスキャンされないことを表しています。 <Proxy> ami.config.threat-protection.malware-scanning.level='(BC-Malware-Scanning-Scan-L evel "high-performance")' url.host.is_private=yes response.icap_service.secure_connection(no) 60 第 3 章 : 条件リファレンス attribute.name= 現在のトランザクションが RADIUS または LDAP レルムで認証されているかどうかをテストし、指 定された値を含む指定された属性が認証済みユーザーに設定されているかどうかをテストします。現 在のトランザクションが認証されない場合 ( つまり、 authenticate プロパティが no に設定されてい る場合 )、この条件は使用できません。 ポリシーで複数のレルムを参照した場合、それらのレルムを realm= test と組み合わせることで、属 性テストを明確にできます。これにより、そのレルムに関連しない属性情報の認証サービスに対する 無関係なクエリ数を軽減できます。 構文 attribute.name=value 各引数の意味は次のとおりです。 • name は RADIUS または LDAP 属性です。 name 属性で大文字と小文字を区別するかどう かは、認証レルムのタイプによって異なります。 • 常に大文字と小文字を区別します。 RADIUS レルム : 使用可能な属性 ( 次の表を参照 ) は、 • LDAP レルム : 大文字と小文字を区別するかどうかは、構成内のレルム定義によって異な ります。 • 次の値があります。 RADIUS の場合、 value: 属性値。 表 3.2: RADIUS 値 RADIUS 属性名 CPL ジェスチャ名 タイプ ( 指定可能な値 ) 3GPP-Allocate-IP-Type attribute.3GPP-Allocate-IP-Type Octet-string (Max length:1) 3GPP-Camel-ChargingInfo attribute.3GPP-Camel-ChargingInfo Octet-string (Max length:32) 3GPP-Charging-Characte ristics attribute.3GPP-Charging-Characte ristics String (Max length:4) 3GPP-Charging-ID attribute.3GPP-Charging-ID Integer 3GPP-Charging-GatewayAddress attribute.3GPP-Charging-GatewayAddress IP Address (IPV4) 3GPP-Charging-GatewayIPv6-Address attribute.3GPP-Charging-GatewayIPv6-Address IP Address (IPV6) 3GPP-GGSN-Address attribute.3GPP-GGSN-Address IP Address (IPV4) 3GPP-GGSN-IPv6-Address attribute.3GPP-GGSN-IPv6-Address IP Address (IPV6) 3GPP-GGSN_MCC-MNC attribute.3GPP-GGSN_MCC-MNC String (Max length:6) 3GPP-GPRS-Negotiated-Q oS-Profile attribute.3GPP-GPRS-Negotiated-Q oS-Profile Octet-string (Max length:35) 61 SGOS 6.4 Content Policy Language リファレンス 62 RADIUS 属性名 CPL ジェスチャ名 タイプ ( 指定可能な値 ) 3GPP-IMEISV attribute.3GPP-IMEISV String (Max length:14) 3GPP-IMSI attribute.3GPP-IMSI String (Max length:15) 3GPP-IMSI-MCC-MNC attribute.3GPP-IMSI-MCC-MNC String (Max length:6) 3GPP-IPv6-DNS-Servers attribute.3GPP-IPv6-DNS-Servers Octet-string (Max length:240) 3GPP-MS-TimeZone attribute.3GPP-MS-TimeZone Octet-string (Max length:2) 3GPP-Negotiated-DSCP attribute.3GPP-Negotiated-DSCP Octet-string (Max length:1) 3GPP-NSAPI attribute.3GPP-NSAPI String (Max length:1) 3GPP-Packet-Filter attribute.3GPP-Packet-Filter Octet-string (Max length:32) 3GPP-PDP-Type attribute.3GPP-PDP-Type Enum (0:IPv4, 1:PPP, 2:IPv6) 3GPP-RAT-Type attribute.3GPP-RAT-Type Octet-string (Max length:1) 3GPP-Selection-Mode attribute.3GPP-Selection-Mode String (Max length:1) 3GPP-Session-StopIndicator attribute.3GPP-Session-Stop-Indi cator Octet-string (Max length:1) 3GPP-SGSN-Address attribute.3GPP-SGSN-Address IP Address (IPV4) 3GPP-SGSN-IPv6-Address attribute.3GPP-SGSN-IPv6-Address IP Address (IPV6) 3GPP-SGSN-MCC-MNC attribute.3GPP-SGSN-MCC-MNC String (Max length:6) 3GPP-User-Location-Info attribute.3GPP-User-Location-Info Octet-string (Max length:32) 3GPP-Teardown-Indicator attribute.3GPP-Teardown-Indicator Octet-string (Max length:1) Acct-Authentic attribute.Acct-Authentic Enum (1:RADIUS, 2:Local) Acct-Delay-Time attribute.Acct-Delay-Time Integer Acct-Input-Octets attribute.Acct-Input-Octets Integer Acct-Input-Packets attribute.Acct-Input-Packets Integer Acct-Link-Count attribute.Acct-Link-Count Integer Acct-Multi-Session-ID attribute.Acct-Multi-Session-ID String (Max length:20) Acct-Output-Octets attribute.Acct-Output-Octets Integer 第 3 章 : 条件リファレンス RADIUS 属性名 CPL ジェスチャ名 タイプ ( 指定可能な値 ) Acct-Output-Packets attribute.Acct-Output-Packets Integer Acct-Session-ID attribute.Acct-Session-ID String (Max length:20) Acct-Session-Time attribute.Acct-Session-Time Integer Acct-Status-Type attribute.Acct-Status-Type Enum (1:Start, 2:Stop,3:Interim-Update, 4:Unassigned (4), 5:Unassigned (5), 6:Unassigned (6), 7:Accounting-On, 8:Accounting-Off, 9:Tunnel-Start, 10:Tunnel-Stop, 11:Tunnel-Reject, 12:Tunnel-Link-Start, 13:Tunnel-Link-Stop, 14:Tunnel-Link-Reject) Acct-Terminate-Cause attribute.Acct-Terminate-Cause Enum (1:User Request, 2:Lost Carrier, 3:Lost Service, 4:Idle Timeout, 5:Session Timeout, 6:Admin Reset, 7:Admin Reboot, 8:Port Error, 9:NAS Error, 11:NAS Request, 11:NAS Reboot, 12:Port Unneeded, 13:Port Preempted, 14:Port Suspended, 15:Service, Unavailable 16:Callback, 17:User Error) Callback-ID attribute.Callback-ID String (Max length:20) Callback-Number attribute.Callback-Number String (Max length:20) Called-Station-ID attribute.Called-Station-ID String (Max length:20) Calling-Station-ID attribute.Calling-Station-ID String (Max length:20) CHAP-Challenge attribute.CHAP-Challenge String (Max length:20) CHAP-Password attribute.CHAP-Password String (Max length:20) Class attribute.Class String (Max length:20) Filter-ID attribute.Filter-ID String (Max length:20) Framed-AppleTalk-Link attribute.Framed-AppleTalk-Link Integer Framed-AppleTalkNetwork attribute.Framed-AppleTalkNetwork Integer 63 SGOS 6.4 Content Policy Language リファレンス 64 RADIUS 属性名 CPL ジェスチャ名 タイプ ( 指定可能な値 ) Framed-AppleTalk-Zone attribute.Framed-AppleTalk-Zone String (Max length:20) Framed-Compression attribute.Framed-Compression Enum (0:None, 1:Van Jacobsen-Header-Compress ion, 2:IPX-Header-Compression Framed-IP-Address attribute.Framed-IP-Address IP Address (IPV4) Framed-IP-Netmask attribute.Framed-IP-Netmask IP Address (IPV4) Framed-IPv6-Route attribute.Framed-IPv6-Route IP Address (IPV6) Framed-IPX-Network attribute.Framed-IPX-Network Integer Framed-MTU attribute.Framed-MTU Integer Framed-Pool attribute.Framed-Pool String (Max length:20) Framed-Protocol attribute.Framed-Protocol Enum (1:PPP, 2:SLIP, 3:ARAP, 4:Gandalf, 5:Xylogics) Framed-Route attribute.Framed-Route String (Max length:20) Framed-Routing attribute.Framed-Routing Enum (0:None, 1:Send, 2:Listen) Idle-Timeout attribute.Idle-Timeout Integer Login-LAT-Group attribute.Login-LAT-Group String (Max length:20) Login-LAT-Node attribute.Login-LAT-Node String (Max length:20) Login-LAT-Port attribute.Login-LAT-Port String (Max length:20) Login-LAT-Service attribute.Login-LAT-Service String (Max length:20) Login-IP-Host attribute.Login-IP-Host IP Address (IPV4) Login-IPv6-Host attribute.Login-IPv6-Host IP Address (IPV6) Login-Service attribute.Login-Service Enum (0:Telnet, 1:Rlogin, 2:TCP Clear, 3:PortMaster, 4:LAT, 5:X25-PAD, 6:X25-T3POS, 7:Unassigned) Login-TCP-Port attribute.Login-TCP-Port Integer (0-65535) Message-Authenticator attribute.Message-Authenticator String (Max length:20) NAS-Identifier attribute.NAS-Identifier String (Max length:20) NAS-IP-Address attribute.NAS-IP-Address IP Address (IPV4) NAS-IPv6-Address attribute.NAS-IPv6-Address IP Address (IPV6) 第 3 章 : 条件リファレンス RADIUS 属性名 CPL ジェスチャ名 タイプ ( 指定可能な値 ) NAS-Port attribute.NAS-Port Integer NAS-Port-Type attribute.NAS-Port-Type Enum (0:Async, 1:Sync, 2:ISDN Sync, 3:ISDN Async V.120, 4:ISDN Async V.110, 5:Virtual, 6:PIAFS, 7:HDLC, 8:X.25, 9:X.75, 10:G.3, 11:SDSL, 12:ADSL-CAP, 13:ADSL-DMT, 14:IDSL, 15:Ethernet, 16:xDSL, 17:Cable, 18:Wireless Other) Port-Limit attribute.Port-Limit Integer Proxy-State attribute.Proxy-State String (Max length:20) Reply-Message attribute.Reply-Message String (Max length:20) Service-Type attribute.Service-Type Enum (1:Login, 2:Framed, 3:Callback Login, 4:Callback Framed, 5:Outbound, 6:Administrative, 7:NAS Prompt, 8:Authenticate Only, 9:Callback NAS Prompt, 10:Call Check) Session-Timeout attribute.Session-Timeout Integer State attribute.State String (Max length:20) Termination-Action attribute.Termination-Action Enum (0:Default) Tunnel-Assignment-ID attribute.Tunnel-Assignment-ID String (Max length:20) Tunnel-Medium-Type attribute.Tunnel-Medium-Type Tag-Enum (1:IPv4, 2:IPv6, 3:NSAP, 4:HDLC, 5:BBN, 6:802, 7:E.163, 8:E.164, 9:F.69, 10:X.121, 11:IPX, 12:AppleTalk, 13:Decnet IV, 14:Banyan Vines) Tunnel-Private-Group-ID attribute.Tunnel-Private-GroupID String (Max length:20) Tunnel-Type Tag-Enum (1:PPTP, 2:L2F, 3:L2TP, 4:ATMP, 5:VTP, 6:AH, 7:IP-IP, 8:MIN-IP-IP, 9:ESP, 10:GRE, 11:DVS) attribute.Tunnel-Type 65 SGOS 6.4 Content Policy Language リファレンス RADIUS 属性名 CPL ジェスチャ名 タイプ ( 指定可能な値 ) User-Name attribute.User-Name String (Max length:20) User-Password attribute.User-Password String (Max length:20) Blue-Coat-Group attribute.Blue-Coat-Group String (Max length:20) レイヤおよびトランザクション メモ • <Admin>、 <Proxy>、 <SSL-Intercept> および <Forward> レイヤで使用します。 注意 : <Forward> レイヤで使用する場合、認証されたクライアントが存在しなければ、この条件は NULL に評価 (トレースで N/A として表示) される可能性があります。これらの条件を含む ルールは、正常なロジックを保持するために authenticated= で保護することができます。 • プロキシおよび管理者のトランザクションに適用されます。 • この条件は、authenticate() または socks.authenticate() プロパティと組み合わせることは できません。 例 ; This example uses the value of the ContentBlocking attribute associated with a ; user to select which content categories to block. <Proxy> authenticate(LDAPRealm) <Proxy> exception(content_filter_denied) attribute.ContentBlocking=Adult category=(Sex, Nudity, Mature, Obscene/Extreme) attribute.ContentBlocking=Violence category=(Criminal_Skills, Hate_Speech) ... ; This example uses the attribute property to determine permissions associated with ; RADIUS authentication. define condition ProxyAllowed attribute.ServiceType=(2,6,7,8) end <Proxy> authenticate(RADIUSRealm) ; This rule would restrict non-authorized users. <Proxy> deny condition=!ProxyAllowed ; This rule would serve to override a previous denial and grant access to authorized ; users <Proxy> allow condition=ProxyAllowed 66 第 3 章 : 条件リファレンス 関連項目 • 条件 : authenticated=、group=、 has_attribute.name=、http.transparent_authentication=、 realm=、 user=、 user.domain=、user.x509.issuer=、user.x509.serialNumber=、 user.x509.subject= • プロパティ: authenticate( )、 authenticate.force( )、 check_authorization( )、 exception( )、socks.authenticate( )、 socks.authenticate.force( ) 67 SGOS 6.4 Content Policy Language リファレンス authenticated= 現在のトランザクションの認証が要求されて、要求されたレルムの資格情報が検証された場合は True、それ以外の場合は false になります。 構文 authenticated=(yes|no) レイヤおよびトランザクション メモ • <Proxy>、 <Forward>、 <exception>、 <admin>、 <SSL-Intercept> および <SSL> レイヤで使用します。 • プロキシおよび管理者のトランザクションに適用されます。 • この条件は、authenticate( ) プロパティと組み合わせることはできません。 例 ; In this example, only users authenticated in any domain are granted access to a ; specific site. <Proxy> client.address=10.10.10.0/24 authenticate(LDAPRealm) client.address=10.10.11.0/24 authenticate(NTLMRealm) client.address=10.10.12.0/24 authenticate(LocalRealm) ; anyone else is unauthenticated ; This rule would restrict unauthorized users.Use this when overriding previously ; granted access. <Proxy> server_url.domain=xyz.com deny authenticated=no ; This rule would grant access and would be used to override a previous denial. ; It assumes a deny in a previous layer. <Proxy> server_url.domain=xyz.com allow authenticated=yes 関連項目 68 • 条件 : attribute.name=、group=、has_attribute.name=、 http.transparent_authentication=、 realm=、 user=、 user.domain= • プロパティ: authenticate( )、authenticate.force( )、check_authorization()、 socks.authenticate( )、 socks.authenticate.force( ) 第 3 章 : 条件リファレンス bitrate= ストリーミング トランザクションが指定された範囲内の帯域幅または完全に一致する帯域幅を要求 するかどうかをテストします。範囲を指定するときに、いずれかの値を空のままにすることができま す。 この場合、テストに下限または上限を設定しないことを意味します。ビットレートは、トランザク ション中に動的に変わる可能性があるため、 このポリシーは変化のたびに再評価されます。 bitrate= 条件のテストに使用される数値パターンにスペースを含めることはできません。 この条件は、 現在のト ランザクションが Real Media または Windows Media トランザクションの場合にのみ使用できます。 構文 bitrate={ [lower]..[upper]|exact_rate } 各引数の意味は次のとおりです。 • 次のように、整数を使用してビット、キロビット (1000 倍 )、 lower: 帯域幅範囲の下限です。 またはメガビット (1,000,000 倍) 単位で指定します。integer | integerk | integerm.空 白のままにすると、テストの下限がなくなります。 • 次のように、整数を使用してビット、キロビット、またはメ upper: 帯域幅範囲の上限です。 ガビット単位で指定します。integer | integerk | integerm. 空白のままにすると、テ ストの上限がなくなります。 • テストする帯域幅です。次のように、整数を使用してビット、キロビット、ま たはメガビット単位で指定します。integer | integerk | integerm. exact_rate: 注意 : 逆の範囲をテストするには、次の短縮表現を使用できます。ポリシー言語では、 0 ~ 28.8k かつ bitrate=(..28.8k|56k..) の代わりに bitrate=56k..28.8k と記述しても、 56k 以上のビットレートを表すことができます。 レイヤおよびトランザクション メモ • <Cache> および <Proxy> レイヤで使用します。 • ストリーミング トランザクションに適用されます。 • この条件は、max_bitrate( ) プロパティと共に使用できます。 例 ; Deny service for bit rates above 56k. deny bitrate=!0..56k ; This example allows members of the Sales group access to streams up to 2 megabits. ; All others are limited to 56K bit streams. <Proxy> authenticate(NTLMRealm) <Proxy> ; deny sales access to streams over 2M bits deny group=sales bitrate=!0..2m 69 SGOS 6.4 Content Policy Language リファレンス ; deny non-sales access to streams over 56K bits deny group=!sales bitrate=!0..56k.. ; In this form of the rule, we assume that the users are by default denied, and we ; are overriding this to grant access to authorized users. <Proxy> ; Use this layer to override a deny in a previous layer ; Grant everybody access to streams up to 56K, sales group up to 2M allow bitrate=..56K allow group=sales bitrate=..2M 関連項目 70 • 条件 : live=、streaming.client=、streaming.content= • プロパティ: access_server( )、max_bitrate( )、 streaming.transport( ) 第 3 章 : 条件リファレンス category= 要求された URL のコンテンツ カテゴリがポリシー定義によって割り当てられたか、 インストールさ れているコンテンツ フィルタ データベースで割り当てられたかをテストします。 コンテンツ カテゴリは、ポリシー、保持しているローカル データベース、またはサードパーティ デー タベースを使用して URL に割り当てることができます (468 ページの 「define category」 を参照 )。 分類されていない URL は、none カテゴリに割り当てられます。 設定でコンテンツ フィルタ プロバイダが選択されているが、カテゴリの決定時にエラーが発生した場 合、 URL は ( ポリシーで直接割り当てられているカテゴリに加えて ) unavailable カテゴリに割り当 てられます。エラーの原因は、データベースの欠落かライセンスの有効期限切れです。後者の場合、 unlicensed の追加カテゴリが割り当てられます。 URL は、カテゴリのリストに割り当てられている場合があります。category= 条件は、URL に割り当 てられているいずれかのカテゴリに一致した場合に true になります。 オフボックスのコンテンツ フィルタ サービスで割り当てられたカテゴリを category= を使用して、 テストすることはできません。これらのサービスには、個別に管理する必要のある固有のポリシーが 割り当てられています。 注意 : category=unlicensed が true の場合、category=unavailable も true になります。 構文 category={ none|unlicensed|unavailable|category_name1, category_name2, ...} ここで、category_name1, category_name2, ... は、ポリシーまたは選択したコンテンツ フィ ル タ プ ロ バ イ ダ に よ っ て 定 義 さ れ た カ テ ゴ リ 名 で す。現 在 有 効 な カ テ ゴ リ 名 の リ ス ト は、 Management Console と CLI のどちらでも使用できます。 レイヤおよびトランザクション メモ • および <SSL-Intercept> レイヤで使用します。 <Proxy>、 <Cache>、 <Exception>、 <SSL>、 • この条件は、 ただし、 Microsoft Media authenticate( ) プロパティと組み合わせることができます。 トランザクションを評価する場合は除きます。 Streaming (MMS) over HTTP • プロキシ トランザクションに適用されます。 例 ; This example denies requests for games or sports related content. <Proxy> ; Tests true if the request is in one of these categories. category=(Sports, Games) exception(content_filter_denied) category=unavailable exception(content_filter_unavailable); Fail closed 関連項目 • 条件 : server_url.category= • プロパティ: exception( ) 71 SGOS 6.4 Content Policy Language リファレンス client.address= クライアントの IP アドレスをテストします。この式には、IP アドレスやサブネットまたはサブネット 定義ブロックのラベルを含めることができます。 注意 : ユーザーが明示的に SG にプロキシ処理される場合、URL 移動先が SG 自体の管理 URL で あっても <Proxy> レイヤ ポリシーが適用されます。そのため、<Admin> レイヤ ポリシーで カバーする必要があります。ただし、client.address= 条件が <Admin> レイヤで使用され ている場合、明示的に SG にプロキシ処理されるクライアントの IP アドレスに SG の IP ア ドレスが設定されているように見えます。 構文 client.address=ip_address|subnet_label 各引数の意味は次のとおりです。 • ip_address: 10.25.198.0/24 のようにクライアントの IP アドレスやサブネットを指定 します。 • subnet_label: IP アドレス数またはサブネット数をバインドするサブネット定義ブロッ クのラベル。 レイヤおよびトランザクション メモ • すべてのレイヤで使用することができます。 • トランザクションがクライアントに関連付けられていない場合は使用できません。 例 ; Blacklisted workstation. client.address=10.25.198.0 deny ; This example uses the client address to select the authentication realm for ; administration of the SG appliance. <admin> client.address=10.25.198.0/24 authenticate(LDAPRealm) client.address=10.25.199.0/24 authenticate(NTLMRealm) authenticate(LocalRealm) ; Everyone else 関連項目 72 • 条件 : client.protocol=、proxy.address=、proxy.card=、 proxy.port= • 定義 : define subnet 第 3 章 : 条件リファレンス client.address.login.count= 現在の IP アドレスでアクティブなログイン数をテストします。 この条件は、現在の IP アドレスでいくつのログインがアクティブであるかをテストするために使用さ れます。IP アドレスごとの最大ログイン数を管理するためにも使用できます。 構文 client.address.login.count([lower]..[upper]|exact) 各引数の意味は次のとおりです。 • この条件に一致する最小ログイン数です。 [lower] は省略可能で、 • この条件に一致する最大ログイン数です。 [upper] は省略可能で、 • この条件に一致する正確なログイン数です。 [exact] は省略可能で、 レイヤおよびトランザクション メモ • <Proxy>、 <Forward>、 <Exception>、 <Admin>、 <SSL-Intercept>、 <SSL> レイヤで使用します。 • 適用対象 : すべてのトランザクション 例 この IP アドレスで複数のログインがある場合、その他のログインをログアウトします。 <proxy> client.address.login.count=2.. client.address.login.log_out_other(yes) 73 SGOS 6.4 Content Policy Language リファレンス client.certificate.common_name= SSL トランザクション内のクライアント証明書の共通名をテストします。 SSL 接続の確立中にクライアントによって提供される、X.509 証明書から抽出された共通名をテスト します。 この条件は、クライアントへの SSL 接続を伴わないトランザクションでは NULL です。 構文 client.certificate.common_name[.exact][.case_sensitive]=string client.certificate.common_name.length=value client.certificate.common_name.prefix[.case_sensitive]=string client.certificate.common_name.substring[.case_sensitive]=string client.certificate.common_name.suffix[.case_sensitive]=string client.certificate.common_name.regex[.case_sensitive]=regular_expression レイヤおよびトランザクション メモ • 有効なレイヤ : <SSL> • 適用対象 : HTTPS フォワードおよびリバース プロキシ トランザクション 例 主に同意証明書に使用されます。 Client.certificate.common_name は、 <SSL> ssl.proxy_mode = https-reverse-proxy OK client.certificate.common_name = "Yes decrypt my content" FORCE_DENY 74 第 3 章 : 条件リファレンス client.certificate.requested= サーバーが SSL クライアント証明書認証を要求しているかどうかをテストします。 SSL プロキシがサーバーとの接続を確立し、サーバーが SSL クライアント証明書を要求する場合、こ の条件は yes に設定されます。それ以外の場合は no に設定されます。この条件は、クライアントへの SSL 接続を伴わないトランザクションでは NULL です。 ProxySG がこの条件を評価する場合、要求元サーバーのリスト ([Client Certificate Requested] リスト ) を使用して、初回のハンドシェイクと再ネゴシエーションの両方でクライアント証明書が要求された かどうかを判断します。ポリシー内にこの条件が存在する限り、ProxySG は再ネゴシエーション中に クライアント証明書を要求するサーバーを自動的に検出し、[Client Certificate Requested] リストを維 持できます。 構文 client.certificate.requested = yes|no レイヤおよびトランザクション メモ • <SSL-Intercept> レイヤで使用します。 • 適用対象 : SSL インターセプト トランザクション 例 この条件は、サーバーがクライアントを認証するためにクライアント証明書を要求するときに、SSL プ ロキシ トラフィックのインターセプトを避けるために使用されます。その理由は、 クライアント証明 書はこの設定ではサポートされないためです。 このようなトラフィックをインターセプトしている場 合、 プロキシ SG によって例外ページが生成されます。次のポリシーは、 サーバーがクライアント証明 書を要求しない場合にのみ、SSL プロキシ インターセプトを有効にします。 <SSL-Intercept> ; If the server requests a client certificate, tunnel the SSL traffic via SSL proxy client.certificate.requested=yes ssl.forward_proxy(no) ; Otherwise, intercept SSL traffic using HTTPS forward proxy. ssl.forward_proxy(https) 75 SGOS 6.4 Content Policy Language リファレンス client.certificate.subject= SSL トランザクション内のクライアント証明書のサブジェクト フィールドをテストします。 SSL 接続の確立中にクライアントによって提供される、X.509 証明書から抽出されたサブジェクト フィールドをテストします。この条件は、クライアントへの SSL 接続を伴わないトランザクションで は NULL です。 構文 client.certificate.subject[.exact][.case_sensitive]=string client.certificate.subject.length=value client.certificate.subject.prefix[.case_sensitive]=string client.certificate.subject.substring[.case_sensitive]=string client.certificate.subject.suffix[.case_sensitive]=string client.certificate.subject.regex[.case_sensitive]=regular_expression レイヤおよびトランザクション メモ • 有効なレイヤ : <SSL> • 適用対象 : HTTPS フォワードおよびリバース プロキシ トランザクション 例 Client.certificate.subject は、主に同意証明書に使用されます。 <SSL> ssl.proxy_mode = https-reverse-proxy OK client.certificate.subject = "Yes decrypt my content" FORCE_DENY 76 第 3 章 : 条件リファレンス client.connection.dscp= クライアント側の受信 DSCP 値をテストします。 構文 client.connection.dscp = dscp_value ここで、dscp_value は 0..63 | af11 | af12 | af13 | af21 | af22 | af23 | af31 | af32 | af33 | af41 | af42 | af43 | best-effort | cs1 | cs2 | cs3 | cs4 | cs5 | cs6 | cs7 | ef です。 レイヤおよびトランザクション メモ • <DNS-Proxy>、<Forward> レイヤで有効です。 <Proxy>、 • すべてのトランザクションに適用されます。 例 最初の QoS ポリシー ルールは、クライアントの受信 QoS/DSCP 値を 50 でテストし、 一致する場合は 拒否します。2 番目の QoS ポリシー ルールは、クライアントの受信 QoS/DSCP 値を best-effort でテス トし、 一致した場合は拒否します。 <proxy> deny client.connection.dscp = 50 <proxy> deny client.connection.dscp = best-effort 77 SGOS 6.4 Content Policy Language リファレンス client.connection.negotiated_cipher= セキュアに接続されたクライアントとネゴシエートされた暗号スイートをテストします。 構文 client.connection.negotiated_cipher=cipher-suite ここで、cipher-suite は、次のいずれかです。 none RC4-MD5 RC4-SHA DES-CBC3-SHA DES-CBC3-MD5 RC2-CBC-MD5 DES-CBC-SHA DES-CBC-MD5 EXP-RC4-MD5 EXP-RC2-CBC-MD5 EXP-DES-CBC-SHA レイヤおよびトランザクション メモ • <SSL> および <Proxy> レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. EXP1024 スイートのいずれも使用していないクライアントを拒否 (DENY) します。 2. セキュアな接続を使用していないクライアントを unsecure_log1 アクセス ログに記録します。 ; 1 <Proxy> ALLOW client.connection.negotiated_cipher= \ (EXP1024-RC4-MD5|| \ EXP1024-RC4-SHA|| \ EXP1024-RC2-CBC-MD5|| \ EXP1024-DES-CBC-SHA) DENY ; 2 <Proxy> client.connection.negotiated_cipher=none access_log[unsecure_log1](yes) 78 第 3 章 : 条件リファレンス client.connection.negotiated_cipher.strength= セキュアに接続されたクライアントとネゴシエートされた暗号強度をテストします。 構文 client.connection.negotiated_cipher.strength=none|low|medium|high レイヤおよびトランザクション メモ • <SSL> および <Proxy> レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. 暗号強度が medium に満たないクライアントを拒否 (DENY) します。 2. FTP クライアントにはトラフィックを暗号化する手段がないため、暗号強度に関わらず、FTP を使 用するクライアントを許可 (ALLOW) します。 <Proxy> ; 1 ALLOW client.connection.negotiated_cipher.strength=(medium||high) ; 2 ALLOW url.scheme=ftp DENY メモ 詳細は、OpenSSL の暗号 OpenSSL によって、 high、medium、および low の意味が定義されています。 ページ (http://www.openssl.org/docs/apps/ciphers.html) を参照してください。 現在の定義は次のとおりです。 • high: キーの長さが 128 ビットを超える暗号スイート。 • medium: キーの長さが 128 ビットの暗号スイート。 • low: 64 または 56 ビットの暗号化アルゴリズムを使用している暗号スイート ( ただし、エクスポー ト暗号スイートは除く )。 79 SGOS 6.4 Content Policy Language リファレンス client.connection.negotiated_ssl_version= セキュアに接続されたクライアントとネゴシエートされた SSL バージョンをテストします。 構文 client.connection.negotiated_ssl_version=SSLV2|SSLV3|TLSV1 レイヤおよびトランザクション メモ • <SSL> および <Proxy> レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 <SSL> client.connection.negotiated_ssl_version=SSLV3 80 第 3 章 : 条件リファレンス client.host= クライアントのホスト名 (RDNS によって取得 ) をテストします。 構文 client.host=hostname client.host=domain-suffix client.host.exact=string client.host.length=value client.host.prefix=string client.host.substring=string client.host.suffix=string client.host.regex=regular_expression レイヤおよびトランザクション メモ • <Proxy>、 <Forward>、 <Exception>、 <Admin>、 <SSL>、 <SSL-Intercept> レイヤで使用します。 • DNS プロキシ トランザクション以外のすべてのプロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. RDNS 名の末尾が bluecoat.com 以外のすべてのユーザーを拒否 (DENY) します。 2. RDNS 名に test が含まれるすべてのユーザーを拒否 (DENY) します。 3. これに RDNS 名の末尾が example.bluecoat.com のすべてのユーザーを拒否 (DENY) します。 は、 bexample.bluecoat.com および b.example.bluecoat.com も含まれます。 4. RDNS 名に数値が含まれるすべてのユーザーを拒否 (DENY) します。 5. RDNS 名の先頭が fnord のすべてのユーザーを拒否 (DENY) します。 <Proxy> ALLOW <Proxy> ; 1 DENY client.host=!".bluecoat.com" ; 2 DENY client.host.substring="test" ; 3 DENY client.host.suffix="example.bluecoat.com" ; 4 DENY client.host.regex="[0-9]*" ; 5 DENY client.host.prefix="fnord." 81 SGOS 6.4 Content Policy Language リファレンス client.host.has_name= client.host を特定するために実行された RDNS のステータスをテストします。 構文 client.host.has_name=yes|no|restricted|refused|nxdomain|error レイヤおよびトランザクション メモ • <Proxy>、 <Forward>、 <Exception>、 <Admin>、 <SSL>、 <SSL-Intercept> レイヤで使用します。 • DNS プロキシ トランザクション以外のすべてのプロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. RDNS 名が解決できなかった場合、subnetA からのすべてのユーザーを拒否 (DENY) します。 2. subnetB からの RDNS 名がないすべてのユーザーを拒否 (DENY) しますが、DNS 参照エラーのた めに RDNS 名の参照に失敗した場合はそれらのユーザーを許可します。RDNS 制限にクライアン トのアドレスが含まれている場合、参照エラーになります。 define subnet subnetA 10.10.10.0/24 end define subnet subnetB 10.9.9.0/24 end <Proxy> DENY <Proxy> ; 1 ALLOW client.address=subnetA client.host.has_name=yes ; 2 -- for users in 'subnetB' nxdomain is the only error we ; specifically prevent ALLOW client.address=subnetB client.host.has_name=!nxdomain 82 第 3 章 : 条件リファレンス client.protocol= クライアントと SG アプライアンス間で使用されるプロトコルをテストします。 構文 client.protocol=http | https | ftp | tcp | socks | mms | rtsp | icp | aol-im | msn-im | yahoo-im | dns |telnet | epmapper | ssl | dns | rtmp | rtmpt | rtmpe | rtmpte メモ • tcp にはトンネル処理されたトランザクションを指定します。 • client.protocol=dns は、 <dns-proxy> レイヤのみで有効です。 レイヤおよびトランザクション メモ • <Exception>、 <Forward>、 <Proxy>、 <SSL>、 <SSL-intercept> レイヤで使用します。 • すべてのトランザクションに適用されます。 • トランザクションがクライアントに関連付けられていない場合、テストは false になります。 関連項目 • 条件 : client.address=、proxy.address=、 proxy.card=、 proxy.port= 83 SGOS 6.4 Content Policy Language リファレンス condition= 指定された定義済み条件が true かどうかをテストします。 構文 condition=condition_label こ こ で、condition_label は define condition、define url.domain condition、 または define url condition 定義ブロックで定義されたカスタム条件のラベルです。 レイヤおよびトランザクション メモ • すべてのレイヤで使用します。 • 参照される定義済みの条件は、参照元のレイヤで評価される必要があるため、使用が制限されてい る可能性があります。 例 ; Deny access to client 1.2.3.4 for any http request through proxy port 8080. define condition qa client.address=1.2.3.4 proxy.port=8080 end <Proxy> condition=qa client.protocol=http deny ; Restrict access to internal sites to specific groups, ; using nested conditions. define condition restricted_sites url.domain=internal.my_co.com end define condition has_full_access group=admin,execs,managers end define condition forbidden condition=restricted_sites condition=!has_full_acesss end <Proxy> authenticate(My_realm) <Proxy> condition=forbidden deny ; Example of a define url condition. define url condition test http://www.x.com time=0800..1000 http://www.y.com month=1 http://www.z.com hour=9..10 end 84 第 3 章 : 条件リファレンス <Proxy> condition=test deny ; Example of a define domain-suffix (or domain) condition define url.domain condition test com ; Matches all domains ending in .com end <Proxy> condition=test deny 関連項目 • 定義 : define condition、 define url.domain condition、 define url condition • プロパティ: action.action_label( ) 85 SGOS 6.4 Content Policy Language リファレンス console_access= 現在の要求が <Admin> レイヤを宛先としているかどうかをテストします。このテストは、SG を管理す るために明示的にプロキシ処理された管理者による、 Management Console へのアクセスを区別する ために使用されます。Management Console に適用しない変換のガードにこのテストを使用できま す。 Telnet セッションは <Proxy> レイヤを通過しないため、 Telnet セッションにこのテストは使用で きません。 構文 console_access=yes|no レイヤおよびトランザクション メモ • <Proxy>、 <Cache>、 <Exception>、 <SSL> レイヤで使用します。 • HTTP トランザクションに適用されます。 関連項目 • 86 条件 : admin.access= 第 3 章 : 条件リファレンス content_admin= 詳細は、88 ページの「content_management」を参照してください。 content_admin= は廃止予定です。 87 SGOS 6.4 Content Policy Language リファレンス content_management 現在の要求がコンテンツ管理トランザクションであるかどうかをテストします。 置換 : content_admin=yes|no 構文 content_management=yes|no レイヤおよびトランザクション メモ • <Cache>、 <Forward>、 <SSL> レイヤで使用します。 • すべてのトランザクションに適用されます。 関連項目 88 • 条件 : category=、 ftp.method=、 http.method=、 http.x_method=、 server_url= • プロパティ: http.request.version( )、http.response.version( ) 第 3 章 : 条件リファレンス date[.utc]= 現在時刻が startdate..enddate の範囲 (包含) 内の場合、テストは true になります。.utc 修飾子が指 定されていない場合、ローカル時間と比較されます。 構文 date[.utc]=YYYYMMDD..YYYYMMDD date[.utc]=MMDD..MMDD レイヤおよびトランザクション メモ • 時間に関する条件を使用して、 キャッシュされたオブジェクトのスラッシングが発生する可能性 のある <Cache> レイヤでのキャッシュの動作を制御します。 関連項目 • 条件 : day=、hour=、minute=、month=、time=、 weekday=、 year= 89 SGOS 6.4 Content Policy Language リファレンス day= 月の日が指定された範囲内にあるか、または一致するかどうかをテストします。 現在の月の日を特定 するため、 SG アプライアンスで設定された日付およびタイム ゾーンが使用されます。 UTC タイム ゾー ンを指定するには、day.utc= 形式を使用します。day 条件のテストに使用される数値パターンにス ペースを含めることはできません。 構文 day[.utc]={[first_day]..[last_day]|exact_day} 各引数の意味は次のとおりです。 • テストで true となる月の最初の日を指定します。空白のまま first_day: 1 ~ 31 の整数。 にした場合、この日は 1 と見なされます。 • テストで true となる月の最後の日を指定します。空白のままに last_day: 1 ~ 31 の整数。 した場合、この日は 31 と見なされます。 • テストで true となる月の日を指定します。 exact_day: 1 ~ 31 の整数。 注意 : 上旬の日付範囲と下旬の日付範囲などの逆の範囲でテストするには、次の簡単な式を使用でき ます。day=(..5|25..) では、月の最初の 5 日間と月の最後の数日間が指定されます。ポリシー 言語では、day=25..5 も同じ指定として認識されます。 レイヤおよびトランザクション メモ • すべてのレイヤで使用します。 • 時間に関する条件を使用して、 キャッシュされたオブジェクトのスラッシングが発生する可能性 のある <Cache> レイヤでのキャッシュの動作を制御します。 例 ; Test for New Year’s Day (January 1). day=1 month=1 ; This policy allows access to a special event site only during the days of ; the event. ; This form of the rule restricts access during non-event times. <Proxy> url=http://www.xyz.com/special_event ; The next line matches, but does nothing if allow is the default ; year=2003 month=7 day=23..25 ; During the event ; deny Any other time ; This form of the rule assumes access is generally denied, and grants access during ; the special event. <Proxy> url=http://www.xyz.com/special_event allow year=2003 month=7 day=23..25 ; During the event 関連項目 • 90 条件 : date[.utc]=、 hour=、 minute=、 month=、 time=、 weekday=、 year= 第 3 章 : 条件リファレンス dns.client_transport= プロキシ処理された DNS クエリの転送プロトコルをテストします。 構文 dns.client_transport=tcp|udp レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. TCP プロトコルを使用するすべての DNS クエリを拒否します。 2. ブネット 10.9.8.0/24 からのクエリでない場合。 ; 1,2 <DNS-Proxy> client.address=!10.9.8.0/24 dns.client_transport=tcp dns.respond(refused) 91 SGOS 6.4 Content Policy Language リファレンス dns.request.address= PTR タイプの DNS クエリ ( 別名 RDNS) のアドレスをテストします。 構文 dns.request.address=ip_address|subnet|subnet_label レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. 10.10.0.0/16 サブネットのアドレスに対するすべての DNS PTR クエリを拒否します。 2. 10.9.8.1 に対する DNS PTR クエリに host1.example.com で応答します。 3. 10.9.8.2 に対する DNS PTR クエリに host2.example.com で応答します。 <DNS-Proxy> ; 1 dns.request.address=10.10.0.0/16 dns.respond(refused) ; 2 dns.request.address=10.9.8.1 dns.respond.ptr("host1.example.com") ; 3 dns.request.address=10.9.8.2 dns.respond.ptr("host2.example.com") 92 第 3 章 : 条件リファレンス dns.request.category= DNS クエリの送信元ホスト名または IP アドレスの URL カテゴリをテストします。 構文 dns.request.category=none|unlicensed|unavailable|category_name1, category_name2, ... レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. カテゴリ HR_intranet_servers の Engineering サブネットから送信されたすべての DNS タ イプ「A」 のクエリを拒否します。 2. カテゴリ Engineering_intranet_servers の HR サブネットから送信されたすべての DNS タイプ 「A」のクエリを拒否します。 define category HR_intranet_servers hr1.example.com hr2.example.com end define category Engineering_intranet_servers eng1.example.com engweb.example.com end define subnet Engineering 10.10.0.0/16 end define subnet HR 10.9.0.0/16 end <DNS-Proxy> dns.request.type=A ; 1 client.address=Engineering \ dns.request.category=HR_intranet_servers dns.respond(refused) ; 2 client.address=HR \ dns.request.category=Engineering_intranet_servers dns.respond(refused) メモ • DNS クエリの分類には、追加の RDNS/DNS 参照は実行されません。 93 SGOS 6.4 Content Policy Language リファレンス dns.request.class= DNS クエリの QCLASS をテストします。 構文 dns.request.class=any|ch|hs|in|none|numeric range from 0 to 65535 レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 • QCLASS IN を使用していないすべての DNS トラフィックを拒否します。 <DNS-Proxy> dns.request.class=!IN dns.respond(refused) 94 第 3 章 : 条件リファレンス dns.request.name= DNS クエリの質問セクションの QNAME をテストします。 構文 dns.request.name=hostname dns.request.name=domain-suffix dns.request.name.exact=string dns.request.name.length=value dns.request.name.prefix=string dns.request.name.substring=string dns.request.name.suffix=string dns.request.name.regex=regular_expression レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. example.com で終わるホスト名のすべてのクエリを拒否します。 2. host1.example.com のクエリを許可します。 ; 1 <DNS-Proxy> dns.request.name=.example.com dns.respond(refused) ; 2 <DNS-Proxy> dns.request.name=host1.example.com dns.respond(auto) 95 SGOS 6.4 Content Policy Language リファレンス dns.request.opcode= DNS クエリのヘッダーの OPCODE をテストします。 構文 dns.request.opcode=query|status|notify|update|numeric range from 0 to 15 レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 • OPCODE: QUERY を使用していないすべての DNS トラフィックを拒否します。 <DNS-Proxy> dns.request.opcode=!QUERY dns.respond(refused) 96 第 3 章 : 条件リファレンス dns.request.type= DNS クエリの QTYPE をテストします。 構文 dns.request.type=dns-qtype|numeric range from 0 to 65535 ここで、dns-qtype は、次のいずれかになります。 A NS MD MF CNAME SOA MB MG MR NULL WKS PTR HINFO MINFO MX TXT RP AFSDB X25 ISDN RT NSAP NSAP-PTR SIG KEY PX GPOS AAAA LOC NXT EID NIMLOC SRV ATMA NAPTR KX CERT A6 DNAME SINK OPT APL DS SSHFP RRSIG NSEC DNSKEY UINFO UID GID UNSPEC TKEY TSIG IXFR AXFR MAILB MAILA ALL レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 <DNS-Proxy> dns.request.type=CNAME 97 SGOS 6.4 Content Policy Language リファレンス dns.response.a= DNS 応答の A RR のアドレスをテストします。 構文 dns.response.a=ip_address|subnet|subnet_label レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 • DNS 応答の応答アドレスが 10.9.8.7 の場合、10.10.10.10 に変更します。 <DNS-Proxy> dns.response.a=10.9.8.7 dns.respond.a(10.10.10.10) 98 第 3 章 : 条件リファレンス dns.response.aaaa= DNS 応答の回答セクションのタイプ AAAA RR を照合します。 構文 dns.response.aaaa=ip-address[/prefix-len] レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 • このポリシーの例では、サーバーからの DNS 応答で AAAA RR が 2001::1 になっている場合に AAAA RR (2001::2) を使用して、クライアントに DNS 応答を送信するように指定しています。 このポリシーにより、DNS サーバーから返される AAAA RR レコードを プロキシ SG で書き換え ることができます。 <DNS-Proxy> dns.response.aaaa=2001::1 dns.respond.aaaa(2001::2) 注意 : DNS プロキシでは、IPv6 AAAA レコードがキャッシュされます。 99 SGOS 6.4 Content Policy Language リファレンス dns.response.cname= DNS 応答の CNAME RR の文字列値をテストします。 構文 dns.response.cname=hostname dns.response.cname=domain-suffix dns.response.cname.exact=string dns.response.cname.length=value dns.response.cname.prefix=string dns.response.cname.substring=string dns.response.cname.suffix=string dns.response.cname.regex=regular_expression レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. CNAME RR のいずれかの .example.com があるすべての DNS クエリを拒否します。 2. host1.example.com を許可します。 ; 1 <DNS-Proxy> dns.response.cname=.example.com dns.respond(refused) ; 2 <DNS-Proxy> dns.response.cname=host1.example.com dns.respond(auto) 100 第 3 章 : 条件リファレンス dns.response.code= プロキシ処理される DNS クエリの応答の数値応答コードをテストします。 構文 dns.response.code=noerror|formerr|servfail|nxdomain|notimp|refused|yxdomain|yxrr set|nxrrset|notauth|notzone|numeric range from 0 to 15 レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 • 一部のクライアント コンピュー yxdomain を使用して定期的に応答する DNS サーバーがあるが、 問 タでこの応答コードを正しく処理できません。 yxdomain 応答を nxdomain に変換することで、 題が修正されると考えられます。 <DNS-Proxy> dns.response.code=yxdomain dns.respond(nxdomain) 101 SGOS 6.4 Content Policy Language リファレンス dns.response.nodata= DNS 応答に RR がないかどうかをテストします。 構文 dns.response.nodata=yes|no レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 • 定期的に空の応答を送信する DNS サーバーがあります。一部のクライアントでこの応答を正し く処理できません。問題のサーバーにパッチを適用する必要がありますが、このサーバーは別の部 門にあります。そのため、当面の間は空の応答を、クライアントが処理できる nxdomain に変換し ます。 <DNS-Proxy> dns.response.nodata=yes dns.respond(nxdomain) 102 第 3 章 : 条件リファレンス dns.response.ptr= DNS 応答の PTR RR のホスト名値をテストします。 構文 dns.response.ptr=hostname dns.response.ptr=domain-suffix dns.response.ptr.exact=string dns.response.ptr.length=value dns.response.ptr.prefix=string dns.response.ptr.substring=string dns.response.ptr.suffix=string dns.response.ptr.regex=regular_expression レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 <DNS-Proxy> dns.response.ptr=.bluecoat.com 103 SGOS 6.4 Content Policy Language リファレンス exception.id= クライアントに返される例外が指定の例外かどうかをテストします。また、返される例外が組み込み またはユーザー定義の例外かどうかを判断するためにも使用できます。 組み込みの例外は、SG によって自動的に処理されますが、<Exception> レイヤ内で特殊な処理を定義 できます。特殊な処理は、主にユーザー定義の例外で必要になります。 構文 exception.id=exception_id ここで、exception_id は次の形式の組み込みの例外名です。 exception_id または、次の形式のユーザー定義の例外名です。 user_defined.exception_id 他の CPL exception.id= では、 exception( ) プロパティで設定した例外の ID をテストする以外に、 ジェスチャによって返される例外 (deny( ) プロパティで返される policy_denied や redirect( ) アクションで返される policy_redirect など ) をテストすることもできます。 レイヤおよびトランザクション メモ • <Exception> レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 この例では、 一般的に生成される例外がどのようにキャッチされるのかを示します。適切なサブネッ ト、アクション、カテゴリの定義が想定されています。 <Proxy> url.domain=partner.my_co.com/ action.partner_redirect(yes) ; action contains redirect( ) <Proxy> url.domain=internal.my_co.com/ force_deny client.address!=mysubnet authenticate(my_realm) <Proxy> deny.unauthorized url.domain=internal.my_co.com/hr group=!hr; ; and other group/user restrictions ... <Proxy> category=blocked_sites exception(user_defined.restricted_content) ; could probably have used built in content_filter_denied 104 第 3 章 : 条件リファレンス ; Custom handling for some built-in exceptions ; <Exception> ; thrown by authenticate( ) if there is a realm configuration error exception.id=configuration_error action.config_err_alerts(yes) ; thrown by deny.unauthorized exception.id=authorization_failed action.log_permission_failure(yes) ; thrown by deny or force_deny exception.id=policy_denied action.log_interloper(yes) <Exception> exception.id=user_defined.restricted_content ; any policy required for this user defined exception ... 関連項目 • プロパティ: deny( )、deny.unauthorized( )、 exception( ) • アクション : uthenticate( )、authenticate.force( )、redirect( ) 105 SGOS 6.4 Content Policy Language リファレンス ftp.method= 一般的に知られている FTP メソッドに対して FTP 要求メソッドをテストします。認識されないメ ソッドが指定されると、CPL 解析エラーが発生します。 • 要求メソッドが指定のメソッドのいずれかに一致すると、true に評価されます。 ftp.method= は、 • 要求が FTP プロトコル要求でないと、NULL に評価されます。 ftp.method= は、 構文 ftp.method=ABOR|ACCT|ALLO|APPE|CDUP|CWD|DELE|EPRT|EPSV|HELP|LIST|MDTM|MKD|MODE| NLST|NOOP|PASS|PASV|PORT|PWD|REST|RETR|RMD|RNFR|RNTO|SITE|SIZE|SMNT |STOR|STOU|STRU|SYST|TYPE|USER|XCUP|XCWD|XMKD|XPWD|XRMD|OPEN 各引数の意味は次のとおりです。 • 要求メソッドが指定のメソッドのいずれかに一致すると、true に評価さ ftp.method= は、 れます。 • これは、要求が FTP プロトコル要求でないと、NULL に評価されます。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • FTP トランザクションに適用されます。 関連項目 • 106 条件 : category=、 content_management=、 http.method=、 http.x_method=、 im.method=、 server_url=、 socks.method= 第 3 章 : 条件リファレンス group= クライアントが認証されているか、およびクライアントが特定のグループに属しているかどうかをテ ストします。 両方の条件を満たすと、結果が true になります。また、realm= 条件を使用して、 指定のレ ルムでユーザーが認証されているかどうかをテストすることもできます。この条件は、現在のトラン ザクションが認証されていない場合 (authenticate( ) プロパティが no に設定されている場合) には 使用できません。 ポリシーで複数のレルムを参照する場合、 realm= テストと組み合わせてグループ テストのあいまい さを解消することを考慮してください。これにより、該当のレルムに関係のないグループ情報の認証 サービスに対する不適切なクエリの数が軽減します。 構文 group=group_name 各引数の意味は次のとおりです。 • 必須の形式で、レルムのタイプに応じ group_name: デフォルト レルムのグループ名です。 て、 name 属性の大文字と小文字は区別されます。 • ドメ NTLM レルム: グループ名の形式は Domain\groupname です。ここで、 Domain は、 インの NT ドメイン コントローラに BCAAA または CAASNT のどちらがインス トールされているかに応じて省略可能になる場合があります。名前の大文字と小文字 は区別されません。 • ローカル パスワード レルム : グループ名には、32 文字までの英数字と下線 (_) を使用 できます。名前の大文字と小文字は区別されます。 • RADIUS レルム : RADIUS ではグループはサポートされていません。 RADIUS 環境で は、 代わりにユーザーに ServiceType 属性を割り当てて groups を定義します。 • LDAP レルム : グループ定義は、 LDAP ディレクトリおよび LDAP スキーマのタイプに よって異なります。 通常、 LDAP 識別名は、 cn=proxyusers、 ou=groups、 o=companyname の形式で使用されます。大文字と小文字の区別は、レルムの定義設定によって異なり ます。 • 証明書レルム : 証明書レルムは認証を提供しますが、証明書レルム自体で承認を行う ことはありません。 代わりに、グループ メンバシップの決定を設定済みの承認レルム ( ローカル パスワード レルムまたは LDAP レルム ) に委任します。グループ定義は、委 任された承認レルムの適切な標準に準拠している必要があります。ポリシーで使用さ れるグループは、委任されたレルムのグループになりますが、パフォーマンスの利点 を得るには、委任された承認レルムではなく、証明書レルムのレルム テストから group= テストを開始する必要があります。 • シーケンス レルム : シーケンス レルムは、下位のレルムの設定済みリストです。この リストの順序でユーザー資格情報が提供されます。ユーザーは、提供された資格情報 がシーケンスのいずれかのレルムで有効な場合、 認証されたユーザーと見なされま す。 ユーザーの承認は、認証が発生した下位のレルムに関して行われます。グループ名 107 SGOS 6.4 Content Policy Language リファレンス がシーケンスのいずれかのレルムで有効であっても、group= テストが true に評価さ れるには、ユーザーが実際に認証されたレルムで有効なグループである必要がありま す。シーケンスのすべてのレルムでグループが有効な場合、group= テストの前にシー ケンス レルムの realm= テストを実行する必要があります。 それ以外の場合、適切な 下位のレルムの realm= テストを先に実行する必要があります。 レイヤおよびトランザクション メモ • <Proxy>、 <Forward>、 <exception>、 <admin>、 <SSL-Intercept> および <SSL> レイヤで使用します。 注意 : <Forward> レイヤで使用する場合、認証されたクライアントが存在しなければ、この条件は NULL に評価 (トレースで N/A として表示) される可能性があります。これらの条件を含む ルールは、正常なロジックを保持するために authenticated= で保護することができます。 • プロキシおよび管理者のトランザクションに適用されます。 例 ; Test if user is authenticated in group all_staff and specified realm. realm=corp group=all_staff ; ; ; ; This example shows sample group tests for each type of realm.It does this by creating a condition in CPL that treats a group of administrators in each realm as equivalent, granting them permission to administer the Security Appliance.Recall that the <Admin> layer uses a whitelist model by default. define condition RW_Admin realm=LocalRealm group=RWAdmin realm=NTLMRealm group=xyz-domain\cache_admin realm=LDAPRealm group=”cn=cache_admin, ou=groups, o=xyz” ; The RADIUSRealm uses attributes, and this can be expressed as follows: realm=RADIUSRealm attribute.ServiceType=8 end <admin> client.adress=10.10.1.250/28 authenticate(LocalRealm) client.adress=10.10.1.0/24 authenticate(NTLMRealm) client.adress=10.10.2.0/24 authenticate(LDAPRealm) client.adress=10.10.3.0/24 authenticate(RADIUSRealm) <admin> allow condition=RW_Admin admin.access=(READ||WRITE) 関連項目 108 • 条件 : authenticated=、has_attribute.name=、http.transparent_authentication=、 realm=、 user=、 user.domain=、user.x509.issuer=、user.x509.serialNumber=、user.x509.subject= • プロパティ: authenticate( )、authenticate.force( )、check_authorization()、 socks.authenticate( )、 socks.authenticate.force( ) 第 3 章 : 条件リファレンス has_attribute.name= 現在のトランザクションが LDAP または RADIUS レルムで認証されているかどうか、および認証済 みユーザーに指定された属性があるかどうかをテストします。指定の属性が LDAP スキーマで設定さ れておらず、式に yes が使用されている場合、この条件は必ず false になります。現在のトランザク ションが認証されない場合 ( つまり、authenticate プロパティが no に設定されている場合 )、 この条 件は使用できません。 ポリシーで複数のレルムを参照する場合、 realm= テストと組み合わせて has_attribute テストのあ いまいさを解消することを考慮してください。これにより、該当のレルムに関係のない属性情報の認 証サービスに対する不適切なクエリの数が軽減します。 重要 : この条件は、Novell eDirectory サーバーと互換性がありません。LDAP スキーマで name 属性 が設定されている場合、その属性が実際にユーザーに割り当てられているかどうかに関係な く、この属性を持つすべてのユーザーが eDirectory サーバーによって報告されます。これによ り、予期できない結果が生じる可能性があります。 構文 has_attribute.name=yes|no ここで、name は LDAP または RADIUS 属性です。属性名の大文字と小文字の区別は、設定の レルム定義によって異なります。 次の RADIUS 属性名を指定できます。 Callback-ID Callback-Number Filter-ID Framed-IP-Address Framed-IP-Netmask Framed-MTU Framed-Pool Framed-Protocol Framed-Route Idle-Timeout Login-LAT-Group Login-LAT-Node Login-LAT-Port Login-LAT-Service Login-IP-Host Login-TCP-Port Port-Limit Service-Type 109 SGOS 6.4 Content Policy Language リファレンス Session-Timeout Tunnel-Assignment-ID Tunnel-Medium-Type Tunnel-Private-Group-ID Tunnel-Type Blue-Coat-Group レイヤおよびトランザクション メモ • RADIUS 属性は、 <Admin> および <Proxy> レイヤを使用します。 <Forward> および <Exception> レイヤでも使用できます。 • プロキシおよび管理トランザクションに適用されます。 すべてのトラン LDAP は、 RADIUS 属性は、 ザクションに適用されます。 例 この例では、 ユーザーは Callback-Number という RADIUS 属性が割り当てられている場合にプロキ シにアクセスできます。この属性には、任意の値 (null を含む ) を設定できます。 <Proxy> authenticate(RADIUSRealm) <Proxy> allow has_attribute.Callback-Number=yes 次のポリシーでは、ユーザーは ProxyUser という RADIUS 属性が割り当てられている場合にプロキ シにアクセスできます。この属性には、任意の値 (null を含む ) を設定できます。通常、このタイプのポ リシーは最初のプロキシ レイヤで確立され、必要に応じてブラックリストまたはホワイトリストのい ずれかをセットアップします。 <Proxy> authenticate(LDAPRealm) ; Setting up a whitelist model <Proxy> deny has_attribute.ProxyUser=no ; Setting up a blacklist model <Proxy> allow has attribute.ProxyUser=yes deny 関連項目 110 • 条件 : attribute.name=、authenticated=、group=、http.transparent_authentication=、 realm=、 user=、 user.domain= • プロパティ: authenticate( )、authenticate.force( )、check_authorization( ) 第 3 章 : 条件リファレンス has_client= 現在のトランザクションにクライアントがあるかどうかをテストするために使 has_client= 条件は、 用されます。これは、<Forward> レイヤのクライアント ID に依存する条件を保護するために使用でき ます。 構文 has_client=yes|no レイヤおよびトランザクション メモ • <Forward> および <SSL> レイヤで使用します。 • すべてのトランザクションに適用されます。 関連項目 • 条件 : client.address=、client.protocol=、 proxy.address=、 proxy.card=、 proxy.port=、 streaming.client= 111 SGOS 6.4 Content Policy Language リファレンス health_check= トランザクションがヘルス チェックに属しているかどうかをテストします。 これにより、 現在のトランザクションがヘルス チェック トランザクションかどうかのテストがトリ ガされます。このトリガで、トランザクションが特定のヘルス チェック トランザクションかどうかを テストすることもできます ( 省略可能 )。 構文 health_check = yes|no|health_check_name health_check_name の意味は次のとおりです。 特定のヘルス チェックの名前ユーザー定義のヘルス チェックを指定した場合、省略可能なプ レフィックス user. が自動的に追加されます。それ以外の場合は、完全なヘルス チェック名を、 そのプレフィックスを含め、入力する必要があります。 レイヤおよびトランザクション メモ • 有効なレイヤ : Forward、 SSL • 適用対象 : すべてのトランザクション 例 ユーザー定義のヘルス チェック user.upstream のすべての転送を禁止します。 <Forward> health_check=user.upstream forward(no) 関連項目 • 112 条件 : is_healthy.health_check_name= 第 3 章 : 条件リファレンス hour= 日の時刻が指定された範囲内にあるか、または完全に一致するかどうかをテストします。デフォルト では、現在時刻は SG アプライアンスの設定済みの時計およびタイム ゾーンによって決まりますが、 フォーム hour.utc= を使用して UTC タイム ゾーンを指定することができます。hour= 条件のテスト で使用する数値パターンにスペースは含まれません。 注意 : 時間範囲または正確に指定された時間には、最後の 1 時間のすべての分が含まれます。例を参照 してください。 構文 hour[.utc]={first_hour]..[last_hour]|exact_hour} 各引数の意味は次のとおりです。 • 範囲内の最初の時を表します。たとえ first_hour: 24 時間形式の 2 桁の時 (nn) であり、 ば、09 は午前 9:00 を意味します。空白の場合は、午前 0 時 (00)、つまり午前 00:00 とみなさ れます。 • 範囲内の最後の 1 時間を表します。たと last_hour: 24 時間形式の 2 桁の時 (nn) であり、 えば、17 は午後 5:59 を示します。空白の場合は、23 (23:59) とみなされます。 • 正確な 1 時間を表します。 exact_time: 24 時間形式の 2 桁の時 (nn) であり、 注意 : 日を横断する範囲など、逆転した範囲をテストするには、次の簡潔な式を使用できます。 午前 0:00 ~午前 6:59、および午後 7:00 ~ 午前 0:00 を示します。ポリシー hour=(..06|19..) は、 言語では、hour=19..06 が同じ範囲として認識されます。 レイヤおよびトランザクション メモ • すべてのレイヤで使用します。 • 時間に関する条件を使用して、 キャッシュされたオブジェクトのスラッシングが発生する可能性 のある <Cache> レイヤでのキャッシュの動作を制御します。 • すべてのトランザクションに適用されます。 例 ; Tests for 3:00 a.m. to 1:59 p.m. UTC. hour.utc=03..13 ; The following example restricts access to external sites during business hours. ; This rule assumes that the user has access that must be restricted. <Proxy> ; Internal site always available, no action required server_url.domain=xyz.com ; Restrict other sites during business hours deny weekday=1..5 hour=9..16 113 SGOS 6.4 Content Policy Language リファレンス ; If a previous rule had denied access, then this rule could provide an exception. <Proxy> allow server_url.domain=xyz.com ; internal site always available allow weekday=6..7 ; unrestricted weekends allow hour=17..8; Inverted range for outside business hours 関連項目 • 114 条件 : date[.utc]=、 day=、 minute=、 month=、 time=、 weekday=、 year= 第 3 章 : 条件リファレンス http.connect= HTTP CONNECT トンネルが SG とクライアント間で使用されているかどうかをテストします。 構文 http.connect=yes|no レイヤおよびトランザクション メモ • および <SSL> レイヤで使用します。 <Proxy>、 <Forward>、 <Exception>、 • プロキシ トランザクションに適用されます。 例 <Proxy> http.connect=yes 115 SGOS 6.4 Content Policy Language リファレンス http.method= 認識されないメソッ HTTP メソッドの任意の共通セットに対して HTTP 要求メソッドをテストします。 ドが指定されると、CPL 解析エラーが発生します。 構文 http.method=GET|CONNECT|DELETE|HEAD|POST|PUT|TRACE|OPTIONS|TUNNEL|LINK|UNLINK |PATCH|PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK|MKDIR|INDEX|RMDIR|COPY| MOVE 各引数の意味は次のとおりです。 • 指定したメソッドのいずれかに要求メソッドが一致する場合、http.method= は true に評 価されます。 • 要求が HTTP プロトコル要求でない場合、http.method= は NULL に評価されます。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • HTTP トランザクション、および SSL 終端の HTTPS トランザクションに適用されます。 関連項目 116 • 条件 : admin.access=、 ftp.method=、 http.x_method=、 im.method=、 socks.method= • プロパティ: http.request.version( )、http.response.version( ) 第 3 章 : 条件リファレンス http.method.custom= HTTP プロトコル メソッドとカスタム値をテストします。 構文 http.method.custom=string レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • HTTP トランザクション、および SSL 終端の HTTPS トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. 一般的な HTTP メソッドのうち、 「GET」と「POST」 のみを許可します。 2. バックエンド サーバーの 1 つで使用されるカスタム HTTP メソッド「MYMETHOD1」を許可し ます。 3. 他のすべての HTTP メソッドを拒否します。 <Proxy> ; 1 ALLOW http.method=(GET||POST) ; 2 ALLOW http.method.custom=MYMETHOD1 ; 3 DENY 117 SGOS 6.4 Content Policy Language リファレンス http.method.regex= 正規表現を使用して HTTP メソッドをテストします。 構文 http.method.regex=regular_expression レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • HTTP トランザクション、および SSL 終端の HTTPS トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 • 10 進数が含まれるすべての HTTP メソッドを拒否します。 <Proxy> DENY http.method.regex="[0-9]+" 118 第 3 章 : 条件リファレンス http.request.body.size= 特定サイズの本文コンテンツが含まれる HTTP 要求をテストするために使用します。 この条件を使用すると、 HTTP の本文コンテンツのサイズ ( バイト単位 ) に基づいて、 HTTP 要求トラン ザクションのサイズを制御できます。http.request.body.max_size 条件とは異なり、 最大値が適用されません。 http.request.body.size では、 構文 http.request.body.size=N • 上の例では、N はバイト数になります。 • Ranges are supported, separated by .. .. で区切ることで範囲がサポートされます (1000..2000 の値を指定した場合、1000 ~ 2000 バイトのサイズに等しいコンテンツが含まれる HTTP 要求の ルールが起動します。整数ベースの値と共にダブル ピリオドを使用する方法についての詳細は、 このガイドの「 「条件の構文」」 を参照してください。 レイヤおよびトランザクション メモ • および <Proxy> レイヤで使用します。 <Exception>、 <Cache>、 • 本文コンテキストのあるすべての HTTP 要求に適用されます。 • 配信元コンテンツ サーバー (OCS) 応答の後で評価されます。OCS 応答の前に同様の要求を拒否す るには、代わりに http.request.body.max_size() を使用します。 例 HTTP 要求トランザクションの本文コンテンツのサイズが 10 MB を超える場合、新しいエントリがカ スタム ログ タイプ「large_request」 に出力されます。 <Proxy> http.request.body.size=10485760.. access_log[large_request](yes) 119 SGOS 6.4 Content Policy Language リファレンス http.request.body.max_size_exceeded= プロパティ http.request.body.max_size() と組み合わせて使用します。この条件は <Exception> レイヤ でのみ使用します。要求が HTTP 要求の最大本文サイズを超えた場合、これにより管理者は対応策を講じること ができます。 構文 http.request.body.max_size_exceed=(yes|no) レイヤおよびトランザクション メモ • <Exception> レイヤで使用します。 • http.request.body.max_size() という CPL プロパティを使用して HTTP 要求の本文のサイズを制限 するルールに一致する要求に適用されます。 例 拒否されて、 HTTP 要求の本文が 5 MB を超える場合、 'large_request' というカスタム ログ タイプで報告されます。 <Proxy> http.request.body.max_size(5242880) <Exception> http.request.body.max_size_exceeded=yes access_log[large_request](yes) 120 第 3 章 : 条件リファレンス http.request_line.regex= HTTP プロトコル要求行をテストします。 構文 http.request_line.regex=regular_expression レイヤおよびトランザクション メモ • <Proxy> および <Exception> レイヤで使用します。 • HTTP トランザクション、および SSL 終端の HTTPS トランザクションに適用されます。 例 また、ス SG では、デフォルトで HTTP 要求行の先頭または末尾にスペースを含めることができます。 ペース文字の代わりにタブ文字を使用したり、トークン間に複数のスペース文字を使用したりするこ ともできます。ただし、HTTP 仕様の厳密な解釈に従えば、先頭または末尾のスペース、タブ、および トークン間の複数のスペースは使用できません。 上記の構文の規制を強制するには、次のポリシーを使用します。 <Proxy> DENY("bad HTTP request line") \ http.request_line.regex="\t|(^ )|( $)|( )" 121 SGOS 6.4 Content Policy Language リファレンス http.request.version= アプライアンスへの要求の作成時にクライアントで使用された HTTP のバージョンをテストします。 構文 http.request.version=0.9|1.0|1.1 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • HTTP トランザクション、および SSL 終端の HTTPS トランザクションに適用されます。 関連項目 122 • 条件 : http.response.code=、http.response.version= • プロパティ: http.request.version( )、http.response.version( ) 第 3 章 : 条件リファレンス http.response.apparent_data_type= ファイル ヘッダーの調査に基づいて、 HTTP 応答データの Apparent Data Type (明示データ型) をテス トします。 構文 http.response.apparent_data_type = executable|cabinet 各引数の意味は次のとおりです。 • Windows 実行可能ファイル (.exe) のテストです。 executable は、 • Windows キャビネット ファイル (.cab) のテストです。 cabinet は、 レイヤおよびトランザクション メモ • <Cache>、 <Proxy>、 <Exception> レイヤで使用します。 • すべての HTTP トランザクション ( プロキシ、リフレッシュ、パイプライン ) に適用されます。 例 応答データの最初の数バイトで Windows 実行可能ファイルである可能性が示されると、 その要求を 拒否します。 <proxy> DENY http.response.apparent_data_type = executable 123 SGOS 6.4 Content Policy Language リファレンス http.response.code= 現在のトランザクションが HTTP トランザクションであり、配信元サーバーから受信した応答コード が指定されたものである場合、テスト結果は true となります。 置換 : http.response_code 構文 http.response.code=nnn ここで、nnn は標準的な数値範囲テストです (100 以上 999 以下の範囲の値 )。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • HTTP トランザクション、および SSL 終端の HTTPS トランザクションに適用されます。 関連項目 124 • 条件 : http.request.version=、http.response.version= • プロパティ: http.response.version( ) 第 3 章 : 条件リファレンス http.response.data= HTTP 応答データの最初の数バイトをテストします。 このトリガにより、応答データの N バイトを配信元サーバーから受信するまで、またはファイルの終 了まで ( どちらか早い方 ) HTTP が待機します。次に、 応答データの最初の N バイトが、条件の右側に位 置する文字列パターンと比較されます。 構文 http.response.data.N[StringQualifiers] = String 各引数の意味は次のとおりです。 • 1 ~ 256 バイトに相当します。 N は、 • StringQualifiers は [.exact|.length|.prefix|.suffix|.substring|.regex][.case_sensitive] に相当 します。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Cache>、 <Proxy>、 • すべての HTTP トランザクション ( プロキシ、リフレッシュ、パイプライン ) に適用されます。 例 応答データの最初の 2 バイトで Windows 実行可能ファイルである可能性が示されると、その要求を 拒否します。 <proxy> DENY http.response.data.2.case_sensitive = "MZ" 125 SGOS 6.4 Content Policy Language リファレンス http.response.version= SG に応答を送信する配信元サーバーで使用された HTTP のバージョンをテストします。 構文 http.response.version=0.9|1.0|1.1 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • HTTP トランザクション、および SSL 終端の HTTPS トランザクションに適用されます。 関連項目 126 • 条件 : http.request.version=、http.response.code= • プロパティ: http.response.version( ) 第 3 章 : 条件リファレンス http.transparent_authentication= この条件は、この要求に HTTP で透過プロキシ認証が使用されている場合は true に評価されます。 この条件は、authenticate( ) または authenticate.force( ) プロパティと共に使用して、認証レ ルムを選択できます。 構文 http.transparent_authentication=yes|no レイヤおよびトランザクション メモ • <Proxy> および <Exception> レイヤで使用します。 • HTTP トランザクション、および SSL 終端の HTTPS トランザクションに適用されます。 関連項目 • 条件 : attribute.name=、authenticated=、 group=、 has_attribute.name=、 realm=、 user=、 user.domain= • プロパティ: authenticate( )、authenticate.force( )、authenticate.mode( )、 check_authorization( ) 127 SGOS 6.4 Content Policy Language リファレンス http.x_method= 一般的でない HTTP メソッドに対して HTTP 要求メソッドをテストします。 この条件よりも、117 ページの「http.method.custom=」を使用することをお勧めします。 128 第 3 章 : 条件リファレンス icap_error_code= どの ICAP エラーが発生したのかをテストします。このトリガを含むルールは、ICAP スキャンを伴わ ないトランザクションでは照合されません。 構文 any|none|<ICAP_error> 各引数の意味は次のとおりです。 次のいずれかです。 <ICAP_error> は、 n o n e 、s c a n _ t i m e o u t 、d e c o d e _ e r r o r 、p a s s w o r d _ p r o t e c t e d 、i n s u f f i c i e n t _ s p a c e 、 max_file_size_exceeded、max_total_size_exceeded、max_total_files_exceeded、 file_extension_blocked、antivirus_load_failure、antivirus_license_expired、 antivirus_engine_error、connection_failure、request_timeout、internal_error、 server_error、server_unavailable。 レイヤおよびトランザクション メモ • <Proxy> および <Exception> レイヤで使用します。 • すべての HTTP トランザクション ( プロキシ、リフレッシュ、パイプライン )、FTP プロキシ トラン ザクションに適用されます。 例 次の例では、管理者が、パスワードで保護されているためにスキャンできないファイルに対するアク セスを許可するように選択しています。スキャン プロパティには、fail_open 設定 ( 省略可能 ) を使用 する必要があります。 ルールでは、エラー コード none を許可する必要があります。また、この例では、 ユーザー定義の例外ページの名前を virus_scan_failure と仮定しています。 <Proxy> response.icap_service(virus_scan, fail_open) <Proxy> icap_error_code=!(none, password_protected) exception(virus_scan_failure) 129 SGOS 6.4 Content Policy Language リファレンス is_healthy.health_check_name= ヘルス チェックで正常と報告されているかどうかをテストします。 構文 is_healthy.health_check_name = yes|no health_check_name の意味は次のとおりです。 特定のヘルス チェックの名前ユーザー定義のヘルス チェックを指定した場合、省略可能なプ レフィックス user. が自動的に追加されます。それ以外の場合は、完全なヘルス チェック名を、 そのプレフィックスを含め、入力する必要があります。 レイヤおよびトランザクション メモ • <Proxy>、 <Cache>、 <Forward>、 <SSL> の各レイヤで使用します。 • 適用対象 : すべてのトランザクション 例 ヘルス チェック user.upstream を設定して、internet_main という名前の転送プロキシを使用 すると同時にインターネットへのアクセスをテストする場合を考えます。これは、 複数のインター ネット サイトをテストする複合ヘルス チェックとなる可能性があります。この例では、インターネッ トへのアクセスに失敗すると、すべてのトラフィックを internet_backup という名前の別の転送 プロキシを使用するようにリダイレクトしています。 ヘルス チェックは、 internet_main を使用してインターネット アクセスの評価を続ける必要があ ります。それには、 ヘルス チェック トランザクションを特定し、 一貫性のある方法でルーティングす る必要があります。そうしないと、ヘルス チェックが 2 つのプロキシの間で行ったり来たりすること になります。 <Forward> ; Normally forward through 'internet_main'. is_healthy.user.upstream=yes forward(internet_main) ; Health check must use 'internet_main'. health_check=user.upstream forward(internet_main) ; Otherwise, use the backup. forward(internet_backup) 関連項目 • 130 条件 :health_check= 第 3 章 : 条件リファレンス im.buddy_id= インスタント メッセージグ トランザクションに関連付けられた buddy_id をテストします。 構文 im.buddy_id[.exact][.case_sensitive]=string im.buddy_id.prefix[.case_sensitive]=string im.buddy_id.substring[.case_sensitive]=string im.buddy_id.suffix[.case_sensitive]=string im.buddy_id.regex[.case_sensitive]=regular_expression 各引数の意味は次のとおりです。 • user_id_string: 完全なインスタント メッセージング バディ名。 • substring . . . substring: インスタント メッセージング バディ名のサブ文字列を指定します。 • : 正規表現を指定します。 regex . . . ” expr” メモ • デフォルトでは、大文字と小文字を区別せずにテストします。.case_sensitive を指定すると、大 文字と小文字を区別してテストします。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.chat_room.conference=、im.chat_room.id=、im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.extension=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • プロパティ:im.strip_attachments( ) 131 SGOS 6.4 Content Policy Language リファレンス im.chat_room.conference= インスタント メッセージング トランザクションに関連付けられたチャット ルームに会議属性セット があるかどうかをテストします。 構文 im.chat_room.conference=yes|no レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 132 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 i m . c h a t _ r o o m . v o i c e _ e n a b l e d = 、i m . f i l e . e x t e n s i o n = 、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • プロパティ:im.strip_attachments( ) 第 3 章 : 条件リファレンス im.chat_room.id= インスタント メッセージング トランザクションに関連付けられたチャット ルーム ID をテストします。 構文 im.chat_room.id[.exact][.case_sensitive]=string im.chat_room.id.prefix[.case_sensitive]=string im.chat_room.id.substring[.case_sensitive]=string im.chat_room.id.suffix[.case_sensitive]=string im.chat_room.id.regex[.case_sensitive]=regular_expression 各引数の意味は次のとおりです。 S user_id_string: 完全なチャット ルーム ID。 S substring . . . substring: チャット ルーム ID のサブ文字列を指定します。 S : 正規表現を指定します。 regex . . . ” expr” メモ AOL と Yahoo では、ユーザーに表示される ID に追加情報が追加されます。デフォルトのテストは完 全一致なので、追加情報があると、表示された ID との一致には失敗します。これらのサービスでは、サ ブ文字列または正規表現による一致を使用してください。 MSN チャット ルーム ID は、完全一致でテ ストできます。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.extension=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • プロパティ:im.strip_attachments( ) 133 SGOS 6.4 Content Policy Language リファレンス im.chat_room.invite_only= インスタント メッセージング トランザクションに関連付けられたチャット ルームに invite_only 属性セットがあるかどうかをテストします。 構文 im.chat_room.invite_only=yes|no レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 134 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.type=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.extension=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • プロパティ:im.strip_attachments( ) 第 3 章 : 条件リファレンス im.chat_room.type= トランザクションに関連付けられたチャット ルームが公開か非公開かをテストします。 構文 im.chat_room.type=public|private レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.extension=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • プロパティ:im.strip_attachments( ) 135 SGOS 6.4 Content Policy Language リファレンス im.chat_room.member= インスタント メッセージング トランザクションに関連するチャット ルームに、 指定された基準に一 致するメンバがいるかどうかをテストします。 構文 im.chat_room.member[.exact][.case_sensitive]=string im.chat_room.member.prefix[.case_sensitive]=string im.chat_room.member.substring[.case_sensitive]=string im.chat_room.member.suffix[.case_sensitive]=string im.chat_room.member.regex[.case_sensitive]=regular_expression 各引数の意味は次のとおりです。 S string: 完全なインスタント メッセージングのバディ ID の完全一致です。 S substring . . . substring: インスタント メッセージングのバディ ID のサブ文字列を指 定します。 S : 正規表現を指定します。 regex . . . ” expr” メモ デフォルトでは、大文字と小文字を区別せずにテストします。.case_sensitive を指定すると、大文字 と小文字を区別してテストします。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 136 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.voice_enabled=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.file.extension=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • プロパティ:im.strip_attachments( ) 第 3 章 : 条件リファレンス im.chat_room.voice_enabled= インスタント メッセージング トランザクションに関連するチャット ルームが音声を有効にしている かどうかをテストします。 構文 im.chat_room.voice_enabled=yes|no レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 im.file.extension=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • プロパティ:im.strip_attachments( ) 137 SGOS 6.4 Content Policy Language リファレンス im.client= 使用されている IM クライアントのタイプをテストします。 構文 im.client=yes|no|aol-im|msn-im|yahoo-im レイヤおよびトランザクション メモ • <Proxy>、<Exception>、<Forward>、および <Cache> レイヤで使用します。 • インスタント メッセージング トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. すべての MSN インスタント メッセージング トラフィックのリフレクションをオンにします。 2. すべての Yahoo インスタント メッセージング トラフィックを拒否します。 <Proxy> ; 1 im.client=msn-im im.reflect(yes) ; 2 DENY im.client=yahoo-im 138 第 3 章 : 条件リファレンス im.file.extension= インスタント メッセージング トランザクションに関連するファイルのファイル拡張子をテストしま す。 ファイル拡張子の先頭の '.' は省略可能です。完全一致のみがサポートされています。 構文 im.file.extension[.case_sensitive]=[.]filename_extension メモ デフォルトでは、大文字と小文字を区別せずにテストします。.case_sensitive を指定すると、大文字 と小文字を区別してテストします。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • プロパティ: im.strip_attachments( ) 139 SGOS 6.4 Content Policy Language リファレンス im.file.name= インスタント メッセージング トランザクションに関連するファイルの拡張子を含んだファイル名 ( パスの最後のコンポーネント ) をテストします。 構文 im.file.name[.exact][.case_sensitive]=string im.file.name.prefix[.case_sensitive]=string im.file.name.substring[.case_sensitive]=string im.file.name.suffix[.case_sensitive]=string im.file.name.regex[.case_sensitive]=regular_expression 各引数の意味は次のとおりです。 S string: 拡張子を含んだ完全なファイル名の完全一致です。 S prefix . . . prefix_string: プレフィックスの一致を指定します。 S substring . . . substring—: ファイル名のサブ文字列の一致を指定します。 S : 正規表現を指定します。 regex . . . ” expr” メモ ファイルの SEND 要求の場合、完全一致を使用できます。ファイルの RECEIVE 要求の場合、パス情報 が含まれるため、完全一致は機能しません。代わりに、サブ文字列または Regex テストを使用して、 ファイルの SEND 要求と RECEIVE 要求の両方を照合します。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.extension=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • 140 プロパティ:im.strip_attachments( ) 第 3 章 : 条件リファレンス im.file.path= インスタント メッセージング トランザクションに関連するファイルのファイル パスを指定の基準に 対してテストします。 構文 im.file.path[.exact][.case_sensitive]=string im.file.path.prefix[.case_sensitive]=string im.file.path.substring[.case_sensitive]=string im.file.path.suffix[.case_sensitive]=string im.file.path.regex[.case_sensitive]=regular_expression 各引数の意味は次のとおりです。 S string: 完全なパスの完全一致です。 S prefix . . . prefix_string: プレフィックスの一致を指定します。 S substring . . . substring: ファイル名のサブ文字列の一致を指定します。 S : 正規表現を指定します。 regex . . . ” expr” メモ • この要求ではファイル名のみが送信されるため、このテストはファイルの SEND 要求に一致しま せん。 • この要求に含まれるパスに制御文字が組み込まれているため、 このテストの .exact お AOL の場合、 よび .prefix 形 式 は フ ァ イ ル の RECEIVE 要 求 に 一 致 し ま せ ん。代 わ り に、.regex ま た は .substring 形式を使用します。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.extension=、 im.file.name=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • プロパティ: im.strip_attachments( ) 141 SGOS 6.4 Content Policy Language リファレンス im.file.size= インスタント メッセージング トランザクションに関連付けられたファイルのサイズが、 指定された 符号付き 64 ビットの範囲内にあるかどうかをテストします。 構文 im.file.size=[min]..[max] デフォルトの最小値はゼロ (0) です。デフォルトの最大値はありません。 メモ AOL の場合、IM ファイル リストもファイルとみなされるため、この条件で照合できます。ファイルか リストかの判定は、im.message_type= 条件で、 値に file と list を使用して行います。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.extension=、 im.file.name=、 im.file.path=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • 142 プロパティ:im.strip_attachments( ) 第 3 章 : 条件リファレンス im.message.opcode= im.method が send_unknown または receive_unknown であるインスタント メッセージング トラン ザクションに関連付けられたオペコードの値をテストします。 サポートされているいずれかのインスタント メッ 注意 : 一般に、 この条件は deny( ) と組み合わせて、 セージング プロトコルに新しく追加されたため、ポリシーによる直接制御がまだ行えないやり 取りを制限するために使用できます。この条件を使用するには、Blue Coat のテクニカル サポー トによって指定されたオペコードの固有値が必要です。 構文 im.message.opcode=string ここで、string は、テクニカル サポートによって指定された値です。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 143 SGOS 6.4 Content Policy Language リファレンス im.message.reflected= IM リフレクションが発生したかどうかをテストします。 構文 im.message.reflected=yes|no|failed レイヤおよびトランザクション メモ • <Proxy>、 <Exception>、 <Forward> の各レイヤで使用します。 • インスタント メッセージング トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. すべての MSN インスタント メッセージングについて、リフレクションをオンにします。 2. リフレクションが行われないトラフィックはすべて拒否 (DENY) されます。 <Proxy> ; 1 im.client=msn-im im.reflect(yes) <Proxy> ; 2 -- NOTE: This has the side effect of denying any IM traffic ; where reflection was not attempted, but that is desirable ; according to the above policy DENY im.message.reflected=failed||no 144 第 3 章 : 条件リファレンス im.message.route= インスタント メッセージングのメッセージが受信者に届けられる方法をテストします。 構文 im.message.route=service|direct|chat 各引数の意味は次のとおりです。 • service: メッセージが IM サービス経由でリレーされる場合。 • direct: メッセージが受信者に直接送信される場合。 • chat: メッセージがチャット ルーム ( 会議を含む ) に送信される場合。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 、 im.chat_room.voice_enabled= im.file.extension=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • プロパティ:im.strip_attachments( ) 145 SGOS 6.4 Content Policy Language リファレンス im.message.size= インスタント メッセージングのメッセージのサイズが、 指定された符号付き 64 ビットの範囲内にあ るかどうかをテストします。 構文 im.message.size=[min]..[max} デフォルトの最小値はゼロ (0) です。デフォルトの最大値はありません。 注 AOL の場合は、すべての IM メッセージが HTML タグでラッピングされます。このトリガを使用して (ラッピングに)必要な追加バイト数を考慮してく AOL をテストする場合は、範囲値を決定する際に、 ださい。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 、 im.chat_room.voice_enabled= im.file.extension=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= • 146 プロパティ:im.strip_attachments( ) 第 3 章 : 条件リファレンス im.message.text= メッセージ テキストに、 指定されたテキストまたはパターンが含まれているかどうかをテストします。 注意 : .regex 引数を指定したテストはメッセージの先頭 8K バイトに制限されます。.substring 引数 を指定したテストには、そのような制限はありません。 構文 im.message.text.substring[.case_sensitive]=substring im.message.text.regex[.case_sensitive]=expr 各引数の意味は次のとおりです。 • substring . . . substring: ファイル名のサブ文字列の一致を指定します。 • regex . . . ”expr”: 正規表現を指定します。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.extension=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.type=、 im.method=、 im.user_id= • プロパティ:im.strip_attachments( ) 147 SGOS 6.4 Content Policy Language リファレンス im.message.type= インスタント メッセージング トランザクションのメッセージ タイプをテストします。 構文 im.message.type=text|invite|voice_invite|file|file_list|application 各引数の意味は次のとおりです。 • text: 通常の IM テキスト メッセージ。 • invite: チャット ルームまたは直接のやり取りへの招待、 • voice_invite: 音声チャットへの招待。 • file: メッセージにファイルが含まれる場合。 • エクスポートされたファイルのリストが含まれる場合。 file_list: メッセージに、 • ユーザー ジェスチャの直接的な application: このインスタント メッセージング要求が、 結果ではなく、 インスタント メッセージング アプリケーションによって内部的に生成さ れたかどうかをテストします。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.extension=、 im.file.name=、 im.file.path=、 、 、 、 im.file.size= im.message.route= im.message.size= im.message.text=、 im.method=、 im.user_id= • 148 プロパティ:im.strip_attachments( ) 第 3 章 : 条件リファレンス im.method= インスタント メッセージング トランザクションに関連するメソッドをテストします。 構文 im.method=open|create|join|join_user|login|logout|notify_join|notify_quit|notify _state|set_state|quit|receive|send|unsupported_version メモ • 一部のメソッドはログ記録を目的としてのみ使用できます。これには、notify_join、 notify_quit, notify_state、および set_state が含まれます。 • SGOS 5.x では、 unsupported_version の値が追加されました。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • インスタント メッセージング トランザクションに適用されます。 例 使用例 : <Proxy> im.method=open 関連項目 • アクション : append()、 im.alert( )、 set( ) • 条件 : ftp.method=、 http.method=、 http.x_method=、 socks.method= • IM 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.extension=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.user_id= • プロパティ:im.strip_attachments( ) 149 SGOS 6.4 Content Policy Language リファレンス im.user_agent= IM クライアントで提供されるユーザー エージェント文字列をテストします。 構文 im.user_agent=string im.user_agent.exact=string im.user_agent.length=value im.user_agent.prefix=string im.user_agent.substring=string im.user_agent.suffix=string レイヤおよびトランザクション メモ • <Proxy> および <Exception> レイヤで使用します。 • インスタント メッセージング トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. AOL IM サービスへの接続には AOL からのクライアントのみを「許可」します。 2. すべての SameTime IM クライアントを「拒否」 します 3. します 5.5.3572 のバージョンを報告するすべての IM クライアントを「拒否」 <Proxy> ALLOW ; 1. <Proxy> client.protocol=aol-im ALLOW im.user_agent.prefix="AOL" DENY <Proxy> ; 2. DENY im.user_agent="Sametime Aim client" ; 3. DENY im.user_agent.substring="5.5.3572" 150 第 3 章 : 条件リファレンス im.user_id= インスタント メッセージング トランザクションに関連する user_id をテストします。 構文 im.user_id[.exact][.case_sensitive]=string im.user_id.prefix[.case_sensitive]=string im.user_id.substring[.case_sensitive]=string im.user_id.suffix[.case_sensitive]=string im.user_id.regex[.case_sensitive]=regular_expression 各引数の意味は次のとおりです。 S user_id_string: 完全なインスタント メッセージング ユーザー名との正確な一致。 S substring . . . substring: インスタント メッセージング バディ名のサブ文字列を指定します。 S : 正規表現を指定します。 regex . . . ” expr” メモ デフォルトでは、大文字と小文字を区別せずにテストします。.case_sensitive を指定すると、大文字 と小文字を区別してテストします。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 関連項目 • 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 、 im.chat_room.voice_enabled= im.file.extension=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method= • プロパティ:im.strip_attachments( ) • アクション : append()、 im.alert( )、 set( ) 151 SGOS 6.4 Content Policy Language リファレンス im.user_agent.supported= IM クライアント バージョンへのユーザー エージェントのサポートをテストします。 構文 im.user_agent.supported=yes|no レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • インスタント メッセージング トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 • サポートされない IM クライアント バージョンを使用して AOL IM サービスに接続する AOL か らのクライアントを「拒否」します。 • その他のクライアントを「許可」します。 <Proxy> im.client=aol-im im.user_agent.supported=no DENY ALLOW メモ • 152 SGOS 5.x では、 unsupported_version の値が追加されました。 第 3 章 : 条件リファレンス iterator= この条件によって、渡されたテキスト文字列が、反復 iterate 定義ブロックの内部で参照される場合、 処理されている現在の文字列値と比較されます。 構文 • iterator=string • iterator[.prefix|substring|suffix|regex|exact][.case_sensitive]=string レイヤおよびトランザクション メモ • iterate ブロックの内部でのみ使用します。 • iterator= は iterator.regex= と同じです 例 define action DeleteSampleCookies iterate(request.header.Cookie) iterator.prefix="Sample" iterator.delete() end end <Proxy> action.DeleteSampleCookies(yes) 関連項目 • アクション : iterate() 153 SGOS 6.4 Content Policy Language リファレンス ldap.attribute.ldap_attribute_name= 文字列を、ユーザーのエントリから取得した LDAP 属性の値と比較します。 構文 ldap.attribute.ldap_attribute_name[.case_sensitive]=regular_expression ldap.attribute.ldap_attribute_name.exact[.case_sensitive]=string ldap.attribute.ldap_attribute_name.prefix[.case_sensitive]=string ldap.attribute.ldap_attribute_name.substring[.case_sensitive]=string ldap.attribute.ldap_attribute_name.suffix[.case_sensitive]=string ldap.attribute.ldap_attribute_name.regex[.case_sensitive]=regular_expression 各引数の意味は次のとおりです。 S ldap_attribute_name: 特定の LDAP 属性の名前 レイヤおよびトランザクション メモ • <Proxy>、 <Admin>、 <Forward>、 <Exception>、 <SSL-Intercept>、お よび <SSL> レイヤで使用します。 • すべてのトランザクションに適用されます 例 ; This example denies user access to the proxy under certain conditions. <Proxy> authenticate(LDAPRealm) <Proxy> DENY ldap.attribute.user_type.suffix="_restricted" DENY category=gambling ldap.attribute.web_permission.regex=!".*gambling.*" DENY ldap.attribute.proxy_user="John.Smith" ALLOW 関連項目 • 条件 : has_attribute.name=、ldap.attribute.ldap_attribute_name.exists=、 ldap.attribute.ldap_attribute_name.count=、 ldap.attribute.ldap_attribute_name.as_number= 154 第 3 章 : 条件リファレンス ldap.attribute.ldap_attribute_name.as_number= 属性の値を符号なし 32 ビット整数に変換し、 数値テストを実行可能にします。 値のリスト内に正確に 1 つの値が必要です。 構文 ldap.attribute.ldap_attribute_name.as_number = integer-pattern 各引数の意味は次のとおりです。 S ldap_attribute_name: 特定の LDAP 属性の名前 レイヤおよびトランザクション メモ • および <SSL> レイヤで使用します。 <Proxy>、 <Admin>、 <Forward>、 <Exception>, <SSL-Intercept>、 • すべてのトランザクションに適用されます 例 ; This example allows users with high priority only to access the proxy. <Proxy> authenticate(LDAPRealm) <Proxy> ALLOW ldap.attribute.UserPriority.as_number=0 DENY 関連項目 • 条件 : ldap.attribute.ldap_attribute_name=has_attribute.name=、 ldap.attribute.ldap_attribute_name.exists=、 ldap.attribute.ldap_attribute_name.count= 155 SGOS 6.4 Content Policy Language リファレンス ldap.attribute.ldap_attribute_name.count= 名前付き属性のリストに含まれる値の個数をテストします。 構文 ldap.attribute.ldap_attribute_name.count = integer-pattern 各引数の意味は次のとおりです。 S ldap_attribute_name: 特定の LDAP 属性の名前 レイヤおよびトランザクション メモ • および <SSL> レイヤで使用します。 <Proxy>、 <Admin>、 <Forward>、 <Exception>, <SSL-Intercept>、 • すべてのトランザクションに適用されます 例 ; This example denies access to a restricted host for users that have warnings in ; their profile. <Proxy> authenticate(LDAPRealm) <Proxy> DENY url.hostname=rewards.MyCompanyName.com ldap.attribute.Warnings.count=!0 ALLOW 関連項目 • 条件 : has_attribute.ldap_attribute_name=、ldap.attribute.ldap_attribute_name=、 ldap.attribute.ldap_attribute_name.exists=、 ldap.attribute.ldap_attribute_name.as_number= 156 第 3 章 : 条件リファレンス ldap.attribute.ldap_attribute_name.exists= ユーザーのエントリに名前付き属性が存在するかどうか確認します。 構文 ldap.attribute.ldap_attribute_name.exists = {yes|no} 各引数の意味は次のとおりです。 S ldap_attribute_name: 特定の LDAP 属性の名前 レイヤおよびトランザクション メモ • および <SSL> レイヤで使用します。 <Proxy>、 <Admin>、 <Forward>、 <Exception>, <SSL-Intercept>、 • すべてのトランザクションに適用されます 例 ; This example allows users to access the proxy if they have the LDAP attribute ; ProxyUser.The attribute could have any value, even null. <Proxy> authenticate(LDAPRealm) <Proxy> ALLOW ldap.attribute.ProxyUser.exists=yes DENY 関連項目 • 条件 : has_attribute.ldap_attribute_name=、ldap.attribute.ldap_attribute_name=、 ldap.attribute.ldap_attribute_name.count=、 ldap.attribute.ldap_attribute_name.as_number= 157 SGOS 6.4 Content Policy Language リファレンス live= ストリーミング コンテンツがライブ ストリームかどうかをテストします。 構文 live=yes|no レイヤおよびトランザクション メモ • <Cache> および <Proxy> レイヤで使用します。 • ストリーミング トランザクションに適用されます。 例 ; The following policy restricts access to live streams during morning hours. ; In this example, we use a policy layer to define policy just for the live streams. ; This example uses the restrict form and integrates with other <Proxy> layers. <Proxy> deny live=yes time=1200..0800 ; Policy for live streams 関連項目 158 • 条件 : bitrate=、 streaming.client=、 streaming.content= • プロパティ: access_server( )、max_bitrate( )、 streaming.transport( ) 第 3 章 : 条件リファレンス minute= 時間の分が指定された範囲内にあるか、または完全に一致するかどうかをテストします。デフォルト で、 現在時刻の分を判断するのに SG 時計とタイム ゾーンが使用されます。UTC タイム ゾーンを指定 するには、minute.utc= 形式を使用します。 minute 条件をテストするのに使用される数値パターンに は、 スペースは含められません。 構文 minute[.utc]={[first_minute]..[last_minute]|exact_minute} 各引数の意味は次のとおりです。 • 時刻の分の部分がその値以前の場合に、テストは first_minute: 0 ~ 59 までの整数です。 真になります。空欄にすると、0 とみなされます。 • 時刻の分の部分がその値以降の場合に、テストは last_minute: 0 ~ 59 までの整数です。 真になります。空欄にすると、59 とみなされます。 • 時刻の分の部分がその値の場合に、テストは真に exact_minute: 0 ~ 59 までの整数です。 なります。 注意 : 逆転した範囲 ( ある時間をまたぐ範囲 ) に照らしてテストする場合、次の省略式が使用可能で す。 各時間の最初の 15 分と最後の 15 分が指定されますが、ポリ minute=(..14|44..) により、 シー言語は minute=44..14 も同等表現として認識します。 レイヤおよびトランザクション メモ • すべてのレイヤで使用します。 • キャッシュの動作を制御するのに時刻関連の条件を使用すると、キャッシュさ <Cache> レイヤで、 れたオブジェクトのスラッシングが発生する可能性があります。 例 ; Tests for the first 5 minutes of every hour. minute=0..4 関連項目 • 条件 : date[.utc]=、 day=、 hour=、 month=、 time=、 weekday=、 year= 159 SGOS 6.4 Content Policy Language リファレンス month= 月が指定された範囲内にあるか、または完全に一致するかどうかをテストします。デフォルトで、現在 の月を判断するのに SG の日付とタイム ゾーンが使用されます。UTC タイム ゾーンを指定するには、 month 条件をテストするのに使用される数値パターンには、 スペー month.utc= 形式を使用します。 スは含められません。 構文 month[.utc]={[first_month]..[last_month]|exact_month} 各引数の意味は次のとおりです。 • その月以前の場合、テストは真にな first_month: 月に対応する 1 ~ 12 までの整数です。 ります。空欄にすると、1 月とみなされます。 • その月以降の場合、テストは真になり last_month: 月に対応する 1 ~ 12 までの整数です。 ます。空欄にすると、12 月とみなされます。 • その月の場合、 テストは真になります。 exact_month: 月に対応する 1 ~ 12 までの整数です。 注意 : 逆転した範囲 ( ある年をまたぐ範囲 ) に照らしてテストする場合、次の省略式が使用可能です。 9 月から 6 月が指定されますが、ポリシー言語は month=9..6 も同等 month=(..6|9..) により、 表現として認識します。 レイヤおよびトランザクション メモ • すべてのレイヤで使用します。 • 時間に関する条件を使用して、 キャッシュされたオブジェクトのスラッシングが発生する可能性 のある <Cache> レイヤでのキャッシュの動作を制御します。 例 ; Tests for the year-end holiday season. define condition year_end_holidays month=12 day=25.. month=1 day=1 end_condition year_end_holidays 関連項目 • 160 条件 : date[.utc]=、 day=、 hour=、 minute=、 time=、 weekday=、 year= 第 3 章 : 条件リファレンス proxy.address= 着信 IP パケットの送信先アドレスをテストします。この式には、IP アドレス、サブネット、またはサブ ネット定義ブロックのラベルを指定できます。 トランザクションが明示的にプロキシ処理されている場合、proxy.address= は、クライアントがプロ キシに到達するために使用した IP アドレス ( 要求が到着した NIC の IP アドレス、または仮想 IP アド レス) をテストします。これはプロキシに、ある範囲の仮想 IP アドレスが割り当てられている状況を想 定したものです。つまり、proxy.address= を使用して、 プロキシに到達するために使用された仮想 IP アドレスを調べることができます。 トランザクションが透過的にプロキシ処理されている場合、proxy.address= は、IP パケットに含まれ ている送信先アドレスをテストします。このテストは、server_url.address によるテストと等価にな らない場合があります。server_url.address 条件と proxy.address 条件は、プロキシ処理された要 求 が 透 過 的 に イ ン タ ー セ プ ト さ れ た 場 合 に、そ れ ぞ れ 異 な る ア ド レ ス を テ ス ト し ま す。 server_url.address= は配信元サーバーのアドレスをテストし、 proxy.address= は要求が経由する アップストリーム プロキシのアドレスをテストします。 注意 : proxy.card= は、透過的トランザクションの場合に正しく動作します。 構文 proxy.address=ip_address|subnet|subnet_label 各引数の意味は次のとおりです。 • 例 : 10.1.198.54。 ip_address: NIC IP アドレスまたはサブネット。 • 例 : 10.1.198.0/24? subnet: サブネット マスク。 • subnet_label: IP アドレス数またはサブネット数をバインドするサブネット定義ブロッ クのラベル。 レイヤおよびトランザクション メモ • および <SSL-Intercept> レイヤ <Proxy>、 <Forward>、 <exception>、 <admin>、 <DNS-Proxy>、 <SSL>、 で使用します。 • プロキシ トランザクションに適用されます。 例 ; Service should be denied through proxy within the subnet 1.2.3.x. <Proxy> proxy.address=1.2.3.0/24 deny 関連項目 • 条件 : client.address=、client.protocol=、 proxy.card=、 proxy.port= • 定義 : define subnet 161 SGOS 6.4 Content Policy Language リファレンス proxy.card= 要求で使用されるネットワーク インターフェース カード (NIC) の序数をテストします。 構文 proxy.card=card_number ここで、card_number は取り付け順を表す整数です。 レイヤおよびトランザクション メモ • および <SSL-Intercept> レ <Proxy>、 <Forward>、 <Exception>、 <Admin>、 <DNS-Proxy>、 <SSL>、 イヤで使用します。 • プロキシ トランザクションに適用されます。 例 ; Deny all incoming traffic through proxy card 0. <Proxy> proxy.card=0 deny 関連項目 • 162 条件 : client.address=、client.protocol=、 proxy.address=、 proxy.port= 第 3 章 : 条件リファレンス proxy.port= 要 求で使 用さ れた IP ポー トが指 定さ れた範 囲内 である か、完全に 一致 するか をテ ストし ます。 proxy.port= 条件をテストするときに使用する数字パターンにスペースを含めてはなりません。 トランザクションが明示的にプロキシ処理されている場合、この条件は、クライアントがプロキシに 到達するために使用した IP ポートをテストします。パターンは、1 ~ 65535 の番号、または数字の範 囲です。 ただし、トランザクションが透過的にプロキシ処理されている場合、proxy.port= は、 クライアントが アップストリーム プロキシ デバイスまたは配信元サーバー上のどのポートに接続しようとしている のかをテストします。 クライアントが、 配信元サーバーに直接接続しようとしている場合で、 クライア ン ト に よ っ て 要 求 URL に 指 定 さ れ た ポ ー ト 番 号 に 一 貫 性 が あ り 偽 造 も さ れ て い な い と き は、 proxy.port= と server_url.port= は同じ値をテストします。 注意 : SG のデフォルトの設定では、 トンネル処理されたトラフィックを通すため、 透過ポートのモニタリ ングを開始するには何らかの変更を加える必要があります。proxy.port= 条件を用いてテスト できるのは、設定および有効化されたプロキシ ポートだけです。たとえば、21 番ポートの透過 FTP サービスが設定または有効化されていない場合、 proxy.port=21 を含むポリシー ルール は効果がありません。 構文 proxy.port={[low_port_number]..[high_port_number]|exact_port_number} 各引数の意味は次のとおりです。 • 1 ~ 65535 の番号を指定できます。 low_port_number: テスト範囲の下限のポート番号。 • 1 ~ 65535 の番号を指定できます。 high_port_number: テスト範囲の上限のポート番号。 • 例 : 80。 1 ~ 65535 の番号を指定できます。 exact_port_number: 単一のポート番号。 レイヤおよびトランザクション メモ • および <SSL-Intercept> レ <Proxy>、 <Forward>、 <Exception>、 <Admin>、 <DNS-Proxy>、 <SSL>、 イヤで使用します。 • プロキシ トランザクションに適用されます。 例 ; Deny URL through the default proxy port. <Proxy> url=http://www.example.com proxy.port=8080 deny 関連項目 • 条件 : client.address=、client.protocol=、 proxy.address=、 proxy.card=、 proxy.port=、 server_url.port= 163 SGOS 6.4 Content Policy Language リファレンス p2p.client= 使用されているピアツーピア クライアントのタイプをテストします。 構文 p2p.client=yes|no|bittorrent|edonkey|fasttrack|gnutella レイヤおよびトランザクション メモ • <Proxy>、<Forward> および <Exception> の各レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 <Proxy> p2p.client=gnutella 164 第 3 章 : 条件リファレンス raw_url.regex= 未加工要求 URL の値をテストします。 正規化が一切適用されていない要求 URL です。SG では、ポリシーの適用効果を上 raw_url= 条件は、 げるため、URL の正規化を行っています。ただし、未処理のフォームをテストするほうが望ましいケー スがあります。たとえば、 正規化によって削除されてしまったセキュリティ CPL を使用して、URL に、 上の弱点の痕跡がないか検出する場合です。 構文 raw_url.regex=regular_expression レイヤおよびトランザクション メモ • <Proxy>、<Cache>、 <Exception> の各レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 • 文字と数字が 16 進エスケープ シーケンスでエンコードされている URL を無効として拒否しま す。 こうしたエンコーディングは、コンテンツ フィルタリング ポリシーを回避する試みである可 能性があるからです。 <Proxy> exception(invalid_request) \ raw_url.regex="\%(3[0-9]|[46][1-9a-fA-F]|[57][0-9aA])" 165 SGOS 6.4 Content Policy Language リファレンス raw_url.host.regex= 未加工要求 URL の「host」コンポーネントの値をテストします。 raw_url.host= 条件は、HTTP 要求でホストを指定するために使用された元の文字列をテストしま す。次の正規化が適用されないため、url.host= 条件とは異なります。 • 小文字に変換する。例 : "WWW.SomeDomain.COM" -> "www.somedomain.com" • ドメイン名の末尾のドットを削除する。例 : "www.example.com." -> "www.example.com" • 非標準形式の IP アドレスを 10 進ドット表記に変換する。例 : "0xA.012.2570" -> "10.10.10.10" 構文 raw_url.host.regex=regular_expression レイヤおよびトランザクション メモ • <Proxy>、 <Exception>、 <Cache> の各レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 • ホストが非標準形式の IP アドレスの場合に、無効として要求を拒否します。 <Proxy> exception(invalid_request) \ url.host.is_numeric=yes \ raw_url.host.regex=("(^|\.)0[^.]" || !"\..*\..*\.") 166 第 3 章 : 条件リファレンス raw_url.path.regex= 未加工要求 URL の「path」コンポーネントの値をテストします。 HTTP 要求でパスを指定するために使用された元の文字列をテストし raw_url.path.regex= 条件は、 ます。 次の正規化が適用されないため、url.path.regex= 条件とは異なります。 • パスとクエリが両方とも欠落している場合に、パスに "/" を設定する。例 : "http://abc.com" -> "http://abc.com/" • パス内の二重スラッシュを単一のスラッシュに正規化する。例 :"http://abc.com/a//b.gif" -> "http://abc.com/a/b.gif" • パス コンポーネント "." と ".." を削除する。例 : "http://abc.com/a/./b.gif" -> "http://abc.com/a/b.gif"、"http://abc.com/a/../b.gif" -> "http://abc.com/b.gif" • 不要な % エスケープ シーケンスをエンコード前の文字で置き換える。例 : "http://abc.com/%64%65%66.gif" -> "http://abc.com/def.gif" 構文 raw_url.path.regex=regular_expression レイヤおよびトランザクション メモ • <Proxy>、 <Exception>、 <Cache> の各レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 • path が 16 進エスケープ シーケンスを使用して英数字をエンコードしている場合、その要求を無 効として拒否します。こうしたエンコーディングは、 コンテンツ フィルタリング ポリシーを回避 する試みである可能性があるからです。 <Proxy> exception(invalid_request) \ raw_url.path.regex="\%(3[0-9]|[46][1-9a-fA-F]|[57][0-9aA])" 167 SGOS 6.4 Content Policy Language リファレンス raw_url.pathquery.regex= 未加工要求 URL の path and query コンポーネントの値をテストします。 HTTP 要求の path and query を指定するのに使用された本来の raw_url.pathquery.regex= 条件は、 文字列をテストします。次の最適化が適用されないため、url.regex= 条件によりテストされた path and query とは異なります。 • パスとクエリが両方とも欠落している場合に、パスに "/" を設定する。例 : "http://abc.com" -> "http://abc.com/" • パス内の二重スラッシュを単一のスラッシュに正規化する。例 :"http://abc.com/a//b.gif" -> "http://abc.com/a/b.gif" • パス コンポーネント "." と ".." を削除する。例 : "http://abc.com/a/./b.gif" -> "http://abc.com/a/b.gif"、"http://abc.com/a/../b.gif" -> "http://abc.com/b.gif" • 不要な % エスケープ シーケンスは、そのエスケープ シーケンスがエンコードする文字により置 き換えられます。例 : "http://abc.com/%64%65%66.gif" -> "http://abc.com/def.gif" 構文 raw_url.pathquery.regex=regular_expression レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • プロキシ トランザクションに適用されます。 例 • 要求を pathquery が 16 進エスケープ シーケンスを使用して英数字をエンコードしている場合、 無効として拒否します。 こうしたエンコーディングは、コンテンツ フィルタリング ポリシーを回 避する試みである可能性があるからです。 <Proxy> exception(invalid_request) \ raw_url.pathquery.regex="\%(3[0-9]|[46][1-9a-fA-F]|[57][0-9aA])" 168 第 3 章 : 条件リファレンス raw_url.port.regex= 未加工要求 URL の port コンポーネントの値をテストします。 次の理由よ HTTP 要求の port を指定するのに使用された本来の文字列です。 raw_url.port= 条件は、 り、 これは文字列であり整数ではないため、url.port= 条件とは異なります。 • 先頭のゼロは削除されません。このため、先頭にゼロが存在する場合、raw_url.port.regex="^0" は真です。 • port が引用符に囲まれないコロン (:) として指定され、ポート番号が後続されない場合、文字列は 空の文字列となり、raw_url.port.regex="^$" は真になります。 ポートが指定されない場合、Regex は一致せず、raw_url.port.regex=!"" は真になります。 構文 raw_url.port.regex=regular_expression レイヤおよびトランザクション メモ • および <Cache> レイヤで使用します。 <Proxy>、 <Exception>、 • プロキシ トランザクションに適用されます。 例 • port 指定子が引用符に囲まれないコロン (:) である場合、または port 指定子に先頭のゼロが存在 する場合、要求を無効として拒否します。 <Proxy> exception(invalid_request) raw_url.port.regex=("^$" || "^0") 169 SGOS 6.4 Content Policy Language リファレンス raw_url.query.regex= HTTP 要求の query を指定するのに使用された本来の文字列をテストし raw_url.query.regex は、 ます。 次の正規化が適用されないため、これは url.query.regex とは異なります。 不要な % エスケープ シーケンスをエンコード前の文字で置き換える。たとえば、 "http://abc.com/search?q=%64%65%66" は "http://abc.com/search?q=def" に変換されます。 構文 raw_url.query.regex=regular_expression レイヤおよびトランザクション メモ • および <Cache> レイヤで使用します。 <Proxy>、 <Exception>、 • プロキシ トランザクションに適用されます。 例 • query が 16 進エスケープ シーケンスを使用して英数字をエンコードしている場合、要求を無効と して拒否します。こうしたエンコーディングは、 コンテンツ フィルタリング ポリシーを回避する 試みである可能性があるからです。 <Proxy> exception(invalid_request) \ raw_url.query.regex="\%(3[0-9]|[46][1-9a-fA-F]|[57][0-9aA])" 170 第 3 章 : 条件リファレンス realm= クライアントが認証済みであるかどうか、およびクライアントが指定されたレルムにログイン済みで あるかどうかをテストします。これらの条件の両方が満たされる場合、応答は真になります。さらに、 ユーザーが指定されたグループに所属するかどうかをテストできます。この group= 条件を使用して、 条件は、現在のトランザクションが認証されていない場合 (authenticate プロパティが no に設定さ れている場合など )、使用不可能になります。 ポリシーで複数のレルムを参照する場合、realm=test を組み合わせることにより、ユーザー、グルー プと属性のテストを明確にしてください。このようにすることで、当該レルムとは無関係のグループ、 ユーザー、または属性の情報を担う認証サービスに対して行う無関係のクエリの件数が減少します。 認証されたクライアントが存在しない場合、 認証条件は NULL 注意 : <Forward> レイヤ内で使用すると、 ( トレースには N/A と表示 ) と評価されることがあります。これらの条件を含むルールは 通常の論理を維持できます。 authenticated= により保護することで、 構文 realm=realm_name ローカル パスワード、 証明書、 またはシーケンス ここで、 RADIUS、 LDAP、 realm_name は NTLM、 レルムの名前です。レルム名には、すべてのレルム タイプで大文字小文字の区別があります。 レイヤおよびトランザクション メモ • <Proxy>、 <Forward>、 <Exception>、 <Admin>、 <SSL-Intercept>、 <SSL> レイヤで使用します。 • プロキシおよび管理者のトランザクションに適用されます。 例 ; This example tests if the user has logged into realm corp and ; is authenticated in the specified group. realm=corp group=all_staff ; This example uses the realm property to distinguish the policy applied ; to two groups of users--corp’s employees, and their corporate partners and ; clients.These two groups will authenticate in different realms. <Proxy> client.address=10.10.10/24 authenticate(corp) ; The corporate realm authenticate(client) ; Company partners & clients <Proxy> realm=corp ; Rules for corp employees allow url.domain=corp.com ; Unrestricted internal access category=(violence, gambling) exception(content_filter_denied) <Proxy> realm=client ; Rules for business partners & clients allow group=partners url=corp.com/partners ; Restricted to partners allow group=(partners, clients) url=corp.com/clients ; Both groups allowed deny ; Additional layers would continue to be guarded with the realm, so that only ; the ‘client’ realm would be queried about the ‘partners’ and ‘clients’ groups. 171 SGOS 6.4 Content Policy Language リファレンス 関連項目 • 条件 : authenticated=、group=、 has_attribute.name=, http.transparent_authentication=、 user=、 user.domain=, user.x509.issuer=, user.x509.serialNumber=, user.x509.subject= • 172 プロパティ: authenticate( ), authenticate.force( ), check_authorization( ) 第 3 章 : 条件リファレンス release.id= SG ソフトウェアのリリース ID をテストします。現在実行中の SG ソフトウェアのリリース ID は、 および Management Console の [Maintenance] > [Upgrade] > Management Console のメイン ページ、 [Systems] タブに表示されます。show version コマンドを使用して、CLI で表示することもできます。 構文 release.id=number ここで、number は SG アプライアンスの新しいリリースごとに増加する 5 桁の数値です。 レイヤおよびトランザクション メモ • 任意のレイヤのタイプで使用できます。 例 ; the condition below is only true if you are running a version of SG appliance ; whose release id is 18000 or later release.id=18000.. 関連項目 • 条件 : release.version= 173 SGOS 6.4 Content Policy Language リファレンス release.version= SG ソフトウェアのリリース バージョンをテストします。現在実行中の SG ソフトウェアのリリース バージョンは、 Management Console のメイン ページ、および Management Console の [Management] > [Maintenance] > [Upgrade] > [Systems] タブに表示されます。show version コマンドを使用して、CLI で表示することもできます。 構文 release.version={[minimum_version]..[maximum_version]|version} ここで、各バージョンは次の形式で表されます。 major_#.minor_#.dot_#.patch_# 各数値は 0 ~ 255 の範囲内に存在する必要があります。major_# は必須です。バージョンの重 要ではない部分は省略可能で、デフォルトで 0 に設定されます。 レイヤおよびトランザクション メモ • 任意のレイヤで使用できます。 例 ; the condition below is only true if you are running a version of SG appliance ; whose release version is 3.1. release.version=3.1.. ; the condition below is only true if you are running a version of SG appliance ; whose release version is less or equal to than 3.1.2 release.version=..3.1.2 174 第 3 章 : 条件リファレンス request.header.content-length.as_number= この条件を使用して HTTP Content-Length 要求ヘッダーの値をテストできます。 条件修飾子 .as_number を使用することにより、Content-Length ヘッダー内の実際のバイト数を基 にしてルールを設定できます。これは、パフォーマンスの問題を引き起こす可能性がある .regex 条件 修飾子の代わりに使用できます。 構文 request.header.content-length.as_number=N • 上の例では、N はバイト数になります。 • 範囲がサポートされます (1000..2000 を値と .. で区切って as_number を定義することにより、 すると、Content-Length の値が 1000 ~ 2000 バイトである要求でルールがトリガされます )。 整 数ベースの値と共にダブル ピリオドを使用する方法についての詳細は、このガイドの「条件の構 文」を参照してください。 レイヤおよびトランザクション メモ および <Cache> レイヤで使用します。 • <Proxy>、 • 要求を発行するユーザー エージェントが有効な Content-Length HTTP 要求ヘッダーを作成する場 合に使用します。 例 要求を拒否します。 Content-Length HTTP 要求ヘッダーが 10 MB よりも大きい本文サイズを示す場合、 <Proxy> request.header.content-length.as_number=10485760.. DENY 175 SGOS 6.4 Content Policy Language リファレンス request.header.header_name= 指定された要求ヘッダー (header_name) を正規表現または文字列に照らしてテストします。任意の認 識される HTTP 要求ヘッダーをテストできます。カスタム ヘッダーの場合、 ストリーミング要求の場合、User-Agent request.x_header.header_name= を代わりに使用します。 ヘッダーのみが使用できます。 構文 request.header.header_name=regular_expression request.header.header_name.exact=string request.header.header_name.prefix=string request.header.header_name.substring=string request.header.header_name.suffix=string request.header.header_name.regex=regular_expression 各引数の意味は次のとおりです。 • 認識されるヘッダーの完全なリストについて header_name: 認識される HTTP ヘッダー。 は、 付録 C:「認識されている HTTP ヘッダー」を参照してください。 • 詳細は、付録 E:「正規表現の使用」を参照してください。 regular_expression: 正規表現。 • string: 任意の印刷可能な ASCII シーケンス ( 引用符区切り )。 レイヤおよびトランザクション メモ • および <Proxy> レイヤで使用します。 <Cache>、 <Exception>、 <Forward>、 • SGOS 6.1.2 以降の <Admin> レイヤで使用します。 • HTTP、ストリーミング トランザクションに適用されます。ストリーミング要求の場合、 User-Agent ヘッダーのみが使用できます。 例 ;Example 1: deny access when request is sent with Pragma-no-cache header <Proxy> deny url=http://www.bluecoat.com request.header.Pragma.exact=”no-cache” ;Example 2: detect signature cookies define action delete_all_unsigned_cookies iterate(request.header.Cookie) iterator.prefix="BCSIG_" request.header.Cookie.exact=!"$(iterator:rewrite(([^=]*)=(.*), \ BCSIG_$(1)=$(2:concat($(client.address)):hmac))" \ iterator.delete() 176 第 3 章 : 条件リファレンス end end <Proxy> iterator.delete_all_unsigned_cookies(yes) 関連項目 • アクション : append( )、 delete( )、 delete_matching( )、 rewrite( )、 set( ) • 条件 : request.header.header_name.address=、 request.x_header.header_name=、 request.x_header.header_name.address=、 response.header.header_name= 177 SGOS 6.4 Content Policy Language リファレンス request.header.header_name.address= 指定された要求ヘッダーを IP アドレスとして解析できるかどうかをテストします。できない場合、失 敗します。解析が成功すると、ヘッダーから抽出された IP アドレスが、指定された IP アドレスと照ら してテストされます。この式には、IP アドレス、サブネット、またはサブネット定義ブロックのラベル を指定できます。この条件は、client-ip および X-Forwarded-For ヘッダーとのみ使用できます。 構文 request.header.header_name.address=ip_address|subnet|subnet_label 各引数の意味は次のとおりです。 • header_name: client-ip および X-Forwarded-For。 • ip_address: IP address アドレス (10.1.198.46 など ) • subnet: サブネット マスク (10.1.198.0/24 など )。 • subnet_label: IP アドレス数またはサブネット数をバインドするサブネット定義ブロッ クのラベル。 レイヤおよびトランザクション メモ • <Cache> および <Proxy> レイヤで使用します。 例 ; In this example, we assume that there is a downstream SG appliance that ; identifies client traffic by putting the client’s IP address in a request ; header. ; Here we’ll deny access to some clients, based on the header value. <Proxy> ; Netscape’s convention is to use the Client-IP header deny request.header.Client-IP.address=10.1.198.0/24 ; the subnet ; Blue Coat’s convention is to use the extended header: deny request.header.X-Forwarded-For.address=10.1.198.12 関連項目 • アクション : append( )、 delete( )、 delete_matching( )、 rewrite( )、 set( ) • 条件 : request.header.header_name=、response.header.header_name=、 response.x_header.header_name= • 178 定義 : define subnet 第 3 章 : 条件リファレンス request.header.header_name.exists= 要求ヘッダーが存在するかどうかをテストします。 構文 request.header.header_name.exists=yes|no レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Exception • 適用対象 : HTTP プロキシ トランザクション 例 使用例 : <Proxy> request.header.Accept.exists=yes 179 SGOS 6.4 Content Policy Language リファレンス request.header.header_name.count= 指定された header_name の要求に含まれるヘッダー値の個数をテストします。 構文 request.header.header_name.count=numeric range from 0 to 8192 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cashe>、 <Forward>、 • HTTP プロキシ トランザクションに適用されます。 例 • 複数のホスト ヘッダーを備えた異常な HTTP 要求を拒否します。 <Proxy> DENY("Too many Host headers") request.header.Host.count = 2.. 180 第 3 章 : 条件リファレンス request.header.header_name.length= 指定された header_name のヘッダー値の全長をテストします。 構文 request.header.header_name.length=numeric range from 0 to 8192 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Forward>、 • HTTP プロキシ トランザクションに適用されます。 例 • Cookie データが 2KB より大きい HTTP 要求を拒否します。 <Proxy> DENY("Too much Cookie data") request.header.Cookie.length = 2048.. 181 SGOS 6.4 Content Policy Language リファレンス request.header.Referer.url= Referer ヘッダーにより指定された URL が指定された基準に一致するかどうかをテストします。基本 的な request.header.Referer.url= test では、完全な Referer URL を指定されたパターンと照 合します。パターンには URL の scheme、 host、port、path と query の各コンポーネントを含められま す。 これらのいずれもがパターンに含まれない場合、URL の対応コンポーネントはテストされず、任意 の値を取り得ます。 URL コンポーネント修飾子を条件に適用することで、 Referer URL の特定部分をテストできます。コ ンポーネント修飾子に加え、 省略可能なテスト タイプ修飾子を使用することで、 パターンの照合方法 を変更できます。 Referer ヘッダーが存在しない場合、または Referer ヘッダーの値が URL として解析できない場合、こ の条件は使用できません。Referer ヘッダーに相対 URL が含まれる場合、 テストの前に、要求された URL は絶対 URL を構成するための基礎として使用されます。 構文 request.header.Referer.url[.case_sensitive][.no_lookup]=prefix_pattern request.header.Referer.url.domain[.case_sensitive][.no_lookup]= domain_suffix_pattern request.header.Referer.url.exact=string request.header.Referer.url.prefix=string request.header.Referer.url.substring=string request.header.Referer.url.suffix=string request.header.Referer.url.regex=regular_expression request.header.Referer.url.address=ip_address|subnet|subnet_label request.header.Referer.url.extension[.case_sensitive]=[.]filename_extension request.header.Referer.url.host[.exact]=host request.header.Referer.url.host.[prefix|substring|suffix]=string request.header.Referer.url.host.is_numeric=yes|no request.header.Referer.url.host.no_name=yes|no request.header.Referer.url.path[.case_sensitive]=/string request.header.Referer.url.path[.substring|.suffix][.case_sensitive]=string request.header.Referer.url.path.regex[.case_sensitive]=regular_expression request.header.Referer.url.port={[low_port_number]..[high_port_number] |exact_port_number} request.header.Referer.url.query.regex[.case_sensitive]=regular_expression request.header.Referer.url.scheme=url_scheme request.header.Referer.url.host.has_name=yes|no|restricted|refused|nxdomain \ |error request.header.Referer.url.is_absolute=yes|no ここで、すべてのオプションは url= と同等ですが、テストされる URL が異なります。詳細は、 を参照してください。 236 ページの「url=」 182 第 3 章 : 条件リファレンス 説明 および [url] または request.header.Referer.url= 条件は url= と同等ですが、 define url 条件、 [url.domain] セクションが存在しない点が異なります。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • HTTP プロキシ トランザクションに適用されます。 例 ; Test if the Referer URL includes this pattern, and block access. ; Relative URLs, such as docs subdirectories and pages, will match. deny request.header.Referer.url=http://www.example.com/docs ; Test if the Referer URL host’s IP address is a match. request.header.Referer.url.address=10.1.198.0 ; Test whether the Referer URL includes company.com as domain. request.header.Referer.url.domain=company.com ; Test whether the Referer URL includes .com. request.header.Referer.url.domain=.com ; Test if the Referer URL includes this domain-suffix pattern, ; and block service.Relative URLs, such as docs ; subdirectories and pages, will match. deny request.header.Referer.url.domain=company.com/docs ; examples of the use of request.header.Referer.url.extension= request.header.Referer.url.extension=.txt request.header.Referer.url.extension=(.htm, .html) request.header.Referer.url.extension=(img, jpg, jpeg) ; ; ; ; This example matches the first Referer header value and doesn’t match the second from the following two requests: 1) Referer: http://1.2.3.4/test 2) Referer: http://www.example.com <Proxy> request.header.Referer.url.host.is_numeric=yes ; In the example below we assume that 1.2.3.4 is the IP of the host mycompany ; The condition will match the following two requests if the reverse DNS was ; successful: ; 1) Referer: http://1.2.3.4/ ; 2) Referer: http://mycompany.com/ ; If the reverse DNS fails then the first request is not matched <Proxy> request.header.Referer.url.host.regex=mycompany ; request.header.Referer.url.path tests ; The following request.header.Referer.url.path strings would all match the example Referer URL: 183 SGOS 6.4 Content Policy Language リファレンス ; Referer: http://www.example.com/cgi-bin/query.pl?q=test#fragment request.header.Referer.url.path=”/cgi-bin/query.pl?q=test” request.header.Referer.url.path=”/cgi-bin/query.pl” request.header.Referer.url.path=”/cgi-bin/” request.header.Referer.url.path=”/cgi” ; partial components match too request.header.Referer.url.path=”/” ; Always matches regardless of URL. ; Testing the Referer URL port request.header.Referer.url.port=80 関連項目 184 • 条件 : url=、server_url= • 定義 : define subnet 第 3 章 : 条件リファレンス request.header.Referer.url.category= Referer URL のコンテンツ フィルタ カテゴリをテストします。 構文 request.header.Referer.url.category=none|unlicensed|unavailable|pending| category_name1, category_name2, ... レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • 要求 URL のあるプロキシ トランザクションに適用します。 例 <Proxy> request.header.Referer.url.category=Sports 関連項目 • 条件 : category=, url.category=、server.certificate.hostname.category= 185 SGOS 6.4 Content Policy Language リファレンス request.header.Referer.url.host.is_private= Referer URL が設定されたプライベート ネットワーク内であるかどうかをテストします。 構文 request.header.Referer.url.host.is_private={yes|no} レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • 要求 URL のあるプロキシ トランザクションに適用します。 例 <Proxy> request.header.Referer.url.host.is_private=yes 186 第 3 章 : 条件リファレンス request.raw_headers.count= HTTP 要求ヘッダーの合計数をテストします。 この条件は、(request.raw_headers.regex 条件で定義される ) 未処理の HTTP 要求ヘッダーの合計 数をテストします。 構文 request.raw_headers.count=numeric range from 0 to 8192 レイヤおよびトランザクション メモ • <Proxy> および <Exception> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 • 要求に 40 よりも多い要求ヘッダーが含まれる場合、その要求を拒否します。 <Proxy> exception(invalid_request) request.raw_headers.count=40.. 187 SGOS 6.4 Content Policy Language リファレンス request.raw_headers.length= HTTP 要求ヘッダーの長さの合計をテストします。 この条件は、 ヘッダー名、 値、 区切り文字、 改行を含む、 HTTP 要求ヘッダー データの合計バイト数をテス トします。 この値には、 最後の空白行も含まれません。 HTTP 要求行 ( 要求メソッドを含む ) は含まれず、 構文 request.raw_headers.length=numeric range from 0 to 8192 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • HTTP プロキシ トランザクションに適用されます。 例 • 要求に 4KB よりも多い要求ヘッダー データが含まれる場合、その要求を拒否します。 <Proxy> exception(invalid_request) request.raw_headers.length=4096.. 188 第 3 章 : 条件リファレンス request.raw_headers.regex= 正規表現によるすべての HTTP 要求ヘッダーの値をテストします。 この条件により、 手を加えられていない完全な HTTP 要求ヘッダーのテキストをテストできます。 こ のテキストには、ヘッダー名、区切り文字、およびヘッダー値が含まれます。 未加工 HTTP 要求ヘッ ダーすべてをテストします。指定された正規表現がこれらの文字列のいずれかと一致すると、条件は 真になります。 各未加工ヘッダーは、 または連結されたヘッダー行から構成される文字列です。 連結 1 つのヘッダー行、 されたヘッダー行の場合、 連結行の個数は問いません。 最初のヘッダー行は、 前からヘッダー名、 コロン、 ヘッダー値 ( 存在する場合 )、改行の順で構成されます。ヘッダー値には、先頭と末尾にスペースを含め ることができます。各連結行は、前からスペースまたはタブ、ヘッダー値の一部であるテキスト、最後 に改行の順で構成されます。 このため、 各未加工ヘッダー文字列には、 少なくとも 1 つの改行と各連結 行につき 1 つの改行が含まれます。 request.raw_headers.regex のコンテキストで Regex パターンがどのように機能するのかを、次に示し ます。 • "." は改行を含む任意の文字に一致します。 • "^" はヘッダー名の先頭で一致します。 • "$" は文字列の末尾で一致します。文字列の最後の文字は改行なので、"$" は最後の改行の後で一致 します。代わりとして、"\s*$" を使用する必要が生じる可能性があります。 • "\s" は改行を含む、任意のスペース文字に一致します。 • "\n" は改行に一致します。 構文 request.raw_headers.regex=regular_expression レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • HTTP プロキシ トランザクションに適用されます。 例 • 要求にヘッダーの連結行が含まれる場合、その要求を拒否します。この構文は HTTP 標準の一部で すが、 通常は使用されず、一部の上流デバイスで正しく解釈されない可能性があります。 <Proxy> exception(invalid_request) request.raw_headers.regex="\n[ \t]" 189 SGOS 6.4 Content Policy Language リファレンス request.x_header.header_name= 指定された要求ヘッダー (header_name) を正規表現または文字列に照らしてテストします。カスタム ヘッダーを含む任意の HTTP 要求ヘッダーをテストできます。認識されるヘッダーをテストするに は、 コンパイル時に入力エラーを見つけられるようにするため、request.header.header_name= を代 わりに使用します。ストリーミング要求の場合、User-Agent ヘッダーのみが使用できます。 構文 request.x_header.header_name=regular_expression request.x_header.header_name.exact=string request.x_header.header_name.prefix=string request.x_header.header_name.substring=string request.x_header.header_name.suffix=string request.x_header.header_name.regex=regular_expression 各引数の意味は次のとおりです。 • header_name: カスタム ヘッダーを含む任意の HTTP 要求ヘッダー。 • 詳細は、付録 E:「正規表現の使用」を参照してください。 regular_expression: 正規表現。 • string: 任意の印刷可能な ASCII シーケンス ( 引用符区切り )。 レイヤおよびトランザクション メモ • および <Proxy> レイヤで使用します。 <Cache>、 <Exception>、 <Forward>、 例 ; deny access to the URL below if the request contains the custom ; header “Test” and the header has a value of “test1” <Proxy> deny url=http://www.bluecoat.com request.x_header.Test.exact=”test1” 関連項目 190 • アクション : append( )、 delete( )、 delete_matching( )、 rewrite( )、 set( ) • 条件 : request.header.header_name=、request.header.header_name.address=、 request.x_header.header_name.address=、 response.x_header.header_name= 第 3 章 : 条件リファレンス request.x_header.header_name.address= 指定された要求ヘッダーを IP アドレスとして解析できるかどうかをテストします。できない場合、失 敗します。 解析が成功すると、 ヘッダーから抽出された IP アドレスが、 指定された IP アドレスと照ら してテストされます。 この式には、IP アドレス、サブネット、またはサブネット定義ブロックのラベル を指定できます。この条件は、X-Forwarded-For および Client-IP ヘッダー以外のカスタム ヘッダー と使用することを目的としています。これらのヘッダーには、コンパイル時に入力エラーを見つけら れるようにするため、request.header.header_name.address= を使用してください。 構文 request.x_header.header_name.address= ip_address|subnet|subnet_label 各引数の意味は次のとおりです。 • header_name: カスタム ヘッダーを含む任意の HTTP 要求ヘッダー。 • ip_address: IP address アドレス (10.1.198.0 など )。 • subnet: サブネット マスク (10.1.198.0/24 など )。 • subnet_label: IP アドレス数またはサブネット数をバインドするサブネット定義ブロッ クのラベル。 レイヤおよびトランザクション メモ • <Cache> および <Proxy> レイヤで使用します。 例 ; deny access if the request’s custom header “Local” has the value 10.1.198.0 deny request.x_header.Local.address=10.1.198.0 関連項目 • アクション : append( )、 delete( )、 delete_matching( )、 rewrite( )、 set( ) • 条件 : request.header.header_name=、request.header.header_name.address=、 response.x_header.header_name= • 定義 : define subnet 191 SGOS 6.4 Content Policy Language リファレンス request.x_header.header_name.count= 指定された header_name の要求に含まれるヘッダー値の個数をテストします。 構文 request.x_header.header_name.count=numeric range from 0 to 8192 レイヤおよびトランザクション メモ • <Proxy> および <Exception> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 • 複数のホスト ヘッダーを備えた異常な HTTP 要求を拒否します。 <Proxy> DENY("Too many Host headers") request.header.Host.count = 192 第 3 章 : 条件リファレンス request.x_header.header_name.exists= 要求ヘッダーが存在するかどうかをテストします。 構文 request.x_header.header_name.exists=yes|no レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Exception • 適用対象 : HTTP プロキシ トランザクション 例 使用例 : <Proxy> request.x_header.Accept.exists=yes 193 SGOS 6.4 Content Policy Language リファレンス request.x_header.header_name.length= 指定された header_name のヘッダー値の全長をテストします。 構文 request.x_header.header_name.length=numeric range from 0 to 8192 レイヤおよびトランザクション メモ • <Proxy> および <Exception> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 • Cookie データが 2KB より大きい HTTP 要求を拒否します。 <Proxy> DENY("Too much Cookie data") request.header.Cookie.length = 2048.. 194 第 3 章 : 条件リファレンス response.header.content-length.as_number= この条件を使用して HTTP Content-Length 応答ヘッダーの値をテストできます。 条件修飾子 .as_number を使用することにより、Content-Length HTTP 応答ヘッダー内の実際のバ イト数を基にしてルールを設定できます。これは、パフォーマンスの問題を引き起こす可能性がある .regex 条件修飾子の代わりに使用できます。 構文 response.header.content-length.as_number=N • 上の例では、N はバイト数になります。 • 範囲がサポートされます (1000..2000 を値と .. で区切って as_number を定義することにより、 すると、サイズが 1000 ~ 2000 バイト間にある要求で、ルールがトリガされます )。整数ベースの値 と共にダブル ピリオドを使用する方法についての詳細は、このガイドの「条件の構文」を参照して ください。 レイヤおよびトランザクション メモ および <Cache> レイヤで使用します。 • <Proxy>、 • プロキシされた要求に応答する配信元コンテンツ サーバーが有効な Content-Length HTTP 要求 ヘッダーを作成する場合に使用します。 例 要求を拒否します。 Content-Length HTTP 応答ヘッダーが 10 MB よりも大きい本文サイズを示す場合、 <Proxy> response.header.content-length.as_number=10485760.. DENY 195 SGOS 6.4 Content Policy Language リファレンス response.header.header_name= 指定された応答ヘッダー (header_name) を正規表現または文字列に照らしてテストします。 任意の認識される HTTP 応答ヘッダーをテストできます。カスタム ヘッダーの場合、 response.x_header.header_name= を代わりに使用します。 構文 response.header.header_name=regular_expression response.header.header_name.exact=string response.header.header_name.prefix=string response.header.header_name.substring=string response.header.header_name.suffix=string response.header.header_name.regex=regular_expression 各引数の意味は次のとおりです。 • 認識されるヘッダーの完全なリストについて header_name: 認識される HTTP ヘッダー。 は、 付録 C:「認識されている HTTP ヘッダー」を参照してください。 カスタム ヘッダーの 場合、 response.x_header.header_name を代わりに使用します。 • 詳細は、付録 E:「正規表現の使用」を参照してください。 regular_expression: 正規表現。 • string: 引用符で区切られた印刷可能な ASCII シーケンスです。 レイヤおよびトランザクション メモ • <Cache>、 <Proxy>、 <Exception> レイヤで使用します。 例 ; Test if the response’s “Content-Type” header has the value “image/jpeg” response.header.Content-Type.prefix=”image/jpeg( |\t)*($|;)” 関連項目 196 • アクション : append( )、 delete( )、 delete_matching( )、 rewrite( )、 set( ) • 条件 : request.header.header_name=, response.x_header.header_name= 第 3 章 : 条件リファレンス response.raw_headers.count= HTTP 応答ヘッダーの合計数をテストします。 このトリガは、response.raw_headers.regex トリガで定義されているように、未加工の HTTP 応 答ヘッダーの合計数をテストします。 構文 response.raw_headers.count=N|..N|N..|N1..N2 「N」 は符号なしの整数です。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • HTTP プロキシ トランザクションに適用されます。 例 応答ヘッダーが 40 以上含まれている場合、応答が拒否されます。 <Proxy> DENY("Too many response headers") response.raw_headers.count=40.. 197 SGOS 6.4 Content Policy Language リファレンス response.raw_headers.length= すべての HTTP 応答ヘッダーの長さの合計をテストします。 このトリガは、ヘッダー名、値、区切り記号、改行など、HTTP 応答ヘッダー データの合計バイト数をテ ストします。応答の先頭行である HTTP 応答行と、空白の終了行は計算に含まれません。 構文 response.raw_headers.length=N|..N|N..|N1..N2 各引数の意味は次のとおりです。 「N」は符号なしの整数です。 レイヤおよびトランザクション メモ • <Proxy> および <Exception> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 応答ヘッダー データが 4000 以上含まれている場合、応答が拒否されます。 <Proxy> DENY("Too much response header data") response.raw_headers.length=4096.. 198 第 3 章 : 条件リファレンス response.raw_headers.regex= 正規表現によるすべての HTTP 応答ヘッダーの値をテストします。 このトリガでは、ヘッダー名、区切り記号、ヘッダー値などを含む、完全な未加工のHTTP 応答ヘッダー テキストをテストできます。このトリガは、未加工の HTTP 応答ヘッダーをすべて巡回します。指定さ れた正規表現がこれらの文字列のいずれかと一致すると、条件は真になります。 個々の未加工ヘッダーは、ゼロ以上の後続行と連結されたヘッダー行からなる文字列です。最初の ヘッダー行は、前からヘッダー名、コロン、 ヘッダー値 ( 存在する場合 )、改行の順で構成されます。ヘッ ダー値には、 先頭と末尾にスペースを含めることができます。 各連結行は、 前からスペースまたはタ ブ、 ヘッダー値の一部であるテキスト、最後に改行の順で構成されます。このため、各未加工ヘッダー 文字列には、少なくとも 1 つの改行と各連結行につき 1 つの改行が含まれます。 特定の Regex パターンが response.raw_headers.regex に関連して動作する仕組みを次に示します。 「.」 は、改行を含む任意の文字と一致します。 * 「^」 は、ヘッダー名の先頭でのみ一致します。 * 「$」 は、ヘッダー名の末尾でのみ一致します。文字列の最終文字は改行であるため、 「$」だけでは、 最後 * の改行以降で一致します。したがって、 「\s*$」のように使用する必要があります。 「\s」 は、改行を含むスペースと一致します。 * 「\n」 は改行と一致します。 * 構文 response.raw_headers.regex=regular_expression レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • HTTP プロキシ トランザクションに適用されます。 例 ヘッダーの後続行が含まれている場合、応答が拒否されます。この構文は HTTP 標準の一部ですが、通 常は使用されないため、ダウンストリーム デバイスの一部では、 この構文が正しく解釈されない場合 があります。 <Proxy> exception(invalid_response) response.raw_headers.regex="\n[ \t]" 199 SGOS 6.4 Content Policy Language リファレンス response.x_header.header_name= 指定された応答ヘッダー (header_name) を正規表現または文字列に照らしてテストします。HTTP 要 求の場合、カスタム ヘッダーを含む応答ヘッダーをテストできます。既知の HTTP ヘッダーの場合、 コンパイル時に入力エラーを見つけること response.header.header_name= を代わりに使用すれば、 ができます。 構文 response.x_header.header_name=regular_expression response.x_header.header_name.exact=string response.x_header.header_name.prefix=string response.x_header.header_name.substring=string response.x_header.header_name.suffix=string response.x_header.header_name.regex=regular_expression 各引数の意味は次のとおりです。 • header_name: カスタム ヘッダーを含む任意の HTTP 要求ヘッダー。 • 詳細は、付録 E:「正規表現の使用」を参照してください。 regular_expression: 正規表現。 • string: 引用符で区切られた印刷可能な ASCII シーケンスです。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Cache>、 <Proxy>、 例 ; Tests if the custom header “Security” has the value of “confidential” response.x_header.Security.substring=”confidential” 関連項目 200 • アクション : append( )、 delete( )、 delete_matching( )、 rewrite( )、 set( ) • 条件 : request.x_header.header_name=, response.header.header_name= 第 3 章 : 条件リファレンス server.certificate.hostname= SSL サーバー証明書のホスト名をテストします。 SSL 接続を確立するときにサーバーから返される、X.509 証明書から抽出したホスト名をテストしま す。 サーバーへの SSL 接続を伴わないトランザクションの場合、この条件は NULL です。 構文 server.certificate.hostname=domain-name server.certificate.hostname=domain-suffix-pattern server.certificate.hostname.exact=string server.certificate.hostname.length=value server.certificate.hostname.prefix=string server.certificate.hostname.substring=string server.certificate.hostname.suffix=string server.certificate.hostname.regex=regular_expression 各引数の意味は次のとおりです。 domain-name ドメイン名は 1 つ以上のドメイン ラベルで、 「example.com」や「www.example.com」のようにドット で区切られています。ホスト名と正確に一致します。 domain-suffix-pattern ドメインのサフィックス パターンは、 「.」のプレフィックスが付いたドメイン名で、 ラベルの区切りに あるホスト名のサフィックスと一致します。 「.com」や「.example.com」、 「.www.example.com」 などの パターンは、すべてドメイン名「www.example.com」と一致します。 レイヤおよびトランザクション メモ • 有効なレイヤ : <SSL>, <SSL-Intercept> • 適用対象 : HTTPS 転送およびリバース プロキシ トランザクション、SSL インターセプト トランザ クション、SSL トンネル トランザクション。 例 次の例では、文字列のパターンと「ドメイン-サフィックス-パターン」のパターンの両方を使用して、ト ラフィックを特定のログに直接記録します。 define condition special_site ; A string pattern must match exactly. ; This pattern will not match ; 201 SGOS 6.4 Content Policy Language リファレンス ; www.somehost.example.com ; ; or wildcard patterns returned in the certificate ; such as: ; ; *.example.com ; server.certificate.hostname=somehost.example.com ; This domain-suffix pattern will match ; ; xyz.com ; www.xyz.com ; mailer.xyz.com ; www.mailer.xyz.com ; : and so on.Note that this will match when ; the server certificate contains wildcards such as ; ; *.xyz.com ; www*.xyz.com ; server.Certificate.hostname=.xyz.com end <Proxy> client.ssl=yes condition=special_site access_log(special_log) 関連項目 • 202 条件 : server.certificate.hostname.category=, server.certificate.subject= Properties: server.certificate.validate( ), server.certificate.validate.ignore( ), server.certificate.validate.check_revocation( ) 第 3 章 : 条件リファレンス server.certificate.hostname.category= SSL 接続を確立するときにサーバーから返される、X.509 証明書から抽出したホスト名のコンテンツ フィルタのカテゴリをテストします。 サーバーへの SSL 接続を伴わないトランザクションの場合、 こ の条件は NULL です。 構文 server.certificate.hostname.category=none|unlicensed|unavailable|pending| category_name1, category_name2, ... レイヤおよびトランザクション メモ • <SSL> レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 次の例では、URL コンテンツ フィルタリング カテゴリの定義と、コンテンツ フィルタリング ベンダ から提供されるカテゴリの両方を使用して、特定サイトへの SSL アクセスを制限します。 define category Internal example1.com www.example1.org end <Proxy> client.is_ssl Allow server.certificate.hostname.category=Internal ; local definition Allow server.certificate.hostname.category=(Sports, Games) ; or vendor supplied Allow server.certificate.hostname.category=unavailable \ action.log_content_filter_down(yes) ; vendor down - allow but log Deny define action log_content_filter_down log_message( "content filter vendor unavailable to test $(server.certificate.hostname)" ) end 関連項目 • 条件 : server.certificate.hostname=, server.certificate.common_name=, server.certificate.subject=, category=, url.category=, request.header.Referer.url.category= • プロパティ: server.certificate.validate( ), server.certificate.validate.ignore( ), server.certificate.validate.check_revocation( ) 203 SGOS 6.4 Content Policy Language リファレンス server.certificate.subject= SSL サーバー証明書の件名サブジェクト フィールドをテストします。 構文 server.certificate.subject[.exact][.case_sensitive]=string server.certificate.subject.length=value server.certificate.subject.prefix[.case_sensitive]=string server.certificate.subject.substring[.case_sensitive]=string server.certificate.subject.suffix[.case_sensitive]=string server.certificate.subject.regex[.case_sensitive]=regular_expression レイヤおよびトランザクション メモ • 有効なレイヤ : <SSL>, <SSL-Intercept> • 適用対象 : HTTPS 転送およびリバース プロキシ トランザクション、SSL インターセプト トランザ クション、SSL トンネル トランザクション。 例 使用例 : <SSL> server.certificate.subject=todo 204 第 3 章 : 条件リファレンス server.connection.client_keyring クライアント証明書の要求に使用するキーリングまたはキーリストを設定します。 構文 server.connection.client_keyring(keyring) server.connection.client_keyring(keylist, selector) 各引数の意味は次のとおりです。 • keyring: クライアント証明書要求に使用するキーリングを指定します。 • keylist: クライアント証明書要求に使用するキーリストを指定します。 selector 値も指定する 必要があります。 • selector: 代入変数を使用します。 代 入 変 数 は す べ て サ ポ ー ト さ れ て い ま す が、セ レ ク タ で 推 奨 さ れ る 代 入 変 数 は、$(user)、 $(group)、 $(client.address) などです。 注意 : [Selector] 値は、キーリストに view コマンドを実行したときに表示されるエクストラクタ値 セ ッ ト に 一 致 し な け れ ば な り ま せ ん。た と え ば、ユ ー ザ ー 名 を 要 求 す る よ う に 証 明 書 の Subject.CN を設定する場合、 $(user) セレクタを使用してエクストラクタ値 $(Subject.CN) を 選択すると、ポリシーが有効になります。エクストラクタ値が $(Subject.O) に設定されている場 合、 一致する値が見つからないため、ポリシーが実施されません。 レイヤおよびトランザクション メモ • <SSL> レイヤと <Proxy> レイヤで使用します。 例 • 特定の Web サイト <url> に接続するユーザー <user> のクライアント証明書として、<keyring> の証明書を使用します。 url=<url> user=<user> server.connection.client_keyring(<keyring>) • クライアント証明書を要求する Web サイトに接続するユーザー <user> のクライアント証明書と して、<keyring> の証明書を使用します。 user=<user> server.connection.client_keyring(<keyring>) • 特定の Web サイト <url> に接続するグループ <group> のすべてのユーザーのクライアント証明 書として、<keyring> の証明書を使用します。 url=<url> group=<group> server.connection.client_keyring(<keyring>) • エクストラクタの値が接続のユーザーに等しいキーリスト <keylist> から、特定の Web サイト <url> に対するキーリングまたは証明書を選択します。 url=<url> server.connection.client_keyring(<keylist>, "$(user)") • ある Web サイト <url> に接続する場合、エクストラクタの値が接続のグループに等しいキーリス ト <keylist> から、キーリングまたは証明書を選択することになります。 url=<url> server.connection.client_keyring(<keylist>, "$(group)") 205 SGOS 6.4 Content Policy Language リファレンス server.connection.dscp= サーバー側の DSCP 受信値をテストします。 構文 client.server.dscp = dscp_value 「dscp_value 」 は「 0..63 | af11 | af12 | af13 | af21 | af22 | af23 | af31 | af32 | af33 と | af41 | af42 | af43 | best-effort | cs1 | cs2 | cs3 | cs4 | cs5 | cs6 | cs7 | ef」 なります。 レイヤおよびトランザクション メモ • および <Cache> レイヤで有効です。 <Proxy>、 <DNS-Proxy>、 • すべてのトランザクションに適用されます。 例 最初の QoS ポリシー ルールは、クライアントの受信 QoS/DSCP 値を 50 でテストし、一致する場合は 拒否します。2 番目の QoS ポリシー ルールは、クライアントの受信 QoS/DSCP 値を best-effort でテス トし、 一致した場合は拒否します。 <proxy> deny server.connection.dscp = 50 <proxy> deny server.connection.dscp = best-effort 206 第 3 章 : 条件リファレンス server.connection.negotiated_cipher= セキュア サーバーとネゴシエートする暗号スイートをテストします。 構文 server.connection.negotiated_cipher=cipher-suite ここで、cipher-suite は、次のいずれかです。 none RC4-MD5 RC4-SHA DES-CBC3-SHA DES-CBC3-MD5 RC2-CBC-MD5 RC4-64-MD5 DES-CBC-SHA DES-CBC-MD5 EXP1024-RC4-MD5 EXP1024-RC4-SHA EXP1024-RC2-CBC-MD5 EXP1024-DES-CBC-SHA EXP-RC4-MD5 EXP-RC2-CBC-MD5 EXP-DES-CBC-SHA レイヤおよびトランザクション メモ • 有効なレイヤ : <SSL> お よ び <Proxy> • 適用対象 : HTTPS 転送およびリバース プロキシ トランザクション、 SSL トンネル トランザクション 例 この例では、次のポリシーを実装します。 EXP1024 スイートのいずれかを使用しないサーバーへの要求を拒否します。 1. でセキュア接続を使用しないサーバーへのアクセスをログに記録します。 2. 「unsecure_log1」 ; 1 <SSL> ALLOW server.connection.negotiated_cipher= \ (EXP1024-RC4-MD5 || \ 207 SGOS 6.4 Content Policy Language リファレンス EXP1024-RC4-SHA || \ EXP1024-RC2-CBC-MD5 || \ EXP1024-DES-CBC-SHA) DENY ; 2 <Proxy> server.connection.negotiated_cipher=none access_log[unsecure_log1](yes) 208 第 3 章 : 条件リファレンス server.connection.negotiated_cipher.strength= セキュアに接続されたサーバーとネゴシエートする暗号強度をテストします。 構文 server.connection.negotiated_cipher.strength=none|low|medium|high|export レイヤおよびトランザクション メモ • <SSL> および <Proxy> レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. 暗号強度が中程度以上のサーバー接続のみを許可します。 <Proxy> DENY server.connection.negotiated_cipher.strength=(low|export) メモ 詳細は、OpenSSL の暗号 OpenSSL によって、 high、medium、および low の意味が定義されています。 ページ (http://www.openssl.org/docs/apps/ciphers.html) を参照してください。 現在の定義は次のとおりです。 • high: キーの長さが 128 ビットを超える暗号スイート。 • medium: キーの長さが 128 ビットの暗号スイート。 • low: 64 または 56 ビットの暗号化アルゴリズムを使用している暗号スイート ( ただし、エクスポー ト暗号スイートは除く )。 • エクスポート : 40 ビットと 56 ビットのアルゴリズムを使用する暗号スイート。 209 SGOS 6.4 Content Policy Language リファレンス server.connection.negotiated_ssl_version= セキュア サーバーとネゴシエートする SSL バージョンをテストします。 構文 server.connection.negotiated_ssl_version=SSLV2|SSLV3|TLSV1 レイヤおよびトランザクション メモ • 有効なレイヤ : <SSL>、<Proxy> • 適用対象 : HTTPS 転送およびリバース プロキシ トランザクション、 SSL トンネル トランザクション 例 使用例 : <SSL> server.connection.negotiated_ssl_version=SSLV3 210 第 3 章 : 条件リファレンス server_url= サ ー バ ー 接 続 で 使 用 す る URL の 一 部 が、指 定 し た 基 準 と 一 致 す る か ど う か を テ ス ト し ま す。 「server_url=」という基本テストにより、 書き換えられた可能性が高い完全な要求 URL と、 指定した パターンとの照合を試みます。パターンには、スキーム、ホスト、 ポート、 パス、クエリなどの URL コン ポーネントが含まれます。これらのいずれもがパターンに含まれない場合、URL の対応コンポーネン トはテストされず、任意の値を取り得ます。 URL コンポーネントの修飾子を条件に適用すると、URL の特定部分をテストできます。コンポーネン ト修飾子に加え、 省略可能なテスト タイプ修飾子を使用することで、パターンの照合方法を変更でき ます。 注意 : これら一連のテストにより、rewrite( ) アクションの影響を考慮しながら、要求された URL と の照合を行います。サーバーまたは他のアップストリーム デバイスを対象とする URL の書き換 えは、<Forward> レイヤのポリシーで遵守する必要があるため、url= 条件は <Forward> レイヤ で許可されません。その代わりに、これに相当する server_url= という一連のテストを、 これらのテストでは、常に URL の rewrite( ) <Forward> レイヤで使用するように指定します。 アクションの影響を考慮します。 構文 server_url[.case_sensitive][.no_lookup]=prefix_pattern server_url.domain[.case_sensitive][.no_lookup]=domain_suffix_pattern server_url.exact=string server_url.prefix=string server_url.substring=string server_url.suffix=string server_url.regex=regular_expressionregular_expression server_url.address=ip_address|subnet|subnet_label server_url.extension[.case_sensitive]=[.]filename_extension server_url.host[.exact] [.no_lookup]=host server_url.host.[prefix|substring|suffix]=string server_url.host.regex=regular_expression server_url.is_absolute=yes|no server_url.host.is_numeric=yes|no server_url.host.has_name=yes|no|restricted|refused|nxdomain|error server_url.host.no_name=yes|no server_url.path[.case_sensitive]=/string server_url.path[.substring|.suffix][.case_sensitive]=string server_url.path.regex[.case_sensitive]=regular_expression server_url.port={[low_port_number]..[high_port_number]|exact_port_number} server_url.query.regex[.case_sensitive]=regular_expression server_url.scheme=url_scheme 211 SGOS 6.4 Content Policy Language リファレンス ここで、すべてのオプションは url= と同等ですが、テストされる URL が異なります。詳細は、 を参照してください。 236 ページの「url=」 説明 server_url= 条件は、 define server_url 条件と [server_url] セクションがないことを除き、 url= と同じです。 転送の最適化は、 多くの場合 server_url.domain 条件およびセクションで実行されます。 レイヤおよびトランザクション メモ • <Proxy>、 および <SSL-Intercept> レイヤで使用します。 <Cache>、 <Forward>、 <SSL>、 • 管理者以外のすべてのトランザクションに適用されます。 例 ; Test if the server URL includes this pattern, and block access. ; Relative URLs, such as docs subdirectories and pages, will match. server_url=http://www.example.com/docs access_server(no) ; Test if the URL host’s IP address is a match. server_url.address=10.1.198.0 ; Test whether the URL includes company.com as domain. server_url.domain=company.com ; Test whether the URL includes .com. server_url.domain=.com ; Test if the URL includes this domain-suffix pattern, ; and block service.Relative URLs, such as docs ; subdirectories and pages, will match. server_url.domain=company.com/docs access_server(no) ; Example of the use of server_url.extension= server_url.extension=.txt server_url.extension=(.htm, .html) server_url.extension=(img, jpg, jpeg) ; This example matches the first request and doesn’t match the second from ; the following two requests: ; http://1.2.3.4/test ; http://www.example.com <Forward> server_url.host.is_numeric=yes ; In the example below we assume that 1.2.3.4 is the IP of the host mycompany ; The condition will match the following two requests if the reverse DNS was ; successful: ;request http://1.2.3.4/ ;request http://mycompany.com/ ; If the reverse DNS fails then the first request is not matched <Forward> server_url.host.regex=mycompany 212 第 3 章 : 条件リファレンス ; server_url.path tests ; The following server_url.path strings would all match the example URL: ; http://www.example.com/cgi-bin/query.pl?q=test#fragment server_url.path=”/cgi-bin/query.pl?q=test” server_url.path=”/cgi-bin/query.pl” server_url.path=”/cgi-bin/” server_url.path=”/cgi” ; partial components match too server_url.path=”/” ; Always matches regardless of URL. ; testing the url port server_url.port=80 関連項目 • 条件 : content_management=、 url= • 定義 : define subnet、define server_url.domain condition 213 SGOS 6.4 Content Policy Language リファレンス server_url.category= ユーザーの要求に対して ProxySG アプライアンスから送信される URL のコンテンツ カテゴリと一 致します。 この条件は、要求された URL ではなく書き換えられた URL が書き換えられている場合、 URL のカテゴリと一致します。 コンテンツ カテゴリは、 ポリシー、 保持しているローカル データベース、 またはサードパーティ デー タベースを使用して URL に割り当てることができます (468 ページの 「define category」を参照 )。 分類されていない URL は、none カテゴリに割り当てられます。 設定でコンテンツ フィルタ プロバイダが選択されているが、 カテゴリの決定時にエラーが発生した 場合、URL は ( ポリシーで直接割り当てられているカテゴリに加えて ) unavailable カテゴリに割り 当てられます。データベースがない場合や、ライセンスの期限が切れている場合は、エラーが発生しま す。 後者の場合、unlicensed の追加カテゴリが割り当てられます。 URL は、カテゴリのリストに割り当てられている場合があります。server_url.category= 条件が URL に割り当てられたカテゴリのいずれかと一致すれば、この条件が true になります。 注意 : server_url.category=unlicensed が true の場合、server_url.category=unavailable が true になります。 server_url.category= では動的リアルタイム評価を使用できませんが、URL が書き換えられてい ない場合は、要求された元の URL の評価結果が使用されます。 構文 server_url.category={ none|unlicensed|unavailable|category_name1, category_name2, ...} ポリシーまたは選択したコンテンツ フィ ここで、category_name1, category_name2, ... は、 ル タ プ ロ バ イ ダ に よ っ て 定 義 さ れ た カ テ ゴ リ 名 で す。現 在 有 効 な カ テ ゴ リ 名 の リ ス ト は、 Management Console および CLI から入手できます。 レイヤおよびトランザクション メモ • および <SSL-Intercept> レイヤで使用し <Proxy>、 <Cache>、 <Exception>、 <Forward>、 <SSL>、 ます。 • すべてのトランザクションに適用されます。 例 <Forward> server_url.category="Entertainment" forward(host) 関連項目 214 • 条件 : category=、server_url= • プロパティ: access_server( ) 第 3 章 : 条件リファレンス server_url.host.is_private= サーバーの URL が設定済みのプライベート ネットワーク内にあるかどうかをテストします。 構文 server_url.host.is_private={yes|no} レイヤおよびトランザクション メモ • および <SSL-Intercept> レイヤで使用します。 <Proxy>、 <Cache>、 <Forward>、 <SSL>、 • 要求した URL とのすべてのプロキシ トランザクションに適用されます。 例 <proxy> server_url.host.is_private=yes 215 SGOS 6.4 Content Policy Language リファレンス service.group= トランザクションに関連するサービス グループをテストします。 構文 service.group=group_name レイヤおよびトランザクション メモ • 有効なレイヤ : <Proxy>、<Admin>、<Forward>、<Exception>、<SSL>、<SSL-Intercept>、および <DNS-Proxy>。 • 適用対象 : DNS プロキシ トランザクションを除くすべてのプロキシ トランザクション 例 次の例では、サービス グループに基づいて要求を転送する方法を示します。 <forward> service.group=standard forward(standard_proxy) 関連項目 • 216 条件 : service.name= 第 3 章 : 条件リファレンス service.name= トランザクションに関連するサービス名をテストします。 構文 service.name=service_name レイヤおよびトランザクション メモ • および 有効なレイヤ : <Proxy>、<Admin>、<Forward>、 <Exception>、 <SSL>、 <DNS-Proxy>、 <SSL-Intercept> • 適用対象 : DNS プロキシ トランザクションを除くすべてのプロキシ トランザクション 例 次の例では、サービス名に基づいて要求を転送する方法を示します。 <forward> service.name=http_internal forward(internal_proxy) 関連項目 • 条件 : service.group= 217 SGOS 6.4 Content Policy Language リファレンス session-monitor.attribute.attribute_name= この CPL 条件では、セッション モニタに保存された所定の属性をテストします。 構文 session-monitor.attribute.attribute_name= 各引数の意味は次のとおりです。 は、参照先 RADIUS 属性の名前です。 • 「attribute_name」 レイヤおよびトランザクション メモ • および <SSL> レイヤで使用します。 <Proxy>、 <Exception>、 <Forward>、 • すべてのトランザクションに適用されます。 説明 • session-monitor.attribute.<attribute name>= 属 性 に string 型 が 含 ま れ て い る 場 合、こ の 比 較 は 簡 単 な 等 値 比 較 に 対 応 し ま す。属 性 に integer 型が含まれている場合、この比較は数値範囲の比較に対応します。属性に IPv4 型また は IPv6 型が含まれている場合、 この比較は IP アドレスの比較に対応します。 ポリシーのコンパ イル時に属性タイプを CPL に指定する API が提供されます。次にこの API について説明します。 任意の属性タイプの場合、.prefix、.suffix、.substring、および .regex の修飾子を使用し て文字列を比較できます。 • session-monitor.attribute.<attribute name>.length= 前述の比較では、数値範囲とフィールドの長さを比較できます。 • session-monitor.attribute.foo=10.10.10.0/24 デフォルトのテストは属性タイプにより異なり、.exact がデフォルトの文字列テスト修飾子とな ります。文字列テスト修飾子を明示的に追加すると、任意の属性条件を文字列のテストに強制的に 指定できます。 前述の式は、foo が IPv4 属性の場合はサブネットのテストになりますが、 foo が文字列の場合は完 全一致文字列のテストになります。 整数値またはアドレス入力で完全一致文字列のテストを行う 場合、 次の場合、 属性は比較で文字列としてのみ処理されます。 .exact を修飾子として使用できます。 218 • 文字列修飾子が式の一部である場合 • 属性タイプが文字列の場合 第 3 章 : 条件リファレンス • session-monitor.radius.foo=”abcde” 上の式により、文字列テストのパターンの長さがチェックされます。文字列属性には最大値が含ま れています。この値を超えることはできません。 foo が最大 3 文字の文字列属性を指している場合、上の式により次のような警告が生成されます。 Condition will always be false: pattern too long. CPL が RADIUS アカウンティング開始パケットで送信されなかった属性を指している場合、この属性 を使用する比較により false が返され、代入値により空の文字列が返されます。 ポリシーのコンパイル時に、指定した個々の Session Monitor 属性が Session Monitor の設定の一部で あることを CPL で確認します。属性が設定の一部でない場合は、CPL によりエラーが生成されます。 219 SGOS 6.4 Content Policy Language リファレンス socks= 現在のトランザクションにクライアントへの SOCKS が含まれている場合は、常に、この条件は true 要求が SOCKS プロキシ経由で着信したかどうかをテストする方法となりま です。 SOCKS=yes 条件は、 す。 SG でトンネル処理される SOCKS 要求と、SG で高速化される SOCKS 要求の両方を HTTP または IM にハンドオフすると、これらの両方で条件が true になります。特に socks=yes は、結果の HTTP ま たは IM トランザクションでも true のままになります。proxy.address や proxy.port など、 その他 の条件は、SOCKS トランザクションとその後の HTTP または IM トランザクションで一貫した値が維 持されないため、このようなプロトコル間テストへの使用には適していません。 構文 socks=yes|no レイヤおよびトランザクション メモ • および <SSL> レイヤで使用します。 <Proxy>、 <Exception>、 <Forward>、 • すべてのプロキシ トランザクションに適用されます。 関連項目 220 • 条件 : socks.accelerate= • プロパティ: socks_gateway( ), socks.accelerate( ), socks.authenticate( ), socks.authenticate.force( ). 第 3 章 : 条件リファレンス socks.accelerated= 高速化するために、SOCKS プロキシによって、このトランザクションが他のプロトコル エージェント にハンドオフされるかどうかをテストします。 構文 socks.accelerated={yes|http|aol-im|msn-im|yahoo-im|no} 各引数の意味は次のとおりです。 • 別のプロトコル固有のプロキシ エージェントに SOCKS トランザ yes が true になるのは、 クションがハンドオフされる場合のみです。 • トランザクションが SOCKS トンネルであることを意味します。 no は、 • トランザクションが http プロキシによって高速化される場合、http は true です。 • トランザクションが aol-im プロキシによって高速化される場合、aol-im は true です。 • トランザクションが msn-im プロキシによって高速化される場合、msn-im は true です。 • トランザクションが yahoo-im プロキシによって高速化される場合。 yahoo-im は true です。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • SOCKS トランザクションに適用されます。 関連項目 • 条件 : socks.method=, socks.version= • プロパティ: socks_gateway( ), socks.accelerate( ), socks.authenticate( ), socks.authenticate.force( ). 221 SGOS 6.4 Content Policy Language リファレンス socks.method= トランザクションに関連付けられた SOCKS プロトコル メソッド名をテストします。 構文 socks.method=CONNECT|BIND|UDP_ASSOCIATE レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 • SOCKS トランザクションに適用されます。 関連項目 • 条件 : ftp.method=, http.method=, http.x_method=, im.method=, server_url=, socks.version= • プロパティ: socks_gateway( ), socks.accelerate( ), socks.authenticate( ), socks.authenticate.force( ). 222 第 3 章 : 条件リファレンス socks.version= クライアントとの通信に使用される SOCKS プロトコルのバージョンが SOCKS 4/4a または SOCKS 5 のどちらであるかをテストします。 SOCKS 5 のほうがセキュリティ レベルが高いため、これを使用 することを強くお勧めします。 SOCKS 5 では認証がサポートされており、他のプロトコル サービスによって高速化されている可能性 のあるトランザクションを認証するために使用できます。 SOCKS 4/4a で は、認 証 は サ ポ ー ト さ れ て い ま せ ん。SOCKS 4/4a ト ラ ン ザ ク シ ョ ン の 評 価 中 に そのトランザク socks.authenticate() または socks.authenticate.force() が設定されると、 ションは拒否されます。 構文 socks.version=4..5 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Forward>、 • SOCKS トランザクションに適用されます。 • 管理者トランザクションには適用されません。 例 この例では SOCKS v5 クライアントが認証され、クライアント IP アドレス内の既知のセットのみが SOCKS v4/4a を使用できます。 <Proxy> socks.version=5 socks.authenticate(my_realm ) deny socks.version=4 client.address=!old_socks_allowed_subnet 関連項目 • 条件 : socks.method=, socks.version= • プロパティ: socks_gateway( ), socks.accelerate( ), socks.authenticate( ), socks.authenticate.force( ) 223 SGOS 6.4 Content Policy Language リファレンス source.port= クライアントの接続元のポートをテストします。 構文 source.port=port-number レイヤおよびトランザクション メモ • 有効なレイヤ : Admin、 DNS-Proxy、Forward、Proxy、 Exception、SSL、 SSL-Intercept • 適用対象 : プロキシ トランザクション 例 <Admin> source.port=8080 224 第 3 章 : 条件リファレンス ssl.proxy_mode= SG が SSL 接続をインターセプトして復号化するかどうかをテストします。 構文 ssl.proxy_mode = yes|no|https-reverse-proxy|https-forward-proxy 各引数の意味は次のとおりです。 (https-reverse-proxy||https-forward-proxy) と同じであることを意味します。 yes は、 レイヤおよびトランザクション メモ • <Proxy> および <SSL> レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 HTTPS リバース プロキシ要求が終了されるかどうかをテストします。 <Proxy> ssl.proxy_mode = https-reverse-proxy 225 SGOS 6.4 Content Policy Language リファレンス streaming.client= 現在のトランザクションに関連するクライアント エージェントをテストします。 構文 streaming.client=yes|no|windows_media|real_media|quicktime|flash|ms_smooth 各引数の意味は次のとおりです。 • ユーザー エージェントが Windows Media、 Real Media、Quicktime、Flash、または Smooth Streaming Player として認識される場合、yes は true です。 • ユーザー エージェントが Windows Media、Real Media、Quicktime、Flash、または Smooth Streaming Player として認識されない場合 no が true です。 • ユーザー エージェントが指定されたタイプのメディア プレーヤーとして認識される場合 は、他の値が true になります。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 <Forward>、 • HTTP およびストリーミング トランザクションに適用されます。管理者トランザクションには適 用されません。 例 この例では、Smooth Streaming がキャッシュされるように強制されます。 これは、CDN によって、 キャッシュ可能な MS Smooth トラフィック HTTP 応答がキャッシュ不可能であると見なされる場合 に使用すると便利です。 <Cache> streaming.client=ms_smooth force_cache(yes) この例では、大部分のビデオ トラフィックを効率的に圧縮できないため、ADN バイト圧縮が無効にな ります。 <Forward> streaming.client=ms_smooth adn.server.optimize.compress(no) 関連項目 226 • 条件 : bitrate=, live=, streaming.content= • プロパティ: access_server( )、max_bitrate( )、 streaming.transport( ) 第 3 章 : 条件リファレンス streaming.content= 現在のトランザクションのコンテンツをテストして、それがストリーミング データであるかどうかを 判別し、ストリーミング メディア タイプを決定します。 構文 streaming.content=yes|no|windows_media|real_media|quicktime|flash 各引数の意味は次のとおりです。 • コンテンツが Windows Media、 Real Media、または Quicktime コンテンツとして認識さ れる場合、yes は true です。 注意 : この条件では、Smooth Streaming のコンテンツは検出さ れません。 • コンテンツが Windows Media、 または Quicktime コンテンツとして認識さ Real Media、 れない場合、no が true です。 • 他の値が true になるのは、ストリーミング コンテンツが指定されたタイプとして認識さ れる場合です。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • すべてのトランザクションに適用されます。 関連項目 • 条件 : bitrate=, live=, streaming.client= • プロパティ: access_server( )、max_bitrate( )、 streaming.transport( ) 227 SGOS 6.4 Content Policy Language リファレンス streaming.rtmp.app_name= ストリームが含まれている Flash アプリケーションの名前を識別します。 構文 streaming.rtmp.app_name=<string> レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • Flash ストリーミング トランザクションに適用されます。 例 「vod」アプリケーション http://www.my_site.com/videoplayer/videoplayer.html には、 からビデオを再生し、ストリーム 名が sample.flv である、次の SWF が組み込まれています。 http://www.my_site.com/videoplayer/swfs/videoplayer.swf, which plays videos from application 'vod' and stream name sample.flv.(URL: rtmp://www.my_site.com/vod/sample.flv) 上記の例では、 「vod」は streaming.rtmp.app_name です。 関連項目 • 228 条件 : streaming.rtmp.method=, streaming.rtmp.page_url=, streaming.rtmp.stream_name=, streaming.rtmp.swf_url= 第 3 章 : 条件リファレンス streaming.rtmp.method= ポリシーの適用先となる論理プロトコル オペレーションを識別します。 構文 streaming.rtmp.method=open|connect|play レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • Flash ストリーミング トランザクションに適用されます。 関連項目 • 条件 : streaming.rtmp.app_name=, streaming.rtmp.page_url=, streaming.rtmp.stream_name=, streaming.rtmp.swf_url= 229 SGOS 6.4 Content Policy Language リファレンス streaming.rtmp.page_url= Flash プラグインを組み込む Web ページの URL を識別します。 構文 streaming.rtmp.page_url=<URL> レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • Flash トランザクションに適用されます。 例 「vod」アプリケーション http://www.my_site.com/videoplayer/videoplayer.html には、 からビデオを再生し、ストリーム 名が sample.flv である、次の SWF が組み込まれています。 http://www.my_site.com/videoplayer/swfs/videoplayer.swf, which plays videos from application 'vod' and stream name sample.flv.(URL: rtmp://www.my_site.com/vod/sample.flv) 上記の例では、streaming.rtmp.page_url は http://www.my_site.com/videoplayer/videoplayer.html です。 関連項目 • 230 条件 : streaming.rtmp.method=, streaming.rtmp.app_name=, streaming.rtmp.stream_name=, streaming.rtmp.swf_url= 第 3 章 : 条件リファレンス streaming.rtmp.stream_name= 要求される Flash ストリームの名前を識別します。 構文 streaming.rtmp.stream_name=<string> レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • Flash トランザクションに適用されます。 例 「vod」アプリケーション http://www.my_site.com/videoplayer/videoplayer.html には、 からビデオを再生し、ストリーム 名が sample.flv である、次の SWF が組み込まれています。 http://www.my_site.com/videoplayer/swfs/videoplayer.swf, which plays videos from application 'vod' and stream name sample.flv.(URL: rtmp://www.my_site.com/vod/sample.flv) 上記の例では、sample.flv は streaming.rtmp.stream_name です。 関連項目 • 条件: streaming.rtmp.method=, streaming.rtmp.page_url=, streaming.rtmp.app_name=, streaming.rtmp.swf_url= 231 SGOS 6.4 Content Policy Language リファレンス streaming.rtmp.swf_url= Flash プラグイン内で再生される SWF ファイルの URL を識別します。 構文 streaming.rtmp.swf_url=<URL> レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • Flash トランザクションに適用されます。 例 「vod」アプリケーション http://www.my_site.com/videoplayer/videoplayer.html には、 からビデオを再生し、ストリーム 名が sample.flv である、次の SWF が組み込まれています。 http://www.my_site.com/videoplayer/swfs/videoplayer.swf, which plays videos from application 'vod' and stream name sample.flv.(URL: rtmp://www.my_site.com/vod/sample.flv) 上記の例では、streaming.rtmp.swf_url は http://www.my_site.com/videoplayer/swfs/videoplayer.swf です。 関連項目 • 232 条件 : streaming.rtmp.method=, streaming.rtmp.page_url=, streaming.rtmp.stream_name=, streaming.rtmp.app_name= 第 3 章 : 条件リファレンス time= 日の時刻が指定された範囲内にあるか、 または完全に一致するかどうかをテストします。 現在時刻は、 デフォルトで SG アプライアンスの設定済みクロックとタイム ゾーンによって判別されますが、UTC タイム ゾーンは time.utc= フォームを使用して指定できます。time 条件のテストに使用される数値 パターンにスペースを含めることはできません。 構文 time[.utc]={[start_time]..[end_time]|exact_time} 各引数の意味は次のとおりです。 • 時間範囲の開始を表します。たとえ start_time: 24 時間形式の 4 桁の数値 (nnnn) であり、 ば、 空白にすると、午前 0 時 (0000) が想定されます。 0900 は午前 9 時を指定します。 • 時間範囲の終了を表します。たとえ end_time: 24 時間形式の 4 桁の数値 (nnnn) であり、 ば、1700 は午後 5 時を指定します。空白にすると、2359 (午後 11 時 59 分) が想定されます。 • 正確な時刻を表します。 exact_time: 24 時間形式の 4 桁の数値 (nnnn) であり、 注意 : 日を横断する範囲など、逆転した範囲をテストするには、次の簡潔な式を使用できます。 午後 7 時から午前 0 時までが指定さ time=(..0600|1900..) では午前 0 時から午前 6 時までと、 れますが、ポリシー言語では time=1900..0600 も同等であると認識されます。 レイヤおよびトランザクション メモ • すべてのレイヤで使用します。 • 時間に関する条件を使用して、 キャッシュされたオブジェクトのスラッシングが発生する可能性 のある <Cache> レイヤでのキャッシュの動作を制御します。 • すべてのトランザクションに適用されます。 例 ; Tests for 3 a.m. to 1 p.m. UTC. time.utc=0300..1300 ; Allow access to a particular site only during 9 a.m. ; to noon UTC (presented in two forms). ; Restrict form: <Proxy> deny url.host=special_event.com time=!0900..1200 ; Grant form: <Proxy> allow url.host=special_event.com time=0900..1200 ; This example restricts the times during which certain ; stations can log in with administrative privileges. 233 SGOS 6.4 Content Policy Language リファレンス define subnet restricted_stations 10.10.10.4/30 10.10.11.1 end <admin> client.address=restricted_stations allow time=0800..1800 weekday=1..5 admin.access=(READ||WRITE); deny 関連項目 • 234 条件 : date[.utc]=, day=, hour=, minute=, month=, weekday=, year= 第 3 章 : 条件リファレンス tunneled= 現在のトランザクションがトンネル処理される要求を表しているかどうかをテストします。トンネル 処理される要求を次に示します。 • TCP トンネル処理要求 • HTTP CONNECT 要求 • 等速の SOCKS 要求 注意 : 管理コンソールへの HTTPS 接続は、このテスト目的のためにトンネル処理されません。 構文 tunneled=yes|no レイヤおよびトランザクション メモ • および <SSL> レイヤで使用します。 <Proxy>、 <Forward>、 <Exception>、 • プロキシ トランザクションに適用されます。 例 この例では、企業サブネットが起点となる場合を除いて、トンネル処理されたトランザクションを拒 否します。 define subnet corporate_subnet 10.1.2.0/24 10.1.3.0/24 end <Proxy> deny tunneled=yes client.address=!corporate_subnet 関連項目 条件 : http.method=, socks.accelerated=, url.scheme= プロパティ: sock.accelerate() 235 SGOS 6.4 Content Policy Language リファレンス url= 要求された URL の一部が指定された条件と一致するかどうかをテストします。基本的な url= テスト では、完全な要求 URL を指定されたパターンに対して照合します。パターンには、スキーム、 ホスト、 ポート、パス、クエリなどの URL コンポーネントが含まれます。これらのいずれかのスキームがパ ターンに含まれていない場合、要求 URL の対応するコンポーネントはテストされず、任意の値にする ことができます。 URL コンポーネントの修飾子を条件に適用すると、URL の特定部分をテストできます。コンポーネン ト修飾子に加え、省略可能なテスト タイプ修飾子を使用することで、 パターンの照合方法を変更でき ます。 注意 : このテスト セットでは、要求された元の URL に対して照合し、rewrite( ) アクションの影響 はすべて無視されます。サーバーまたは他のアップストリーム デバイスを対象とする URL の 書き換えは、<Forward> レイヤのポリシーで遵守する必要があるため、url= 条件は <Forward> レイヤで許可されません。代わりに、<Forward> レイヤで使用する同等の server_url= テスト セットが用意されています。これらのテストでは、常に URL の rewrite( ) アクションの影響 を考慮します。 置き換え : さまざまな url_xxx 形式。 構文 url[.case_sensitive][.no_lookup]=prefix_pattern url.domain[.case_sensitive][.no_lookup]=domain_suffix_pattern url.exact[.case_sensitive]=string url.prefix[.case_sensitive]=string url.substring[.case_sensitive]=string url.suffix[.case_sensitive]=string url.regex[.case_sensitive]=regular_expression url.address=ip_address|subnet|subnet_label url.extension[.case_sensitive]=[.]filename_extension url.host[.exact][.no_lookup]=host url.host.[prefix|substring|suffix]=string url.host.regex=regular_expression url.is_absolute=yes|no url.host.is_numeric=yes|no url.host.no_name=yes|no url.host.has_name=yes|no|restricted|refused|nxdomain|error url.path[.case_sensitive]=/string url.path[.substring|.suffix][.case_sensitive]=string url.path.regex[case_sensitive]=regular_expression url.port={[low_port_number]..[high_port_number]|exact_port_number} url.query.regex[.case_sensitive]=regular_expression url.scheme=url_scheme 236 第 3 章 : 条件リファレンス ここで、URL テスト パターンは次のとおりです。 • prefix_pattern: 少なくとも次の一部を含む URL パターンです。 scheme://host:port/path 指定可能なプレフィックス パターンには、次のパターンが含まれます。 scheme://host scheme://host:port scheme://host:port/path_query scheme://host/path_query //host //host:port //host:port/path_query //host/path_query host host:port host:port/path_query host/path_query /path_query • 次の構 domain_suffix_pattern: 少なくともドメイン サフィックスを 1 つ含んだ URL。 文を使用します。 scheme://domain_suffix:port/path 受け入れられるドメイン サフィックス パターンには、次のパターンが含まれます。 scheme://domain_suffix scheme://domain_suffix:port scheme://domain_suffix:port/path_query scheme://domain_suffix/path_query //domain_suffix //domain_suffix:port //domain_suffix:port/path_query //domain_suffix/path_query domain_suffix domain_suffix:port domain_suffix:port/path_query domain_suffix/path_query • url.scheme: http、https、ftp、mms、rtsp、icp、tcp、aol-im、msn-im、または yahoo-im のい ずれかです。 要求 URL には、 SSL 終端の場合にのみ https スキームが含まれています。 tcp スキームを含 んでいる要求 URL にはホストとポートがそれぞれ 1 つのみ含まれ、 TCP トンネル サービス ポートへの接続が行われた場合と、 非透過的にプロキシ処理された HTTP 要求で CONNECT メソッドが使用される場合に使用されます。たとえば、Web ブラウザに非透過 HTTP プロ キシがあるときにユーザーが HTTPS URL を要求すると、 そのブラウザは、 CONNECT メソッ ドを使用して TCP トンネルを作成します。 237 SGOS 6.4 Content Policy Language リファレンス • ホスト名は完全に指定する必要があります。たとえ host: ドメイン名または IP アドレス。 ば、 「url=http://www」 とすると、http://www.example.com などの URL との照合はでき ません。このように、domain_suffix (example.com など ) の代わりに完全なホスト名を使 用するところが、url= 条件と url.domain= 条件の違いです。 • 完全なドメイン名またはドメイン名 domain_suffix: コンポーネントの境界を考慮して、 のサフィックスと照合するパターン。IP アドレスは許可されません。このように、 完全な ホスト名の代わりに domain_suffix を使用するところが、url.domain= 条件と url= 条 件の違いです。 • port: 1 ~ 65535 の間のポート番号。 • ホストとポートに続いて「/」で始まり、どの path_query: URL の path_query 部分は、 「/」で始まり、path_query URL 断片よりも先行する文字列です。path_query パターンは、 の先頭と一致する文字列です。 • 必要に応じて、ピリオ filename_extension: テストするファイル名拡張子を表す文字列。 ド (.) が先頭に付きます。引用符で囲まれた空の文字列 (url.extension=””) は、 http://example.com/ や http://example.com/test などのファイル名拡張子を含まな い URL と一致します。複数の拡張子をテストするには、かっことカンマ区切り文字 ( 次の 例を参照 ) を使用します。 • スペースや、& | ( ) < > { } ; ! . = " ' の regular_expression: Perl の正規表現。 いずれかの文字を含んでいる場合は、式を引用符で囲む必要があります。詳細は、付録 E: 「正規表現の使用」を参照してください。 prefix_pattern および domain_suffix_pattern に対して相対的なパスのオブジェクトも一致と見 なされます 「例」 のセクションを参照 )。 ( 次に、 テスト修飾子を示します。 • すべての照合で大文字と小文字が区別されませんが、パスお .case_sensitive: デフォルトでは、 よびクエリ部分の照合については、url.case_sensitive= フォームを使用することによって大文 字と小文字を区別することができます。 • ホスト パターンは domain_suffix .domain: URL のホスト部分で実行される照合方法を変更します。 パターンで、ホスト名と完全に一致するか、コンポーネントの境界でホスト名のサフィックスと一 致します。 ホストは、 必要に応じて、DNS 逆引き参照によってドメイン名に変換されます。 たとえ ば、条件 url.domain=//example.com は要求 URL http://www.example.com/ と一致しますが、 要求 URL http://www.myexample.com/ とは一致しません。 • .exact: 完全な URL またはコンポーネントで完全文字列比較を強制的に行います。 • DNS また .no_lookup: 要求のホストのフォームおよび照合されるパターンのフォームに応じて、 は DNS 逆引き参照が実行され、比較が行われる前に要求のホストが変換されます。この参照は、 条件の .no_lookup= フォームを使用することによって抑制できます。 .no_lookup 修飾子を指定 するとポリシー評価の速度が増しますが、この修飾子を使用すると、 セキュリティ ポリシーに抜 け穴ができ、セキュリティ対策をくぐり抜けようとする者に悪用される可能性があります。DNS および DNS 逆引き参照は、 restrict 定義によってグローバルに制限できます。 238 第 3 章 : 条件リファレンス .no_lookup option は、 url、url.host、および url.domain 条件にのみ適用してください。 URL ホストが IP アドレスとして指定された場合、動作は url.host= 条件に適用されるとき、 条件 no_lookup 修飾子が指定されたかどうかによって異なります。 no_lookup が指定された場合、 は false です。no_lookup が指定されなかった場合は、DNS 逆引き参照が実行されて、IP アドレス がドメイン名に変換されます。DNS 逆引き参照に失敗した場合、条件は false です。 注意 : たとえば url=http://www.sex.com/ を使用して URL を拒否する場合は、www.sex.com の IP アドレスを単に要求するだけでポリシーをバイパスすることはできません。これは、その 特定の条件について、基本となる DNS 参照が存在するからです。 ただし、url.exact=http://www.sex.com を使用して URL を拒否する場合は、そのサイト の IP アドレスを単に使用することによって、ポリシーをバイパスすることができます。 条件に適用する場合、このパターン一致では常に大文字と小文字が区別 されません。 url.host= • .prefix: string パターンが URL またはコンポーネントのプレフィックスかどうかをテストし ます。 • .regex: URL またはコンポーネントを regular_expression パターンに対してテストします。 URL ホストが IP アドレスとして指定された場合、動作は url.host= 条件に適用されるとき、 条件 no_lookup 修飾子が指定されたかどうかによって異なります。 no_lookup が指定された場合、 は false です。no_lookup が指定されなかった場合は、DNS 逆引き参照が実行されて、IP アドレス がドメイン名に変換されます。DNS 逆引き参照に失敗した場合、条件は false です。これにより、 url.host.regex=!”” には url.host.no_name=yes と同じ真理値が含まれ、 url.host.regex.no_lookup=!”” には url.host.is_numeric=yes と同じ真理値が含まれると いう周辺条件が導かれます。 このパターン一致では常に大文字と小文字が区別 url.host= 条件に適用する場合、 されません。 • .substring: string パターンが URL またはコンポーネントのサブ文字列かどうかをテストしま す。サブ文字列は、コンポーネント内の境界 ( サブドメインやパス ディレクトリなど ) で一致しな いようにする必要があります。 • .suffix: string パターンが URL またはコンポーネントのサフィックスかどうかをテストしま す。サフィックスは、URL コンポーネント内の境界 ( ドメイン コンポーネントやパス ディレクト リなど ) で一致しないようにする必要があります。 注意 : .prefix、.regex、.substring、および .suffix は、コンポーネントの境界での一致を必要とし ない文字列比較です。このため、url.host.suffix= は、 コンポーネント レベルでの一致を必要 とする url.domain= テストで使用されるホスト比較と異なります。 URL コンポーネントの修飾子は次のとおりです。 239 SGOS 6.4 Content Policy Language リファレンス • 指定した IP アドレス、IP サブネット、または .address: 要求された URL のホスト IP アドレスが、 サブネット定義と一致するかどうかをテストします。必要に応じて、 ホスト名について DNS 参照 が実行されます。DNS 参照は、 restrict DNS 定義によってグローバルに制限できます。 url.address= テストでサポートされるパターンは次のとおりです。 • ip_address: ホストの IP アドレスまたはサブネット。たとえば、10.1.198.0. • subnet: サブネット マスク (10.1.198.0/24 など )。 • subnet_label: IP アドレス数またはサブネット数をバインドするサブネット定義ブロックの ラベル。 式で subnet または subnet_label のいずれかを使用する場合に主に役立ち .address 修飾子は、 ます。 文字どおりの ip_address を使用する場合、url.address= 条件は url.host= と同等になり ます。 • .host: 要求された URL のホスト コンポーネントを、 host パターンによって指定された IP アド レスまたはドメイン名に対してテストします。パターンにスラッシュ (/) またはコロン (:) を含め ることはできません。 また、ワイルド カードまたはサフィックスの一致を認識しません。一致で は、大文字と小文字が区別されません。デフォルトのテスト タイプは .exact です。 注意 : url.host.exact= は、文字列照合ではなくハッシュ技法を使用してテストすることができ、そ のため、他の文字列ベースの url.host= テスト バージョンよりもパフォーマンスが著しく高く なっています。. 要求 URL のホスト コンポーネントは IP アドレスかドメイン名のいずれかになるため、 比較 のために変換処理が必要になることがあります。 • 式でドメイン名を使用するときに、要求 URL のホスト コンポーネントが IP アドレスになっ ている場合、その IP アドレスは DNS 逆引き参照を実行することによってドメイン名に変換 されます。 • 式で IP アドレスを使用するときに、 要求 URL のホスト コンポーネントがドメイン名になって いる場合、そのドメイン名は DNS 参照を実行することによって IP アドレスに変換されます。 次の追加のテスト修飾子をサポートしています。 .host コンポーネントは、 • これは true です。トラン .is_numeric: URL ホストが IP アドレスとして指定された場合、 ザクションのタイプによっては ( たとえば、等速ポートでの透過的要求 )、この条件が常に true になります。 • これは true です。特に、 URL ホ .no_name: URL ホストのドメイン名が検出されない場合、 ストが IP アドレスとして指定されており、この IP アドレスでの DNS 逆引き参照に失敗 する場合は、名前を返さないかネットワーク エラーが発生するために true になります。 240 第 3 章 : 条件リファレンス • デフォルトでは、要求された URL の完 .path: 要求 URL のパス コンポーネントをテストします。 全なパス コンポーネントのプレフィックスとして、および任意のクエリ コンポーネントのプレ フィックスとしてパターンがテストされます。 ホス URL のパスおよびクエリ コンポーネントは、 トまたはポートに続く最初のスラッシュ (/) から URL の最後までの、断片識別子を除くすべての テキストで構成されています。URL は比較が実行される前に正規化されるため、先頭のスラッ シュはテスト対象の要求 URL に必ず存在します。 または .regex 修飾子を .exact、 .substring、 使用しない限り、指定したパターンには「/」文字が含まれている必要があります。 次の URL の例において、太字は比較で使用されるコンポーネントを示しています。?q=test は含 まれるクエリ コンポーネントで、#fragment は無視される断片識別子です。 http://www.example.com/cgi-bin/query.pl?q=test#fragment 不足しているパス コンポーネントがス http://www.example.com などの URL は正規化され、 ラッシュで置き換えられて http://www.example.com/ のようになります。 • または完全に一致するかどう .port: 要求された URL のポート番号が指定された範囲内にあるか、 かをテストします。ポート番号を明示的に指定しない URL には、URL スキームによって暗示され るポート番号があります。HTTP のデフォルト ポート番号は 80 であるため、ポートを指定しない すべての HTTP ベースの URL の場合に、url.port=80 は true です。 url.address= テストでサポートされるパターンは次のとおりです。 • 1 ~ 65535 の番号を指定できます。 low_port_number: テスト範囲の下限のポート番号。 • 1 ~ 65535 の番号を指定できます。 high_port_number: テスト範囲の上限のポート番号。 • 例 : 80。 1 ~ 65535 の番号を指定できます。 exact_port_number: 単一のポート番号。 url.port 条件のテストで使用される数値パターンにスペースを含めることはできません。 • .query: Regex が要求 URL のクエリ文字列コンポーネントのサブ文字列に一致するかどうかをテ ストします。 クエリ文字列が存在しない場合、そのテストは false です。特殊な場合として、 クエリ 文字列が存在しない場合、url.query.regex=!"" は true です。 要求 URL のクエリ文字列コンポーネントは、存在する場合、パスに続く最初の疑問符 (?) から 特定の Web アプ URL の最後までのすべてのテキストで構成されます。? に続くポンド (#) 文字は、 リケーションとの互換性のため、クエリ文字列に含められています。クエリ文字列コンポーネント が存在する場合は、? 文字で始まります。 • .scheme: 要求された URL のスキームが指定されたスキーマ文字列と一致するかどうかをテスト します。この比較では、大文字と小文字は区別されません。 説明 次の条件を組み合わせる必要があるテストの便利な方法と考えることができます。 url= 条件は、 および url.path=。例を示します。 url.scheme=、 url.host=、 url.port=、 url=http://example.com:8080/index.html 241 SGOS 6.4 Content Policy Language リファレンス 次の文字列に相当します。 url.scheme=http url.host=example.com url.port=8080 url.path=/index.html url 定義ブロックまたは [url] セクションのパ url= 条件を使用して多数の URL をテストする場合、 フォーマンスにおける利点を考慮します (463 ページの 第 6 章「定義参考」 を参照 )。 : url.domain= 条 件 を 使 用 し て 多 数 の URL を テ ス ト す る 場 合、 url.domain 定 義 ブ ロ ッ ク ま た は : [url.domain] セクションのパフォーマンスにおける利点を考慮します (463 ページの 第 6 章「定義参 考」を参照 )。 正規表現の一致はアンカーされません。^ と $ の演算子のどちらかまたは両方を使用して、一致をアン カーする場合もあります。あるいは、.exact、.prefix、または .suffix のテスト形式を必要に応じて 使用します。 レイヤおよびトランザクション メモ • および <SSL-Intercept> レイヤで使用します。 <Proxy>、 <Cache>、 <Exception>、 <SSL>、 • 管理者以外のすべてのトランザクションに適用されます。 例 ; Test if the URL includes this pattern, and block service. ; Relative URLs, such as docs subdirectories and pages, will match. url=http://www.example.com/docs max_bitrate(no) ; Test if the URL host’s IP address is a match. url.address=10.1.198.0 ; Test whether the URL includes company.com as domain. url.domain=company.com ; Test whether the URL includes .com. url.domain=.com ; Test if the URL includes this domain-suffix pattern, ; and block service.Relative URLs, such as docs ; subdirectories and pages, will match. url.domain=company.com/docs max_bitrate(no) ; examples of the use of url.extension= url.extension=.txt url.extension=(.htm, .html) url.extension=(img, jpg, jpeg) ; ; ; ; This example matches the first request and doesn’t match the second from the following two requests: http://1.2.3.4/test http://www.example.com <Proxy> url.host.is_numeric=yes; 242 第 3 章 : 条件リファレンス ; In the example below we assume that 1.2.3.4 is the IP of the host mycompany ; The condition will match the following two requests if the reverse DNS was ; successful: ;request http://1.2.3.4/ ;request http://mycompany.com/ ; If the reverse DNS fails then the first request is not matched <Proxy> url.host.regex=mycompany ; url.path tests ; The following server_url.path strings would all match the example URL: ; http://www.example.com/cgi-bin/query.pl?q=test#fragment url.path=”/cgi-bin/query.pl?q=test” url.path=”/cgi-bin/query.pl” url.path=”/cgi-bin/” url.path=”/cgi” ; partial components match too url.path=”/” ; Always matches regardless of URL. ; testing the url port url.port=80 関連項目 • 条件 : category=、 console_access=、 content_management=、 server_url= • 定義 : define subnet、define url condition、define url.domain condition 243 SGOS 6.4 Content Policy Language リファレンス url.application.name= 要求 URL の Blue Coat コンテンツ フィルタ アプリケーション名をテストします。 構文 url.application.name=NAME サポートされるアプリケー NAME は Blue Coat Web Filter データベースで定義されます。 ション名のリストを表示するには、 CLI から show content-filter bluecoat applications コマンドを使用します。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • 要求 URL のあるプロキシ トランザクションに適用します。 例 • 次のポリシーにより、Hotmail がブロックされます。 <Proxy> url.application.name=Hotmail deny • 次のポリシーにより、LinkedIn へはアクセスはできますが、Hotmail は拒否されます。 ; Allow LinkedIn application but deny Hotmail. ; Show an error page displaying the application name define string my_format_string > url.application.name= $(url.application.name) > and the details: $(exception.details) end <Proxy> url.application.name=Linkedin allow ; no explicit allows url.application.name=Hotmail exception( policy_denied, "To prevent data loss, personal email is prohibited by management.", my_format_string ) • 次のポリシーにより、Facebook 以外のソーシャル ネットワーキング サイトがすべてブロックさ れます。 <Proxy> url.application.name=Facebook allow url.category=social-networking deny 関連項目 244 • 条件 : url.application.operation= • 条件 : url.category= 第 3 章 : 条件リファレンス url.application.operation= 要求 URL の Blue Coat コンテンツ フィルタ アプリケーションの演算子をテストします。 構文 url.application.operation=OPERATION サポートされるアプリ OPERATION は Blue Coat Web Filter データベースで定義されます。 ケ ー シ ョ ン 演 算 子 の リ ス ト を 表 示 す る に は、CLI か ら show content-filter bluecoat operations コマンドを使用します。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。 <Proxy>、 <Cache>、 • 要求 URL のあるプロキシ トランザクションに適用します。 例 次のポリシーにより、添付ファイルのダウンロードはできますが、アプリケーションへの添付ファイ ルのアップロードはすべて拒否されます。 ; Allow attachment downloads but not uploads. ; Show an error page displaying the application operation define string my_format_string > url.application.operation= $(url.application.operation) > and the details: $(exception.details) end <Proxy> url.application.operation=”Download Attachment” allow ; no explicit allows url.application.operation=”Upload Attachment” exception( policy_denied, "Attachment uploads are not allowed.", my_format_string ) 関連項目 • 条件 : url.application.name= • 条件 : url.category= 245 SGOS 6.4 Content Policy Language リファレンス url.category= 要求 URL のコンテンツ フィルタ カテゴリをテストします。 「category=」と同義です。 構文 url.category=none|unlicensed|unavailable|pending|category_name1, category_name2, ... レイヤおよびトランザクション メモ • および <SSL-Intercept> レイヤで使用します。 <Cache>、 <Proxy>、 <Exception>、 <SSL>、 • 要求 URL のあるプロキシ トランザクションに適用します。 例 <Cache> url.category=Sports 関連項目 • 246 条件 : category=、request.header.Referer.url.category=、 server.certificate.hostname.category= 第 3 章 : 条件リファレンス url.host.is_private= 要求 URL が設定済みのプライベート ネットワーク内にあるかどうかをテストします。 構文 url.host.is_private={yes|no} レイヤおよびトランザクション メモ • および <SSL-Intercept> レイヤで使用します。 <Cache>、 <Proxy>、 <Exception>、 <SSL>、 • 要求 URL のあるプロキシ トランザクションに適用します。 例 <Proxy> url.host.is_private=yes 247 SGOS 6.4 Content Policy Language リファレンス user= トランザクションに関連付けられている認証済みユーザー名をテストします。この条件は、 トランザ ク シ ョ ン が 認 証 さ れ た 場 合 ( つ ま り、authenticate( ) プ ロ パ テ ィ が no 以 外 の 値 に 設 定 さ れ、 proxy_authentication( ) プロパティが no に設定されなかった場合 ) にのみテスト可能です。 構文 user=user_name ここで、user_name はユーザー名です。 • IWA レルム : ユーザー名では、大文字と小文字が区別されません。 これにより IWA では、フル ユーザー名または相対ユーザー名のどちらでも柔軟に照合す ることができます。 例を示します。 user=bluecoat\mary.jones これは、フル ユーザー名と一致します。 user=mary.jones これは、相対ユーザー名と一致します。 • UNIX ( ローカル ) レルム : ユーザー名では、大文字と小文字が区別されます。 • RADIUS レルム : ユーザー名の大文字と小文字が区別されるかどうかは、RADIUS サー バーの設定に応じて異なります。SG で RADIUS レルムを定義する場合は、 大文字と小文 字を区別するかどうかも正しく設定する必要があります。 • LDAP レルム : ユーザー名の大文字と小文字が区別されるかどうかは、LDAP サーバーの 設定に応じて異なります。 大文字と小文字を区別 SG で LDAP レルムを定義する場合は、 するかどうかも正しく設定する必要があります。 これにより LDAP では、完全修飾ドメイン名または相対ユーザー名のどちらでも柔軟に 照合することができます。 例を示します。 user=”cn=mary.jones,cn=sales,dc=bluecoat,dc=com” または user=”uid=mary.jones,ou=sales,o=bluecoat” これは、フル ユーザー名と一致します。 user=mary.jones これは、相対ユーザー名と一致します。 248 第 3 章 : 条件リファレンス レイヤおよびトランザクション メモ • および <SSL> レイヤで使用し <Proxy>、 <Forward>、 <Exception>、 <Admin>、 <SSL-Intercept>、 ます。 注意 : <Forward> レイヤで使用する場合、認証されたクライアントが存在しなければ、この条件は NULL に評価 ( トレースで N/A として表示 ) される可能性があります。これらの条件を含む ルールは、正常なロジックを保持するために authenticated= で保護することができます。 例 ; Test for user john.smith. user=john.smith 関連項目 • 条件 : authenticated=、group=、 has_attribute.name=、 http.transparent_authentication=、 realm=、 user.domain=、 user.x509.issuer=、 user.x509.serialNumber=、 user.x509.subject= • プロパティ: authenticate( )、authenticate.force( )、check_authorization( )、 deny.unauthorized( )、 socks.authenticate( )、 socks.authenticate.force( )、 ssl.forward_proxy( ) 249 SGOS 6.4 Content Policy Language リファレンス user.authentication_error= ユーザー認証の期間に発生したエラーがある場合に、どのようなエラーなのかをテストします。 この条件を使用して、 ユーザー認証エラーが発生した場合に、 どのようなエラーなのかをテストしま す。 この評価は、発生したエラーが許容エラーとして指定されている場合にのみ行われます。 構文 user.authentication_error(any|none|not_attempted|<error>,...) 各引数の意味は次のとおりです。 • any: 認証エラーがあった場合に true と評価します。 • none: 認証エラーなしで認証が試行された場合に true と評価します。 • not_attempted.: 認証が試行されなかった場合に true と評価します。 • <error>,... : 単独エラーまたはエラー グループを指定します。その認証エラーがリス トに含まれるエラーのいずれかである場合、条件は true と評価されます。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 SSL、 SSL-Intercept、Forward、Exception • 適用対象 : プロキシ トランザクション 例 パスワードの期限切れ後にパスワード変更ページにユーザーをリダイレクトします。 <proxy> authenticate(realm) authenticate.tolerate_error(expired_credentials) <proxy> user.authentication_error=(expired_credentials) action.redirect_to_password_change_page define action redirect_to_password_change_page redirect(302, '.*', 'http://ourcompany.com/password_change'); end 250 第 3 章 : 条件リファレンス user.authorization_error= ユーザー承認の期間に発生したエラーがある場合に、どのようなエラーなのかをテストします。 この条件を使用して、ユーザー承認エラーが発生した場合に、どのようなエラーなのかをテストしま す。 この評価は、発生したエラーが許容エラーとして指定されている場合にのみ行われます。 構文 user.authorization_error(any|none|not_attempted|<error>,...) 各引数の意味は次のとおりです。 • any: 承認エラーがあった場合に true と評価します。 • none: 承認エラーなしで承認が試行された場合に true と評価します。 • not_attempted.: 承認が試行されなかった場合に true と評価します。 • その承認エラーがリス <error>,... : 単独エラーまたはエラー グループを指定します。 トに含まれるエラーのいずれかである場合、条件は true と評価されます。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 SSL、 SSL-Intercept、Forward、Exception • 適用対象 : プロキシ トランザクション 例 認証に成功しても、承認サーバーとの通信エラーが原因で承認に失敗した場合に、ユーザーをデフォ ルト グループに追加します。 <proxy> authenticate(realm) authorize.tolerate_error(communication_error) <proxy> user.authorization_error=(communication_error) authorize.add_group(default_group) 251 SGOS 6.4 Content Policy Language リファレンス user.domain= クライアントが認証されているか、ログインしたレルムが NTLM レルムかどうか、およびユーザー名 のドメイン コンポーネントが指定されたドメインかどうかをテストします。これらの条件をすべて満 たす場合、応答は true となります。この条件は、現在のトランザクションが認証されていない場合 ( つ まり、authenticate( ) プロパティが no に設定されている場合 ) にはテストできません。 構文 user.domain=windows_domain_name この名前では、大文字と小文字 ここで、windows_domain_name は Windows ドメイン名です。 が区別されません。 レイヤおよびトランザクション メモ • および <SSL> レイヤで使用し <Proxy>、 <Forward>、 <Exception>、 <Admin>、 <SSL-Intercept>、 ます。 認証されたクライアントが存在しなければ、 この条件は NULL 注意 : <Forward> レイヤで使用する場合、 に評価 ( トレースで N/A として表示 ) される可能性があります。これらの条件を含むルールは、 正常なロジックを保持するために authenticated= で保護することができます。 例 ; Test if the user is in domain all-staff. user.domain=all-staff 関連項目 • 条件 : authenticated=、group=、 has_attribute.name=、 http.transparent_authentication=、 realm=、 user=、 user.x509.issuer=、 user.x509.serialNumber=、 user.x509.subject= • プロパティ: authenticate( )、authenticate.force( )、check_authorization( )、 deny.unauthorized( )、 socks.authenticate( )、 socks.authenticate.force( )、 ssl.forward_proxy( ) 252 第 3 章 : 条件リファレンス user.is_guest= ユーザーがゲスト ユーザーとして認証されているかどうかをテストします。 ユーザーがゲスト ユーザーとして認証されているかどうかをテストします。authenticate.guest プロ パティと連携させて使用する場合にのみ役立ちます。 構文 user.is_guest=(yes|no) レイヤおよび TransExampleaction のメモ • 有効なレイヤ : Proxy、SSL-Intercept、SSL、Forward、Exception • 適用対象 : プロキシ トランザクション 例 デフォルト グループにゲスト ユーザーを追加します。 <proxy> authenticate.guest(guest_user, 900, realm) <proxy> user.is_guest=yes authorize.add_group(default_group) 253 SGOS 6.4 Content Policy Language リファレンス user.login.address= ユーザーがログインしているアドレスをテストします。 この条件を使用して、ユーザーがログインした IP アドレスまたはサブネットと照合します。ユーザー がプロキシ チェーンを通している場合、クライアント IP アドレスとは異なる可能性があります。ユー ザー ログイン アドレスに、authenticate.credentials.address プロパティは設定できません。 構文 user.login.address=ip_address|subnet|subnet_label レイヤおよびトランザクション メモ • 有効なレイヤ : <proxy>、<admin>、<SSL-Intercept>、 <forward>、<exception> • 適用対象 : すべてのトランザクション 例 サブネット 10.167.146.0/24 からログインしていた場合、ユーザーはログインできます。 <proxy> user.login.address=10.167.146.0/24 allow 254 第 3 章 : 条件リファレンス user.login.count= このユーザーのアクティブ ログイン回数をテストします。 この条件を使用して、現在のユーザーが何回ログインしたかをテストします。ユーザーがログインで きる最大回数を管理できます。 構文 user.login.count([lower]..[upper]|exact) 各引数の意味は次のとおりです。 • この条件に一致する最小ログイン数です。 [lower] は省略可能で、 • この条件に一致する最大ログイン数です。 [upper] は省略可能で、 • この条件に一致する正確なログイン数です。 [exact] は省略可能で、 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Admin、SSL-Intercept、Forward、Exception • 適用対象 : すべてのトランザクション 例 ユーザーが複数回ログインしている場合、ユーザーの他のログインはログアウトされます。 <proxy> user.login.count=2.. user.login.log_out_other(yes) 255 SGOS 6.4 Content Policy Language リファレンス user.login.time= 現在のログインがアクティブになっていた秒数をテストします。 この条件を使用して、現在のユーザーが現在の IP アドレスでログインしていた秒数をテストします。 ユーザーがログインできる最大時間の管理に使用できます。 構文 user.login.time([lower]..[upper]|exact) 各引数の意味は次のとおりです。 • この条件に一致する最小秒数を指定するオプションです。 [lower] は、 • この条件に一致する最大秒数を指定するオプションです。 [upper] は、 • この条件に一致する厳密な秒数を指定するオプションです。 exact は、 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Admin、SSL-Intercept、Forward、Exception • 適用対象 : すべてのトランザクション 例 ユーザーが 1 時間以上ログインしていた場合、ユーザーはログアウトされます。 <proxy> user.login.time=3600.. user.login.log_out(yes) 256 第 3 章 : 条件リファレンス user.regex= 認証済みユーザー名の正規表現定義部分をテストします。 これは、認証済みユーザー名の既知部分に対する、大文字と小文字を区別する正規表現一致の定義に 使用するソース条件です。 これによって、 管理者が一意のユーザー オブジェクトの長いリストを設定 する必要がなくなります。将来的には定義部分があるユーザー名の数が増える予定であり、それに柔 軟に備えることもできます。 構文 user.regex=regular_expression レイヤおよびトランザクション メモ 有効なレイヤ : Proxy、SSL、 Forward、Exception、Admin 例 いくつかの Active Directory ユーザーのユーザー名が「admin」で始まる (admin123、adminbobjones など ) 展開を検討します。次の例は、それらのユーザーが特定のユーザー名を定義する必要のないルー ルを定義しています。 <Proxy> ALLOW user.regex=”^admin.*” ; Matches requests with username starting with "admin" 付録 E:「正規表現の使用」も参照してください。 257 SGOS 6.4 Content Policy Language リファレンス user.x509.issuer= 証明書レルムの認証に使用された x509 証明書の発行元をテストします。 user.x509.issuer= 条件は 主に、明示的な証明書失効リストの作成の際に役立ちます。 この条件は、 証明書レルムに対して認証済 みのユーザーに対してのみ true となります。 構文 user.x509.issuer=issuer_DN 大文字と ここで、issuer_DN は、適切にエスケープされた RFC2253 LDAP DN です。比較は、 小文字を区別します。 レイヤおよびトランザクション メモ • および <SSL> レイヤで使用します。 <Proxy>、 <Forward>、 <Exception>、 <Admin>、 注意 : <Forward> レイヤで使用する場合、認証されたクライアントが存在しなければ、この条件は NULL に評価 (トレースで N/A として表示) される可能性があります。これらの条件を含む ルールは authenticated= により保護することで、通常の論理を維持できます。 • プロキシ トランザクションに適用されます。 関連項目 258 • 条件 : authenticated=、group=、has_attribute.name=、http.transparent_authentication=、 realm=、 user=、 user.domain=、user.x509.serialNumber=、user.x509.subject= • プロパティ: authenticate( )、authenticate.force( ) 第 3 章 : 条件リファレンス user.x509.serialNumber= 証明書レルムに対するユーザーの認証に使用された x509 証明書のシリアル番号をテストします。 明示的な証明書失効リストの作成の際に役立ちます。比較 user.x509.serialNumber= 条件は主に、 は、 大文字と小文字を区別しません。 構文 user.x509.serialNumber=serial_number serial_number は証明書のシリアル番号を 16 進数で表す文字列です。 文字列の長さは常に偶数であるため、16 進数を表す文字列の長さが奇数の場合は、先頭に ゼロが付けられます。最大ビット数は 160 です。 レイヤおよびトランザクション メモ • および <SSL> レイヤで使用します。 <Proxy>、 <Forward>、 <Exception>、 <Admin>、 注意 : <Forward> レイヤで使用する場合、認証されたクライアントが存在しなければ、この条件は NULL に評価 ( トレースで N/A として表示 ) される可能性があります。これらの条件を含む ルールは、正常なロジックを保持するために authenticated= で保護することができます。 • プロキシ トランザクションに適用されます。 関連項目 • 条件 : authenticated=、group=、 has_attribute.name=、http.transparent_authentication=、 realm=、 user=、 user.domain=、user.x509.issuer=、user.x509.subject= • プロパティ: authenticate( )、authenticate.force( ) 259 SGOS 6.4 Content Policy Language リファレンス user.x509.subject= 証明書レルムに対するユーザーの認証に使用された x509 証明書の件名フィールドをテストします。 明示的な証明書失効リストの作成に役立ちます。 user.x509.subject= 条件は主に、 構文 user.x509.subject=subject ここで、subject は、適切にエスケープされた RFC2253 LDAP DN です。 比較は、大文字と小文字を区別します。 レイヤおよびトランザクション メモ • および <SSL> レイヤで使用します。 <Proxy>、 <Forward>、 <Exception>、 <Admin>、 注意 : <Forward> レイヤで使用する場合、認証されたクライアントが存在しなければ、この条件は NULL に評価 (トレースで N/A として表示) される可能性があります。これらの条件を含む ルールは、正常なロジックを保持するために authenticated= で保護することができます。 • プロキシ トランザクションに適用されます。 関連項目 • 条件 : authenticated=、group=、has_attribute.name=、http.transparent_authentication=、 realm=、 user=、 user.domain=、user.x509.issuer=、user.x509.serialNumber= • 260 プロパティ: authenticate( )、authenticate.force( ) 第 3 章 : 条件リファレンス virus_detected= ウイルスが検出されたかどうかをテストします。 このトリガを含むルールは、 ウイルス スキャンを含 まないトランザクションには一致しません。 構文 virus_detected=yes|no レイヤおよびトランザクション メモ • <Proxy> および <Exception> レイヤで使用します。 • すべての HTTP トランザクション (proxy、refresh、pipeline) および FTP プロキシ トランザクショ ンに適用されます。 例 <Proxy> virus_detected=yes 261 SGOS 6.4 Content Policy Language リファレンス weekday= 曜日が指定された範囲内にあるか、または完全に一致するかをテストします。デフォルトでは、曜日の 決定に SG アプライアンスの日付が使用されます。UTC タイム ゾーンを指定するには、weekday.utc= フォームを使用します。weekday= 条件のテストに使用される数字パターンには、スペースは使用でき ません。 構文 weekday[.utc]={[first_weekday]..[last_weekday]|exact_weekday} 各引数の意味は次のとおりです。 • 1 は月曜日、7 は日曜日を指定し、テスト結果が true とな first_weekday: 1 から 7 の整数。 る週の最初の曜日を示します。空白の場合、月曜日と仮定されます。 • 1 は月曜日、7 は日曜日を指定し、テスト結果が true とな last_weekday: 1 から 7 の整数。 る週の最後の曜日を示します。空白の場合、日曜日と仮定されます。 • 1 は月曜日、7 は日曜日を指定し、テスト結果が true とな exact_weekday: 1 から 7 の整数。 る曜日を示します。 注意 : 週をまたぐ範囲をテストする場合、次の短縮形の表現が使用できます。weekday=(..1|6..) は 月曜日を含む 3 連休を指定しますが、ポリシー言語は weekday=6..1 も同じものとして認識し ます。 レイヤおよびトランザクション メモ • すべてのレイヤで使用します。 • 時間に関する条件を使用して、 キャッシュされたオブジェクトのスラッシングが発生する可能性 のある <Cache> レイヤでのキャッシュの動作を制御します。 • すべてのトランザクションに適用されます。 例 ; Test for the weekend. weekday=6..7 ; Test for Saturday through Monday. weekday=6..1 関連項目 • 262 条件 : date[.utc]=、 day=、 hour=、 minute=、 month=、 time=、 year= 第 3 章 : 条件リファレンス year= 年が指定された範囲内にあるか、または完全に一致するかをテストします。 現在の年は、 デフォルトで は SG で設定された日付で決定されます。UTC タイム ゾーンを指定するには、 year.utc= フォームを 使用します。year= 条件のテストに使用される数字パターンには、スペースは使用できません。 構文 year[.utc]={[first_year]..[last_year]|exact_year} 各引数の意味は次のとおりです。 • 2002 など。 first_year: 年の範囲の始まりを表す 4 桁の数字 (nnnn)。 • 空白の場合、first_year 以降の last_year: 年の範囲の終わりを表す 4 桁の数字 (nnnn)。 すべての年と仮定されます。 • exact_year: 厳密な年を表す 4 桁の数字 (nnnn)。 注意 : 年の範囲を反転させてテストするには、 次の短縮形の表現を使用できます。 year=(..1998|2003..) は 1998 年以前 (1998 年を含む ) と 2003 年以降を指定しますが、 ポリシー言語は year=2003..1998 も同じものとして認識します。 レイヤおよびトランザクション メモ • すべてのレイヤで使用します。 • 時間に関する条件を使用して、 キャッシュされたオブジェクトのスラッシングが発生する可能性 のある <Cache> レイヤでのキャッシュの動作を制御します。 • すべてのトランザクションに適用されます。 例 ; Tests for the years 2004 through 2006. year=2004..2006 関連項目 • 条件 : date[.utc]=、 day=、 hour=、 minute=、 month=、 time=、 weekday=、 year= 263 SGOS 6.4 Content Policy Language リファレンス 264 第 4 章 : プロパティ参照 プロパティは、値に設定できる変数です。トランザクションの開始時点では、 すべてのプロパティはデ フォルト値に設定されます。 ポリシーの各レイヤはシーケンスにおいて評価されるため、 プロパティを 特定の値に設定できます。 評価が終了すると、 プロパティは最終的な値を保持し、 それに従ってトランザ クションが処理されます。ポリシー内で設定されないプロパティは、デフォルト値を維持します。 プロパティ参照 ここでは、プロパティおよびその指定可能な値のリストを示します。 また、各プロパティを使用する状 況に関するヒントおよびその使用例についても説明します。 265 SGOS 6.4 Content Policy Language リファレンス access_log( ) このトランザクションに使用するアクセス ログを選択します。 複数のアクセス ログを選択して 1 つのト ランザクションを記録できます。 個別のアクセス ログは、 設定時に付与される名前で参照されます。 設定によっ て、各ログの形式も決まります。 イベント ログのエントリを記録する方法については、449 ページの「log_message( )」を参照してくだ さい。 構文 access_log(auto|no|log_name_list) access_log.log_name(yes|no) access_log.[log_name_list](yes|no) デフォルト値は auto です。 各引数の意味は次のとおりです。 • auto: このプロトコルにデフォルト ログを使用します。 • no: 指定された log_name または log_name_list に対するこのトランザクションのログをオフに します。 • yes: 指定された log_name または log_name_list に対するこのトランザクションのログをオン にします。 • log_name: 設定で定義されたアクセス ログ名です。 • log_name_list: 設定で定義された次の形式のアクセス ログ名のリストです。 log_name_1, log_name_2, ... 説明 各構文バリアントは、トランザクションの記録に使用されるアクセス ログのリストの選択において異 なるロールを持っています。 • このトランザクションの過去のアクセス ログ選択をオーバーライドします。 access_log( ) は、 • 指定された値に従い、名前付きログを選択または選択解除します。 access_log.log_name( ) は、 トランザクションの他のログ選択はいずれも変更されません。 • 指定された値に従い、リストにあるすべての名前付きログ access_log.[log_name_list]( ) は、 を選択または選択解除します。リストで指定されていないログの選択には影響しません。 レイヤおよびトランザクション メモ • および <Cache> レイヤのすべてで使用します。 <Forward>、 <Proxy>. <Exception>、 • プロキシ トランザクションに適用されます。 関連項目 266 • プロパティ: log.suppress.field-id、log.rewrite.field-id( ) • アクション : log_message( ) 第 4 章 : プロパティ参照 access_server( ) クライアントが配信元コンテンツ サーバーまたは他のアップストリーム デバイスから直接ストリー ミング コンテンツを受信できるかどうかを決定します。キャッシュ コンテンツのみを処理するには、 no に設定します。 Flash プロキシは常に各 playspurt の OCS をチェックするため、このプロパティは Flash VOD キャッ シングでは無視されます。 注意 : ストリームの一部をキャッシュし、 同じストリームの他の部分をキャッシュしないことも可能 であるため、コンテンツの一部がキャッシュから供給された後、access_server(no) によって ストリーミング トランザクションが終了する可能性があります。 構文 access_server(yes|no) デフォルト値は yes です。 レイヤおよびトランザクション メモ • および <Forward> レイヤで使用します。 <Proxy>、 <Cache>、 <DNS-proxy>、 • およびストリーミング トランザクションに適用されます。 DNS、HTTP、SOCKS、 関連項目 • 条件 : bitrate=、 live=、 streaming.client=、 streaming.content= 267 SGOS 6.4 Content Policy Language リファレンス action( ) 指定された定義アクション ブロックを選択によって有効または無効にします。 デフォルト値は no です。 注意 : 1 つのトランザクションに対して、複数の定義アクション ブロックを有効にできます。選択され た複数のアクションが URL または特定のヘッダーを書き換える場合、そのアクションは競合す ると見なされ、1 つのみ実行されます。ランタイムに検出されると、アクションの競合が重大な イベントとしてイベント ログに報告されます。アクションの競合はコンパイル時間にも報告さ れる可能性があります。 構文 action(action_label) action.action_label(yes|no) すべての定義アクションに対して、デフォルト値は no です。 有効または無効にされる define action ブロックのラベルです。 action_label は、 説明 各構文バリアントは、トランザクションに適用されるアクションのリストの選択において異なるロー ルを持っています。 • 指定されたアクション ブロックを有効にし、他のすべてのアクション ブロックを無 action() は、 効にします。 • action.action_label( ) は、 特定のアクション ブロックを有効または無効にします。 トランザク ションの他のアクション ブロック選択は、いずれも変更されません。 レイヤおよびトランザクション メモ • および <Exception> レイヤで使用します。アクション ブロックで指定された <Cache>、 <Proxy>、 アクションは、参照元レイヤに対して適切なものである必要があります。 関連項目 • 268 定義 : define action 第 4 章 : プロパティ参照 adn.connection.dscp( ) このプロパティは、アップストリームおよびダウンストリーム ADN トンネル パケット両方の DSCP 値を制御します。 構文 adn.connection.dscp(dscp_value) 各引数の意味は次のとおりです。 dscp_value 0..63 | af11 | af12 | af13 | af21 | af22 | af23 | af31 | af32 | af33 | af41 | af42 | af43 | best-effort | cs1 | cs2 | cs3 | cs4 | cs5 | cs6 | cs7 | ef | preserve 指定されたプロパティが preserve の場合、 ADN プロキシ ( ブランチおよびコンセントレータ ) は ADN ネットワークへの受信パケットの DSCP 値を保持します。クライアント受信パケットおよび アップストリーム トンネル パケットの DSCP 値も同じです。コンセントレータ上のサーバー受信パ ケットおよびダウンストリーム トンネル パケットの DSCP 値も同じになります。 指定されたプロパティが特定の値である場合、アップストリーム トンネル パケットの DSCP 値は、仲 介役のデバイスによってリセットされるまでは指定された値となります。 アップストリーム トンネル パケットの DSCP 値を変更する仲介役のデバイスがある場合でも、 ダウンストリーム トンネル パケッ トの DSCP 値は、 仲介役のデバイスによってリセットされるまでは同じ指定された値となります。 デフォルト値は preserve です。 レイヤおよびトランザクション メモ • 有効なレイヤ : フォワード • 適用対象 : すべてのトランザクション 例 ADN トンネル パケットの最初の DSCP ポリシー ルールは、保持するアップストリームおよびダウン ストリーム DSCP 値を両方設定します。 同様に、 2 番目のポリシー ルールは DSCP 値を 50 に設定します。 <Forward> adn.connection.dscp(preserve) <Forward> adn.connection.dscp(50) 関連項目 プロパティ: client.connection.dscp( )、adn.server.dscp( )、server.connection.dscp( ) 269 SGOS 6.4 Content Policy Language リファレンス adn.server( ) このプロパティは、ADN サービスを有効または無効にするために使用します。 構文 adn.server(yes|no) デフォルト値は、該当するサービス設定から取得します。 レイヤおよびトランザクション メモ • 有効なレイヤ : フォワード • 適用対象 : プロキシ トランザクション 例 このプロパティによって、<Forward> レイヤにおいて ADN サービスを有効にするかどうかを制御で きます。次の例は、ADN サービスを無効にするために使用されたプロパティを示しています。 <Forward> adn.server(no) 関連項目 • 270 プロパティ: adn.server.optimize( ) 第 4 章 : プロパティ参照 adn.server.optimize( ) 値が yes に設定されている場合、サーバーと送受信するデータが最適化されます。 このプロパティは、アプリケーション プロキシ サーバー接続が ADN トンネルを通して転送される場 合にのみ適用されます。 構文 adn.server.optimize(yes|no|byte_cache|compress) adn.server.optimize.optimization-setting(yes|no) adn.server.optimize[optimization-settings](yes|no) デフォルト値は、 サービスに依存する、該 optimization-setting は byte_cache または compress です。 当するサービス設定から取得します。 レイヤおよびトランザクション メモ • 有効なレイヤ : フォワード • 適用対象 : プロキシ トランザクション 例 このプロパティにより、<Forward> レイヤで使用可能な任意のポリシー条件に基づいて、 個々の 接続の最適化を制御できます。 次の例は、 指定したサブネットからのクライアントと特定のサービス の間で、 双方向のデータ フローの最適化を無効にするために使用するプロパティを示しています。 <Forward> client.address=10.10.167.0/24 \ service.name="XWindows" \ adn.server.optimize(no) 関連項目 • プロパティ: adn.server.optimize.inbound( )、adn.server.optimize.outbound( ) 271 SGOS 6.4 Content Policy Language リファレンス adn.server.optimize.inbound( ) 値を yes に設定すると、サーバーから受信するデータが最適化されます。 このプロパティは、アプリケーション プロキシ サーバー接続が ADN トンネルを通して転送される場 合にのみ適用されます。 構文 adn.server.optimize.inbound(yes|no|byte_cache|compress) adn.server.optimize.inbound.optimization-setting(yes|no) adn.server.optimize.inbound[optimization-settings](yes|no) ここで、最適化設定は byte_cache または compress のいずれかです。デフォルト値は、サービス に依存する、該当するサービス設定から取得します。 レイヤおよびトランザクション メモ • 有効なレイヤ : フォワード • 適用対象 : プロキシ トランザクション 例 このプロパティにより、<Forward> レイヤで使用可能な任意のポリシー条件に基づいて、個々のサー バー接続で受信したデータの最適化を制御できます。次の例は、特定のホストから受信したデータの 最適化を無効にするために使用するプロパティを示しています。 <Forward> server_url.host=my_host.my_business.com \ adn.server.optimize.inbound(no) 関連項目 • 272 プロパティ: adn.server.optimize( )、adn.server.optimize.outbound( ) 第 4 章 : プロパティ参照 adn.server.optimize.outbound( ) 値を yes に設定すると、サーバーに送信されたデータが最適化されます。 このプロパティは、アプリケーション プロキシ サーバー接続が ADN トンネルを通して転送される場 合にのみ適用されます。 構文 adn.server.optimize.outbound(yes|no|byte_cache|compress) adn.server.optimize.outbound.optimization-setting(yes|no) adn.server.optimize.outbound[optimization-settings](yes|no) ここで、最適化設定は byte_cache または compress のいずれかです。デフォルト値は、サービスに依 存する、該当するサービス設定から取得します。 レイヤおよびトランザクション メモ • 有効なレイヤ : フォワード • 適用対象 : プロキシ トランザクション 例 このプロパティにより、<Forward> レイヤで使用可能な任意のポリシー条件に基づいて、個々のサー バー接続を介して送信されるデータの最適化を制御できます。次の例は、特定のホストに送信される データの最適化を無効にするために使用するプロパティを示しています。 <Forward> server_url.host=my_host.my_business.com \ adn.server.optimize.outbound(no) 関連項目 • プロパティ: adn.server.optimize( ),adn.server.optimize.inbound( ) 273 SGOS 6.4 Content Policy Language リファレンス advertisement( ) パフォーマンスを向上させるため、 特定の URL でオブジェクトをバナーとして処理するかどうかを 決定します。 コンテンツが特定のユーザーまたはクライアントに固有ではない場合、次の動作を使用 して応答時間が最適化される間、配信元サーバーでのヒット カウントが保持されます。 • 応答がキャッシュされている場合は、常にキャッシュから応答を送信します。キャッシュをバイパ スする要求ヘッダー (Pragma: No-Cache. など ) はすべて無視します。 • 配信元サーバーからの応答を常にキャッシュします。 • 要求がキャッシュから送信された場合は、バックグラウンドの配信元サーバーからオブジェクト を要求して、広告での配信元サーバーのヒット カウントを保持し、 広告サービスで内容が変化す る広告を配信できるようにもします。 次の「関連項目」セクションのリストに表示されるとおり、多くの CPL プロパティがキャッシュ動作 に影響します。 プロパティ間の設定における競合は、評価の終了時に最後に設定されたプロパティ値 を使用する CPL 評価論理によって解決されます。 構文 advertisement (yes|no) デフォルト値は no です。 レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • FTP over HTTP トランザクションを除く HTTP トランザクションに適用されます。 関連項目 • 274 プロパティ: always_verify( )、cache( )、cookie_sensitive( )、pipeline( )、refresh( )、 ttl( )、 ua_sensitive( ) 第 4 章 : プロパティ参照 allow トランザクションが処理されることを許可します。 allow は、access_server( )、deny( )、force_deny( )、authenticate( )、exception( )、または または redirect( ) アクションによってオーバーライドでき force_exception( ) の各プロパティ、 ます。 allow は、deny( ) および exception( ) プロパティをオーバーライドします。 注意 : deny を含むレイヤの後に評価されるレイヤで allow を使用する場合は、セキュリティが損なわ れることのないよう注意してください。 構文 allow レイヤおよびトランザクション メモ • および <Admin> レイヤで使用します。267 ページの「access_server( )」 <Proxy>、 <Cache>、 <SSL>、 を使用してください。 • すべてのトランザクションに適用されます。 関連項目 • プロパティ: access_server( )、deny( )、force_deny( )、authenticate( )、exception( )、 force_exception( ) • アクション : redirect( ) 275 SGOS 6.4 Content Policy Language リファレンス always_verify( ) 特定の URL のオブジェクトへの各要求を、 配信元サーバーで検証する必要があるかどうかを決定し ます。 このプロパティは、グローバル caching 設定 always-verify-source に対する URL 固有の代替 設定です。 オブジェクトに複数の同時アクセスがある場合、 その複数の要求は配信元サーバーに対す る単一の要求まで軽減されます。 Flash プロキシは OCS によるオブジェクト要求を常に検証するため、Flash VOD キャッシングの場 合、 このプロパティは無視されます。したがって、完全にキャッシュされたビデオであっても、いくら かのサーバー バイト統計情報が生成されます。 構文 always_verify(yes|no) デフォルト値は no です。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • <Cache> レイヤで使用します。 • FTP over HTTP トランザクションを除く HTTP プロキシ トランザクションに適用されます。 関連項目 • 276 プロパティ: advertisement( )、bypass_cache( )、 cache( )、 cookie_sensitive( )、 force_cache( )、 pipeline( )、 refresh( )、 ttl( )、 ua_sensitive( ) 第 4 章 : プロパティ参照 authenticate( ) 指定したレルムのユーザーを認証するか、このトランザクションでの認証を無効にします。 認証がクライアントの ID の一部ではないいずれかの条件に依存する場合、そのクライアントからの 一部のトランザクションは認証され、 別の一部は認証されません。 ただし、ブラウザは事前にいくつか の資格情報タイプを能動的に提供します。SG のデフォルトの動作では、使用しないプロキシ資格情報 のすべてを転送します。 アップストリーム プロキシ認証が行われない状況でプロキシ資格情報が転送されないようにするに は、no_upstream_authentication オプションを使用します。 構文 authenticate(realm_name) ま たは authenticate(no [, upstream_authentication|no_upstream_authentication]) 各引数の意味は次のとおりです。 S 設定された認証レルムの名前です。 realm_name は、 S 入力されたプロキシ資格情報をアップストリームに渡す必要 upstream_authentication は、 があることを示します。 S 入力されたプロキシ資格情報をアップストリームに渡さな no_upstream_authentication は、 いことを示します。 レイヤおよびトランザクション メモ • <Proxy> および <Admin> レイヤで使用します。 • プロキシ トランザクションと管理トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. a.com に向かうすべてのトラフィックが認証されます。 2. b.com に向かうすべてのトラフィックがアップストリーム プロキシによって認証されます。 3. その他のトラフィックはすべて認証されず、プロキシ資格情報は転送されません。 <Proxy> url.domain=//a.com/ authenticate(localr) url.domain=//b.com/ authenticate(no) authenticate(no, no_upstream_authentication) 277 SGOS 6.4 Content Policy Language リファレンス 関連項目 • 条件 : authenticated=、exception.id=、 group=、 has_attribute.name=、 http.transparent_authentication=、 realm=、 user=、 user.domain= • プロパティ: authenticate.force( )、authenticate.mode( )、 authenticate.use_url_cookie( ) 、 check_authorization( ) 、 socks.authenticate( ) 、 socks.authenticate.force( ) 278 第 4 章 : プロパティ参照 authenticate.authorization_refresh_time( ) 承認データをキャッシュできる秒数を指定します。 ユーザーの承認データ ( グループおよび属性 ) が特定されると、そのデータはプロキシにキャッシュさ れます。このプロパティでは、キャッシュされたデータが信頼できる秒数を設定します。 この時間が過 ぎると、データをリフレッシュする必要があります。 このプロパティは、レルム内の対応する設定をオーバーライドします。このプロパティが存在しない 場合は、レルムの設定が適用されます。 構文 authenticate.authorization_refresh_time(seconds) 各引数の意味は次のとおりです。 seconds は、 承認データをキャッシュして再利用できる秒数です。該当する時間の経過後は、承認サー バーから承認データをリフレッシュする必要があります。 デフォルト値は 1 です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Admin • 適用対象 : プロキシ トランザクション、管理トランザクション 例 承認リフレッシュ時間を 1 時間に設定します。 <proxy> authenticate(myrealm) authenticate.authorization_refresh_time(3600) 279 SGOS 6.4 Content Policy Language リファレンス authenticate.charset() HTTP Basic 認証で使用する文字エンコードを指定します。 HTTP Basic 認証プロトコルでは、ユーザー名およびパスワードをバイトの配列としてプロキシまた は配信元サーバーに送信します。文字エンコードはクライアントによって任意に選択されます。HTTP プロトコルでは、クライアントがアップストリーム デバイスにどのエンコードを使用するかを伝達す る方法がありません。 ユーザー名またはパスワードに非 ASCII 文字が含まれている場合、 SG ではこの文字エンコードが何 であるかを把握する必要があります。 プロキシが HTTP 要求からこれを特定する方法はないため、 authenticate.charset プロパティを使用してポリシーで指定する必要があります。 デフォルト値は ascii です。 HTTP Basic 資格情報が authenticate.charset プロパティの指定どおりにエンコードされない場 合、HTTP 要求は invalid_credentials 例外で終了します。そのため、authenticate.charset がデ フォルト値の ascii に設定されており、ユーザー名またはパスワードに非 ASCII 文字が含まれている 場合、 その要求は終了します。 HTTP Basic 認証プロトコルを使用して非 ASCII 資格情報を使用するように authenticate.charset を設定する必要があります。このプロパティを設定するもう 1 つの方法は、 IWA、フォーム ベース認証 などの異なるクライアント側の認証プロトコルを使用することです。 構文 authenticate.charset(charset) 各引数の意味は次のとおりです。 Web ブラウザが一般的にサポートしているエンコード用の任 charset は MIME 文字セット名です。 意の標準文字セット名を使用できます。 標準文字セット名のリストの 1 つは、 http://www.iana.org/assignments/character-sets にあります。 Microsoft Windows を使用している場合、Windows CLI で chcp コマンドを使用するとアクティブな コード ページを検索できます。 コード ページ番号 n を把握すると、 windows-n を文字名として使用 できます。 デフォルト値は ascii です。 レイヤおよびトランザクション メモ • <Proxy> および <Admin> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 北米向けの Microsoft Windows で使用する拡張 ASCII エンコードである windows-936 に認証文字 エンコードを設定します。 <proxy> authenticate(myrealm) authenticate.charset(windows-936) 280 第 4 章 : プロパティ参照 authenticate.credential_refresh_time() パスワードをキャッシュできる秒数を指定します。 レルムが Basic 認証を使用している場合、 パスワードはユーザーの管理フレームワークでキャッシュ されます。このキャッシュされたパスワードを特定の秒数の間信頼することができます。この時間の 経過後は、認証サーバーからパスワードを検証する必要があります。 このプロパティは、レルム内の対応する設定をオーバーライドします。このプロパティが存在しない 場合は、レルムの設定が適用されます。 構文 authenticate.credential_refresh_time(seconds) ここで、seconds は、パスワードをキャッシュして再利用できる秒数です。この時間の経過後は、認証 サーバーからパスワードを検証する必要があります。 デフォルト値は 1 です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Admin • 適用対象 : プロキシ トランザクション、管理トランザクション 例 資格情報のリフレッシュ時間を 1 時間に設定します。 <proxy> authenticate(myrealm) authenticate.credential_refresh_time(3600) 281 SGOS 6.4 Content Policy Language リファレンス authenticate.credentials.address() サロゲートを信頼できる秒数を指定します。 このプロパティでは、認証で使用するアドレスをオーバーライドできます。ログイン セッションの IP アドレスを設定します。 構文 authenticate.credentials.address(ip address デフォルト値は 0.0.0.0 です。 レイヤおよびトランザクション メモ • 有効なレイヤ : <proxy> • 適用対象 : プロキシ トランザクション 例 ログインのアドレスを Client-IP ヘッダーの値に設定します。 <proxy> authenticate(myrealm)\ authenticate.credentials.address($(request.header.Client-IP)) 282 第 4 章 : プロパティ参照 authenticate.guest() ゲスト ユーザーとして認証するように指定します。 このプロパティを使用すると、ゲスト ユーザーの認証をサポートすることができます。トランザク ションがゲスト認証要求と通常の認証要求の両方に一致する場合は、 通常の認証が先に試行されま す。 通常の認証が許可されたエラーで失敗すると、ゲスト認証に戻ります。 構文 authenticate.guest(username [, surrogate-refresh-time [, realm] ]) 各引数の意味は次のとおりです。 「guest_$(client.address)」などのゲスト ユーザー名を特定するために評価 username では、 • する代入値文字列を指定します。 • ゲスト ユーザーのサロゲート資格情報のリフレッ surrogate-refresh-time ( 省略可能 ) では、 シュ時間を指定します。リフレッシュ時間が指定されていない (または「0」 が指定されている) 場合 は、認証レルムで指定されているサロゲート リフレッシュ時間が使用されます。 • ユーザーを認証する認証レルムを指定します。ユーザーが認証サーバー上 realm ( 省略可能 ) では、 に実際に存在する必要はありません。レルムが指定されていない場合は、トランザクションで以前 に試行された認証で使用したレルムが使用されます。 トランザクションで通常の認証が試行され ておらず、レルムが指定されない場合は、認証例外が発生します。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy • 適用対象 : プロキシ トランザクション 例 ユーザーが自動的にゲストとしてログインするようにします。 <proxy> authenticate.guest(realm,guest_user) allow 最初にユーザーの認証を試行し、 認証が失敗した場合はゲストとしてログインすることをそのユー ザーに明示的に選択させるには、authentication_failed 例外を変更して、そのレルムのゲスト ログイン URL として指定されているリンクを含めるようにし、次のポリシーを使用します。 <proxy> url=<virtual URL> authenticate.guest("guest_$(client.address)", 0, realm) authenticate(realm) allow 283 SGOS 6.4 Content Policy Language リファレンス authenticate.force() このプロパティでは、認証と拒否の関係を制御します。 構文 authenticate.force(yes|no) デフォルト値は no です。 各引数の意味は次のとおりです。 • ユーザー yes: authenticate() の優先順位を deny() または exception() より上に設定します。 ID をアクセス ログに利用できるようにするには ( 拒否された要求含む )、yes を使用します。 • この設 no: deny() および exception() の優先順位は authenticate() よりも高く設定されます。 定は、 以前の拒否を許可します。 レイヤおよびトランザクション メモ • <Proxy> レイヤおよび <Admin> レイヤおよびトランザクションで使用します。 • <Cache> レイヤまたはトランザクションには適用されません。 関連項目 • 条件 : authenticated=、group=、 has_attribute.name=、 http.transparent_authentication=、 realm=、 user=、 user.domain= • プロパティ: authenticate()、check_authorization()、socks.authenticate()、 socks.authenticate.force() 284 第 4 章 : プロパティ参照 authenticate.force_307_redirect() 認証リダイレクトで HTTP 307 応答コードを強制的に使用します。 このプロパティは、認証リダイレクト モード origin-cookie-redirect、origin-ip-redirect、 form-cookie-redirect、form-ip-redirect のみに影響します。デフォルトでは、ブラウザをリ ダイレクトする認証モードでは、Internet Explorer では HTTP 307 応答コードを使用し、その他すべて のブラウザでは HTTP 302 応答コードを使用します。HTTP POST 要求または PUT 要求で認証が必要 な場合、307 リダイレクトでは POST/PUT データを適切に保持しますが、302 リダイレクトでは要求 を GET に変換するため、 デフォルトの動作では、 認証モードを犠牲 POST/PUT データが失われます。 にしてでも常に POST/PUT データを保持します。POST/PUT データの消失を回避するため、302 リダ イレクトを使用するブラウザはリダイレクト以外の認証モードにダウングレードされます。 POST/PUT にマルチパート MIME タイプが含まれている場合、Internet Explorer では 307 リダイレク ト を 使 用 し て デ ー タ を 正 し く 保 持 さ れ ま せ ん。デ フ ォ ル ト の 動 作 で は、す べ て の マ ル チ パ ー ト POST/PUT 要求はリダイレクト以外の認証モードにダウングレードされます。 認証モードをダウングレードするとデータは保持されますが、ユーザーは仮想 URL を使用して認証 されません。これは、資格情報を SSL 仮想 URL を使用して保護する必要がある場合に問題になる可能 性があります。このプロパティを使用してデフォルトの動作をオーバーライドし、307 リダイレクトを 強制的に使用します。これにより、ユーザーは仮想 URL を使用して認証されます。 ほとんどの最新のブラウザでは 307 リダイレクトをサポートしていますが、 Internet Explorer 以外の ブラウザは RFC に準拠しており、データを再送信する必要があるかどうかをユーザーに確認するポッ プアップが表示されます。このポップアップは、認証時に何度も繰り返し表示される場合があります。 構文 authenticate.force_307_redirect(yes) デフォルト値は no です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy • 適用対象 : HTTP プロキシ トランザクション 例 この例では、FireFox で 307 リダイレクトを有効にします。その他すべてのブラウザではデフォルトの 動作が実行されます。なお、request.header.User-Agent 条件は regex であり、任意の特定のブラウ ザに一致するように使用できます。 <Proxy> request.header.User-Agent="Firefox" authenticate.force_307_redirect(yes) 285 SGOS 6.4 Content Policy Language リファレンス authenticate.form() フォーム ベース認証を使用中の場合は、このプロパティでユーザーへのチャンレンジに使用される フォームが選択されます。 構文 authenticate.form(authentication-form) レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 • サブネット Resubmit からのすべてのトラフィックでは認証フォーム「Reform」を使用する必要が あります。 • サブネット ENG_subnet からのすべてのトラフィックでは認証フォーム「ENG_form」を使用する 必要があります。 • その他すべてのトラフィックではデフォルトの認証フォームを使用します。 define subnet HR_subnet 10.10.0.0/16 end define subnet ENG_subnet 10.9.0.0/16 end <Proxy> =authenticate(myrealm) authenticate.mode(form-cookie-redirect) <Proxy> ; 1 client.address=HR_subnet authenticate.form(HR_form) ; 2 client.address=ENG_subnet authenticate.form(ENG_form) ; 3 -- no modification to 'authenticate.form' selects the default form 286 第 4 章 : プロパティ参照 authenticate.mode() チャレンジ タイプとサロゲート資格情報の組 authenticate.mode() プロパティを使用することで、 み合わせを選択できます。 チャレンジ タイプは発行するチャレンジのタイプ (proxy、origin、または origin-redirect) です。 サロゲート資格情報は、 ユーザーの実際の資格情報の代わりに指定できる資格情報です。 これらはさま ざまな理由で使用されます。 次の 3 種類のサロゲート資格情報をサポートしています。 Blue Coat では、 • IP サロゲート資格情報では、クライアントの IP アドレスに基づいてユーザーを認証します。クラ イアントが正常に認証された後、その IP アドレスからのその後のすべての要求は同じユーザーか らのものと想定されます。 • Cookie サロゲート資格情報では、SG によって作成された Cookie をサロゲートとして使用します。 Cookie にはユーザーに関する情報が含まれているため、同じ IP アドレスの複数のユーザーを区 別することができます。Cookie には Cookie を認証する一時的なパスワードが含まれており、この パスワードは、資格情報キャッシュ エントリが期限切れになると、期限が切れます。 • 接続サロゲート資格情報では、 認証が成功すると、 TCP/IP 接続を使用してユーザーを認証します。 接続は認証済みとマークされ、 その接続でのその後のすべての要求は同じユーザーからのものと 見なされます。 接続の認証情報には、 認証されたレルムが含まれます。 サロゲート資格情報は、 現在のトランザクション のレルムが認証されたセッションでレルムが一致する場合に限り指定可能です。 注意 : Blue Coat では、 ProxySG で WS_Ftp などの FTP クライアントからのネイティブ FTP トラフィック を認証する場合に、auto 認証モードを使用することお勧めします。 構文 authenticate.mode(mode_type) ここで、mode_type は次のいずれかで、後ろに、暗黙的なチャレンジ タイプおよびサロゲート 資格情報が続きます。 • 要求に基づいてモードが自動的に選択されます。 auto: デフォルトです。 proxy、 origin-IP、 および origin-IP-redirect の中から選択します。その選択は接続の種類 ( 非透過または 透過 ) および透過認証 Cookie の設定に基づきます。ストリーミング トランザクションで は、authenticate.mode(auto) は origin モードを使用します。 • サロゲート資格情報は使用さ proxy: SG では非透過プロキシ チャレンジが使用されます。 れません。これは非透過プロキシの認証の一般的なモードです。 一部の状況ではプロキシ チャレンジは機能しません。その場合はオリジン チャレンジが送信されます。 287 SGOS 6.4 Content Policy Language リファレンス • proxy-IP: ProxySG ではサロゲート資格情報としてクライアント IP アドレスを使用しま す。このため、IP アドレスが資格情報キャッシュにある場合は、アプライアンスではアッ プストリーム プロキシまたは OCS に認証要求を渡します。IP アドレスが資格情報キャッ シュにない場合、ProxySG は error 530 User access denied というエラーを返します。 プロ キシ認証は、最初に他のプロトコルを使用して実行される必要があります ユーザーは同じサー バー上の他のプロトコル (HTTP など ) で認証を行ってから、 キャッシュされた資格情報 を使用して FTP サーバーにログインする必要があります。 非透過プロキシを使用する場 合は、Raptor ログイン構文では proxy-ip はサポートされません。 • origin: SG は OCS のように機能し、 OCS チャレンジを送信します。認証された接続はサ ロゲート資格情報として機能します。 • origin-IP: SG は OCS のように機能し、 OCS チャレンジを送信します。クライアント IP アドレスはサロゲート資格情報として使用されます。origin-IP は、クライアントが Cookie 資格情報に対応できない場合に、アップストリーム デバイスへの NTLM 認証を サポートするために使用されます。このモードは主に自動ダウングレードに使用されま すが、特定の状況に対して選択することもできます。 • 配信元サーバー チャレンジを送 origin-cookie: SG は配信元サーバーのように機能し、 信します。Cookie はサロゲート資格情報として使用されます。origin-cookie は、 クライ アントが Cookie を理解する場合、origin-ip よりも安全にフォワード プロキシでパスス ルー認証をサポートするために使用されます。 HTTP および HTTPS プロトコルのみが Cookie をサポートします。他のプロトコルは自動的に origin-ip にダウングレードされ ます。 このモードは、借用が不可能であり、配信元サーバーが認証を要求する場合に、リバース プロキシでも使用することがあります。 • origin-cookie-redirect: クライアントは認証対象の仮想 URL にリダイレクトされ、 Cookie は サ ロ ゲ ー ト 資 格 情 報 と し て 使 用 さ れ ま す。な お、SG ア プ ラ イ ア ン ス で は CONNECT メソッドでの origin-redirect はサポートされません。 • クライ origin-IP-redirect: クライアントは認証対象の仮想 URL にリダイレクトされ、 アント IP アドレスがサロゲート資格情報として使用されます。SG では origin-redirect と CONNECT メソッドはサポートされません。 • SG2: このモードは要求に基づいて自動的に選択され、 SGOS 2.x 定義済みルールを使用し ます。 • ユーザーの資格 form-IP: ユーザーの資格情報を収集するためのフォームが表示されます。 情報キャッシュ エントリが期限切れになるたびにフォームが提示されます。 • form-cookie: ユーザーの資格情報を収集するためのフォームが表示されます。 Cookie は OCS ドメインのみで設定され、ユーザーに新しい各ドメイン用のフォームが提示されま す。 このモードは、ドメイン数が制限されている場合のリバース プロキシ シナリオで特に 役立ちます。 288 第 4 章 : プロパティ参照 • form-cookie-redirect: ユーザーの資格情報を収集するためのフォームが表示されます。 ユーザーは、フォームが表示される前に認証仮想 URL にリダイレクトされます。 認証 仮 想 URL と OCS ド メ イ ン の 両 方 に 設 定 さ れ ま す。ユ ー ザ ー は、資 格 情 報 Cookie は、 キャッシュ エントリが期限切れになった場合にのみチャレンジされます。 • ユーザーはフォームが表示される form-IP-redirect: これは form-ip に似ていますが、 前に認証仮想 URL にリダイレクトされます。 重要 : IP サロゲート資格情報を使用するモードは安全ではありません。 IP アドレスからユー ザーが認証されると、 その IP アドレスからのすべての追加要求がそのユーザーからの ものと見なされます。 クライアントが NAT の後方にある場合、 またはマルチ ユーザー システム上にある場合、 これは重大なセキュリティ問題になる可能性があります。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • プロキシ トランザクションに適用されます。 289 SGOS 6.4 Content Policy Language リファレンス authenticate.new_pin_form() フォーム ベース認証を使用中の場合は、 このプロパティにより新しい PIN の入力をユーザーに求め る形式を選択します。 構文 authenticate.new_pin_form(new-pin-form-name) ここで、new-pin-form-name は、有効な新しい PIN 形式の名前です。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. サブネット HR_subnet からのすべてのトラフィックでは新規 PIN フォーム 「HR_new_pin_form」 を使用する必要があります。 2. サブネット ENG_subnet からのすべてのトラフィックでは新規 PIN フォーム 「ENG_new_pin_form」 を使用する必要があります。 3. その他すべてのトラフィックではデフォルトの認証フォームを使用します。 define subnet HR_subnet 10.10.0.0/16 end define subnet ENG_subnet 10.9.0.0/16 end <Proxy> authenticate(myrealm) authenticate.mode(form-cookie-redirect) <Proxy> ; 1 client.address=HR_subnet authenticate.new_pin_form(HR_new_pin_form) ; 2 client.address=ENG_subnet authenticate.new_pin_form(ENG_new_pin_form) ; 3 -- no modification to 'authenticate.new_pin_form' selects the default form 290 第 4 章 : プロパティ参照 authenticate.query_form() フォーム ベース認証を使用中の場合、このプロパティでは、はい/いいえの質問に回答する必要がある ときにユーザーに表示する形式が選択されます。 構文 authenticate.query_form(query-form-name) ここで、query-form-name は、有効なクエリ形式の名前です。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. サブネット HR_subnet からのすべてのトラフィックではクエリ形式 HR_query_form を使用する 必要があります。 2. サブネット ENG_subnet からのすべてのトラフィックではクエリ形式 ENG_query_form を使用す る必要があります。 3. その他すべてのトラフィックではデフォルトの認証フォームを使用します。 define subnet HR_subnet 10.10.0.0/16 end define subnet ENG_subnet 10.9.0.0/16 end <Proxy> authenticate(myrealm) authenticate.mode(form-cookie-redirect) <Proxy> ; 1 client.address=HR_subnet authenticate.query_form(HR_query_form) ; 2 client.address=ENG_subnet authenticate.query_form(ENG_query_form) ; 3 -- no modification to 'authenticate.query_form' selects the default form 291 SGOS 6.4 Content Policy Language リファレンス authenticate.redirect_stored_requests() アップストリーム ホストがリダイレクト応答を送信する場合、 フォーム ベース認証時に格納された 要求をリダイレクトできるかどうかを特定します。 構文 authenticate.redirect_stored_requests(yes|no) レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 <Proxy> authenticate.redirect_stored_requests(yes) 292 第 4 章 : プロパティ参照 authenticate.surrogate_refresh_time() サロゲートを信頼できる秒数を指定します。 こ のプロ パティ を使用 して、サ ロゲー ト資格 情報を 信頼す る秒数 を制御 します。 サ ロゲ ートは、 または以前に認証された接続のいずれかです。 この時間が経過すると、 サロゲー Cookie、IP アドレス、 トは信頼されなくなり、実際の資格情報を再検証してリフレッシュすることが必要になります。 このプロパティは、レルム内の対応する設定をオーバーライドします。このプロパティが存在しない 場合は、レルムの設定が適用されます。 構文 authenticate.surrogate_refresh_time(seconds) ここで、 seconds はサロゲート資格情報を信頼することができる秒数です ( すなわち、IP サロゲート、 接続サロゲート )。その時間が経過した後は、 実際の資格情報を検証する必要があ Cookie サロゲート、 ります。 デフォルト値は 1 です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Admin • 適用対象 : プロキシ トランザクション、管理トランザクション 例 サロゲートのリフレッシュ時間を 1 時間に設定します。 <proxy> authenticate(myrealm) authenticate.surrogate_refresh_time(3600) 293 SGOS 6.4 Content Policy Language リファレンス authenticate.tolerate_error() ユーザー認証の期間に特定のエラーを許容するように指定します。 このプロパティを使用して、認証を試行しつつ、 指定したエラーで認証に失敗した場合でもトランザ クションの続行を許可する動作をサポートできます。 重要メモ : エラー グループ all を許容すると、need_credentials を含むすべての認証エラーが許 容されます。指定すると、ユーザーに対してチャレンジが実行されません。これは、多くの場合に望ま しくない動作です。エラー グループ「all」は慎重に使用してください。 構文 authenticate.tolerate_error.<error>(yes|no) authenticate.tolerate_error[<error>,...](yes|no) authenticate.tolerate_error(<error>,...) 各引数の意味は次のとおりです。 authenticate.tolerate_error(<error>,?) authenticate.tolerate_error[<error>?](yes) と同等です。 • 認証を受けずにトランザクションを続行するよう指定します。 yes: エラーを許可し、 • トランザクションを終了するよう指定します。 no: エラーを許可せず、 • <error>,... : 単独エラーまたはエラー グループを指定します。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy • 適用対象 : プロキシ トランザクション 例 パスワードの期限切れ後にパスワード変更ページにユーザーをリダイレクトします。 <proxy> authenticate(realm) authenticate.tolerate_error(expired_credentials) <proxy> user.authentication_error=(expired_credentials) action.redirect_to_password_change_page define action redirect_to_password_change_page redirect(302, '.*', 'http://ourcompany.com/password_change'); end 294 は、 第 4 章 : プロパティ参照 authenticate.use_url_cookie( ) このプロパティを使用して、 サード パーティの Cookie を明示的に無効にしているユーザーを認証し ます。 注意 : 値を yes にすると、ページの読み込みで問題が発生した場合 ( エラー ページが表示された場合 や、 認証チャレンジをキャンセルした場合 ) に、cfauth Cookie が表示されます。Cookie はパケッ ト追跡でも表示できますが、通常動作時のブラウザ URL ウィンドウや履歴に表示することはで きません。 構文 authenticate.use_url_cookie(yes|no) デフォルトは no です。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 関連項目 プロパティ: authenticate.mode() 295 SGOS 6.4 Content Policy Language リファレンス authorize.add_group() デフォルト グループを認証済みユーザーに追加します。 このプロパティを使用して、認証済みユーザーに追加する単一グループまたはグループのリストを指 定できます。このプロパティは、ユーザーが正常に認証された場合にのみ使用できます。 構文 authorize.add_group(<group>,...) 各引数の意味は次のとおりです。 <group>,... : ユーザーに追加するグループまたはグループ リストを指定します。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Admin • 適用対象 : すべてのトランザクション 例 認証に成功しても、承認サーバーとの通信エラーが原因で承認に失敗した場合に、ユーザーをデフォ ルト グループに追加します。 <proxy> authenticate(realm) authorize.tolerate_error(communication_error) <proxy> user.authorization_error=(communication_error) authorize.add_group(default_group) 296 第 4 章 : プロパティ参照 authorize.tolerate_error() ユーザー承認の期間に特定のエラーを許容するように指定します。 このプロパティを使用して、承認を試行しつつ、指定したエラーで承認に失敗した場合でもトランザ クションの続行を許可する動作をサポートできます。 注意 : このプロパティがポリシーで明示的に指定されていない場合は、デフォルトで、すべての authenticate.tolerate_error プロパティで指定されているものと同じエラーが許容されます。 構文 authorize.tolerate_error.<error>(yes|no) authorize.tolerate_error[<error>,...](yes|no) authorize.tolerate_error(<error>,...) 各引数の意味は次のとおりです。 authorize.tolerate_error[<error>?](yes) と同等です。 authorize.tolerate_error(<error>,?) は、 • 承認データなしでトランザクションを続行するよう指定します。 yes: エラーを許可し、 • トランザクションを終了するよう指定します。 no: エラーを許可せず、 • <error>,... : 単独エラーまたはエラー グループを指定します。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy • 適用対象 : プロキシ トランザクション 例 認証に成功しても、承認サーバーとの通信エラーが原因で承認に失敗した場合に、ユーザーをデフォ ルト グループに追加します。 <proxy> authenticate(realm) authorize.tolerate_error(communication_error) <proxy> user.authorization_error=(communication_error) authorize.add_group(default_group) 297 SGOS 6.4 Content Policy Language リファレンス bypass_cache( ) 要求に対してキャッシュをバイパスできるかどうかを決定します。yes に設定すると、キャッシュはク エリされず、応答はキャッシュに格納されません。デフォルトの動作 ( 標準のキャッシュ動作に従いま す ) を指定するには、no に設定します。 静的および動的バイパス リストでは、送信先 IP アドレスに基づいてトラフィックがキャッシュをバ イパスできるようにするのに対し、bypass_cache プロパティは、クライアントのプロパティに基づい てバイパスできるようにするために指定します。たとえば、 このプロパティを使用して、特定のユー ザーまたはユーザー グループがキャッシュをバイパスできるようにすることができます。 このプロパティを yes に設定すると、コンテンツがキャッシュされている場合でも、Flash ビデオは サーバーから直接に再生されます。no ( デフォルト ) に設定すると、ビデオのキャッシュされている部 分はキャッシュから再生され、キャッシュされていない部分は OCS から再生されます。 トラフィックは、アプリケーション全体ではなく、ストリーム単位で適用されます。 構文 bypass_cache(yes|no) デフォルトは no です。 レイヤおよびトランザクション メモ • <Proxy> レイヤでのみ使用します。 • HTTP、 HTTPS、 FTP over HTTP、および透過的 FTP トランザクションに適用されます。 例 ; Bypass the cache for requests from this client IP address. client.address=10.25.198.0 bypass_cache(yes) 関連項目 • プロパティ: advertisement( )、always_verify( )、cache( )、 cookie_sensitive( )、 direct( )、 dynamic_bypass( )、 force_cache( )、 pipeline( )、 refresh( )、 ttl( )、 ua_sensitive( ) 298 第 4 章 : プロパティ参照 cache( ) HTTP と FTP のキャッシュ動作を制御します。いくつかの CPL プロパティがキャッシュ動作に影響 します。 キャッシュへのアクセスは行われず、 bypass_cache(yes) を設定すると、 cache( ) の値は無効に • なります。 キャッシュ可能な応答の定義が cache(yes) を設定すると、 force_cache プロパティ設定により、 • 変更されます。 • このプロパティを yes ( デフォルト ) に設定すると、VOD のコンテンツがキャッシュされます。no に設定されているときに、ファイルが完全にキャッシュされると、ビデオはキャッシュから再生さ れます。no に設定されているときに、 ファイルがキャッシュされないか部分的にキャッシュされ ると、 ビデオはパススルー モードで再生されます。 • キャッシュ動作に cookie_sensitive(yes) プロパティと ua_sensitive(yes) プロパティには、 対して cache(no) と同じ効果があります。 キャッシュ動作に影響するその他の CPL プロパティの一覧については、次の「関連項目」セクションを 参照してください。プロパティ間の設定における競合は、評価の終了時に最後に設定されたプロパ ティ値を使用する CPL 評価論理によって解決されます。 構文 cache(yes|no) デフォルトは yes です。 各引数の意味は次のとおりです。 • つまり、キャッシュ可能な場合は、配信元サーバーからの応 yes: デフォルトの動作を指定します。 答をキャッシュします。 • この URL で以前にキャッシュされたオブジェクトをすべて削 no: 応答をキャッシュに格納せず、 除します。 レイヤおよびトランザクション メモ • <Cache> レイヤでのみ使用します。 • プロキシ トランザクションに適用されます。 例 ; Prevent objects at this URL from being added to the cache. url=http://www.example.com/docs cache(no) ; This example shows use of cache(yes) in an exception to broader no-cache policy. define url.domain condition non_cached_sites http://example1.com http://example2.com end 299 SGOS 6.4 Content Policy Language リファレンス <cache> condition=non_cached_sites cache(no) <cache> url.extension=(gif, jpg) cache(yes) ; OK to cache these file types regardless. 関連項目 • プロパティ: advertisement( )、always_verify( )、 bypass_cache( )、 cookie_sensitive( )、 direct( )、 dynamic_bypass( )、 force_cache( )、 pipeline( )、 refresh( )、 ttl( )、 ua_sensitive( ) 300 第 4 章 : プロパティ参照 check_authorization( ) CAD (Caching Authentication Data) および CPAD (Caching Proxy-Authenticated Data) のサポートに 関連して check_authorization( ) を使用するのは、アップストリームのデバイスでユーザーが認証 して承認されることが時折必要になる ( 常時必要になるのでも、決して必要にならないのでもない ) こ とがわかっている場合です。 値 を yes に 設 定 す る と、GIMS (Get If Modified Since) で 承 認 ア ッ プ ス ト リ ー ム が チ ェ ッ ク さ れ、 “Cache-Control: must-revalidate” ヘッダーがダウンストリーム応答に追加されます。 構文 check_authorization(yes|no) デフォルトは no です。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • HTTP および RTSP プロキシ トランザクションに適用されます。 関連項目 • 条件 : authenticated=、 group=、 has_attribute.name=、 http.transparent_authentication=、 realm=、 user=、 user.domain= • プロパティ: authenticate( )、authenticate.force( ) 301 SGOS 6.4 Content Policy Language リファレンス client.address.login.log_out_other() この IP アドレスでの現在のログイン以外のログインをすべてログアウトします。 このプロパティを使用して、現在の IP アドレスで、トランザクションの現在のログイン以外のログ インをすべてログアウトします。他のユーザーがこの IP アドレスでトランザクションを続行するに は、 再認証を受ける必要があります。 構文 client.address.login.log_out_other(yes|no) デフォルト値は yes です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Admin • 適用対象 : プロキシ トランザクション、管理トランザクション 例 この IP アドレスに複数のログインがある場合に、他のログインをログアウトします。 <proxy> client.address.login.count=2.. client.address.login.log_out_other(yes) 302 第 4 章 : プロパティ参照 client.certificate.require( ) SSL ネゴシエーション時にクライアントから証明書を要求するかどうかを制御します。 構文 client.certificate.require(yes|no) デフォルト値は no です。 HTTPS フォワード プロキシ トランザクションの場合、 HTTPS リバース プロキ シ トランザクションの場合、 デフォルト値は対応するリバース プロキシ サービスの verify-client 属 性の値と同じです。 レイヤおよびトランザクション メモ • <SSL> および <Proxy> レイヤで使用します。 • HTTPS フォワードおよびリバース プロキシ トランザクションに適用されます。 例 この HTTPS フォワード プロキシ ポリシーは、同意証明書を実装します。クライアント証明書を送信 するには、クライアント Web ブラウザが必要です。ユーザーは、定義済みの 2 つの証明書のいずれかを 選択することができます。1 つは、プロキシに SSL セッションをインターセプトする許可を与える証明 書、もう 1 つはプロキシにこの許可を与えない証明書です。このようにしてエンドユーザーは、SSL セッションがインターセプトされることに明示的に同意します。 <SSL> ssl.proxy_mode=https-forward-proxy client.certificate.require(yes) <SSL> ssl.proxy_mode=https-forward-proxy OK client.certificate.common_name = "Yes decrypt my data" FORCE_DENY 303 SGOS 6.4 Content Policy Language リファレンス client.certificate.validate( ) SSL 接続を確立するときに、クライアントの X.509 証明書を検証するかどうかを決定します。 構文 client.certificate.validate(yes|no) デフォルト値は、接続を受け入れる HTTPS サービスの設定から取得されます。 レイヤおよびトランザクション メモ • <SSL> レイヤで使用します。 • HTTPS フォワードおよびリバース プロキシ トランザクションに適用されます。 例 <SSL> client.certificate.validate(yes) 関連項目 • 304 プロパティ: server.certificate.validate( ) 第 4 章 : プロパティ参照 client.certificate.validate.check_revocation() クライアントの X.509 証明書の失効をチェックするかどうかを決定します。 構文 client.certificate.validate.check_revocation(auto|ocsp|local|no) 各引数の意味は次のとおりです。 • 存在しない場合は auto: OCSP が存在する場合はそのプロトコルに従って証明書をチェックし、 ローカルにインストールされている失効リストと比較してチェックします。 • ocsp: OCSP に従って証明書をチェックします。 • no: 証明書が失効しているかどうかチェックしません。 • local: ローカルにインストールされている失効リストと比較してチェックします。 デフォルト値は auto です。 レイヤおよびトランザクション メモ • 有効なレイヤ : SSL。 • HTTPS フォワードおよびリバース プロキシ トランザクションに適用されます。 例 Sample usage: <SSL> client.certificate.validate.check_revocation(local) 305 SGOS 6.4 Content Policy Language リファレンス client.connection.dscp() クライアント側の Outbound QoS/DSCP 値を制御します。 構文 client.connection.dscp(dscp_value) ここで、dscp_value は 0..63 | af11 | af12 | af13 | af21 | af22 | af23 | af31 | af32 | af33 | af41 | af42 | af43 | best-effort | cs1 | cs2 | cs3 | cs4 | cs5 | cs6 | cs7 | ef | echo | preserve です。 特殊な値 preserve は、プライマリ サーバー接続の受信 DSCP 値を追跡し、 その値をクライアント接 続のパケット送信時の値として使用することを意味します。特殊な値 echo は、送信パケットの DSCP 値が受信パケットの DSCP 値と同じ値を使用することを意味します。 デフォルト値は preserve です。 レイヤおよびトランザクション メモ • <Proxy> および <DNS-Proxy> のレイヤで有効です。 • すべてのトランザクションに適用されます。 例 最初の QoS ポリシー ルールでは、クライアントの送信 QoS/DSCP 値を echo に設定し、2 番目の QoS ポリシー ルールではクライアントの送信 QoS/DSCP 値を 50 に設定します。 <proxy> client.connection.dscp(echo) <proxy> client.connection.dscp(50) 306 第 4 章 : プロパティ参照 cookie_sensitive( ) 要求によって提供されるオブジェクトが cookie の値によって変化することを宣言することで、キャッ シュ動作の変更に使用されます。yes を設定するとこの動作を指定し、no を設定すると、HTTP ヘッ ダーに基づいてキャッシュする、デフォルトの動作となります。 cookie_sensitive(yes) を使用すると cache(no) と同じ結果になります。 「関連項目」セクションにリストされているように、キャッシュ動作に影響を与える CPL プロパティは 数多くあります。プロパティ間の設定における競合は、評価の終了時に最後に設定されたプロパティ 値を使用する CPL 評価論理によって解決されます。 構文 cookie_sensitive(yes|no) デフォルト値は no です。 レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • FTP over HTTP トランザクションを除く HTTP プロキシ トランザクションに適用されます。 関連項目 • プロパティ: advertisement( )、always_verify( )、 bypass_cache( )、 cache( )、 direct( )、 force_cache( )、 pipeline( )、 refresh( )、 ttl( )、 ua_sensitive( ) 307 SGOS 6.4 Content Policy Language リファレンス delete_on_abandonment( ) クライアントの接続が、オブジェクトのフェッチが完了する前に中断された場合、オブジェクトを キャッシュすべきかどうかを指定します。 特定のオブジェクトを同時に要求する可能性のあるすべてのクライアントが、オ yes に設定した場合、 ブジェクトの配信前に接続を終了すると、配信元サーバーからのオブジェクトのフェッチは破棄さ れ、 オブジェクトの前のインスタンスはキャッシュから削除されることを指定します。 no に設定した場合、特定のオブジェクトを同時に要求する可能性のあるすべてのクライアントが、オ ブジェクトの配信前に接続を終了すると、 配信元サーバーからのオブジェクトのフェッチは完了し、 オブジェクトのインスタンスはキャッシュにコピーされることを指定します。 auto に設定した場合、 接続が ADN を介しているか、 bandwidth-gain が有効になっていると yes の ように動作し、そうでないと no のように動作します。 適用できない Flash VOD キャッシュの場合、このプロパティは無視されます。 構文 delete_on_abandonment(yes|no|auto) デフォルト値は no、yes、または auto です。 レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • プロキシ トランザクションに適用されます。 例 使用例 : <Cache> delete_on_abandonment(auto) 関連項目 • 308 プロパティ: advertisement( )、always_verify( )、bypass_cache( )、 cache( )、 cookie_sensitive( ) 、 direct( ) 、 dynamic_bypass( ) 、 force_cache( ) 、 pipeline( ) 、 refresh( )、 ttl( )、 ua_sensitive( ) 第 4 章 : プロパティ参照 deny( ) サービスを拒否します。 拒否は allow または exception( ) でオーバーライドできます。後続の allow でオーバーライドでき ない方法でサービスを拒否するには、force_deny( ) または force_exception( ) を使用します。 authenticate( ) と deny( ) の間の関係は authenticate.force ) プロパティで制御されます。 デフォルトでは、deny( ) は authenticate( ) をオーバーライドします。これは、認証前にトランザ クションを拒否できることになり、その結果、ユーザー ID はログに使用できないことを示します。 同様に、 socks.authenticate( ) と deny( ) との関係は socks.authenticate.force( ) プロパティ で制御されます。 デフォルトでは、 deny( ) は socks.authenticate( ) をオーバーライドします。 構文 deny deny(details) ここで details は、ユーザーに表示されるメッセージを定義する文字列です。details の文字列に CPL 代入変数を使用してもかまいません。 説明 返される例外の deny(details) プロパティは exception(policy_denied, details) と同等です。 ID は、 exception.id= を使用して <Exception> レイヤでテストできます。 これは、 拒否がユーザー ID に依存 HTTP の場合、policy_denied 例外は 403 Forbidden 応答になります。 しない場合に適しています。 拒否がユーザー ID に依存しない場合、 実際には deny.unauthorized( ) を 使用して別の資格情報で要求を再試行する機会をユーザーに与えます。 レイヤおよびトランザクション メモ • および <Admin> レイヤで使用されます。<Forward> レイヤでは、267 <Cache>、 <Proxy>、 <SSL>、 ページの「access_server( )」を使用します。 • すべてのトランザクションに適用されます。 例 deny url.address=10.25.100.100 関連項目 • 条件 : exception.id= • プロパティ: allow、authenticate.force( )、deny.unauthorized( )、force_deny( )、 never_refresh_before_expiry( )、 never_serve_after_expiry( )、 remove_IMS_from_GET( )、 remove_PNC_from_GET( )、 remove_reload_from_IE_GET( )、 socks.authenticate( )、 socks.authenticate.force( ) • 付録 D:「CPL 代入値」も参照してください。 309 SGOS 6.4 Content Policy Language リファレンス deny.unauthorized( ) deny.unauthorized プロパティは SG にチャレンジ (401 Unauthorized または 407 Proxy Authorization Required) を発行するように指示します。現在の ID ではリソースにアクセスできないが、別の ID を使 用するとアクセスできる可能性があることをクライアントに伝えます。一般的にブラウザでは、ユー ザーが ID を変更できるようにダイアログを表示して応答します ( ユーザーがキャンセルする場合に さらにヘルプ情報が表示されるように、チャレンジ ページに details 文字列が表示されます )。 一般的に、ポリシー ルールですべての人のアクセスを禁止している場合は deny( ) を使用し、 一部の 人だけのアクセスを禁止する場合は deny.unauthorized を使用します。 構文 deny.unauthorized deny.unauthorized(details) ここで details は、ユーザーに表示されるメッセージを定義する文字列です。details の文字列に CPL 代入変数を使用してもかまいません。 説明 現在のポリシーに authenticate() または authenticate.force( ) プロパティを使用するルール が含まれている場合、deny.unauthorized( ) プロパティは exception(authorization_failed) と同等です。認証を要求するルールがポリシーに含まれていない場合、deny.unauthorized( ) は exception(policy_denied) と同等です。 返される例外の ID は、exception.id= を使用して <Exception> レイヤでテストできます。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • HTTP トランザクションに適用されます。他のプロトコルの場合、プロパティは deny( ) と同等 です。 関連項目 310 • 条件 : exception.id= • プロパティ: deny( )、exception( )、force_deny( )、force_exception( ) • 付録 D:「CPL 代入値」も参照してください。 第 4 章 : プロパティ参照 detect_protocol( ) プロトコル認証を起動するかどうか、またどのプロトコルを認証するかを指定します。指定されたい ずれかのプロトコルが検出された場合、接続は適切なアプリケーション プロキシで処理されます。 構文 detect_protocol(all|none) detect_protocol(protocol_list) detect_protocol.protocol(yes|no) detect_protocol[protocol_list](yes|no) 各引数の意味は次のとおりです。 S protocol_list はプロトコルのコンマ区切り形式のリストです。 S protocol は http、 bittorrent、edonkey、fasttrack、gnutella、epmapper、SSL のいずれかです。 デフォルト値は all です。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • および TCP Tunnel のトランザクションに適用されます。 SOCKS、HTTP、 例 <Proxy> detect_protocol(gnutella) 関連項目 • プロパティ: force_protocol( ) 311 SGOS 6.4 Content Policy Language リファレンス direct( ) SG が要求を転送するように設定されている場合、親プロキシまたは SOCKS サーバーに要求が転送さ れないようにするために使用されます。 yes, を設定すると、 <Forward> レイヤ ポリシーはトランザクションに対して評価されません。 構文 direct(yes|no) デフォルト値は no であり、要求が転送できるようになります。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • FTP over HTTP または透過 FTP トランザクションには適用されません。 関連項目 • 312 プロパティ: bypass_cache( )、 dynamic_bypass( )、 force_cache()、 forward( )、 reflect_ip( ) 第 4 章 : プロパティ参照 dns.respond( ) 指定された DNS RCODE を使用して、プロキシ処理された DNS クエリを終了します。 構文 dns.respond(noerror|formerr|servfail|nxdomain|notimp|refused|yxdomain|yxrrset|nx rrset|notauth|notzone|numeric range from 0 to 15) レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 または「A」 以外の QTYPE を使用する DNS クエリは「実装されていない」と見なされます。 1. 「PTR」 2. example.com で終わるホストに対するすべての DNS クエリは拒否されます。 <DNS-Proxy> ; 1 dns.request.type=!(A||PTR) dns.respond(notimp) <DNS-Proxy> ; 2 dns.request.name=.example.com dns.respond(refused) 313 SGOS 6.4 Content Policy Language リファレンス dns.respond.a( ) 指定された応答でタイプ「A」 のプロキシ処理された DNS クエリを終了します。 構文 dns.respond.a(ip-address[,ip-address]*[,ttl]) dns.respond.a(hostname[,ip-address]*[,ttl]) dns.respond.a([hostname,]vip[,ttl]) レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. host1.example.com に対する DNS クエリは、TTL が 7200 秒で 10.10.10.1 に解決されます。 2. host2.example.com に対する DNS クエリは、CNAME が myhost.example.com、 TTL が 9600 秒で 10.10.10.2 に解決されます。 <DNS-Proxy> ; 1 dns.request.name=host1.example.com dns.respond.a(10.10.10.1, 7200) ; 2 dns.request.name=host2.example.com \ dns.respond.a(myhost.example.com, 10.10.10.2, 9600) 314 第 4 章 : プロパティ参照 dns.respond.aaaa( ) 応答の回答セクションにタイプ AAAA RR (IP アドレス当たり 1 つの RR) を生成します。 [<ip-address>]* を vip キーワードで置き換えることもできます。vip キーワードは、プロキシ SG のインターフェース IP を使用してタイプ AAAA RR を作成します。 構文 dns.respond.aaaa(ip-address[,ip-address]*[,ttl]) dns.respond.aaaa(hostname[,ip-address]*[,ttl]) dns.respond.aaaa([hostname,]vip[,ttl]) レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 これらの例では、次のポリシーを実装します。 • 次のポリシーでは、DNS 要求タイプが AAAA の場合、AAAA RR (2001::1) の DNS 応答はリクエ スタに送信されることを指定します。 DNS-Proxy> dns.request.type=AAAA dns.respond.aaaa(2001::1) • 次のポリシーでは、 サーバーからの DNS 応答に AAAA RR equaling 2001::1 が含まれている場 合、 このポリシー DNS 応答を AAAA RR (2001::2) のクライアントに送信することを指定します。 によって、 プロキシ SG は DNS サーバーから返される AAAA RR レコードを再書き込みできます。 <DNS-Proxy> dns.response.aaaa=2001::1 dns.respond.aaaa(2001::2) 注意 : DNS プロキシでは IPv6 AAAA レコードをキャッシュします。 メモ • vip と <ip_address> は一緒に使用できません。 たとえば、 dns.respond.a(vip, 10.1.1.1) は許可されていません。 • <ip-address> の最大数は 35 です。 • <hostname> が記述されていると、タイプ CNAME RR が応答に挿入されます。すべての <ip-address> タイプ AAAA RR は、 質問セクションの qname ではなく <hostname> を参照し ます。 <hostname> の後に <ip-address> が記述されていないと、応答にタイプ CNAME RR だ けが生成されます。 • デフォルトの <ttl> 値は 3600 です。 315 SGOS 6.4 Content Policy Language リファレンス dns.respond.ptr( ) 指定された応答でタイプ「PTR」のプロキシ処理された DNS クエリを終了します。 構文 dns.respond.ptr(hostname[,ttl]) レイヤおよびトランザクション メモ • <DNS-Proxy> レイヤで使用します。 • DNS プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. 10.10.10.1 に対する DNS 逆引きクエリは、TTL が 7200 秒で host1.example.com に解決さ れます。 2. 10.10.10.2 に対する DNS 逆引き クエリは、デフォルトの TTL で host2.example.com に解 決されます。 <DNS-Proxy> ; 1 dns.request.address=10.10.10.1 dns.respond.ptr(host1.example.com, 7200) ; 2 dns.request.address=10.10.10.2 dns.respond.ptr(host2.example.com) 316 第 4 章 : プロパティ参照 dynamic_bypass( ) 特定の透過要求をプロキシで処理するのではなく、実際には SG 動的バイパス技法に従うことを示す ために使用されます。 ただし、コミットされた拒否 dynamic_bypass(yes) プロパティは authenticate() より優先します。 は dynamic_bypass(yes) より優先します。 構文 dynamic_bypass(yes|no) デフォルト値は no です。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • 透過 HTTP トランザクションにのみ適用されます。 関連項目 • プロパティ: advertisement( )、always_verify( )、bypass_cache( )、 cache( )、 cookie_sensitive( )、 delete_on_abandonment( )、 direct( )、 force_cache()、 pipeline( )、 refresh( )、 ttl( )、 ua_sensitive( ) 317 SGOS 6.4 Content Policy Language リファレンス exception( ) ユーザーに返される組み込みまたはユーザー定義の応答を選択します。 allow でオーバーラ exception( ) プロパティは allow または deny( ) でオーバーライドされます。 イドできない例外を設定するには、force_exception( ) を使用します。 返される例外の ID は、 exception.id= を使用して <Exception> レイヤでテストできます。 注意 : 選択された例外応答の Content-Length が 512 バイト以下であると、Internet Explorer は代わり に「フ レ ン ド リ ー」エ ラ ー メ ッ セ ー ジ を 使 用 す る こ と が あ り ま す。 こ の 動 作 を 防 ぐ に は、 exception.autopad(yes) を使用します。 構文 exception(exception_id, details, string_name) 各引数の意味は次のとおりです。 • またはユーザー定義の例外ページを参照する形式 exception_id: 組み込み例外の名前であるか、 user_defined.exception_id の名前のいずれかです。 • details: 選択された例外で $(exception.details) の代わりに使用されるテキスト文字列です。 • string_name: $(exception.format) の代わりに使用される、 define string で定義された文字 列名です。名前の付けられた文字列は、 例外の形式フィールドをオーバーライドします。 文字列は 代入値を含むことができます。 レイヤおよびトランザクション メモ • <SSL>、および <Admin> のレイヤで使用されます。 <Cache>、 <Proxy>、 • すべてのトランザクションに適用されます。 例 <Proxy> condition=forbidden_sites \ exception (content_filter_denied,”attempt to access forbidden site,” \ my_blocked_content_format) define string my_blocked_content_format ><html> ><head> ><title>Notice<\title> ><\head> ><body> >Access Blocked >Reason $(exception.details) ><\body> ><\html> end define condition forbidden_sites url.domain=//badcompany.com/ 318 第 4 章 : プロパティ参照 ...; additional sites omitted end 関連項目 • 条件 : exception.id= • プロパティ: allow、 deny( )、 deny.unauthorized( )、 exception.autopad( )、 force_deny( )、 force_exception( ) • 定義 : string • 付録 D:「CPL 代入値」も参照してください。 319 SGOS 6.4 Content Policy Language リファレンス exception.autopad( ) 応答本文の末尾にスペースを入れて HTTP 例外応答をパッドし、Content-Length が 513 文字以上にな るようにします。 設定されている例外の Content-Length が 512 文字より短い場合に、 返される例 Internet Explorer が、 外応答をわかりやすいエラー メッセージに置き換えるのを防ぐには、yes の設定を使用します。 構文 exception.autopad(yes|no) 各引数の意味は次のとおりです。 • yes: 自動パディングを有効にします。 • no: 自動パディングを無効にします。 デフォルト値は yes です。 レイヤおよびトランザクション メモ • <Exception> レイヤのみで使用します。 • HTTP トランザクションに適用されます。 関連項目 320 • 条件 : exception.id= • プロパティ: exception( )、 force_exception 第 4 章 : プロパティ参照 force_cache( ) それ以外の場合、 HTTP 応答のキャッシュを強制的に行う理由を指定します。 HTTP 応答はキャッシュ不 可と見なされます。 bypass_cache(no)、 および ua_sensitive(no) cache(yes)、 cookie_sensitive(no)、 プロパティ設定のすべてが有効でなければ、 HTTP では force_cache( ) プロパティの値が無視され ます。 ストリーミング プロキシの場合は、 bypass_cache(no) が設定されていなければ、 force_cache( ) プロパティの値は無視されます。 force_cache( ) プロパティは、 通常、 条件と組み合わせて使用します。 次の例 3 を参照してください。 構文 force_cache.<reason>(yes|no) <-adds/removes one reason force_cache[reason1,reason2,...](yes|no) <-adds/removes multiple reasons force_cache(reason1,reason2,...) <-resets reasons force_cache(all|no) <-forces caching for all supported reasons or clears all デフォルトでは、応答は強制的にキャッシュされません。 HTTP またはストリーミング プロトコルの デフォルトのキャッシュ動作は、force_cache(no) を使用して復元されます。 <reason> は、次の文字列を使用して指定できます。HTTP プロキシでは 9 つすべての理由をサ ポートしますが、 ストリーミング プロキシの場合は、 次に示すようにサポートが制限されて います。 response-no-cache: Cache-Control: no-cache と Pragma: no-cache の 両 方 の 応 答 ヘ ッ ダー/ メタ タグを含みます。RTSP または HTTP を介した Windows Media と RTSP または HTTP を介 した RealMedia でサポートされます。 response-no-store: Cache-Control: no-store 応答ヘッダー/ メタ タグを参照します。RTSP ま た は HTTP を 介 し た Windows Media で サ ポ ー ト さ れ ま す が、RTSP ま た は HTTP を 介 し た RealMedia ではサポートされません。 private: Cache-Control: private 応答ヘッダー/ メタ タグを参照します。RTSP または HTTP を介した Windows Media でサポートされますが、 RTSP または HTTP を介した RealMedia ではサ ポートされません。 expired: HTTP 応答には Expires ヘッダーがあり、その値は過去のものです。ストリーミング プロ キシではサポートされていません。 set-cookie: Set-Cookie と Set-Cookie2 の両方の応答ヘッダーを含みます。ストリーミング プ ロキシではサポートされていません。 vary: vary 応答ヘッダーを参照します。ストリーミング プロキシではサポートされていません。 unknown-transfer-encoding: Transfer-Encoding 応答ヘッダー値が不明です。ストリーミン グ プロキシではサポートされていません。 missing-http-version: HTTP 応答の 1 行目の先頭に 「HTTP/」 が含まれていないため、 プロキシ SG はプロトコル / バージョンを認識しません。ストリーミング プロキシではサポートされていません。 321 SGOS 6.4 Content Policy Language リファレンス personal-pages: 上級ユーザー向け、またはサポート用のみ。プロキシ SG は、 304 でも画像でもな い Type-N の応答を最初に検索し、その応答にクエリ文字列または Cookie 要求ヘッダーがあるかど うかを確認します。 クエリ文字列または Cookie 要求ヘッダーが存在する場合、 プロキシ SG はその応 答をキャッシュ不可にしますが、force_cache(personal-pages) プロパティでそれをオーバー ライドできます。ストリーミング プロキシではサポートされていません。 レイヤおよびトランザクション メモ • <Cache> レイヤでのみ使用します。 • プロキシ トランザクションに適用され <Cache> および <Exception> レイヤの両方を実行する、 ます。 例 例1 ; force caching for set-cookie reason for all responses <Cache> force_cache.set-cookie(yes) 例2 ; force caching for both expired & private reasons for all responses <Cache> force_cache[expired, private](yes) 例3 この例では、いくつかの条件が利用されています。一意の条件下で、さまざまな理由により強制的に キャッシュが実行されるなど、さまざまなアクションが実行されます。両方の条件が満たされると、両 方の force_cache 理由がオンのままになります。 ; force caching for expired & private reason but under different conditions. define condition is_mp3 response.header.Content-Type="application/mp3" end define condition is_somesite url.domain=somesite.com end <Cache> condition=is_mp3 force_cache.expired(yes) 322 第 4 章 : プロパティ参照 <Cache> condition=is_somesite force_cache.private(yes) 例4 force_cache(reason1,reason2,...) 構文 (yes|no なし ) により、理由がリセットされます。 <Cache> force_cache(set-cookie) <=== resets the reason to set-cookie only here <Cache> force_cache(private) <=== resets the reason to private only here 最後に、プライベートな理由 ( 最後に指定されたもの ) のみが有効になります。この構文は、指定された 以前の理由を上書きするため、別の理由でキャッシュをトリガするために独立して実行する他のポリ シーを追加できなくなる可能性があります。この構文は注意して使用してください。 関連項目 • プロパティ: advertisement( )、always_verify( )、bypass_cache( )、cache( )、 cookie_sensitive( )、 dynamic_bypass( )、 pipeline( )、 refresh( )、 ttl( )、 ua_sensitive( ) 323 SGOS 6.4 Content Policy Language リファレンス force_deny( ) 次の点を除いて、deny( ) と同じです。 force_deny( ) プロパティは、 • allow によってオーバーライドできません。 • 保留中の結果をオーバーライドします。 つまり、 その後 force_deny deny( ) に既に一致しており、 または force_exception に一致すると、後者がコミットされます。 • 直ちにコミットします。つまり、最初に一致したものが適用されます。 force_deny( ) プロパティは force_exception(policy_denied) と同じです。 構文 force_deny force_deny(details) ここで、details は policy_denied 例外内の $(exception.details) に代入されるテキスト文字列 です。 details 文字列には、 CPL 代入値パターンが含まれる場合もあります。 レイヤおよびトランザクション メモ • <SSL>、および <Admin> のレイヤで使用されます。 <Cache>、 <Proxy>、 • すべてのトランザクションに適用されます。 関連項目 324 • 条件 : exception.id= • プロパティ: deny()、force_exception() • 付録 D:「CPL 代入値」も参照してください。 第 4 章 : プロパティ参照 force_exception( ) 次の点を除いて、exception と同じです。 force_exception( ) プロパティは、 • allow によってオーバーライドできません。 • 保留中の結果をオーバーライドします。 つまり、 その後 force_deny( ) deny( ) に既に一致しており、 または force_exception( ) に一致すると、後者がコミットされます。 • 直ちにコミットします。つまり、最初に一致したものが適用されます。 構文 force_exception(exception_id) force_exception(details) ここで、details は指定された例外内の $(exception.details) に代入されるテキスト文字列です。 details 文字列には、 CPL 代入値パターンが含まれる場合もあります。 レイヤおよびトランザクション メモ • <SSL>、および <Admin> のレイヤで使用されます。 <Cache>、 <Proxy>、 • すべてのトランザクションに適用されます。 関連項目 • 条件 : exception.id= • プロパティ: deny( )、exception( )、exception.autopad( )、force_deny( ) • 付録 D:「CPL 代入値」も参照してください。 325 SGOS 6.4 Content Policy Language リファレンス force_patience_page( ) このプロパティでは、お詫びページのデフォルトのアプリケーションを制御します。 この構文は廃止されています。response.icap_feedback.force_interactive() を使用します。 構文 force_patience_page( yes|no ) force_patience_page.reason( yes|no ) force_patience_page( reason, ... ) force_patience_page[ reason, ...]( yes|no ) デフォルト値は no です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy • 適用対象 : HTTP プロキシ トランザクション 例 使用例 : <Proxy> force_patience_page(user-agent) 関連項目 • 326 プロパティ: response.icap_feedback.force_interactive( ) 第 4 章 : プロパティ参照 force_protocol( ) クライアント接続を特定のプロトコル タイプとして処理することを指定します。接続は適切なアプリ ケーション プロキシで処理されます。 構文 force_protocol(no|ssl|http|bittorrent|edonkey|gnutella|epmapper) デフォルト値は no です。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • および TCP Tunnel のトランザクションに適用されます。 SOCKS、HTTP、 例 <Proxy> force_protocol(gnutella) 関連項目 • プロパティ: detect_protocol( ) 327 SGOS 6.4 Content Policy Language リファレンス forward( ) 転送の動作を指定します。 デフォルトの転送フェールオーバー シーケンスに対するグローバル構成設定 (config>forwarding> ホストおよび (または) グループ エイリアスの特定 forward( ) プロパティは、 sequence) があります。 リストを使用して、デフォルトの転送フェールオーバー シーケンスをオーバーライドします。エイリ アスのリストには特別なトークン default が含まれる場合があります。 このトークンは、設定で定 義されたデフォルトの転送フェールオーバー シーケンスを組み込むために拡張したものです。 指定されたエイリアス リストでのみ重複できます。これは、デフォルトのフェールオーバー シーケン スで名前が付けられたホストまたはグループが、 alias_list でも明示的に名前が付けられる場合に 対応したためです。 また、デフォルトの転送エラー モードに対するグローバル構成設定 (config>forwarding>failure-mode) もあります。forward.fail_open( ) プロパティは設定された デフォルトをオーバーライドします。 構文 forward(alias_list|no) 各引数の意味は次のとおりです。 • 転送ホストと転送グルー alias_list: 指定されたエイリアス リストを介してこの要求を転送し、 プの両方を参照できます。SG は、指定されたホストまたはグループを介し、リストで指定された順 番にこの要求の転送を試行します。現在のホストまたはグループが停止している場合、必要に応じ て、 ヘルス チェックで決められたとおりに次のエイリアスに進みます。 • これらのプロパティによっては、SOCKS ゲート no: この要求の転送は転送ホストを介しません。 ウェイまたは ICP ホストが使用される場合があります。どちらも設定されていないと、要求は配 信元サーバーに直接送信されます。No は、設定で定義されたデフォルトのシーケンスをオーバー ライドします。 デフォルト値は default であり、alias_list の中の唯一のトークンです。 レイヤおよびトランザクション メモ • <Forward> レイヤでのみ使用します。 • 管理者、インスタント メッセージング、および SOCKS を除くすべてのトランザクションに適用さ れます。 関連項目 • 328 プロパティ: direct( )、 dynamic_bypass( )、 icp( )、 reflect_ip( )、 refresh( )、 socks_gateway( )、 socks_gateway.fail_open( )、 streaming.transport( ) 第 4 章 : プロパティ参照 forward.fail_open( ) 指定された転送ホスト、指定されたすべてのバックアップ、またはデフォルトのバックアップに接続 できない場合に、SG が要求の処理を終了するか、継続するかを制御します。 デフォルトの転送エラー モードに対するグローバル構成設定 (config>forwarding>failure-mode) があります。forward.fail_open( ) プロパティは設定されたデフォルトをオーバーライドします。 構文 forward.fail_open(yes|no) 各引数の意味は次のとおりです。 • 指定されたすべてのバックアップ、またはデフォルトのバックアップ yes: 指定された転送ホスト、 に接続できない場合に、要求の処理を継続します。要求は、SOCKS ゲートウェイまたは ICP を介し て送信される場合も、配信元サーバーに直接送信される場合もあります。 • 指定されたすべてのバックアップ、またはデフォルトのバックアップ no: 指定された転送ホスト、 に接続できない場合に、要求の処理を終了します。 デフォルト値は no です。 レイヤおよびトランザクション メモ • <Forward> レイヤでのみ使用します。 • 管理者、インスタント メッセージング、および SOCKS を除くすべてのトランザクションに適用さ れます。 関連項目 • プロパティ: bypass_cache( )、dynamic_bypass( )、forward( )、reflect_ip( )、 socks_gateway( )、 socks_gateway.fail_open( ) 329 SGOS 6.4 Content Policy Language リファレンス ftp.match_client_data_ip( ) 制御接続の IP アドレスまたはローカル物理 IP アドレスを持つクライアントに対してデータ接続を行 うかどうかを設定します。 構文 ftp.match_client_data_ip(yes|no) 各引数の意味は次のとおりです。 • yes: 制御接続の IP アドレスを使用してデータ接続を行います。 • no: ローカル物理 IP アドレスを使用してデータ接続を行います。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • FTP プロキシ トランザクションに適用されます。 例 <Proxy> ftp.match_client_data_ip(yes) 330 第 4 章 : プロパティ参照 ftp.match_server_data_ip( ) 制御接続の IP アドレスまたはローカル物理 IP アドレスを持つサーバーに対してデータ接続を行うか どうかを設定します。 構文 ftp.match_server_data_ip(yes|no) 各引数の意味は次のとおりです。 • yes: 制御接続の IP アドレスを使用してデータ接続を行います。 • no: ローカル物理 IP アドレスを使用してデータ接続を行います。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • FTP プロキシ トランザクションに適用されます。 例 <Proxy> ftp.match_server_data_ip(yes) 331 SGOS 6.4 Content Policy Language リファレンス ftp.server_connection( ) サーバーへの制御接続をいつ確立するかを指定します。deferred に設定すると、プロキシはサーバー への制御接続の確立を遅延します。 構文 ftp.server_connection(deferred|immediate) デフォルト値は immediate です。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • FTP トランザクションに適用されます。 関連項目 • 332 プロパティ: ftp.server_data( )、ftp.transport( ) 第 4 章 : プロパティ参照 ftp.server_data( ) この FTP トランザクションとともに使用するデータ接続のタイプを決定します。 構文 ftp.server_data(auto|active|passive) 各引数の意味は次のとおりです。 • EPSV for IPv6) データ接続を試行します。これに失 auto: 最初にパッシブ (PASV for IPv4、 敗すると、アクティブ (PORT for IPv4、EPRT for IPv6) に切り替わります。 • active: アクティブ データ接続を使用します。 • パッシブ データ接続は、一部のファイア passive: パッシブ データ接続を使用します。 ウォールで使用できません。 注意 : port および pasv 引数は、使用されなくなりました。これらの引数を使用する既存のポリシーを インストールすると、自動的に active および passive に変換されます。 レイヤおよびトランザクション メモ • <Forward> レイヤで使用します。 • FTP トランザクションに適用されます。 関連項目 • プロパティ: ftp.server_connection( )、ftp.transport( ) 333 SGOS 6.4 Content Policy Language リファレンス ftp.transport( ) アップストリーム転送メカニズムを特定します。 この設定は、確定的ではなく、選択されている転送ホストの能力に応じて異なります。 構文 ftp_transport(auto|ftp|http) デフォルト値は auto です。 各引数の意味は次のとおりです。 • 転送元および選択された転送ホストの機能に応じて、アップストリーム接続にデ フォルト転送を使用します。 • ftp: アップストリーム転送メカニズムとして FTP を使用します。 • http: アップストリーム転送メカニズムとして HTTP を使用します。 auto: レイヤおよびトランザクション メモ • <Forward> レイヤで使用します。 • ftp: スキーマを使用する URL の要求においてクライアントが HTTP プロトコルを使用する WebFTP トランザクションのみに適用されます。 関連項目 • 334 プロパティ: ftp.server_connection( )、ftp.server_data( ) 第 4 章 : プロパティ参照 ftp.welcome_banner( ) プロキシされた FTP トランザクションのウェルカム バナーを設定します。 構文 ftp.welcome_banner(default | no | substitution-string) 各引数の意味は次のとおりです。 S SG アプライアンスの設定が使用されます。 default では、 S ウェルカム バナーを返さないことを意味します。 no は、 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • FTP プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. HR_subnet からのすべての要求には、FTP ウェルカム バナー「クライアントのアドレス : このア プライアンスへようこそ」が表示されます。 2. ENG_subnet からのすべての要求には、デフォルトの FTP ウェルカム バナーが表示されます。 3. その他すべての要求には、FTP ウェルカム バナーは表示されません。 define subnet HR_subnet 10.10.0.0/16 end define subnet ENG_subnet 10.9.0.0/16 end <Proxy> ; 1 client.address=HR_subnet \ ftp.welcome_banner("$(client.address): Welcome to $(appliance.name)") ; 2 client.address=ENG_subnet ftp.welcome_banner(default) ; 3 ftp.welcome_banner(no) 関連項目 • 付録 D:「CPL 代入値」も参照してください。 335 SGOS 6.4 Content Policy Language リファレンス http.allow_compression( ) HTTP プロキシが転送中のデータを圧縮できるかどうかを決定します。 構文 http.allow_compression(yes|no) デフォルト値は no です。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • すべての HTTP トランザクション (proxy、refresh、pipeline) に適用されます。 例 <Proxy> http.allow_compression(yes) 関連項目 • 336 プロパティ: http.allow_decompression( ) 第 4 章 : プロパティ参照 http.allow_decompression( ) HTTP プロキシが転送中のデータを解凍できるかどうかを決定します。 構文 http.allow_decompression(yes|no) デフォルト値は no です。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • すべての HTTP トランザクション ( プロキシ、リフレッシュ、パイプライン ) に適用されます。 例 <Proxy> http.allow_decompression(yes) 関連項目 • プロパティ: http.allow_compression( ) 337 SGOS 6.4 Content Policy Language リファレンス http.client.allow_encoding( ) クライアントへの応答に使用できるエンコードを決定します。 構文 http.client.allow_encoding(encoding_or_client_list) http.client.allow_encoding.encoding(yes|no) http.client.allow_encoding[encoding_list](yes|no) 各引数の意味は次のとおりです。 S encoding_or_client_list は、 encoding または client_list のコンマ区切りのリストです。 S encoding_list は、 encoding のコンマ区切りのリストです。 S encoding は、 gzip または deflate の 1 つです。 S client は、 クライアントの要求に指定されたエンコードのリストによって置き換えられます。 デフォルト値は client_list です。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • すべての HTTP トランザクション ( プロキシ、リフレッシュ、パイプライン ) に適用されます。 例 <Proxy> http.client.allow_encoding(gzip) 関連項目 • 338 プロパティ: http.server.accept_encoding( ) 第 4 章 : プロパティ参照 http.client.persistence( ) HTTP クライアントの接続の永続性を制御します。 no に設定すると、現在のトランザクションが完了した後、クライアント接続は切断されます。 構文 http.client.persistence(yes|no|preserve) preserve オプションは、クライアント接続にサーバーの永続性を反映します。デフォルト値は HTTP の設定から取得され、そのデフォルトは「yes」です。 レイヤおよびトランザクション メモ • <Proxy> および <Exception> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 このプロパティによって、<Proxy> または <Exception> レイヤで使用できるポリシー条件に基づ き、各クライアント接続の永続性が制御されます。 次の例では、 指定されたサブネットが特定のホスト に接続し、 応答で特定のコンテンツ タイプを取得しないように、 クライアントの永続接続を無効にす るプロパティを説明します。 <Proxy> client.address=10.10.167.0/8 \ url.host=my_host.my_business.com \ response.header.Content-Type="text/html" \ http.client.persistence(no) 関連項目 • プロパティ: http.server.persistence( ) 339 SGOS 6.4 Content Policy Language リファレンス http.client.recv.timeout( ) クライアントからバイトを受信するソケット タイムアウトを設定します。 構文 http.client.recv.timeout(auto | recv-timeout) レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. HR_subnet からの要求は、200 秒で受信タイムアウトします。 2. example.com で終了するホストに送信されるすべての要求は、20 秒で受信タイムアウトします。 3. example.com ホストを除くすべてのリフレッシュ トラフィックは、300 秒で受信タイムアウトし ます。 define subnet HR_subnet 10.10.0.0/16 end <Proxy> ; 1 client.address=HR_subnet http.client.recv.timeout(200) <Forward> ; 2 server_url.domain=example.com http.server.recv.timeout(20) \ http.refresh.recv.timeout(auto) ; 3 http.refresh.recv.timeout(300) 340 第 4 章 : プロパティ参照 http.compression_level( ) http.allow_compression が true である場合に HTTP プロキシが使用する圧縮レベルを決定します。 構文 http.compression_level(low|medium|high) デフォルト値は low です。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • すべての HTTP トランザクション ( プロキシ、リフレッシュ、パイプライン ) に適用されます。 例 <Proxy> http.compression_level(medium) 関連項目 • プロパティ: http.allow_compression( ) 341 SGOS 6.4 Content Policy Language リファレンス http.force_ntlm_for_server_auth( ) http.force_ntlm_for_server_auth( ) はグローバル設定の微調整で、 http force-ntlm または http no force-ntlm CLI コマンドを使用して設定または設定解除できます。 Internet Explorer において、明示的にプロキシ処理されたときに SG アプラ force_ntlm コマンドは、 イアンスを介した配信元コンテンツ サーバー (OCS) の NTLM 認証を行えないという Microsoft の制 限事項を回避するために使用されます。 この問題を修正するために、Blue Coat は「Proxy-Support: Session-based-authentication」 ヘッダーを追加しました。このヘッダーは、クライアント接続が非透過プロキシ接続である場合に SG が 401 認証チャレンジを受信するとデフォルトで送信されます。 より古いブラウザの場合、または SG と OCS の両方が NTLM 認証を行う場合、Proxy-Support ヘッ ダーは機能しない可能性があります。 この場合、ヘッダーを無効にし、代わりに http force-ntlm CLI コマンドまたは 401 タイプのサーバー認証チャレン http.force_ntlm_for_server_auth( ) プロパティを使用して、 ジを Internet Explorer がサポートする 407 タイプのプロキシ認証チャレンジに変換します。 また、 SG は、クライアント要求の変換された Proxy-Authentication ヘッダーを標準的なサーバー認証 ヘッダーに変換するため、Internet Explorer が SG で明示的にプロキシ処理されるときに、配信元サー バーの NTLM 認証チャレンジを通過できます。 構文 http.force_ntlm_for_server_auth(yes|no) このプロパティは、設定に指定されたデフォルトをオーバーライドします。 各引数の意味は次のとおりです。 • NTLM 認証に yes: SG で明示的にプロキシ処理された Internet Explorer クライアントは、 参加できます。 • 401 認証タイ no: Proxy-Support: Session-based-authentication ヘッダーは、 プ チャレンジに応答するために使用されます。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 • HR_subnet からのすべてのクライアントは、force-ntlm がオフになっています。 • example.com ドメインのホストの要求は、force-ntlm がオフになっています。 • その他すべてのホストの要求は、force-ntlm がオフになっています。 define subnet HR_subnet 10.10.0.0/16 end 342 第 4 章 : プロパティ参照 <Proxy> ; 1 client.address=HR_subnet http.force_ntlm_for_server_auth(no) ; 2 url.domain=example.com http.force_ntlm_for_server_auth(yes) ; 3 http.force_ntlm_for_server_auth(no)10.10.0.0/16 end 343 SGOS 6.4 Content Policy Language リファレンス http.refresh.recv.timeout( ) リフレッシュの実行時に、アップストリーム ホストからバイトを受信するソケットのタイムアウトを 設定します。 構文 http.refresh.recv.timeout(auto| recv-timeout) レイヤおよびトランザクション メモ • <Cache> および <Forward> レイヤで使用します。 • HTTP リフレッシュ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. HR_subnet からの要求は、200 秒で受信タイムアウトします。 2. example.com で終了するホストに送信されるすべての要求は、20 秒で受信タイムアウトします。 3. example.com ホストを除くすべてのリフレッシュ トラフィックは、300 秒で受信タイムアウトし ます。 define subnet HR_subnet 10.10.0.0/16 end <Proxy> ; 1 client.address=HR_subnet http.client.recv.timeout(200) <Forward> ; 2 server_url.domain=example.com http.server.recv.timeout(20) \ http.refresh.recv.timeout(auto) ; 3 http.refresh.recv.timeout(300) 344 第 4 章 : プロパティ参照 http.request.body.max_size() この CPL プロパティを使用して、指定されたバイト数を超える本文のコンテンツ サイズを含む HTTP 要求を拒否できます。 SGOS 6.3 およびそれ以前では、Content-Length HTTP ヘッダーを使用して、HTTP 要求の本文のサイ ズが制御されていましたが、 その制御は、 省略可能な Content-Length ヘッダーの正確性に依存します。 それに比べ、http.request.body.max_size プロパティは、HTTP 要求の本文サイズの実際のバイト 数に依存します。 構文 http.request.body.max_size(N) 上記の例において、N は、HTTP 要求の本文の最大バイト数を指定します。 レイヤおよびトランザクション メモ • <Cache> および <Proxy> レイヤで使用します。 • 本文コンテンツを含むすべての HTTP 要求に適用されます。 • 拒否は、HTTP 要求が プロキシ SG に受信された後に発生します。 • このプロパティを使用して接続が切断されると、 ユーザー silent_denied 例外が呼び出されます。 には ProxySG アプライアンスからのフィードバックはありません。 例 本文が 10 MB を超える場合、IP アドレス 1.2.3.4 のクライアントからの HTTP 要求を切断します。 <Proxy> client.address=1.2.3.4 http.request.body.max_size(10485760) 345 SGOS 6.4 Content Policy Language リファレンス http.request.version( ) 配信元コンテンツ サーバーまたはアップストリー http.request.version( ) プロパティによって、 ム プロキシへの要求で使用される HTTP プロトコルのバージョンが設定されます。 構文 http.request.version(1.0|1.1|preserve) preserve オプションを使用すると、HTTP サーバー要求のバージョンは、クライアント側の 受信 HTTP バージョンが存在する場合、そのバージョンと同じ値に設定されます。デフォルト は、http version CLI 構成設定に基づいて、1.0 または 1.1 に設定されます。CLI でこの値を変 更すると、http.request.version( ) と http.response.version( ) の両方のデフォルト が変更されます。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • HTTP トランザクションに適用されます。 関連項目 346 • 条件 : http.request.version= • プロパティ: http.response.version( ) 第 4 章 : プロパティ参照 http.response.parse_meta_tag.Cache-Control( ) 'Cache-Control' メタ タグを HTML 応答の本文で解析するかどうかを制御します。 構文 http.response.parse_meta_tag.Cache-Control(yes|no) レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • HTTP プロキシ トランザクション、HTTP リフレッシュ トランザクション、および HTTP パイプ ライン トランザクションに適用されます。 例 <Proxy> http.response.parse_meta_tag.Cache-Control(yes) 347 SGOS 6.4 Content Policy Language リファレンス http.response.parse_meta_tag.Expires( ) 'Expires' メタ タグを HTML 応答の本文で解析するかどうかを制御します。 構文 http.response.parse_meta_tag.Expires(yes|no) レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • HTTP プロキシ トランザクション、HTTP リフレッシュ トランザクション、および HTTP パイプ ライン トランザクションに適用されます。 例 <Proxy> http.response.parse_meta_tag.Expires(yes) 348 第 4 章 : プロパティ参照 http.response.parse_meta_tag.pragma-no-cache( ) 'Pragma: no-cache' メタ タグを HTML 応答の本文で解析するかどうかを制御します。 構文 http.response.parse_meta_tag.pragma-no-cache(yes|no) レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • および HTTP パイプラ HTTP プロキシ トランザクション、 HTTP リフレッシュ トランザクション、 イン トランザクションに適用されます。 例 <Proxy> http.response.parse_meta_tag.pragma-no-cache(yes) 349 SGOS 6.4 Content Policy Language リファレンス http.response.version( ) クライアントのユーザー エージェントへの応答に http.response.version( ) プロパティによって、 使用される HTTP プロトコルのバージョンが設定されます。 構文 http.response.version(1.0|1.1|preserve) preserve オプションを使用すると、HTTP クライアント応答のバージョンは、サーバー側の 受信 HTTP バージョン ( 存在する場合 ) にある値と同じ値に設定されます。デフォルトは、 1.0 または 1.1 に設定されます。CLI でこの値を変更 http version CLI 構成設定に基づいて、 すると、http.request.version( ) と http.response.version( ) の両方のデフォルトが 変更されます。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • HTTP トランザクションに適用されます。 関連項目 350 • 条件 : http.response.version= • プロパティ: http.request.version( ) 第 4 章 : プロパティ参照 http.server.accept_encoding( ) アップストリーム要求で、どのエンコードを許可するかを指定します。 構文 http.server.accept_encoding(all) http.server.accept_encoding(encoding_or_client_list) http.server.accept_encoding.encoding(yes|no) http.server.accept_encoding[encoding_list](yes|no) 各引数の意味は次のとおりです。 S encoding_or_client_list は encoding または client のコンマ区切り形式のリストです。 S encoding_list は、 encoding のコンマ区切りのリストです。 S encoding は gzip の 1 つであり、 deflate または identity です。 S クライアントまたは SG アプライアンスがサポートするすべてのエンコード ( 現時点 all は、 で、 gzip、 deflate、および identity) を表します。 S クライアントの要求で指定されたエンコードのリストで置き換えられます。 client は、 クライアントからの要求のデフォルト値は client です。クライアントなしのトランザクション の場合、有効な圧縮ライセンスを持つデフォルト値は all であり、クライアントありのトランザク ションの場合は identity です。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • すべての HTTP トランザクション ( プロキシ、リフレッシュ、パイプライン ) に適用されます。 例 この例では、容認されたエンコードを指定するためのプロパティの使用方法について説明します。使 用される条件は他で定義されるものとします。 <Proxy> ; accept only the identity encoding condition=condition1 http.server.accept_encoding(identity) ; accept only what the client allows condition=condition2 http.server.accept_encoding(client) ; accept all encodings supported by either the client or the SG appliance http.server.accept_encoding(all); 関連項目 • プロパティ: http.client.allow_encoding( )、 http.server.accept_encoding.allow_unknown( ) 351 SGOS 6.4 Content Policy Language リファレンス http.server.accept_encoding.allow_unknown() クライアント要求の中の不明なエンコードを許可するかどうかを指定します。 構文 http.server.accept_encoding.allow_unknown(yes|no) 有効な圧縮ライセンスを持つデフォルト値は no であり、 許可しない場合は yes です。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • すべての HTTP トランザクション ( プロキシ、リフレッシュ、パイプライン ) に適用されます。 例 この例では、SG アプライアンスがサポートするエンコードのみを許可します。 <Proxy> http.server.accept_encoding(all) http.server.accept_encoding.allow_unknown(no) 関連項目 • 352 プロパティ: http.server.accept_encoding( ) 第 4 章 : プロパティ参照 http.server.connect_attempts( ) アップストリーム ホストに接続するときにアドレスごとに実行する接続の試行回数を設定します。 構文 http.server.connect_attempts(number from 1 to 10) レイヤおよびトランザクション メモ • <Forward> レイヤで使用します。 • すべての HTTP トランザクション ( プロキシ、リフレッシュ、パイプライン ) に適用されます。 例 <Forward> http.server.connect_attempts(7) 353 SGOS 6.4 Content Policy Language リファレンス http.server.connect_timeout( ) サーバー接続の確立の試行時に使用される IP 接続のタイムアウトを制御します。 構文 http.server.connect_timeout(default|N) ここで、default はデフォルトの接続タイムアウトを表します。N は、接続タイムアウトまでの待ち 時間 ( 秒 ) であり、10 から 120 の数字です。 レイヤおよびトランザクション メモ • • および <SSL-Intercept> レイヤで使用します。 <Proxy>、<Forward>、 HTTP および HTTPS トランザクションに適用されます。 例 この例では、myhost.com への接続に対してタイムアウト値を 20 秒に設定し、他のすべてのホストに 対してデフォルトのタイムアウト値を設定します。 <Proxy> url.host=myhost.com http.server.connect_timeout(20) http.server.connect_timeout(default) 関連項目 • 354 プロパティ: http.server.connect_attempts()、http.server.recv.timeout() 第 4 章 : プロパティ参照 http.server.persistence( ) HTTP サーバーへの永続接続を設定します。 構文 http.server.persistence(yes|no) preserve オプションは、サーバー接続に対するクライアントの永続性を示します。デフォルト値は HTTP 設定から取得される「yes」です。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • すべての HTTP トランザクション ( プロキシ、リフレッシュ、パイプライン ) に適用されます。 例 このプロパティでは、<Cache> レイヤの要求ベースの条件、あるいは <Proxy> レイヤの要求ベース またはクライアント ベースの条件に基づいて、個々のサーバー接続の永続性を制御できます。 次の例 では、 特定のホストに対する永続接続を無効にするために使用するプロパティを示します。 <Forward> server_url.host=my_host.my_business.com \ http.server.persistence(no) 関連項目 • プロパティ: http.client.persistence( ) 355 SGOS 6.4 Content Policy Language リファレンス http.server.recv.timeout( ) アップストリーム ホストからバイトを受信するためのソケット タイムアウトを設定します。 構文 http.server.recv.timeout(auto | recv-timeout) レイヤおよびトランザクション メモ • <Proxy> および <Forward> レイヤで使用します。 • HTTP プロキシ トランザクション、HTTP パイプライン トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. HR_subnet からの要求は、200 秒の受信タイムアウトを取得します。 2. example.com で終了するホストに対する要求は、20 秒の受信タイムアウトを取得します。 3. example.com ホストに対するものを除くすべてのリフレッシュ トラフィックは、300 秒の受信 タイムアウトを取得します。 define subnet HR_subnet 10.10.0.0/16 end <Proxy> ; 1 client.address=HR_subnet http.client.recv.timeout(200) <Forward> ; 2 server_url.domain=example.com http.server.recv.timeout(20) \ http.refresh.recv.timeout(auto) ; 3 http.refresh.recv.timeout(300) 356 第 4 章 : プロパティ参照 icp( ) 要求の転送時に ICP に問い合わせるかどうかを決定します。アップストリーム ターゲットとして識別 される転送ホストまたは SOCKS ゲートウェイは、ICP への問い合わせよりも優先されます。 構文 icp(yes|no) デフォルトは、ICP ホストが設定されている場合は yes、それ以外の場合は no です。 各引数の意味は次のとおりです。 • ICP yes: forward( ) または socks_gateway( ) プロパティが設定されていない場合は、 に問い合わせます。ICP ホストが設定されていない場合は、yes の効果はありません。 • ICP ホストに問い合わせを行いません。 no: ICP が設定されている場合でも、 レイヤおよびトランザクション メモ • <Forward> レイヤで使用します。 • SOCKS を除くすべてのトランザクションに適用されます。 関連項目 • プロパティ: direct( )、forward( )、reflect_ip( )、socks_gateway( ) 357 SGOS 6.4 Content Policy Language リファレンス im.block_encryption( ) IM ログイン時間にメッセージを変更し AOL IM メッセージの暗号化を回避します。 構文 im.block_encryption(yes|no) レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • AOL インスタント メッセージング トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 • HR_subnet に対してブロック暗号化を有効にします。 define subnet HR_subnet 10.10.0.0/16 end <Proxy> client.address=HR_subnet im.block_encryption(yes) 358 第 4 章 : プロパティ参照 im.reflect( ) IM リフレクションを試行するかどうかを設定します。 構文 im.reflect(yes|no) レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • インスタント メッセージング トランザクションに適用されます。 例 <Proxy> im.reflect(yes) 359 SGOS 6.4 Content Policy Language リファレンス im.strip_attachments( ) 添付がインスタント メッセージから取り除かれるかどうかを決定します。yes に設定されている場合 は、添付はインスタント メッセージから取り除かれます。 構文 im.strip_attachments(yes|no) デフォルト値は no です。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • インスタント メッセージング トランザクションに適用されます。 関連項目 • 360 条件 : im.buddy_id=、 im.chat_room.conference=、 im.chat_room.id=、 im.chat_room.invite_only=、 im.chat_room.type=、 im.chat_room.member=、 im.chat_room.voice_enabled=、 im.file.extension=、 im.file.name=、 im.file.path=、 im.file.size=、 im.message.route=、 im.message.size=、 im.message.text=、 im.message.type=、 im.method=、 im.user_id= 第 4 章 : プロパティ参照 im.transport( ) IM トラフィックに対して作成するアップストリーム接続のタイプを設定します。 構文 im.transport(native|http|auto) レイヤおよびトランザクション メモ • <Forward> レイヤで使用します。 • インスタント メッセージング トランザクションに適用されます。 例 <Forward> im.transport(native) 361 SGOS 6.4 Content Policy Language リファレンス im.tunnel() IM トラフィックをトンネル処理するかどうかを決定します。 構文 im.tunnel(yes|no) 各引数の意味は次のとおりです。 • yes: 接続に関連するトランザクションがトンネル処理されます。 • 接続がブロックされま no ( デフォルト値 )— IM クライアント バージョンが未サポートの場合は、 す。 IM クライアント バージョンがサポートされている場合は、すべてのポリシーがサポートされ ます。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy • 適用対象 : インスタント メッセージング トランザクション 例 使用例 : <Proxy> im.tunnel(yes) メモ • 362 unsupported_version 値が SG 5.x に追加されました。 第 4 章 : プロパティ参照 integrate_new_hosts( ) ヘルス チェックおよび負荷分散に新しいホスト アドレスを追加するかどうかを決定します。 構文 integrate_new_hosts(yes|no) デフォルトは、no です。yes に設定すると、転送ホストの DNS 解決で生じる新しいホスト ア ドレスはすべて、ヘルス チェックおよび負荷分散に追加されます。 レイヤおよびトランザクション • <Forward> レイヤで使用します。 • SOCKS と管理者トランザクションを除くすべてのトランザクションに適用されます。 関連項目 • プロパティ: forward( ) 363 SGOS 6.4 Content Policy Language リファレンス iterator.append( ) 新しい iterator 値を HTML ヘッダーに追加します。 構文 interator.append(string) 上記の例では、 必要に応じて変数代入値を含めることができる引用符で囲まれた文字列を示します。 string は、 レイヤおよびトランザクション メモ • <Proxy> または <Cache> レイヤから使用します。 • 個々のヘッダーの副値を反復処理する場 iterate ブロックで区切りが指定されている場合など、 合は、 この方法はサポートされません。例を示します。 iterate(request.header.Cookie) iterator.append("CookieName=CookieValue"); end 364 第 4 章 : プロパティ参照 iterator.delete( ) HTML ヘッダーから iterator 値を削除します。 構文 interator.delete レイヤおよびトランザクション メモ • <Proxy> または <Cache> レイヤから使用します。 • ブロックで区切りが指定されている場合など、個々のヘッダーの副値を反復処理する場 合は、 この方法はサポートされません。例を示します。 iterate iterate(request.header.Cookie) iterator.delete(); end 365 SGOS 6.4 Content Policy Language リファレンス iterator.rewrite( ) このアクションは、反復処理されるヘッダー内の Cookie 属性を変更します。 構文 iterator.rewrite(regex_pattern, replacement_string) 上記の例では、 • ヘッダー内の Cookie 値と比較される、引用符で囲まれた正規表現パターンを regex_pattern は、 示します。regex_pattern と一致する値がなければ、反復処理されるパターンは変更されません。 • replacement_string は、 1 つ以上の変数代入値を含む引用符で囲まれた文字列を示します。 文字列で置き換えられます。 詳細は、503 ページ regex_pattern に一致するヘッダーの全部分が、 の「CPL 代入値」を参照してください。 レイヤおよびトランザクション メモ • <Proxy> または <Cache> レイヤから使用します。 例 さらに Cookie が 次の例では、Secure 属性および HttpOnly 属性が Cookie ヘッダーに追加され、 存在する場合は、Cookie の有効期限が夜の 12 時に設定されることを示します。Blue Coat は、 できる限り Secure および HttpOnly Cookie 属性を使用することをお勧めします。 define action add_secure_and_http_attributes_to_cookies iterate(response.header.Set-Cookie) ; Add both attributes if both are missing iterator.regex=!"; *Secure" iterator.regex=!"; *HttpOnly" \ iterator.rewrite(".*","$(0);Secure;HttpOnly") ; If only Secure is missing, add that iterator.regex=!"; *Secure" iterator.rewrite(".*","$(0);Secure") ; If only HttpOnly is missing, add that iterator.regex=!"; *HttpOnly" iterator.rewrite(".*","$(0);HttpOnly") end end ; If the cookie contains an expiration date, we will change it to expire tonight at midnight ; Cookies with no expiration date set will be unaffected define action if_expiry_set_to_midnight iterate(response.header.Set-Cookie) iterator.regex="; *expires=" iterator.rewrite("(.*); *expires=([^;]*)(.*)", \ "$(1)$(3);expires=$(cookie_date:next_date(00:00))") end end <Proxy> action.add_secure_and_http_attributes_to_cookies(yes) action.if_expiry_set_to_midnight(yes) 関連項目 • 366 448 ページの「iterate()」 第 4 章 : プロパティ参照 limit_bandwidth( ) 指定されたトラフィック フローで使用される帯域幅を、設定で定義した名前付き帯域幅クラスに割り 当てます。帯域幅クラスでは、最小帯域幅の保証、許可される最大帯域幅、および相対的な優先順位を 決定します。 構文 limit_bandwidth.client.inbound(no|bandwidth_class) limit_bandwidth.client.outbound(no|bandwidth_class) limit_bandwidth.server.inbound(no|bandwidth_class) limit_bandwidth.server.outbound(no|bandwidth_class) 各引数の意味は次のとおりです。 no は、 フローが制限されないことを示します。 設定で定義された帯域幅クラス名です。 bandwidth_class は、 デフォルト値は no です。 レイヤおよびトランザクション メモ • すべてのレイヤで使用します。 • すべてのトランザクションに適用されます。 例 <Proxy> limit_bandwidth(no) 367 SGOS 6.4 Content Policy Language リファレンス log.rewrite.field-id( ) アクセス ログにおける特定のログ フィールドの書き換え log.rewrite.field-id プロパティでは、 を制御します。個別のアクセス ログは、設定時に付与される名前で参照されます。 設定では、各ログの 形式も決定します。 構文 log.rewrite.field-id(“substitution”|no) log.rewrite.field-id[log_name_list](“substitution”|no) 各引数の意味は次のとおりです。 • 一部の field-id には丸かっこが埋 field-id: 書き換えるログ フィールドを指定します。 め込まれます ( 例 : cs(User-agent))。 このような field-id は、引用符で囲む必要があり ます。引用符で囲むには、次の 2 つの方法があります。 どちらも CPL コンパイラで認識さ れます。 log.rewrite."cs(User-agent)”(...) “log.rewrite.cs(User-agent)(...)” 一重引用符または二重引用符を使用できます。 • 形式は次のよう log_name_list: 設定されたアクセス ログのコンマで区切られたリスト。 になります。 • log_name_1, log_name_2, ... • 引用符で囲まれた文字列。代入値の文 substitution: フィールドの置換テキストを含む、 字列には、CPL 代入変数を含めることができます。 • no: このログ フィールドの以前の代入値をキャンセルします。 説明 各構文のバリアントには、トランザクションの記録に使用されるアクセス ログ フィールドの書き換 えを指定する、さまざまなロールがあります。 • このトランザクションで選択されたすべてのアクセス ログの log.rewrite.field-id( ) は、 field_id フィールドの書き換えを指定します。 • log.rewrite.field-id[log_name_list]( ) は、 log_name_list で名前を付けられたすべての アクセス ログの field_id フィールドの書き換えを指定します。リストで名前が付けられていな いログの field_id フィールドには影響はありません。 レイヤおよびトランザクション メモ • すべてのレイヤで使用します。 • すべてのプロキシ トランザクションに適用されます。 関連項目 368 • プロパティ: access_log( )、log.suppress.field-id() • 付録 D:「CPL 代入値」も参照してください。 第 4 章 : プロパティ参照 log.suppress.field-id( ) アクセス ログ内の指定された field-id の抑制を制御し log.suppress.field-id( ) プロパティは、 ます。個別のアクセス ログは、設定時に付与される名前で参照されます。 設定によって、 各ログの形式 も決まります。 構文 log.suppress.field-id(yes|no) log.suppress.field-id[log_name_list](yes|no) 各引数の意味は次のとおりです。 • 一部の field-id には丸かっこが埋め field-id: 抑制するログ フィールドを指定します。 込まれます ( 例 : cs(User-agent))。 これらの field-id は、引用符で囲む必要があります。引 用符で囲むには、次の 2 つの方法があります。どちらも CPL コンパイラで認識されます。 log.suppress."cs(User-agent)"(yes|no) "log.suppress.cs(User-agent)(yes|no)" 一重引用符または二重引用符を使用できます。 • 形式は次のよう log_name_list: 設定されたアクセス ログのコンマで区切られたリスト。 になります。 • log_name_1, log_name_2, ... • yes: 指定した field-id を抑制します。 • no: 指定した field-id の抑制をオフにします。 説明 各構文のバリアントには、トランザクションの記録に使用されるアクセス ログ フィールドを抑制する さまざまなロールがあります。 • このトランザクションで選択されているすべてのアクセス ログ log.suppress.field-id( ) は、 の field_id フィールドの抑制を制御します。 • log.suppress.field-id[log_name_list]( ) は、 log_name_list で名前が付けられたすべての アクセス ログの field_id フィールドの抑制を制御します。リストで名前が付けられていないロ グの field_id フィールドには影響はありません。 レイヤおよびトランザクション メモ • すべてのレイヤで使用します。 • すべてのプロキシ トランザクションに適用されます。 関連項目 • プロパティ: access_log( )、log.rewrite.field-id( ) 369 SGOS 6.4 Content Policy Language リファレンス max_bitrate( ) 現在のストリーミング トランザクションの瞬時帯域幅の上限を強制的に指定します。このポリシー は、 最初の接続のセットアップ時に強制的に指定されます。クライアントがポリシーで許可されたも のより高いビットレートを要求する場合、要求は拒否されます。 注意 : 特定のネットワーク条件では、クライアントは、指定されたビットレートを一時的に超えるスト リームを受け入れる場合があります。 構文 max_bitrate(bitrate|no) デフォルト値は no です。 各引数の意味は次のとおりです。 • 許可された最大ビットレート。次のように、整数を使用してビット、キロビット (1000 倍 )、またはメガビット (1,000,000 倍 ) 単位で指定します。integer | integerk | bitrate: integerm • no: 任意のビットレートを許可します。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • ストリーミング トランザクションに適用されます。 例 ; Client bit rate for streaming media cannot exceed 56 kilobits. max_bitrate(56k) 関連項目 • 370 条件 : bitrate=、 live=、 streaming.content= 第 4 章 : プロパティ参照 never_refresh_before_expiry( ) 次の CLI コマンドと同じです。 never_refresh_before_expiry( ) プロパティは、 SGOS#(config) http strict-expiration refresh ただし、コマンドによって設定されたグローバルなデフォルト値のオーバーライドを許可する、トラ ンザクションごとの制御を備えている点は除きます。 構文 never_refresh_before_expiry(yes|no) デフォルト値は設定から取得されます。 レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • プロキシ トランザクションに適用されます。 関連項目 • プロパティ: never_serve_after_expiry( )、remove_IMS_from_GET( )、 remove_PNC_from_GET( )、 remove_reload_from_IE_GET( ) • 『Blue Coat Systems コマンドライン インターフェース リファレンス』では、http strict-expiration コマンドの詳細を説明します。 371 SGOS 6.4 Content Policy Language リファレンス never_serve_after_expiry( ) 次の CLI コマンドに似ています。 never_serve_after_expiry( ) プロパティは、 SGOS#(config) http strict-expiration serve ただし、コマンドによって設定されたボックス全体のデフォルト値のオーバーライドを許可する、ト ランザクションごとの制御を備えている点は除きます。 構文 never_serve_after_expiry(yes|no) デフォルト値は設定から取得されます。 レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • プロキシ トランザクションに適用されます。 関連項目 • プロパティ: always_verify()、never_refresh_before_expiry() • 『コマンド ライン インターフェース リファレンス』では、http strict-expiration コマンドの 詳細を説明します。 372 第 4 章 : プロパティ参照 patience_page( ) お詫びページを提供できるかどうかを制御します。提供できる場合は、提供前の遅延を制御します。 この構文は廃止されています。 • patience_page( no ) の場合は、 response.icap_feedback.interactive( no ) を使用します。 • patience_page( delay ) を使用します。 の場合は、reponse.icap_feedback( patience_page, delay ) 構文 patience_page(no|delay) デフォルト値は設定から取得されます。 各引数の意味は次のとおりです。 • no: お詫びページは提供されません。 • お詫びページが提供されるまでの秒数 (5 ~ 65535 delay: スキャンが完了しない場合に、 の範囲内 )。 デフォルト値は no です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy • 適用対象 : HTTP プロキシ トランザクション、FTP プロキシ トランザクション。 例 使用例 : <Proxy> patience_page(5) 関連項目 • プロパティ: response.icap_feedback( )、response.icap_feedback.interactive( )、 response.icap_feedback.non_interactive( ) 373 SGOS 6.4 Content Policy Language リファレンス pipeline( ) HTML コンテナ オブジェクトに埋め込まれたオブジェクトが、パイプライン処理されるかどうかを 決定します。yes に設定すると、パイプライン処理が強制されます。no に設定すると、埋め込みオブ ジェクトのパイプライン処理が回避されます。このプロパティは、 コンテナ オブジェクトに埋め込ま れた個々の URL の処理に影響します。 コンテナ オブジェクト自体の解析が妨げられることはありま せん。 このプロパティが url.host= のような URL アクセス条件とともに使用されると、 ページ上の各埋め 込みオブジェクトは、そのポリシー ルールに対して評価され、パイプラインの動作が決定されます。た とえば、特定のホストのパイプライン処理を許可しないルールでも、他のホストから取得したホスト のページにある画像のパイプライン処理は許可します。 注意 : パイプライン処理によって、TCP リソース内でのレベルが低いアップストリーム デバイスに関 する問題が発生する可能性があります。最適な解決策はボトルネックを取り除くことです。一時 的な解決策は、デバイスを微調整しパイプライン処理を無効にすることです。 構文 pipeline(yes|no) デフォルト値は yes です。 レイヤおよびトランザクション メモ 374 • <Cache> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 第 4 章 : プロパティ参照 reflect_ip( ) プロキシ処理された要求に対して、クライアント IP アドレスが配信元サーバーに提示される方法を決 定します。 注意 : reflect_ip プロパティが適切に機能するには、SG がルーティング パス上に配置されている必 要があります。 構文 reflect_ip(auto|no|client|vip|ip_address) デフォルト値は auto です。 各引数の意味は次のとおりです。 • クライアント IP アドレスを反映する場合があります。 auto: 構成定義に基づいて、 • アプライアンスの IP アドレスが使用されます。 no: アップストリーム接続を開始するために、 • クライアントの IP アドレスが使用され client: アップストリーム接続を開始するために、 ます。 • クライアント要求を受信したアプ vip: アップストリーム トラフィックを開始するために、 ライアンスの VIP が使用されます。 • ip_address 特定の IP アドレス。 SG アプライアンスに属するアドレス (物理または仮想の どちらか ) でなければなりません。そうでない場合、auto に変換されます。 レイヤおよびトランザクション メモ • および <Forward> レイヤで使用されます。 <Proxy>、 <DNS-proxy>、 • プロキシおよび DNS トランザクションに適用されます。 例 ; For requests from a specific client, use the virtual IP address. <proxy> client.address=10.1.198.0 reflect_ip(vip) 関連項目 • プロパティ: forward( ) 375 SGOS 6.4 Content Policy Language リファレンス refresh( ) 要求されたオブジェクトのリフレッシュを設定します。no に設定すると、オブジェクトはリフレッ シュされません ( キャッシュされている場合 )。 キャッシュは通常の動作ができます。 yes に設定すると、 構文 refresh(yes|no) デフォルト値は yes です。 レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 関連項目 • 376 プロパティ: advertisement( )、always_verify( )、bypass_cache( )、cache( )、 cookie_sensitive( )、 direct( )、 force_cache( )、 never_refresh_before_expiry( )、 Never_serve_after_expiry( )、 ttl( )、 ua_sensitive( ) 第 4 章 : プロパティ参照 remove_IMS_from_GET( ) remove_IMS_from_GET( ) プロパティは次の CLI コマンドに似ています。 SGOS#(config) http substitute if-modified-since ただし、コマンドによって設定されたボックス全体のデフォルト値のオーバーライドを許可する、ト ランザクションごとの制御を備えている点は除きます。 構文 remove_IMS_from_GET(yes|no) デフォルト値は設定から取得されます。 レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 関連項目 • プロパティ: never_refresh_before_expiry( )、never_serve_after_expiry( )、 remove_PNC_from_GET( )、 remove_reload_from_IE_GET( ) • 『コマンド ライン インターフェース リファレンス』は http substitute コマンドに関する情報を 提供します。 377 SGOS 6.4 Content Policy Language リファレンス remove_PNC_from_GET( ) remove_PNC_from_GET プロパティは次の CLI コマンドに似ています。 SGOS#(config) http substitute pragma-no-cache ただし、コマンドによって設定されたボックス全体のデフォルト値のオーバーライドを許可する、ト ランザクションごとの制御を備えている点は除きます。 構文 remove_PNC_from_GET(yes|no) デフォルト値は設定から取得されます。 レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 関連項目 378 • プロパティ: never_refresh_before_expiry()、never_serve_after_expiry( )、 remove_IMS_from_GET( )、 remove_reload_from_IE_GET( ) • Blue Coat Systems コマンド ライン インターフェース リファレンス は http substitute コマンドに 関する情報を提供します。 第 4 章 : プロパティ参照 remove_reload_from_IE_GET( ) remove_reload_from_IE_GET( ) プロパティは次の CLI コマンドに似ています。 SGOS#(config) http substitute ie-reload ただし、コマンドで設定されたグローバル デフォルト設定を、トランザクション単位にオーバーライ ドできる点を除きます。 構文 remove_reload_from_IE_GET(yes|no) デフォルト値は設定から取得されます。 レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 関連項目 • プロパティ: never_refresh_before_expiry( )、never_serve_after_expiry( )、 remove_IMS_from_GET( )、 remove_PNC_from_GET( ) • Blue Coat Systems コマンド ライン インターフェース リファレンス は http substitute コマンドに 関する情報を提供します。 379 SGOS 6.4 Content Policy Language リファレンス request.filter_service( ) 注意 : このコマンドは廃止の予定です。 要求を外部コンテンツ フィルタ サービスで処理するかどうかを設定します。SG では、現在 Websense Enterprise Server の外部コンテンツ フィルタをサポートしています。 要求の外部コンテンツ フィルタ サービスへの送信は、 オンボックス ベンダまたは CPL カテゴリ定義を 介して決められたカテゴリに基づくポリシーに影響しません。 Websense Enterprise Server で決められたカテゴリは、アクセス ログにはありますが、category= 条件 に使用できません。 事実上、 Websense で決められたカテゴリに基づくすべてのポリシーは、Websense サーバーに実装されている必要があります。 構文 request.filter_service(service_name[, fail_open|fail_closed]) request.filter_service(no) デフォルト値は no and fail_closed です。 各引数の意味は次のとおりです。 • 設定された外部コンテンツ フィルタ サービス。 service_name: 要求変更をサポートする、 現在、 アップグレード時、 サー Websense Enterprise Server だけがサポートされています。 ビス名 websense は自動的に生成されます。 • 要求は処理され、別のポリシーに従って fail_open: service_name が使用できない場合、 応答が配信される可能性があります。 • 要求は拒否されます。 fail_closed: service_name が使用できない場合、 • SG から外部コンテンツ フィルタ サービスに送信されません。 no: 要求は、 レイヤおよびトランザクション メモ • <Cache> および <Proxy> レイヤで使用します。 • FTP および HTTP トランザクションに適用されます。 例 次の例では、 サービスが使用できないと処理を継続できます。 Websense サーバーに要求を送信しますが、 <proxy> request_filter_service(websense, fail_open) 次のポリシーでは、名前が filter の外部フィルタ サービスですべての要求が処理される、全般的な ルールを作成します。次に、 この全般的なルールに対する例外を後のレイヤでいくつか指定します。 <proxy> ; All request are content-filtered by default request.filter_service( filter ) 380 第 4 章 : プロパティ参照 <proxy> request.filter_servce(no) ; exceptions to content-filtering url.address=10.0.0.0/8 ; don't filter internal network client.address=10.1.2.3 ; don't filter this client 関連項目 • Blue Coat Systems コマンド ライン インターフェース リファレンス は Websense オフボックス サー ビスの設定に関する情報を提供します。 381 SGOS 6.4 Content Policy Language リファレンス request.icap_service( ) クライアントからの要求が、送信される前に外部 ICAP サービスによって処理される必要があるかど うかを指定します。代表的なアプリケーションには、法令遵守の監視や知的財産の保護の機能が含ま れます。 このプロパティでは、ICAP 要求変更サービスまたはサービス グループのフェールオーバー シーケン スを指定できます。シーケンスの最初のヘルス サービスは要求の処理に使用されます。ICAP 要求処 理は、このプロパティを使用して無効にすることもできます。 必要に応じて、 エラー モードを指定し、 リストされたサービスがどれも正常でない場合の動作を設定できます。 構文 request.icap_service( servicename_1, [servicename_2, ...,] [fail_open|fail_closed] ) request.icap_service( no ) ここで • 設定された ICAP サービスまたはサービス グループ。 service_name: 要求変更をサポートする、 • 要求は送信され、応答がクラ fail_open: リストされた ICAP サービスがどれも正常でない場合、 イアントに配信されます ( 別のポリシーに従う )。 • 要求は拒否されま fail_closed: リストに表示された ICAP サービスのどれもが正常でない場合、 す。 これはデフォルト値なので、有効になるように指定する必要はありません。 • no: この要求の ICAP 処理を無効にします。 デフォルト値は fail_closed です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Cache、Proxy • 適用対象 : HTTP プロキシ トランザクション、FTP プロキシ トランザクション 例 この例では、IP スキャナを使用して、次の知的財産保護ポリシーを実装します。 内部サーバーに送信される以外のすべての要求がスキャンされます。 クライアントの特別なグループから送信される要求は、 要求をスキャンできない場合でも許可されます。 ; general rule - scan all requests <Proxy> ; some users can get out if the scanners are down group=trusted_users request.icap_service( IP_service, IP_backup_service, fail_open ) request.icap_service( IP_service, IP_backup_service ) ; default is fail_closed ; exception - no need to scan requests to internal servers 382 第 4 章 : プロパティ参照 <Proxy> condition=internal_servers request.icap_service( no ) 関連項目 • プロパティ: response.icap_service( ) 383 SGOS 6.4 Content Policy Language リファレンス request.icap_service.secure_connection() ICAP 接続がセキュアであるかどうかを決定します。 このプロパティでは、 すべての ICAP サービス、一部の特定の ICAP サービス、または ICAP サービス のリストに対して ICAP 接続がセキュアであるかどうかを指定できます。 構文 request.icap_service.secure_connection( yes | no | auto ) request.icap_service.secure_connection.servicename_1( yes | no | auto ) request.icap_service.secure_connection.[servicename_1, servicename_2, ...]( yes | no | auto ) ここで • servicename: 要求変更をサポートする設定済みの ICAP サービス。 • yes: ICAP サービスはセキュアな接続を使用します。 • no: ICAP サービスはプレーン ( セキュアでない ) 接続を使用します。 • デフォルトのグローバルな接続設定を使用します。 auto: ICAP サービスは、 デフォルト値は auto です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Cache、Proxy • 適用対象 : HTTP プロキシ トランザクション、FTP プロキシ トランザクション 例 この例では、次のポリシーを実装します。 • すべての ICAP サービスは、( 特に指定がない限り ) デフォルトのグローバルな接続設定を使用し ます。 • ただし、サービス icap1 はセキュアな接続を使用する必要があります。 • また、サービス icap2、 icap3 はプレーンな接続を使用する必要があります。 <Proxy> request.icap_service.secure_connection( auto ) <Proxy> request.icap_service.secure_connection.icap1( yes ) <Proxy> request.icap_service.secure_connection[icap2, icap3]( no ) 関連項目 • 384 条件 : icap_error_code= 第 4 章 : プロパティ参照 • プロパティ: response.icap_service.secure_connection( ) メモ • 値が 「yes」に設定されている場合は、 ICAP サービスがセキュアな接続をサポートしておらず、 CPL コンパイラ エラーが発生します。同様に、ICAP サービスがプレーンな接続をサポートしておら ず、 値が「no」 に設定されている場合は、CPL コンパイラ エラーが発生します。 • グローバルな設定 ( サービス名のない設定 ) の場合は、一部の ICAP サービスが指定された接続タ イプをサポートしていなくても、コンパイラ エラーは発生しません。一方で、その結果としてラン タイム エラーが発生する可能性があります。 385 SGOS 6.4 Content Policy Language リファレンス response.icap_feedback( ) 応答スキャンの実行中にインタラクティブおよび非インタラクティブ クライアントに渡される フィードバックのタイプと、フィードバックの配信が開始される前の遅延を制御します。 これは、インタラクティブおよび非インタラクティブ クライアントに配信されるフィードバックを制 御します。ただし、お詫びページはインタラクティブ クライアントにのみ提供されるため、 response.icap_feedback( patience_page, delay ) は、次のように解釈されます。 response.icap_feedback.interactive( patience_page, delay ) response.icap_feedback.non_interactive( no ) 管理者は、トリックルに関連するセキュリティ リスクの増加に注意する必要があります。 構文 response.icap_feedback( patience_page[, patience_delay] ) response.icap_feedback( trickle_start|trickle_end[, trickle_delay] ) response.icap_feedback( no ) 各引数の意味は次のとおりです。 • スキャンが完了するまでクライアントにバイトは送信されません。このオプ no を指定すると、 ションは、適切なセキュリティ特性を備えていますが、ユーザー エクスペリエンスは良くありま せん。 • スキャンが patience_delay 秒経過後にスキャンが完了していない場合にイン patience_page は、 タラクティブなクライアントに対してお詫びページを返します。非インタラクティブ クライアン トには、フィードバックは提供されません。 このオプションは、 インタラクティブ クライアントにとって、 適切なセキュリティ特性とユーザ エクスペリエンスを備えています。 • スキャンが trickle_delay 秒経過後にスキャンが完了していない場合にクライ trickle_start は、 アントに対してバイトの配信を開始します。 回線速度で配信されます。 応 HTTP 応答ヘッダーは、 答本文は、低減した ( トリックル ) 速度でクライアントに配信されます。応答の最後の 12 K バイト は、 スキャン結果がわかるまで保持されます。 トリックルされるデータには脅威が含まれている可能性があります。また、応答の最後は破損して データを使用できない状態になりますが、一部のクライアント アプリケーションにはまだ脆弱性 が残っている可能性があります。 すべてのデータは低減した速度でクライアントに配信されるた め、 ユーザーは途中の進捗状況がほとんどわかりません。 trickle_end よりややセキュアですが、 • スキャンが trickle_delay 秒経過後にスキャンが完了していない場合に、 クライアン trickle_end は、 トに対して回線速度でバイトの配信を開始します。最後の 16 K バイトはアプライアンスによって バッファ処理され、サーバーから送信されるデータがこれ以上ないと予測される場合に限り、ト リックルが開始します。応答の最後の 12 K バイトは、スキャン結果がわかるまで保持されます。 386 第 4 章 : プロパティ参照 トリックルされるデータには脅威が含まれている可能性があります。また、応答の最後は破損して データを使用できない状態になりますが、一部のクライアント アプリケーションにはまだ脆弱性 が残っている可能性があります。 データの最後の部分のみ低減した速度でクライアントに配信さ れるため、 これは trickle_start よりセキュアではありませんが、 ユーザーは当初の進捗状況が わかります。 • お詫びページがクライアントに配信されるまでの秒数です。許容範囲は、 patience_delay は、 デフォルトは 5 です。遅延を 0 に設定すると、トリックルがオフになります。 5 ~ 65535 です。 • trickle_delay は、 クライアントに対するフィードバックが開始されるまでの秒数です。許容範 囲は、 デフォルトは 5 です。 遅延を 0 に設定すると、 トリックルがオフになります。 1 ~ 65535 です。 デフォルト値は no です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy • 適用対象 : HTTP プロキシ トランザクション、FTP プロキシ トランザクション 例 次の例では、組織内で使用される自動化ツールを、ポリシーの他の場所で定義された「robots」条件で識 別することができると仮定しています。 <Proxy> ; To prevent timeouts, robots get data trickled to them right away. condition = robots response.icap_feedback( trickle_start, 1 ) ; everyone else (presumably real users) get a patience page after 7 seconds response.icap_feedback( patience_page, 7 ) 関連項目 • プロパティ: response.icap_service( )、response.icap_feedback.interactive( )、 response.icap_feedback.non_interactive( )、 response.icap_feedback.force_interactive( ) 387 SGOS 6.4 Content Policy Language リファレンス response.icap_feedback.force_interactive( ) この HTTP トランザクションがユーザーとのやり取りの機会になるかどうかを決めるために使用す るロジックを変更します。 現在のトランザクションが interactive または non-interactive に評価されるかどうかで、異なる フィードバックをクライアントに返すことができます。 たとえば、お詫びページは、トランザクション がインタラクティブな場合に限り配信できます。システムに組み込まれたロジックは、トランザク ションごとに決定を行います。このプロパティは、 そのロジックの部分をオーバーライドするために 使用されます。 このプロパティは、トランザクションを非インタラクティブであると見なす次の理由をオーバーライ ドするためには使用できません。 • 要求メソッドが「GET」ではない • 応答が 「200 OK」ではない • サーバーが、未承諾のコンテンツ (ProxySG によって要求されていないコンテンツ ) のエンコード を提供する • 要求に 「Range」 または「If-Range」ヘッダーがある 構文 response.icap_feedback.force_interactive( yes|no ) response.icap_feedback.force_interactive.reason( yes|no ) response.icap_feedback.force_interactive( reason, ... ) response.icap_feedback.force_interactive[ reason, ...]( yes|no ) 各引数の意味は次のとおりです。 • reason: ユーザー操作の可否の決定に使用するロジックのオーバーライド可能な部分に応じて、 次のいずれかの値を取ります。 S 非グラフィック ブラウザをインタラクティブと見なす決定をオーバーライ user-agent は、 ドします。 mozilla または opera で始まる User-Agent ヘッダー文字列は、 グラフィックであ ると見なされます。 S extension は、 グラフィック ファイルの拡張子、またはカスケーディング スタイルシート、 JavaScript、VBScript、 VBX、Java アプレットまたは Flash アニメーション コンテンツを示す拡 張子を持つ URL の要求を非インタラクティブと見なす決定をオーバーライドします。 S content-type は、 extension にリストされているコンテンツに類似しているが、 HTTP 応答の Content-Type ヘッダーに基づいて作成されているコンテンツを非インタラクティブと見な す決定をオーバーライドします。 デフォルト値は no です。 388 第 4 章 : プロパティ参照 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy • 適用対象 : HTTP プロキシ トランザクション 例 次の例では、ある組織にカスタム User-Agent ヘッダーに識別情報を含むインタラクティブな Mozilla 対応ブラウザがあると想定しています。 ポリシーを指定して、 このユーザー エージェントがインタラ クティブであると見なされるようにデフォルトのポリシーをオーバーライドします。 コンテンツ タイプや拡張子に関する決定 ( 例 : グラフィック コンテンツを要求するトランザクション をたとえばインタラクティブであると見なすか否か ) を行う他のポリシーの動作を妨げることのない ように、ポリシーでは次の構文形式を使用します。 <Proxy> request.header.User-Agent=brandedagent response.icap_feedback.force_interactive.user-agent(yes) 関連項目 • プロパティ: response.icap_service( )、response.icap_feedback( )、 response.icap_feedback.interactive( )、 response.icap_feedback.non_interactive( ) 389 SGOS 6.4 Content Policy Language リファレンス response.icap_feedback.interactive( ) 応答スキャンの進行中にインタラクティブなクライアントに返すフィードバックのタイプと、フィー ドバックの配信が開始されるまでの遅延を制御します。 管理者は、トリックルに関連するセキュリティ リスクの増加に注意する必要があります。 構文 response.icap_feedback.interactive( patience_page[, patience_delay] ) response.icap_feedback.interactive( trickle_start|trickle_end[, trickle_delay] ) response.icap_feedback.interactive( no ) 各引数の意味は次のとおりです。 • スキャンが完了するまでクライアントにバイトは送信されません。 このオプショ no を指定すると、 ンは、 適切なセキュリティ特性を備えていますが、 ユーザー エクスペリエンスは良くありません。 • patience_delay 秒経過後にスキャンが完了していない場合にインタラクティブ patience_page は、 なクライアントに対してお詫びページを返します。非インタラクティブ クライアントには、 フィードバックは提供されません。 このオプションは、 インタラクティブ クライアントにとって、 適切なセキュリティ特性とユーザ エクスペリエンスを備えています。 • trickle_delay 秒経過後にスキャンが完了していない場合にクライアントに対して trickle_start は、 バイトの配信を開始します。HTTP 応答ヘッダーは、回線速度で配信されます。応答本文は、低減し た ( トリックル ) 速度でクライアントに配信されます。応答の最後の 12 K バイトは、スキャン結果 がわかるまで保持されます。 トリックルされるデータには脅威が含まれている可能性があります。また、応答の最後は破損して データを使用できない状態になりますが、一部のクライアント アプリケーションにはまだ脆弱性 が残っている可能性があります。 すべてのデータは低減した速度でクライアントに配信されるた め、 trickle_end よりややセキュアですが、ユーザーは途中の進捗状況がほとんどわかりません。 • trickle_delay 秒経過後にスキャンが完了していない場合に、クライアントに対し trickle_end は、 て回線速度でバイトの配信を開始します。最後の 16 K バイトはアプライアンスによってバッファ 処理され、サーバーから送信されるデータがこれ以上ないと予測される場合に限り、トリックルが 開始します。応答の最後の 12 K バイトは、スキャン結果がわかるまで保持されます。 トリックルされるデータには脅威が含まれている可能性があります。また、 応答の最後は破損して データを使用できない状態になりますが、一部のクライアント アプリケーションにはまだ脆弱性 が残っている可能性があります。 データの最後の部分のみ低減した速度でクライアントに配信さ れるため、これは trickle_start よりセキュアではありませんが、ユーザーは当初の進捗状況がわか ります。 • お詫びページがクライアントに配信されるまでの秒数です。許容範囲は、5 ~ patience_delay は、 65535 です。デフォルトは 5 です。 390 第 4 章 : プロパティ参照 • クライアントに対するフィードバックが開始されるまでの秒数です。許容範囲 trickle_delay は、 デフォルトは 5 です。 遅延を 0 に設定すると、 トリックルがオフになります。 は、 0 ~ 65535 です。 デフォルト値は no です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy • 適用対象 : HTTP プロキシ トランザクション、FTP プロキシ トランザクション 例 次のポリシー例では、スキャンが 3 秒以内に完了していない場合に、FTP クライアントに対してお侘び ページが表示されます。すべての FTP トランザクションは、インタラクティブであると見なされます。 インタラクティブな HTTP トランザクションでは、 データの最初の部分は回線速度で配信され、 応答 の最後の部分はトリックルされます。 非インタラクティブなクライアントに対しては、ポリシーは指定されません。 <Proxy> client.protocol=ftp response.icap_feedback.interactive( patience_page, 3 ) response.icap_feedback.interactive( trickle_end ) 関連項目 • プロパティ: response.icap_service( )、response.icap_feedback( )、 response.icap_feedback.non_interactive( )、 response.icap_feedback.force_interactive( ) 391 SGOS 6.4 Content Policy Language リファレンス response.icap_feedback.non_interactive( ) 応答スキャンの進行中に非インタラクティブなクライアントに返すフィードバックのタイプと、 フィードバックの配信が開始されるまでの遅延を制御します。 管理者は、トリックルに関連するセキュリティ リスクの増加に注意する必要があります。 構文 response.icap_feedback.non_interactive( trickle_start|trickle_end[, trickle_delay] ) response.icap_feedback.non_interactive( no ) 各引数の意味は次のとおりです。 • スキャンが完了するまでクライアントにバイトは送信されません。このオプ no を指定すると、 ションは、適切なセキュリティ特性を備えていますが、 ユーザー エクスペリエンスは良くありま せん。 • trickle_delay 秒経過後にスキャンが完了していない場合にクライアントに対 trickle_start は、 してバイトの配信を開始します。HTTP 応答ヘッダーは、回線速度で配信されます。応答本文は、 低 減した ( トリックル ) 速度でクライアントに配信されます。応答の最後の 12 K バイトは、スキャン 結果がわかるまで保持されます。 トリックルされるデータには脅威が含まれている可能性があります。また、 応答の最後は破損して データを使用できない状態になりますが、一部のクライアント アプリケーションにはまだ脆弱性 が残っている可能性があります。 すべてのデータは低減した速度でクライアントに配信されるた め、trickle_end よりややセキュアですが、ユーザーは途中の進捗状況がほとんどわかりません。 • trickle_delay 秒経過後にスキャンが完了していない場合に、クライアントに対し trickle_end は、 て回線速度でバイトの配信を開始します。最後の 16 K バイトはアプライアンスによってバッファ 処理され、サーバーから送信されるデータがこれ以上ないと予測される場合に限り、トリックルが 開始します。応答の最後の 12 K バイトは、スキャン結果がわかるまで保持されます。 トリックルされるデータには脅威が含まれている可能性があります。また、 応答の最後は破損して データを使用できない状態になりますが、一部のクライアント アプリケーションにはまだ脆弱性 が残っている可能性があります。 データの最後の部分のみ低減した速度でクライアントに配信さ れるため、これは trickle_start よりセキュアではありませんが、ユーザーは当初の進捗状況がわか ります。 • クライアントに対するフィードバックが開始されるまでの秒数です。 許容範囲 trickle_delay は、 は、 デフォルトは 5 です。 遅延を 0 に設定すると、 トリックルがオフになります。 0 ~ 65535 です。 デフォルトの値は no です。 レイヤおよびトランザクション メモ 392 • 有効なレイヤ : Proxy • 適用対象 : HTTP プロキシ トランザクション 第 4 章 : プロパティ参照 例 次の例では、認証とグループ メンバーシップを使用して、既知のロボット グループに対してこれらの ロボットによる破損したパッケージからのコードの実行の有無に基づいて明確なフィードバック ポ リシーを設定しています。ここでは、 組織内の自動化ツールにより、 「ロボット」 グループおよびリスク を識別するその他のグループに関連付ける明確な資格情報が提供されると仮定しています。 インタラクティブなクライアントに対しては、ポリシーは指定されません。 <Proxy> authenticate( my_realm ) ; the following applies only to members of the "robots" group <Proxy> group = robots ; high risk of executing code from a corrupted package ; -> no feedback group=high_execution_risk response.icap_feedback.non_interactive( no ) ; low risk of executing code from a corrupted package ; -> trickle from the start with default delay group=low_execution_risk response.icap_feedback.non_interactive( trickle_start ) ; no risk of executing code from a corrupted package ; -> trickle at the end, begin serving data immediately group=no_execution_risk response.icap_feedback.non_interactive( trickle_end, 0 ) 関連項目 • プロパティ: response.icap_service( )、response.icap_feedback( )、 response.icap_feedback.interactive( ),、response.icap_feedback.force_interactive( ) 393 SGOS 6.4 Content Policy Language リファレンス response.icap_service( ) クライアントへの応答をクライアントに送信する前にまず ICAP サービスに送信するかどうかを決 定します。ICAP サービスに応じて、その応答は受け付けられるか、拒否されるか、または変更されま す。典型的なアプリケーションには、ウイルス スキャンがあります。 このプロパティを使用して、ICAP 応答変更サービスまたはサービス グループのフェールオーバ シー ケンスを指定できます。シーケンスの最初の正常なサービスは、応答の処理に使用されます。また、 こ のプロパティを使用して、ICAP 応答処理を無効にすることもできます。必要に応じて、エラー モード を指定し、リストされたサービスがどれも正常でない場合の動作を設定できます。 構文 response.icap_service( servicename_1, [servicename_2, ...,] [fail_open|fail_closed] ) response.icap_service( no ) 各引数の意味は次のとおりです。 • servicename: 応答変更をサポートする設定済み ICAP サービスまたはサービス グループです。 • 応答は他のポリシー fail_open: リストされている ICAP サービスがどれも正常でない場合には、 に従って処理され、クライアントに配信されます。 • トランザクション fail_closed: リストされている ICAP サービスがどれも正常でない場合には、 は拒否されます。これはデフォルト値なので、有効になるように指定する必要はありません。 • no: この応答に対する ICAP 処理を無効にします。 デフォルト値は fail_closed です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Cache • 適用対象: すべての HTTP トランザクション (プロキシ、リフレッシュ、パイプライン)、FTP プロキ シ トランザクション 例 この例では、ICAP の応答スキャナを使用して次の Virus Scanning ポリシーを実装します。 • 内部サーバーに送信されるものを除いたすべての応答はスキャンされます。 • ビジネスに重要な一部のサイトからの応答は、スキャンできない場合でも受け付けられます。 ; general rule - scan all responses <Cache> ; responses from some critical sites get through even if the scanners are down condition=critical_sites response.icap_service( VS_service, VS_backup_service, fail_open ) response.icap_service( IP_service, IP_backup_service ) ; default is fail_closed 394 第 4 章 : プロパティ参照 ; exception - no need to scan responses from internal servers <cache> condition=internal_servers response.icap_service( no ) 関連項目 • プロパティ: request.icap_service( )、patience_page( ) 395 SGOS 6.4 Content Policy Language リファレンス response.icap_service.secure_connection() ICAP 接続がセキュアであるかどうかを決定します。 このプロパティでは、 すべての ICAP サービス、一部の特定の ICAP サービス、または ICAP サービス のリストに対して ICAP 接続がセキュアであるかどうかを指定できます。 構文 response.icap_service.secure_connection( yes | no | auto ) response.icap_service.secure_connection.servicename_1( yes | no | auto ) response.icap_service.secure_connection.[servicename_1, servicename_2, ...]( yes | no | auto ) ここで • servicename: 応答変更をサポートする設定済み ICAP サービスまたはサービス グループです。 • yes: ICAP サービスはセキュアな接続を使用します。 • no: ICAP サービスはプレーン ( セキュアでない ) 接続を使用します。 • デフォルトのグローバル接続設定を使用します。 auto: ICAP サービスは、 デフォルト値は auto です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Cache • 適用対象 : HTTP プロキシ トランザクション、FTP プロキシ トランザクション 例 この例では、次のポリシーを実装します。 • すべての ICAP サービスは、( 特に指定がない限り ) デフォルトのグローバルな接続設定を使用し ます。 • ただし、サービス icap1 はセキュアな接続を使用する必要があります。 • また、 サービス icap2、 icap3 はプレーンな接続を使用する必要があります。 <Cache> response.icap_service.secure_connection( auto ) <Cache> response.icap_service.secure_connection.icap1( yes ) <Cache> response.icap_service.secure_connection[icap2, icap3]( no ) 関連項目 • 396 条件 : icap_error_code= Properties: request.icap_service.secure_connection( ) 第 4 章 : プロパティ参照 メモ • に設定されている場合は、 値が 「yes」 CPL ICAP サービスがセキュアな接続をサポートしておらず、 コンパイラ エラーが発生します。 同様に、 ICAP サービスがプレーンな接続をサポートしておらず、 値が「no」 に設定されている場合は、CPL コンパイラ エラーが発生します。 • グローバルな設定 ( サービス名のない設定 ) の場合は、一部の ICAP サービスが指定された接続タ イプをサポートしていなくても、コンパイラ エラーは発生しません。一方で、その結果としてラン タイム エラーが発生する可能性があります。 397 SGOS 6.4 Content Policy Language リファレンス response.raw_headers.max_count() HTTP 応答で許可されている応答ヘッダーの数を制限します。 HTTP 応答ヘッダーの数は特定の数に制限されます。この制限値を超える場合は、SG アプライアンス は、 "invalid_response" 例外をスローします。 先頭のスペースから成るヘッダー継続行は、別個のヘッダーとしてカウントしません。つまり、ここで いう数は、ヘッダーの数であって応答行の数ではなく、応答ステータス行やヘッダーの末尾を示す マーカーは含まれません。 デフォルト値は 1,000 です。最小値は 0、最大値は 10,000 です。 構文 response.raw_headers.max_count(unsigned-integer) レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 <Proxy> response.raw_headers.max_count(2500) 398 第 4 章 : プロパティ参照 response.raw_headers.max_length() HTTP 応答で許容される応答ヘッダ データの容量を制限します。 HTTP 応答ヘッダー データのバイト総数は、特定の数に制限されます。この制限値を超える場合は、SG アプライアンスは、"invalid_response" 例外をスローします。 デフォルト値は 100,000 です。 最小値は 0、最大値は 1,000,000 です。 構文 response.raw_headers.max_length(unsigned-integer) レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • HTTP プロキシ トランザクションに適用されます。 例 <Proxy> response.raw_headers.max_length(250000) 399 SGOS 6.4 Content Policy Language リファレンス response.raw_headers.tolerate() 応答ヘッダーの解析時に許容するプロトコル仕様からの偏差を決定します。 構文 response.raw_headers.tolerate(none|continue) 各引数の意味は次のとおりです。 • none: 偏差は一切許容されないことを示します。 • continue: 応答ヘッダの解析で最初のヘッダーの始まりの部分に先行する継続行 (スペース) を許 容することを示します。 デフォルトの値は none です。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 • すべての HTTP トランザクション ( プロキシ、リフレッシュ、パイプライン )、HTTPS トランザク ションに適用されます。 例 次の例に、 許容するエラーの指定にプロパティがどのように使用されているかを示します。使用され る条件は他で定義されるものとします。 <Proxy> ; Tolerate a continuation line prior to the first header, ; but only from a specified list of legacy servers. condition=legacy_server response.raw_headers.tolerate(continue) ; For all other servers, use strict response header parsing rules ; This is actually the default, so it doesn’t need to be specified response.raw_headers.tolerate(none) 関連項目 • 400 プロパティ: response.raw_headers.max_count( )、response.raw_headers.max_length( ) 第 4 章 : プロパティ参照 server.authenticate.basic() Basic 資格情報を使用するアップストリーム サーバーに対する認証方法を決定します。 このプロパティは、アップストリーム サーバーまたはプロキシに対する認証ユーザーの Basic 資格情 報の送信を制御します。 デフォルトでは、アップストリーム方向には資格情報は送信されません。 origin を選択すると、Basic 資格情報は、HTTP 認証ヘッダーを使用してアップストリーム方向に送 信されます。proxy を選択し、転送を設定すると、資格情報は HTTP プロキシ認証ヘッダーを使用して アップストリーム方向に送信されます。 ユーザーが Basic 資格情報を使用して プロキシ SG に認証されている場合には、デフォルトでこれら の資格情報がアップストリームに転送されます。ユーザーが NTLM、 Kerberos、またはパスワードを 使用しないレルムによって認証されている場合には、 デフォルトでユーザー名は空のパスワードと共 に転送されます。オプションで、アップストリーム方向に送信されるユーザー名とパスワードは、置換 文字列を使用して設定できます。 構文 server.authenticate.basic(no) または server.authenticate.basic(origin[,username_substitution [,password_substitution ]]) または server.authenticate.basic(proxy[,username_substitution [,password_substitution ] ]) 各引数の意味は次のとおりです。 • no: アップストリーム サーバーに送信する Basic 資格情報を抑制します。 • origin: アップストリーム サーバーに Basic 資格情報を送信します。 • proxy: アップストリーム プロキシ サーバーに Basic 資格情報を送信します。 • username_substitution: 認証ユーザー名を使用する代わりにユーザー名として送信される置 換文字列です ( 省略可能 )。 • password_substitution: 認証パスワードを使用する代わりにパスワードとして送信される置 換文字列です ( 省略可能 )。 デフォルト値は no です。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • すべての HTTP プロキシ トランザクションに適用されます。 例 • ユーザーの Basic 資格情報を使用して、アップストリーム サーバーによる認証を行うには、次のよ うに指定します。 <proxy> url.host.exact="webmail.company.com" server.authenticate.basic(origin) 401 SGOS 6.4 Content Policy Language リファレンス • ドメインと認証パスワードの付いた認証ユーザー名を使用してアップストリーム る認証を行うには、次のように指定します。 サーバーによ <proxy> url.host.exact="images.company.com" server.authenticate.basic(origin, "domain\$(user.name)") • 固定ユーザー名およびパスワードを使用してアップストリーム プロキシによる認証を行うには、 次のように指定します。 <proxy> url.host.exact="proxy.company.com" server.authenticate.basic(proxy, "internaluser", "internalpassword") • クライアントの IP アドレスと空のパスワードを使用してアップストリーム サーバーによる認証を 行うには、次のように指定します。 <proxy> url.host.exact="images.company.com" server.authenticate.basic(origin, "$(client.address)", "" 402 第 4 章 : プロパティ参照 server.authenticate.constrained_delegation() Kerberos の制約付き委任を使用したアップストリーム サーバーによる認証方法を決定します。 このプロパティは、 アップストリーム サーバーまたはプロキシに対する認証ユーザーの Kerberos 資 格情報の送信を制御します。デフォルトでは、アップストリーム方向には資格情報は送信されません。 origin を選択すると、HTTP 認証ヘッダーを使用したアップストリーム方向の資格情報の送信に proxy を選択して転送を設定すると、 Kerberos の制約付き委任が使用されます。 HTTP プロキシ認証ヘッ ダーを使用したアップストリーム方向の資格情報の送信に Kerberos の制約付き委任が使用されます。 構文 server.authenticate.constrained_delegation(no) または server.authenticate.constrained_delegation(origin, iwa_realm) または server.authenticate.constrained_delegation(proxy, iwa_realm) 各引数の意味は次のとおりです。 • no: Kerberos 資格情報のアップストリーム サーバーへの送信を抑制します。 • origin: アップストリーム サーバーに Kerberos 資格情報を送信します。 • proxy: アップストリーム プロキシ サーバーに Kerberos 資格情報を送信します。 • iwa_realm: Kerberos チケットの取得に使用する設定済み IWA レルムの名前です。 デフォルト値は no です。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • すべての HTTP プロキシ トランザクションに適用されます。 例 • Kerberos の制約付き委任を使用してアップストリーム サーバーによる認証を行うには、次のよう に指定します。 <proxy> url.host.exact="images.company.com" server.authenticate.constrained_delegation(origin, iwa_realm_1) • Kerberos の制約付き委任を使用してアップストリーム サーバーによる認証を行うには、次のよう に指定します。 <proxy> url.host.exact="proxy.company.com" server.authenticate.constrained_delegation(proxy, iwa_realm_2) 403 SGOS 6.4 Content Policy Language リファレンス server.authenticate.constrained_delegation.spn() Kerberos の制約付き委任で使用するサービス プリンシパル名 (SPN) を決定します。 このプロパティは、アップストリーム サーバーまたはプロキシのデフォルトのサービス プリンシパ ル名をオーバーライドするために使用します。デフォルトでは、SPN は次のとおりです。 HTTP/hostname of upstream device[:port number (if non-standard)]. サービス プリンシパル名が異なる場合には、次のプロパティを使用して明示的に設定できます。 HTTP プロキシ認証ヘッダーを使用したアップストリーム方向の資格情報の送信に委任が使用され ます。 構文 server.authenticate.constrained_delegation.spn (service_principal_name) 各引数の意味は次のとおりです。 • service_principal_name: Kerberos の制約付き委任に使用するサービス プリンシパル名です。 デフォルト値は、アップストリーム サーバーのホスト名から生成されます。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • すべての HTTP プロキシ トランザクションに適用されます。 例 • Kerberos の制約付き委任を使ったアップストリーム サーバーによる認証時に使用するサービス プリンシパル名を設定します。 <proxy> url.host.exact="images.company.com" server.authenticate.constrained_delegation.spn("HTTP/sharedserver.compa ny.com") 404 第 4 章 : プロパティ参照 server.certificate.validate() SSL 接続の確立時にサーバー X.509 証明書を検証するかどうかを決定します。 HTTPS リバース プロキシおよび SSL プロキシ ( フォワード プロキシ ) がインターセプトするトラン ザクションでは、server.certificate.validate() により次の証明書エラーがチェックされます。 • 期限切れ • 信頼されていない発行元 • 失効 • ホスト名の不一致 SSL プロキシ ( フォワード プロキシ ) のトンネル処理されたトランザクションでは、 server.certificate.validate() により次の証明書エラーがチェックされます。 • 期限切れ • 信頼されていない発行元 • 失効 SSL プロキシによって HTTPS トラフィックがトンネル処理される場合、ホスト名の不一致の有無は チェックされません。 構文 server.certificate.validate(yes|no) HTTPS リバース プロキシ トランザクションでは、デフォルト値は、CLI http ssl-verify-server コ マンドにより行われたグローバル設定、またはトランザクションによって使用される転送ホストの設 定から取得されます。HTTPS フォワード プロキシおよび SSL トンネル トランザクションの場合、デ フォルトは yes です。 レイヤおよびトランザクション メモ • <SSL> レイヤで使用します。 • HTTPS フォワードおよびリバース プロキシ トランザクション、SSL トンネル トランザクション に適用されます。 例 <SSL> server.certificate.validate(yes) 関連項目 • プロパティ: server.certificate.validate.ignore( ) 405 SGOS 6.4 Content Policy Language リファレンス server.certificate.validate.check_revocation() SSL サーバー証明書の失効の有無をチェックします。 構文 server.certificate.validate.check_revocation(auto|ocsp|local|no) 各引数の意味は次のとおりです。 • OCSP によりチェックされない auto: 証明書は OCSP (利用可能な場合) によりチェックされます。 場合は、ローカルにインストールされた失効リストに照らしてチェックされます。 • ocsp: OCSP により証明書をチェックします。 • local: ローカルにインストールされた失効リストに照らして証明書をチェックします。 • 失効の有無をチェックされません。 no: 証明書は、 デフォルト値は auto です。 レイヤおよびトランザクション メモ • 有効なレイヤ : SSL • HTTPS フォワードおよびリバース プロキシ トランザクション、 SSL トンネル トランザクション に適用されます。 例 <SSL> server.certificate.validate.check_revocation(local) 406 第 4 章 : プロパティ参照 server.certificate.validate.ignore() サーバー証明書検証時のエラーを無視します。 このプロパティは、SSL 接続のセットアップ時のサーバー検証中に無視するエラーを指定します。 SSL プロキシ ( フォワード プロキシ ) のトンネル処理されたトランザクションでは、 hostname_mismatch エラーを無視するポリシーは適用されません。 構文 server.certificate.validate.ignore.flag(yes|no) server.certificate.validate.ignore[flag, ...](yes|no) server.certificate.validate.ignore(all|none) server.certificate.validate.ignore(flag, ...) ; ; ; ; form form form form 1 2 3 4 ここで、flag は、期限切れ、信頼されていない発行元、ホスト名の不一致のいずれかです。 デフォルトの値は none です。 レイヤおよびトランザクション メモ • <SSL> レイヤで使用します。 • 適用対象 : HTTPS フォワードおよびリバース プロキシ トランザクション、SSL トンネル トランザ クション 例 セキュリティを最大限に高めるために、 すべてのサーバー証明書の有効性を検証する必要がありま す。 不正な証明書を持つサイトであるにもかかわらずアクセスする必要がある場合は、そのサイトに アクセスするために必要な有効性検証プロセスのその部分のみを無効にするホワイト リストを作成 できます。 <SSL> server_url.host=some-server.com server.certificate.validate.ignore.expiration(yes) server_url.host=blah.com server.certificate.validate.ignore.hostname_mismatch(yes) server_url.host=do.this.at.your.own.peril server.certificate.validate.ignore.untrusted_issuer(yes) 関連項目 • プロパティ: server.certificate.validate( ) 407 SGOS 6.4 Content Policy Language リファレンス server.connection.dscp() サーバー側の送信 QoS/DSCP 値を制御します。 構文 server.connection.dscp(dscp_value) ここで、dscp_value は 0..63 | af11 | af12 | af13 | af21 | af22 | af23 | af31 | af32 | af33 | af41 | af42 | af43 | best-effort | cs1 | cs2 | cs3 | cs4 | cs5 | cs6 | cs7 | ef | echo | preserve です。 特殊な値 preserve は、プライマリ サーバー接続の受信 DSCP 値を追跡し、 その値をクライアント接 続のパケット送信時の値として使用することを意味します。特殊値 echo は、 送信パケットの DSCP 値 で、 受信パケットの DSCP 値と同じ値を使用することを意味します。 デフォルト値は preserve です。 レイヤおよびトランザクション メモ • <DNS-Proxy>、<Cache>、および <Forward> レイヤで有効です。 <Proxy>、 • 適用対象 : すべてのトランザクション 例 最初の QoS ポリシー ルールではサーバーの送信 QoS/DSCP 値を echo に設定し、2 つ目の QoS ポリ シー ルールではサーバーの送信 QoS/DSCP 値を 50 に設定します。 <proxy> server.connection.dscp(echo) <proxy> server.connection.dscp(50) 408 第 4 章 : プロパティ参照 server_url.dns_lookup() IP 接続タイプのユーザー設定のグローバル ポリシーを設定します。 構文 server_url.dns_lookup(dns_lookup_value) 各引数の意味は次のとおりです。 dns_lookup_value IPv4-Only | IPv6-Only | Prefer-IPv4 | Prefer-IPv6 デフォルトの値は IPv4-Only です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Forward • 適用対象 : プロキシまたは配信元サーバーに対してアップストリーム方向に接続するトランザク ション (DNS プロキシ トランザクション以外 ) 例 次のポリシー ルールでは、 DNS リゾルバが etrade.com ドメインに対して IPv6 AAAA レコードのみ のクエリを実行するように指定しています。このようなポリシー ルールは、送信先ノードが IPv4 アド レスと IPv6 アドレスの両方を持つ場合の発信接続の IP プリファレンスの設定に使用できます。 <Proxy> url.domain=etrade.com server_url.dns_lookup(IPv6-Only) 409 SGOS 6.4 Content Policy Language リファレンス shell.prompt( ) プロキシ処理されたシェル トランザクションのプロンプトを設定します。 構文 shell.prompt(substitution-string) レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • シェル (Telnet) プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. HR_subnet からのすべての要求は、Shell プロンプト "client's address: Welcome to this appliance" を 取得します。 2. ENG_subnet からのすべての要求は、デフォルトの Shell プロンプトを取得します。 3. 他のすべての要求は、Shell プロンプトを取得しません。 define subnet HR_subnet 10.10.0.0/16 end define subnet ENG_subnet 10.9.0.0/16 end <Proxy> ; 1 client.address=HR_subnet \ shell.prompt("$(client.address): Welcome to $(appliance.name)") ; 2 client.address=ENG_subnet shell.prompt(default) ; 3 shell.prompt(no) 関連項目 • 410 付録 D:「CPL 代入値」も参照してください。 第 4 章 : プロパティ参照 shell.realm_banner( ) プロキシ処理されたシェル トランザクションのレルム バナーを設定します。 構文 shell.realm_banner(substitution-string) レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • シェル (Telnet) プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. HR_subnet からのすべての要求は、Shell レルム バナー "client's address: Welcome to this appliance" を取得します。 2. ENG_subnet からのすべての要求は、デフォルトの Shell レルム バナーを取得します。 3. 他のすべての要求は、Shell レルム バナーを取得しません。 define subnet HR_subnet 10.10.0.0/16 end define subnet ENG_subnet 10.9.0.0/16 end <Proxy> ; 1 client.address=HR_subnet \ shell.realm_banner("$(client.address): Welcome to $(appliance.name)") ; 2 client.address=ENG_subnet shell.realm_banner(default) ; 3 shell.realm_banner(no) 関連項目 • 付録 D:「CPL 代入値」も参照してください。 411 SGOS 6.4 Content Policy Language リファレンス shell.welcome_banner( ) プロキシ処理されたトランザクションのウェルカム バナーを設定します。 構文 shell.welcome_banner(substitution-string) レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • シェル (Telnet) プロキシ トランザクションに適用されます。 例 この例では、次のポリシーを実装します。 1. HR_subnet からのすべての要求は、"client's address: Welcome to this appliance" を取得します。 2. ENG_subnet からのすべての要求は、デフォルトの Shell ウェルカム バナーを取得します。 3. 他のすべての要求は、Shell ウェルカム バナーを取得しません。 define subnet HR_subnet 10.10.0.0/16 end define subnet ENG_subnet 10.9.0.0/16 end <Proxy> ; 1 client.address=HR_subnet \ shell.welcome_banner("$(client.address): Welcome to $(appliance.name)") ; 2 client.address=ENG_subnet shell.welcome_banner(default) ; 3 shell.welcome_banner(no) 412 第 4 章 : プロパティ参照 socks.accelerate( ) 他のプロトコル エージェントへの SOCKS プロキシのハンドオフ socks.accelerate プロパティは、 を制御します。 構文 socks.accelerate(no|auto|http|aol_im|msn_im|yahoo_im) デフォルト値は auto です。 各引数の意味は次のとおりです。 • トランザクションを他のプロキシ エージェントにハンドオフし no: SOCKS プロキシは、 ませんが、SOCKS トランザクションをトンネル処理します。 • URL スキームにより決定されます。 auto: ハンドオフは、 他の値を指定すると、強制的に SOCKS プロキシにトランザクションを該当プロトコルのエー ジェントにハンドオフさせることができます。 どのエージェントがハンドオフに選択されたかをテ socks.accelerated= 条件を使用して、 ストすることができます。tunneled= 条件を使用して、等速の ( トンネル処理された ) SOCKS トランザクションをテストすることができます。 ハンドオフ後は、トランザクションは、該当するプロトコルのプロキシ トランザクションとし て、 ポリシーに従って処理されます。そのポリシー内では、socks= 条件を使用して、トランザ クションでクライアントとの通信にし使用されている SOCKS をテストできます。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • SOCKS プロキシ トランザクションに適用されます。 関連項目 • プロパティ: socks_gateway( )、socks.authenticate( )、socks.authenticate.force( ) • 条件 : socks=、socks.accelerated=、socks.method=、socks.tunneled=、socks.version= 413 SGOS 6.4 Content Policy Language リファレンス socks.allow_compression( ) SOCKS プロキシが圧縮データを SG アプライアンス クライアントと交換できるかを決定します。 注意 :socks.allow_compression プロパティは推奨されません。 次のプロパティを優先して使用し てください。 • 「adn.server.optimize( )」 • 「adn.server.optimize.inbound( )」 • 「adn.server.optimize.outbound( )」 構文 socks.allow_compression(yes|no) デフォルト値は yes です。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • SOCKS トランザクションに適用されます。 例 <Proxy> socks.allow_compression(yes) 414 第 4 章 : プロパティ参照 socks.authenticate( ) 通常のプロキシ認証に使用されるものと同じレルムを SOCKS プロキシ認証で使用することができま す。 この認証形式は、SOCKS トランザクションのみに適用されます。 通常の authenticate( ) プロパティは、SOCKS トランザクションには適用されません。 ただし、 高速 化される SOCKS トランザクションが同じレルムで既に SOCKS プロキシによって認証されている場 合には、 新しい認証チャレンジは発行されません。ただし、 socks.authenticate( ) プロパティと SOCKS トランザクションの高 authenticate( ) プロパティで識別されたレルムが異なる場合には、 速化に使用されているプロキシ エージェントによって新しいチャンレンジが発行されます。 注意 : 任意指定の表示名はありません。 SOCKS プロキシ認証後に、標準的な user=、group=、および realm= テストを利用できます。 SOCKS 認証と拒否の関係は、socks.authenticate.force( ) プロパティによって制御されます。デ フォルト設定の no は、その拒否によって socks.authenticate( ) がオーバーライドされます。この ため、その拒否を認証なしで特定できない場合は、 拒否された要求のユーザー名は表示されません。 ユーザー名がアクセス ログに確実に表示されるようにするには、socks.authenticate.force(yes) を使用します。 構文 socks.authenticate(realmname) 各引数の意味は次のとおりです。 • realmname: 既に設定済みのレルムのいずれかです。 • 次の限られた数のトリガのみに依存することを考慮してくだ socks.authenticate() は、 さい。 • proxy.address= • proxy.card= • proxy.port= • client.address= • socks.version= 日付トリガや時間トリガ ( 利用できる場合 ) は、推奨されません。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • SOCKS プロキシ トランザクションに適用されます。 関連項目 • プロパティ: authenticate()、socks_gateway()、 socks.accelerate()、 socks.authenticate.force() • 条件 : socks=、socks.method=、socks.tunneled=、socks.version= 415 SGOS 6.4 Content Policy Language リファレンス socks.authenticate.force( ) このプロパティは、SOCKS 認証と拒否の関係を制御します。 構文 socks.authenticate.force(yes|no) デフォルト値は no です。 各引数の意味は次のとおりです。 • yes: socks.authenticate( ) に deny( ) または exception( ) よりも高い優先順位が 付与されます。拒否された要求である場合でもユーザー ID がアクセス ログに確実に表示 されるようにするには、yes を使用します。 • no: deny( ) および exception( ) に socks.authenticate( ) よりも高い優先順位が付 与されます。この設定により、( たとえば、プロキシ カード、アドレスまたはポート、クライ アント アドレスまたは SOCKS バージョンに基づいた ) 早期拒否が可能になります。つま り、 拒否プロパティにより認証要求が先に処理されます。 注意 : これによる通常の authenticate( ) への影響はありません。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • SOCKS プロキシ トランザクションに適用されます。 関連項目 416 • Properties: socks.authenticate( )、 socks_gateway( )、 socks.accelerate( ) • 条件 : socks.method=、socks.tunneled=、 socks.version= 第 4 章 : プロパティ参照 socks_gateway( ) 現在のトランザクションに関連付けられている要求を SOCKS ゲートウェイ経由で送信するかどうかを 制御します。 デフォルトの SOCKS ゲートウェイ フェールオーバ シーケンス用のコンピューター全体の構成設定 ([config] > [socks-gateways] > [sequence]) があります。デフォルトの SOCKS ゲートウェイ フェー ルオーバ シーケンスを特定の SOCKS ゲートウェイ エイリアスのリストでオーバーライドするには、 エイリアスのリストには、特殊なトークン default が socks_gateway( ) プロパティを使用します。 含まれていることがあります。これにより、設定で定義されているデフォルトの SOCKS ゲートウェイ フェールオーバ シーケンスが含まれるように拡張されます。 デフォルトのフェールオーバ シーケンスで指定されているゲートウェイが alias_list でも明示的 に指定されている場合にのみ、指定されているエイリアス リストで重複が許容されます。 また、デフォルトの SOCKS ゲートウェイ障害モード用のコンピュータ全体の構成設定 ([config] > [socks-gateways] > [failure-mode]) もあります。socks_gateway.fail_open( ) プロパティは、設 定済みのデフォルトをオーバーライドします。 構文 socks_gateway(alias_list|no) デフォルト値は no です。 各引数の意味は次のとおりです。 • alias_list: 指定済みのエイリアス リストによってこの要求を送信します。 SG アプライ アンスは、リストで指定された順序で指定されたゲートウェイ経由でこの要求の送信を試 行します。また、 そのゲートウェイが停止している場合には、必要に応じてヘルス チェッ クによって識別された次のゲートウェイに進みます。 • 転送ホストまたは ICP ホスト no: この要求を SOCKS ゲートウェイ経由で送信しません。 は、そのプロパティに応じて依然として使用できます。どちらも設定されていないと、要求 設定で定義されているデフォルトのシーケ は配信元サーバーに直接送信されます。 no は、 ンスをオーバーライドします。 レイヤおよびトランザクション メモ • <Forward> レイヤで使用します。 • 管理者のトランザクションを除くすべてのトランザクションに適用されます。 関連項目 • プロパティ: direct( ), forward( )、socks.accelerate( )、socks.authenticate( )、 socks.authenticate.force( ) • 条件 : socks.method=、socks.tunneled=、 socks.version= 417 SGOS 6.4 Content Policy Language リファレンス socks_gateway.fail_open( ) 指定されている SOCKS ゲートウェイまたは指定バックアップまたはデフォルトに接続できない場合 に、 SG アプライアンスが要求の処理を終了するか、続行するかを制御します。 デ フ ォ ル ト の SOCKS ゲ ー ト ウ ェ イ 障 害 モ ー ド 用 の コ ン ピ ュ ー タ 全 体 の 構 成 設 定 ([config] > 設 [socks-gateways] > [failure-mode]) があります。 socks_gateway.fail_open( ) プロパティは、 定済みのデフォルトをオーバーライドします。 構文 socks_gateway.fail_open(yes|no) デフォルト値は no です。 各引数の意味は次のとおりです。 • yes: 指定されている SOCKS ゲートウェイまたは指定バックアップまたはデフォルトに 接続できない場合に、要求の処理を続行します。これにより、要求が転送ホストまたは ICP 経由で転送されるか、直接配信元サーバーに送信されることがあります。 • 指定されている SOCKS ゲートウェイまたは指定バックアップまたはデフォルトに接続 できない場合に、要求の処理を終了します。 レイヤおよびトランザクション メモ • <Forward> レイヤで使用します。 • 管理者のトランザクションを除くすべてのトランザクションに適用されます。 関連項目 418 • プロパティ: socks.accelerate( )、socks.authenticate( )、 socks.authenticate.force( )、 socks_gateway( ) • 条件 : socks.method=、socks.tunneled=、 socks.version= 第 4 章 : プロパティ参照 socks_gateway.request_compression( ) アップストリーム SOCKS ゲートウェイにこのクライアントとのトラフィックの圧縮を許可するよう に要求するかどうかを設定します。 有効にすると、 アップストリーム SOCKS ゲートウェイは、 トラフィックの圧縮を許可するように要求さ れます。 圧縮がゲートウェイによって拒否された場合は、 通常の非圧縮トラフィックを使用して処理を続 行します。 このプロパティをデフォルトに設定すると、 SOCKS ゲートウェイ設定の 'request-compression' が使用されます。アップストリーム SOCKS ゲートウェイは、SOCKS 圧縮に参加している SG アプライ アンスである必要があります。 注意 :sock_gateway.request_compression プロパティは推奨されません。次のプロパティを優先し て使用してください。 • 「adn.server.optimize( )」 • 「adn.server.optimize.inbound( )」 • 「adn.server.optimize.outbound( )」 構文 socks_gateway.request_compression(yes|no|default) デフォルト値は default です。 レイヤおよびトランザクション メモ • <Forward> レイヤで使用します。 • SOCKS ゲートウェイにアップストリーム方向に接続するトランザクションに適用されます。 例 <Forward> socks_gateway.request_compression(yes) 関連項目 • プロパティ: socks.allow_compression( ) 419 SGOS 6.4 Content Policy Language リファレンス ssl.forward_proxy( ) SSL 接続をインターセプトするかどうかを決定します。 デフォルト値は https です。 構文 ssl.forward_proxy(no|https) 各引数の意味は次のとおりです。 • 暗号化を中断することなく SSL 接続をトンネルします。 no は、 • SSL プロキシを使用して SSL 接続をインターセプトします。 https は、 レイヤおよびトランザクション メモ • <SSL-Intercept> レイヤで使用します。 • SSL インターセプト トランザクションに適用されます。 例 HTTPS トラフィックのデフォルト アクションはインターセプトなので、一般使用モデルは、トンネル する必要がある接続のための例外を作成します。 <ssl-intercept> server.certificate.hostname.category="Financial Services" ssl.forward_proxy(no) 420 第 4 章 : プロパティ参照 ssl.forward_proxy.hostname( ) SSL インターセプトに使用される無効な証明書のホスト名を指定します。 デフォルト値は "" です。デフォルト動作では、元のサーバー証明書からのホスト名を使用します。 構文 ssl.forward_proxy.hostname(String) レイヤおよびトランザクション メモ • <SSL-Intercept> レイヤで使用します。 • SSL インターセプト トランザクションに適用されます。 例 ブラウザが未知の CA によって署名されたサーバー証明書、 または URL ホスト名と一致しないホスト名 を受信すると、 セキュリティ アラートのポップアップを表示します。 このポップアップは、 SSL レベル ス プラッシュ メカニズムとして活用できます。 追加情報を提供する Security Alert ポップアップを強制し、 ために、 [ssl.forward_proxy.*] プロパティをさまざまに組み合わせて使用することができます。 セキュリティ アラート ポップアップは、ホスト名の不一致または未知の CA の使用によって次のよう に強制されます。 <SSL-Intercept> ssl.forward_proxy.hostname("WE ARE WATCHING YOU") \ ssl.forward_proxy.issuer_keyring(new-private-ca) \ ssl.forward_proxy.splash_text("This session is being monitored.")\ ssl.forward_proxy.splash_url(http://example.com/ssl-intercept-policy.html) 421 SGOS 6.4 Content Policy Language リファレンス ssl.forward_proxy.issuer_keyring( ) SSL インターセプトに使用される無効な証明書に署名するための CA キーリングを指定します。 デフォルト値は [auto] です。デフォルト動作では、[SGOS#(config ssl) intercept] CLI コマンドに より、 設定で指定されたキーリングを使用します。 構文 ssl.forward_proxy.issuer_keyring (auto|KeyringId) レイヤおよびトランザクション メモ • <SSL-Intercept> レイヤで使用します。 • SSL インターセプト トランザクションに適用されます。 例 ブラウザが未知の CA によって署名されたサーバー証明書、 または URL ホスト名と一致しないホス ト名を受信すると、 セキュリティ アラートのポップアップを表示します。 このポップアップは、 SSL レベ ル スプラッシュ メカニズムとして活用できます。 追加情報を提供 Security Alert ポップアップを強制し、 するために、 [ssl.forward_proxy.*] プロパティをさまざまに組み合わせて使用することができます。 セキュリティ アラート ポップアップは、 ホスト名の不一致または未知の CA の使用によって次のよ うに強制されます。 <SSL-Intercept> ssl.forward_proxy.hostname("WE ARE WATCHING YOU") \ ssl.forward_proxy.issuer_keyring(new-private-ca) \ ssl.forward_proxy.splash_text("This session is being monitored.") \ ssl.forward_proxy.splash_url(http://example.com/ssl-intercept-policy.html) 422 第 4 章 : プロパティ参照 ssl.forward_proxy.preserve_untrusted OCS から Proxy SG に提示される証明書に、信頼された 認証局 (CA) による署名がないとき、ProxySG は、信頼されていない発行元のキーリングによって署名された、信頼されていない証明書をブラウザ に提示することができます。 ユーザーには警告メッセージが表示され、 ユーザーは、警告を無視して Web サイトを訪問するか、要求をキャンセルするかを決定することができます。 デフォルト値は auto です。 構文 ssl.forward_proxy.preserve_untrusted(auto|yes|no) 各引数の意味は次のとおりです。 • 信頼されていない証明書の発行元を auto: Proxy SG の [preserve-untrusted] 構成設定を使用して、 接続用に保持するかどうかを決定します。これはデフォルトです。 • yes: 接続について [Preserve untrusted certificate issuer] を有効にします。 • no: 接続について [Preserve untrusted certificate issuer] を無効にします。 レイヤおよびトランザクション メモ • <SSL-Intercept> レイヤで使用します。 • SSL インターセプト トランザクションに適用されます。 例 <ssl-intercept> ssl.forward_proxy.preserve_untrusted(auto) 423 SGOS 6.4 Content Policy Language リファレンス ssl.forward_proxy.server_keyring( ) SSL インターセプト時に使用する静的サーバー証明書およびキー ペアを指定します。 SSL 接続がインターセプトされるときの通常の動作は、無効なサーバー証明書およびキーペアを動的 に生成することです。 この無効なサーバー証明書の内容は、[ssl.forward_proxy] プロパティ ファミリ の メ ン バ の う ち、hostname、splash_text、splash_url、 に よ っ て 制 御 さ れ ま す。 .issuer_keyring [ssl.forward_proxy.server_keyring] プロパティはこの動作をオーバーライドし、代わりに使用する静 的証明書およびキーペアを指定できるようにします。これは、通常デバッグ目的でのみ使用されます。 デフォルト値は [no] であり、この値では、無効な証明書が動的に生成されます。 構文 ssl.forward_proxy.server_keyring (no|KeyringId) レイヤおよびトランザクション メモ • <SSL-Intercept> レイヤで使用します。 • SSL インターセプト トランザクションに適用されます。 例 <SSL-Intercept> ssl.forward_proxy.server_keyring(my_keyring) 424 第 4 章 : プロパティ参照 ssl.forward_proxy.splash_text( ) SSL インターセプトに使用される無効な証明書に挿入する情報テキストを指定します。. デフォルト値は "" です。文字列引数は、印字可能な文字で 200 文字以下に制限されています。 構文 ssl.forward_proxy.splash_text(String) レイヤおよびトランザクション メモ • <SSL-Intercept> レイヤで使用します。 • SSL インターセプト トランザクションに適用されます。 例 ブラウザが未知の CA によって署名されたサーバー証明書、 または URL ホスト名と一致しないホスト名 を受信すると、 セキュリティ アラートのポップアップを表示します。 このポップアップは、 SSL レベル ス プラッシュ メカニズムとして活用できます。 追加情報を提供する Security Alert ポップアップを強制し、 ために、 [ssl.forward_proxy.*] プロパティをさまざまに組み合わせて使用することができます。 セキュリティ アラート ポップアップは、ホスト名の不一致または未知の CA の使用によって次のよう に強制されます。 <SSL-Intercept> ssl.forward_proxy.hostname("WE ARE WATCHING YOU") \ ssl.forward_proxy.issuer_keyring(new-private-ca) \ ssl.forward_proxy.splash_text("This session is being monitored.") \ ssl.forward_proxy.splash_url(http://example.com/ssl-intercept-policy.html) 425 SGOS 6.4 Content Policy Language リファレンス ssl.forward_proxy.splash_url( ) SSL インターセプトに使用される無効な証明書に挿入する情報 URL を指定します。 デフォルト値は "" です。 構文 ssl.forward_proxy.splash_url(""|Url) レイヤおよびトランザクション メモ • <SSL-Intercept> レイヤで使用します。 • SSL インターセプト トランザクションに適用されます。 例 ブラウザが未知の CA によって署名されたサーバー証明書、 または URL ホスト名と一致しないホスト 名を受信すると、 セキュリティ アラートのポップアップを表示します。 このポップアップは、 SSL レベ ル スプラッシュ メカニズムとして活用できます。Security Alert ポップアップを強制し、追加情報を提 供するために、 [ssl.forward_proxy.*] プロパティをさまざまに組み合わせて使用することができます。 セキュリティ アラート ポップアップは、 ホスト名の不一致または未知の CA の使用によって次のよ うに強制されます。 <SSL-Intercept> ssl.forward_proxy.hostname("WE ARE WATCHING YOU") \ ssl.forward_proxy.issuer_keyring(new-private-ca) \ ssl.forward_proxy.splash_text("This session is being monitored.") \ ssl.forward_proxy.splash_url(http://example.com/ssl-intercept-policy.html) 426 第 4 章 : プロパティ参照 streaming.fast_cache( ) WM Client のファストキャッシュ機能を有効または無効にします。 効果的には、[yes] を設定すると、 この機能がサポートされているストリーミング サーバーであれば、 WM Client はコンテンツのビットレートよりも速くコンテンツをストリーミングできるようになり ます。[no] を設定すると、 WM Client はコンテンツのビットレートでコンテンツをストリーミングし ます。 構文 streaming.fast_cache(yes|no) デフォルト値は有効 (yes) です。 各引数の意味は次のとおりです。 • yes: SG は [Supported] ヘッダで [com.microsoft.wm.fastcache] トークンをアドバタイズ し、そのトークンがストリーミング サーバーからの応答に含まれている場合、非ローカル 応答が WM Client に返されます。ローカル応答について、SG は [Supported] ヘッダで [com.microsoft.wm.fastcache] トークンをアドバタイズします。 • [Supported] ヘッダで [com.microsoft.wm.fastcache] トークンをアドバタイズせ no: SGは、 ず、ローカル応答および非ローカル応答の両方が WM Client に返されます。 レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • Proxy トランザクションに適用します。 例 このプロパティにより、SG は WM Client のファストキャッシュを無効にできます。このプロパティは 次の例は、WM-RTSP トラフィックのファストキャッシュを無効 <Proxy> レイヤでのみ適用可能です。 にするのに使用するプロパティを示します。 <Proxy> client.protocol=rtsp streaming.fast_cache(no) 427 SGOS 6.4 Content Policy Language リファレンス streaming.rtmp.tunnel_encrypted( ) 暗号化した Flash トラフィックがトンネル処理されるか、高速化されるかを決定します。デフォルトで は、 受信データは複合化 RTMPE トラフィックおよび RTMPTE トラフィックはトンネル処理されず、 され、接続は高速化され、送信データは暗号化されます。暗号化は CPU を集中的に使用するので、ポリ シーでオフにすることもできます。あるいは、特定のサイトにアクセスする際に問題がある場合は、ポ リシーでそのサイトへの暗号化された RTMP トラフィックをトンネル処理することができます。この タイプのポリシーにより接続をトンネル処理する場合、[Active Sessions] の [Detail] 列には [Encrypted, tunneled by policy] と表示されます。 構文 streaming.rtmp.tunnel_encrypted(yes|no) レイヤおよびトランザクション メモ • <Proxy> レイヤで使用します。 • Flash トランザクションに適用されます。 例 <Proxy> url.address=10.12.13.14 streaming.rtmp.tunnel_encrypted(yes) この例では、 10.12.13.14 への RTMPE 接続または RTMPTE 接続はトンネルします ( 高速化されません )。 関連項目 • 「SGOS 6.3 Administration Guide」の「Managing Streaming Media」も参照してください。 428 第 4 章 : プロパティ参照 streaming.transport( ) このストリーミング トランザクションに使用されるアップストリーム転送メカニズムを決定します。 この設定は、確定的ではなく、指定された転送方法を使用できるかどうかは、 選択されている転送ホス トの能力によります。 注意 : このプロパティは Smooth Streaming プロキシには適用できません。 構文 streaming.transport(auto|tcp|http) 各引数の意味は次のとおりです。 • アップストリーム接続にデ auto: 転送元および選択された転送ホストの機能に応じて、 フォルト転送を使用します。 • tcp: アップストリーム転送メカニズムとして TCP を使用します。 • http: アップストリーム転送メカニズムとして HTTP を使用します。 レイヤおよびトランザクション メモ • <Forward> レイヤで使用します。 • ストリーミング トランザクションに適用されます。 • 接続が暗号化 (RTMPE または RTMPTE) される場合、送信接続もポリシーで指定した転送方法を 使 用 し て 暗 号 化 さ れ ま す。RTMPE は [streaming.transport(tcp)] プ ロ パ テ ィ を 使 用 し、 RTMPTE は [streaming.transport(http)] プロパティを使用します。転送メカニズムを変更す ることで、RTMPE から RTMPTE または RTMPTE から RTMPE のトラフィックを変換できます。 関連項目 • 条件 : bitrate=、 live=、 streaming.client=、 streaming.content= 429 SGOS 6.4 Content Policy Language リファレンス terminate_connection( ) 例 外応 答を 返 す代 わり に 接続 をド ロッ プ する ため に terminate_connection( ) プ ロパ テ ィは、 [yes] オプションは、応答を返す代わりに接続を終了します。 <Exception> レイヤで使用します。 構文 terminate_connection(yes|no) デフォルトは no です。 レイヤおよびトランザクション メモ 430 • <Exception> レイヤで使用します。 • HTTP トランザクションに適用されます。 第 4 章 : プロパティ参照 trace.destination( ) トレース出力ファイルへのデフォルト パスを変更するために使用されます。デフォルトでは、ポリ シー評価トレース出力が、次の形式のコンソール URL を使用してアクセス可能なキャッシュのオブ ジェクトに書き込まれます。 http://SG_appliance_IP_address:8081/Policy/Trace/path 構文 trace.destination(path) [path] はデフォルトでは default_trace.html です。path は、ファイル名またはディレクト リ パス、 あるいはその両方に変更できます。ディレクトリのみが提供される場合、デフォルト のトレース ファイル名が使用されます。 レイヤおよびトランザクション メモ • 任意のレイヤで使用します。 • すべてのトランザクションに適用されます。 例 ; Change directory location of trace output file to ; http://SG_appliance_IP_address:8081/Policy/Trace/test/default_trace.html trace.destination(test/) ; Change trace output file location to ; http://SG_appliance_IP_address:8081/Policy/Trace/test/phase_2.html trace.destination(test/phase_2.html) 関連項目 • プロパティ: trace.request()、trace.rules() • 付録 D:「CPL 代入値」も参照してください。 431 SGOS 6.4 Content Policy Language リファレンス trace.request( ) 現在の要求に対して詳細なトレース出力を生成するかどうかを特定します。デフォルト値は [no] であ り、 この値では、出力は生成されません。要求の最後にトレース出力が生成され、要求パラメータ、プロ パ テ ィ 設 定、す べ て の 実 行 し た ア ク シ ョ ン の 効 果 が 含 め ら れ ま す。こ の プ ロ パ テ ィ と url= や 出力のトレースを条件的に設定す client.address= のような条件を組み合わせるルールを作成して、 ることができます。 デフォルトでは、 トレース出力は次のコンソール URL を使用してアクセス可能なオブジェクトに書 き込まれます。 http://SG_appliance_IP_address:8081/Policy/Trace/default_trace.html トレース出力場所は、[trace.destination( )] プロパティを使用して制御できます。 注意 : トレースは、トラブルシューティングのためなどに、 一時的に使用することをお勧めします。 継 続的な監視には、[log_message( )] アクションが最適です。 構文 trace.request(yes|no) デフォルト値は no です。 レイヤおよびトランザクション メモ • 任意のレイヤで使用します。 • すべてのトランザクションに適用されます。 例 ; Generate trace details when a specific URL is requested. url=//www.example.com/confidential trace.request(yes) 関連項目 • 432 プロパティ: trace.destination()、trace.rules() 第 4 章 : プロパティ参照 trace.rules( ) トレース出力が、トランザクションのポリシー ルール評価を示す形で生成されているかどうかを判断 します。 デフォルトでは、トレース出力は次のコンソール URL を使用してアクセス可能なオブジェクトに書 き込まれます。 http://SG_appliance_IP_address:8081/Policy/Trace/default_trace.html トレース出力場所は、[trace.destination( )] プロパティを使用して制御できます。 注意 : トレースは、トラブルシューティングのためなどに、一時的に使用することをお勧めします。継 続的な監視には、[log_message( )] アクションが最適です。 構文 trace.rules(yes|no|all) 各引数の意味は次のとおりです。 • yes: 要求に一致するルールにのみトレース出力を生成します。 • 現在のトランザクションに適用できないためにスキップされ all: 条件が false であるか、 たルールを追加表示します。失敗したルールの中の具体的な条件を表示します。 • no: ポリシー ルール評価に関連付けられた出力は表示しません。 デフォルト値は no です。 レイヤおよびトランザクション ノート • <Cache> および <Forward> レイヤで使用します。 例 ; Generate trace messages. <proxy> trace.rules(yes) trace.request(yes) 関連項目 • プロパティ: [trace.destination( )]、[trace.request( )] 433 SGOS 6.4 Content Policy Language リファレンス trust_destination_ip() このプロパティにより、 SG は透過型クライアント要求をインターセプトするときにクライアントの 送信先 IP を優先することができます。 Proxy SG は、適切なケースではクライアントが提供する送信先 IP を信頼し、 HOST 値の DNS 参照は 実行しません。この機能は、次の場合には適用されません ( すなわち、既存の動作が保持されます )。 a. Proxy SG がクライアント要求を非透過プロキシ展開のケースで受信する場合。 b. Proxy SG に与えられた HOST 値のために設定された転送ルールがある場合。 c. Proxy SG が SOCKS でアップストリーム接続する場合。 d. Proxy SG が ICP を使用してアップストリーム接続する場合。 デフォルトでは有効に設定されています。 構文 trust_destination_ip(yes|no) デフォルト値はグローバル構成設定から取得されます。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy • 適用対象 : プロキシ トランザクション 例 信頼のある送信先 IP を無効にします。 <forward> proxy.address=10.10.167.0/24 trust_destination_ip(no) 434 第 4 章 : プロパティ参照 ttl( ) キャッシュ内のオブジェクトの有効時間 (TTL) 値を秒数で設定します。期限切れになると、キャッシュ されたコピーは古くなったと見なされ、 次にアクセスしたときに配信元サーバーから再取得されま す。ただし、このプロパティは、HTTP コマンドライン オプションの Force explicit expirations: Never serve after が有効である場合にのみ効果があります。 上記のオプションが設定されていない場合、SG アプライアンスのフレッシュネス アルゴリズムに よって、有効時間値が決定します。 注意 : advertisement(yes) は ttl( ) 値を上書きします。 構文 ttl(seconds) ここで、seconds は整数値であり、キャッシュ内のオブジェクトが削除されるまでの秒数を指 定します。最大値は 4294967295 で、約 136 年です。 デフォルト値は設定によって指定されます。 レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 例 ; Delete the specified cached objects after 30 seconds. url=//www.example.com/dyn_images ttl(30) 関連項目 • プロパティ: advertisement( )、cache( ) 435 SGOS 6.4 Content Policy Language リファレンス ua_sensitive( ) あるオブジェクトの応答がオブジェクトを取得するために使用されるユーザー エージェントによっ て異なることを宣言することによって、キャッシュ機能の動作を変更するために使用します。 この動 作を指定するには、yes に設定します。 ua_sensitive(yes) を使用すると、 cache(no) と同じ効果があります。 注意 : CPL プロパティ設定の競合は、 評価が終了したときに最後に設定されたプロパティ値を使用する、 CPL 評価ロジックによって解決されます。 構文 ua_sensitive(yes|no) デフォルト値は no です。 レイヤおよびトランザクション メモ • <Cache> レイヤで使用します。 • プロキシ トランザクションに適用され <Cache> および <Exception> レイヤの両方を実行する、 ます。 FTP over HTTP トランザクションには適用されません。 関連項目 • 436 プロパティ: advertisement( )、always_verify( )、bypass_cache( )、cache( )、 cookie_sensitive( )、 delete_on_abandonment( )、 direct( )、 dynamic_bypass( )、 force_cache( )、 pipeline( )、 refresh( )、 ttl( ) 第 4 章 : プロパティ参照 user.login.log_out( ) 現在の IP アドレスから現在のユーザーをログアウトします。 このプロパティは、現在の IP アドレスからユーザーをログアウトするために使用します。 このプロパ ティが実行されると、ユーザーの現在のログインは、ログアウトされます。ユーザーは、以降でトラン ザクションを続行する前に、この IP アドレスで再認証を行う必要があります。 構文 user.login.log_out(yes|no) デフォルト値は yes です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Admin • 適用対象 : プロキシ トランザクション、管理トランザクション 例 ユーザーがログアウト ページを訪問すると、そのユーザーをログアウトします。 <proxy> url="http://company.com/log_out.html" user.login.log_out(yes) 437 SGOS 6.4 Content Policy Language リファレンス user.login.log_out_other( ) 現在の IP アドレス以外のログインから現在のユーザーをログアウトします。 このプロパティは、現在の IP アドレス以外の IP アドレスを使用するユーザーのログインをログアウ トするために使用します。このプロパティが実行されると、現在の IP アドレス以外の IP アドレスを使 用するユーザーのすべてのログインはログアウトされます。ユーザーは、以降でそれらの IP アドレス でトランザクションを続行する前に、別の IP アドレスで再認証を行う必要があります。 構文 user.login.log_out_other(yes|no) デフォルト値は yes です。 レイヤおよびトランザクション メモ • 有効なレイヤ : Proxy、 Admin • 適用対象 : プロキシ トランザクション、管理トランザクション 例 ユーザーが複数のワークステーションからログインしている場合、他のワークステーションからその ユーザーをログアウトします。 <proxy> user.login.count=2.. user.login.log_out_other(yes) 438 第 4 章 : プロパティ参照 webpulse.categorize.mode( ) 動的分類の実行方法を決定します。 構文 webpulse.categorize.mode(none|realtime|background|default) 各引数の意味は次のとおりです。 • none: この要求の動的分類を抑制します。 • 要求は、サービスから動的分類が利用可能にな realtime: リアルタイムに動的分類を実行します。 るまで待機します。 • 要求は、 「保留中」 の分類に割り当てられ、 background: バックグラウンドで動的分類を実行します。 処理は遅延なく継続されます。 後で、 分類サービスが応答すると、 要求されたオブジェクトに対して 動的に決定されたカテゴリは、 そのオブジェクトの以降の要求で利用できるように保存されます。 • 設定を復元します ( 前のポリシー レイヤの効果を取り default: 設定で指定されたデフォルトに、 消すため )。 デフォルト値は設定によって設定されます。 レイヤおよびトランザクション メモ • <Cache> および <Exception> レイヤで使用します。 • すべてのトランザクションに適用されます。 例 この例では、動的分類を制御するためにプロパティが使用される方法を示します。 このドメインを動的に分類しない <Cache> url.domain=bluecoat.com webpulse.categorize.mode(none) バックグラウンドでこのドメインに提供し、分類する <Cache> url.domain=yahoo.com webpulse.categorize.mode(background) その他すべての要求をリアルタイムに分類する <Cache> webpulse.categorize.mode(realtime) 439 SGOS 6.4 Content Policy Language リファレンス webpulse.categorize.send_headers() WebPulse に送信するクライアント要求の HTTP ヘッダーを決定します。 構文 webpulse.categorize.send_headers(yes|no|auto) webpulse.categorize.send_headers(header_name_list) webpulse.categorize.send_headers.header_name(yes|no) webpulse.categorize.send_headers[header_name_list](yes|no) 各引数の意味は次のとおりです。 • header_name_list: header_names のカンマ区切りのリストです。 • User-agent など )。 header_name: ヘッダー名です (Referer、 • auto: プロパティが send-request-info の設定値に従うかどうかを決定します。 デフォルト値は設定によって設定されます。send-request-info が有効である場合、すべてのヘッ ダーを送信します。send-request-info が無効である場合、ヘッダーを送信しません。 レイヤおよびトランザクション メモ • 有効なレイヤ : Cache、Exception • 適用対象 : すべてのトランザクション 例 次の例に、このプロパティを使用してどのように WebPulse に送信されるヘッダーを制御するかを示 します。 任意の要求のすべての HTTP ヘッダーを送信します。 <Cache> webpulse.categorize.send_headers(yes) 440 第 4 章 : プロパティ参照 webpulse.categorize.send_url() URL に含まれているどの情報を WebPulse に送信するかを決定します。 構文 webpulse.categorize.send_url(full|path|host) 各引数の意味は次のとおりです。 • full: URL 文字列全体 • path: URL からクエリ文字列を除いたもの • host: URL に含まれているホスト情報のみ デフォルト値は設定によって設定されます。send-request-info が有効になっている場合、 デフォル トは full です。 デフォルトは path です。 send-request-info が無効になっている場合、 レイヤおよびトランザクション メモ • 有効なレイヤ : Cache、Exception • 適用対象 : すべてのトランザクション 例 次の例に、このプロパティを使用して WebPulse に送信する情報をどのように制御するかを示します。 このドメインの WebPulse にホスト名を送信するには、次のように指定します。 <Cache> url.domain=bluecoat.com webpulse.categorize.send_url(host) WebPulse に URL のパス情報を送信するには、次のように指定します。 <Cache> url.domain=yahoo.com webpulse.categorize.send_url(path) すべての他の要求において完全な URL を送信するには、次のように指定します。 <Cache> webpulse.categorize.send_url(full) 441 SGOS 6.4 Content Policy Language リファレンス webpulse.notify.malware() WebPulse に対するマルウェアの通知を無効にする機能を備えています。 ProxySG が Webpulse に分類目的で URL を送信し、 Webpulse がその URL をマルウェアとして識別 した場合、ProxySG はデフォルトで、WebPulse マスタ データベースを更新するためにこのマルウェ ア評価を WebPulse に報告します。 マスタ データベースの更新は、次の 2 つの点で役立ちます。まず、 その URL の動的な分類要求が不要になり、その URL のマルウェア評価は、次回のすべての BCWF ユーザー (WebPulse コミュニティ) 向けのデータベース アップデートに含まれます。URL の分類結果 を WebPulse コミュニティと共有しない場合は、マルウェア通知を無効にします。ProxySG は、 この情 報を WebPulse マスタ データベースに報告しません。 構文 webpulse.notify.malware(yes|no) 各引数の意味は次のとおりです。 • yes: ( デフォルト ) WebPulse に通知を送信します。 • no: WebPulse へのマルウェア通知を無効にします。 レイヤおよびトランザクション メモ • 有効なレイヤ : Cache、Exception • 適用対象 : URL 分類の対象となるすべてのトランザクション 例 WebPulse へのマルウェア通知を無効にするには、次の手順を実行します。 <Cache> webpulse.notify.malware(no) 442 第 5 章 : アクション リファレンス アクションは引数を取り、ユーザーが名付けたアクション定義ブロックでラップされます。ポリシー ルールからアクションの定義が呼び出されると、 含まれるすべてのアクションが対応する引数に応じ て動作します。ルール内では、名付けられたアクションの定義は、action( ) プロパティを使用して有 効または無効に設定できます。 アクションは、一般的に次のような形式で記述されます。 action(argument1, ...) アクション ブロックは、含まれる各アクションの許可されたレイヤで共通するサブセットに制限され ています。アクションは、アクションの定義内にのみ現れます。<Admin> レイヤには現れません。 この章のトピック この章は、次のトピックに関する情報で構成されています。 • 443 ページの「引数の構文」 • 443 ページの「アクション リファレンス」 引数の構文 アクションの引数に使用できる構文は、アクションによって異なります。 • 文字列: 文字列引数は、 空白やその他の特殊文字が含まれる場合、 引用符で囲む必要があります。 例: log_message(“Access alert”) • 列挙 : delete( ) などのアクションは、引数として、実行するトランザクション コンポーネントを 指定するトークンを使用します。例 : request.header.Referer などのヘッダー名 • 正規表現 : 一部のアクションは正規表現を使用します。正規表現の記述についての詳細は、付録 E: 「正規表現の使用」を参照してください。 • 変数代入 : 一部のアクション引数で引用符で囲まれた文字列には、変数代入サブ文字列を含むこと ができます。これらには、redirect( )、rewrite( )、および rewrite( ) アクションのさまざまな バージョンの置換引数、および append( )、log_message( )、および set(header, string) アク ションの文字列引数が含まれます。変数代入は、次の形式のサブ文字列です。 $(name) ここで、name は、許可された代入変数の 1 つです。 代入値の完全なリストについては、付録 D:「CPL 代入値」を参照してください。 アクション リファレンス この章の残りの部分で、 アクションおよび指定可能な値を示します。 また、各アクションが使用できる コンテキストと使用例を提供します。 443 SGOS 6.4 Content Policy Language リファレンス append( ) 新しいコンポーネントを指定されたヘッダーに追加します。 構文 append(header, string) append(im.message.text, string) 各引数の意味は次のとおりです。 • フィールドの繰り返しをサポート header: 次の形式を使用して指定されるヘッダーです。 するヘッダーを含む、認識されるヘッダーのリストについては、次を指定します。 • request.header.header_name: 認識される HTTP 要求ヘッダーを識別します。 • response.header.header_name: 認識される HTTP 応答ヘッダーを識別します。 • request.x_header.header_name: カスタム ヘッダーを含むすべての要求ヘッダーを 識別します。 • response.x_header.header_name: カスタム ヘッダーを含むすべての応答ヘッダーを 識別します。 • 引用符で囲まれた文字列 string: 1 つ以上の変数代入を必要に応じて含むことのできる、 です。 • im.message.text: 指定された文字列をインスタント メッセージ テキストの最後に追加 します。 レイヤおよびトランザクション メモ • <Proxy> または <Cache> レイヤから使用します。 関連項目 444 • アクション : delete( )、 delete_matching( )、 rewrite(header, regex_pattern, replacement_component)、 set(header, string) • 条件 : request.header.header_name=、request.header.header_name.address=、 request.x_header.header_name=、 request.x_header.header_name.address=、 response.header.header_name=、 response.x_header.header_name= • 付録 D:「CPL 代入値」も参照してください。 第 5 章 : アクション リファレンス delete( ) 指定されたヘッダーのすべてのコンポーネントを削除します。 構文 delete(header) 各引数の意味は次のとおりです。 • 認識されるヘッダーの完全なリス header: 次の形式を使用して指定されるヘッダーです。 トについては、付録 C:「認識されている HTTP ヘッダー」を参照してください。 • request.header.header_name: 認識される HTTP 要求ヘッダーを識別します。 • response.header.header_name: 認識される HTTP 応答ヘッダーを識別します。 • request.x_header.header_name: カスタム ヘッダーを含むすべての要求ヘッダー を識別します。 • response.x_header.header_name: カスタム ヘッダーを含むすべての応答ヘッダー を識別します。 • exception.response.header.header_name: 例外応答からの認識される HTTP 応答 ヘッダーを識別します。 レイヤおよびトランザクション メモ • <Proxy> または <Exception> レイヤで、 exception.response.header.header_name と共に使 用します。 • 要求または応答ヘッダーと共に使用します。 <Proxy> または <Cache> レイヤで、 • HTTP トランザクションに適用されます。 例 ; Delete the Referer request header, and also log the action taken. define action DeleteReferer log_message("Referer header deleted: $(request.header.Referer)") delete(request.header.Referer) end 関連項目 • アクション : append( )、 delete_matching( )、 rewrite(header, regex_pattern, replacement_component)、 set(header, string) • 条件 : request.header.header_name=、request.header.header_name.address=、 request.x_header.header_name=、 request.x_header.header_name.address=、 response.header.header_name=、 response.x_header.header_name= 445 SGOS 6.4 Content Policy Language リファレンス delete_matching( ) 正規表現のパターンに一致するサブ文字列を含む指定されたヘッダーのすべてのコンポーネントを 削除します。 構文 delete_matching(header, regex_pattern) 各引数の意味は次のとおりです。 • 認識されるヘッダーの完全なリス header: 次の形式を使用して指定されるヘッダーです。 トについては、付録 C:「認識されている HTTP ヘッダー」を参照してください。 • request.header.header_name: 認識される HTTP 要求ヘッダーを識別します。 • response.header.header_name: 認識される HTTP 応答ヘッダーを識別します。 • request.x_header.header_name: カスタム ヘッダーを含むすべての要求ヘッダー を識別します。 • response.x_header.header_name: カスタム ヘッダーを含むすべての応答ヘッダー を識別します。 • 詳細は、付録 E:「正規表現の使 regex_pattern: 引用符に囲まれた正規表現パターンです。 用」を参照してください。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤでのみ使用します。 関連項目 446 • アクション : append( )、 delete( )、 rewrite(header, regex_pattern, replacement_component)、 set(header, string) • 条件 : request.header.header_name=、request.header.header_name.address=、 request.x_header.header_name=、 request.x_header.header_name.address=、 response.header.header_name=、 response.x_header.header_name= 第 5 章 : アクション リファレンス im.alert( ) インスタント メッセージングのユーザーに、 メッセージをインバンドで配信します。テキストは、 イン スタント メッセージ ウィンドウに表示されます。 このアクションは log_message( ) に似ていますが、IM プロトコルが適切な方法でレンダリングする インスタント メッセージング トランザクションでリストにエントリを追加します。 複数のアラートをト ランザクションに追加できます。プロトコルは、ユーザーに複数のアラートが表示される方法を決定 します。 構文 im.alert(text) ここで、text は、必要に応じて 1 つ以上の変数代入を含むことのできる、引用符で囲まれた文 字列です。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用します。 関連項目 • アクション : log_message( ) • 付録 D:「CPL 代入値」 447 SGOS 6.4 Content Policy Language リファレンス iterate() 各 iterator 値について、ユーザー定義のラベルをポリシー ルールにバインドします。 構文 iterate(header) ... end 上記の例では、header は、ProxySG アプライアンスが認識するヘッダーを示し、指定された 形式を使用します。 例 ; Delete client cookies with “Sample” prefix define action DeleteSampleCookies iterate(request.header.Cookie) iterator.prefix="Sample" iterator.delete() end end <Proxy> action.DeleteSampleCookies(yes) 関連項目 448 • 153 ページの「iterator=」 • 364 ページの「iterator.append( )」 • 365 ページの「iterator.delete( )」 • 366 ページの「iterator.rewrite( )」 第 5 章 : アクション リファレンス log_message( ) 指定された文字列を SG イベント ログに書き込みます。 Management Console のポリシー メッセージ イベン log_message( ) によって生成されたイベントは、 ト ログ レベルを選択すると表示されます。 注意 : これは、アクセス ログとは別です。 構文 log_message(string) この string は、必要に応じて 1 つ以上の変数代入を含むことのできる、引用符で囲まれた文 字列です。 レイヤおよびトランザクション メモ • 任意のレイヤから参照することができます。 例 ; Log the action taken, and include the original value of the Referer header. define action DeleteReferer log_message("Referer header deleted: $(request.header.Referer)") delete(request.header.Referer) end 関連項目 • アクション : notify_email( )、notify_snmp( ) • プロパティ: access_log( )、log.rewrite( )、log.suppress( ) • 付録 D:「CPL 代入値」 449 SGOS 6.4 Content Policy Language リファレンス notify_email( ) 電子メール通知をイベント ログ メール設定で指定された受信者一覧に送信します。 電子メールの送 信 者 は、 Primary_SG appliance_IP_address - configured_appliance_hostname> で 表 示 さ れ ま す。 複数の notify_email アクションを指定することができます。 その場合、 1 回のトランザクション で複数のメール メッセージが作成される可能性があります。 トランザクションが終了すると電子メールが送信されます。この電子メールは、イベント ログ メール 設定で指定された受信者一覧に送信されます。 構文 notify_email(subject, body) この subject および body は、必要に応じて 1 つ以上の変数代入を含むことのできる、引用符 で囲まれた文字列です。 レイヤおよびトランザクション メモ • 任意のレイヤから参照することができます。 例 define condition restricted_sites url.domain=a_very_bad_site ... end <proxy> condition=restricted_sites action.notify_restricted(yes) define action notify_restricted notify_email(“restricted: ”, \ ”$(client.address) accessed url: $(url)”) end 関連項目 450 • アクション : log_message( )、notify_snmp( ) • 付録 D:「CPL 代入値」 第 5 章 : アクション リファレンス notify_snmp( ) 複数の notify_email アクションを指定することができます。その場合、 1 回のトランザクションで複 数の SNMP トラップが作成されます。 トランザクションが終了すると SNMP トラップが送信されます。 構文 notify_snmp(message) この message は、必要に応じて 1 つ以上の変数代入を含むことのできる、引用符で囲まれた文 字列です。 レイヤおよびトランザクション メモ • 任意のレイヤから参照することができます。 関連項目 • アクション : log_message( )、notify_email( ) • 付録 D:「CPL 代入値」 451 SGOS 6.4 Content Policy Language リファレンス redirect( ) 現在の HTTP トランザクションを終了し、例外 policy_redirect を設定することで HTTP リダイレ クト応答をクライアントに返します。HTTP 3xx 応答コードを指定するためにこのアクションを使用 します。必要に応じて要求 URL に基づく代入変数を設定し、変数代入を実行した後で新しい Location 応答ヘッダー URL を生成します。 注意 : リダイレクトは、 例外のオーバーライドには使用できません。 例外は、常にリダイレクトをオー バーライドします。 FTP over HTTP 要求は、Microsoft Internet Explorer クライアントに関してはリダイレクトされませ ん。 この問題を回避するために、url.scheme=ftp 条件が真のときには redirect( ) アクションを使 用しません。 たとえば、http_redirect アクション定義に redirect( ) アクションが含まれる場合、 次のルールを使用できます。 url.scheme=ftp action.http_redirect(no) 注意 : 2 つの redirect( ) アクションが競合する場合、エラーになります。同じアクション定義ブロッ クに競合するアクションがある場合、コンパイル時にエラーが表示されます。異なるブロックに 競合するアクションが定義されている場合、 イベント ログにランタイム エラーが記録されます。 重要 : ブラウザがリダイレクトされる先の URL もポリシーに基づくリダイレクト応答をトリガす る場合、ブラウザが無限リダイレクト ループに陥る可能性があります。 構文 redirect(response_code, regex_pattern, redirect_location) 各引数の意味は次のとおりです。 • サポー response_code: HTTP 応答コードとして使用される HTTP リダイレクトコード。 トするコードは、301、302、305、307 です。 • 要求 URL と比較される引用符で囲まれた正 regex_pattern: アンカー照合に基づいて、 規表現パターンです。regex_pattern が要求 URL と一致しない場合、リダイレクト アク ションは無視されます。 代入変数の値が設定されます。 regex_pattern が一致すると、 文字列による変数代入を実行しない場合は、 すべての要求 URL に redirect_location 一致するように regex_pattern に ".*" と指定します。正規表現の詳細については、付 録 E:「正規表現の使用」を参照してください。 452 第 5 章 : アクション リファレンス • redirect_location: 必要に応じて 1 つ以上の変数代入を含むことのできる引用符で囲 まれた文字列です。 この文字列は、リダイレクト応答で [Location:] ヘッダーの値として含まれる絶対 URL ま たは相対 URL です。通常の使用法では、redirect_location は、 クライアントに特定の URL にリダイレクトするように指示する http://www.example.com/ のような絶対 URL です。redirect_location が <scheme>:// (scheme は通常 http) で始まらない場合、クラ イアントはそれが元の要求 URL に対する相対 URL であると解釈します。詳細は、 付録 D: 「CPL 代入値」を参照してください。 レイヤおよびトランザクション メモ • <Proxy> レイヤまたは <Cache> レイヤで使用します。 関連項目 • アクション : rewrite(url.host, host_regex_pattern, replacement_host)、rewrite(url, regex_pattern, redirect_location)、 set(url.port, port_number) • 条件 : exception.id= • 付録 D:「CPL 代入値」 453 SGOS 6.4 Content Policy Language リファレンス request_redirect( ) 管理者は、 過去にポリシー リダイレクト を使用していた特定のパスである /wpad.dat を含む URL に 関して プロキシ SG が要求を受信するときに、 プロキシ SG accelerated_pac_base.pac ファイル返 送のサポートを有効にしようとします。 これにより、 プロキシ SG は、 /accelerated_pac_base.pac のアプライアンスに戻すリダイレクトを返します。 これは、 アップストリーム サーバーからの応答を必要とするポリシー内の参照 ( たとえば、 Blue Coat AV アプライアンスからのスキャン決定) がない限り成功します。 Management Console で [Threat-Protection/ Malware-Scanning] が有効になっている場合、リダイレクトに関連する任意のポリシーは、Request could not be handled 例外ページを返す可能性があります。 SGOS 5.5.7.1 では、この例外を解決するために、request_redirect という新しいポリシー ジェス チャを導入しました。 request_redirect ジェスチャは、accelerated_pac_base.pac のような ProxySG アプライアンスそのものから返されるオブジェクトにのみ使用します。OCS ( 配信元コンテ ンツ サーバー) からのオブジェクトのリダイレクトには適用しません。 OCS へのリダイレクトには、 引き続き redirect( ) を使用します。 他のポリシー ( たとえば ICAP スキャン ) も関与するときに例外の原因となることが知られている、典 型的なポリシーの例を以下に示します。 <Proxy> ALLOW url.path.exact=/wpad.dat action.ReturnRedirect1(yes) define action ReturnRedirect1 redirect( 302, ".*", "http://proxy.company.com/accelerated_pac_base.pac" ) end この新しいジェスチャで、上記のポリシーを次のように書き直します。 <Proxy> ALLOW url.path.exact=/wpad.dat action.ReturnRedirect1(yes) define action ReturnRedirect1 request_redirect( 302, ".*", "http://proxy.company.com/accelerated_pac_base.pac" ) end request_redirect ジェスチャを使用すると、アップストリーム サーバーからの応答を必要とする ポリシーと組み合わせてリダイレクトを使用する必要があるときに、例外 Request could not be handled を回避できます。 構文 request_redirect (response_code, regex_pattern, redirect_location) 各引数の意味は次のとおりです。 • サポー response_code: HTTP 応答コードとして使用される HTTP リダイレクトコード。 トするコードは、301、302、305、307 です。 454 第 5 章 : アクション リファレンス • 要求 URL と比較される引用符で囲まれた正規 regex_pattern: アンカー照合に基づいて、 表現パターンです。regex_pattern が要求 URL と一致しない場合、リダイレクト アク ションは無視されます。 代入変数の値が設定されます。 regex_pattern が一致すると、 redirect_location 文字列による変数代入を実行しない場合は、 すべての要求 URL に 一致するように regex_pattern に ".*" と指定します。正規表現の詳細については、付 録 E:「正規表現の使用」を参照してください。 • redirect_location: 必要に応じて 1 つ以上の変数代入を含むことのできる引用符で囲ま れた文字列です。 この文字列は、リダイレクト応答で [Location:] ヘッダーの値として含まれる絶対 URL ま たは相対 URL です。通常の使用法では、redirect_location は、クライアントに特定の URL にリダイレクトするように指示する http://www.example.com/ のような絶対 URL です。redirect_location が <scheme>:// (scheme は通常 http) で始まらない場合、クラ イアントはそれが元の要求 URL に対する相対 URL であると解釈します。詳細は、付録 D: 「CPL 代入値」を参照してください。 レイヤおよびトランザクション メモ • <Proxy> レイヤまたは <Cache> レイヤで使用します。 関連項目 • アクション : rewrite(url.host, host_regex_pattern, replacement_host)、rewrite(url, set(url.port, port_number) regex_pattern, redirect_location)、 • 条件 : exception.id= • 付録 D:「CPL 代入値」 455 SGOS 6.4 Content Policy Language リファレンス rewrite( ) 正規表現パターンに一致する場合は、要求 URL、URL ホスト、あるいは指定したヘッダーのコンポー ネントを書き換えます。このアクションは、server portal アプリケーションの変換アクションの URL 書 き換えフォームとともによく使用されます。 注意 : rewrite( ) アクションの URL フォームは、Windows Media (MMS) トランザクションの一部 の URL コンポーネントを書き換えません。redirect_location で指定された URL がこれらの コンポーネントの変更を試行する場合、URL スキーム、ホスト、ポートの元の値が復元され、エ ラーのログが記録されます。 URL または このアクションの URL ホスト フォームが他の URL 書き換えアクションと競合する場 合、 エラーになります。同じアクション定義ブロックに競合するアクションがある場合、コンパイル時 にエラーが表示されます。 異なるブロックに競合するアクションが定義されている場合、イベント ロ グにランタイム エラーが記録されます。 HTTPS の制限事項 次のポイントを考慮すべきです。 rewrite( ) アクションを HTTPS トラフィックに使用する計画の場合、 • HTTPS 要求のホスト書き換えを実行するには、<SSL-Intercept> レイヤで rewrite(url.host) ルールを作成する必要があります。 • HTTPS インターセプトには、ProxySG アプライアンスにアクティブな SSL ライセンスがあり、設 定でプロトコル検出が有効になっている ( プロキシの非透過展開 ) か、あるいは HTTPS プロキシ サービスが SSL プロキシ エンジンを使用する設定になっている ( プロキシの透過展開 ) 必要があ ります。 • SSL トラフィックのヘッダーおよび URL パスの書き換えは、SG がそのトラフィックをインター セプトし、復号化する場合にのみ実行できます。それ以外の場合は、SG は書き換えを実行するため に、URL パスおよび送信先ポートを含む暗号化されていないヘッダーにアクセスすることはでき ません。 構文 rewrite(url, regex_pattern, redirect_location[, URL_form1, ...]) rewrite(url.host, regex_pattern, replacement_host[, URL_form1, ...]) rewrite(header, regex_pattern, replacement_component) 各引数の意味は次のとおりです。 456 • url: URL 全体の書き換えを指定します。 • url.host: URL のホスト部分の書き換えを指定します。 第 5 章 : アクション リファレンス • 書き換え対象のヘッダーを指定します。認識される header: 次のフォームを使用して、 ヘッダーの完全なリストについては、付録 C:「認識されている HTTP ヘッダー」を参照し てください。 • request.header.header_name: 認識される HTTP 要求ヘッダーを識別します。 • response.header.header_name: 認識される HTTP 応答ヘッダーを識別します。 • request.x_header.header_name: カスタム ヘッダーを含むすべての要求ヘッダーを 識別します。 • response.x_header.header_name: カスタム ヘッダーを含むすべての応答ヘッダー を識別します。 • 指定された URL、ホストまたはヘッダーと比 regex_pattern: アンカー照合に基づいて、 較される、引用符で囲まれた正規表現パターンです。regex_pattern が一致しない場合、 再作成アクションは無視されます。regex_pattern が一致すると、代入変数の値が設定さ れ ま す。常 に書 き 換え を 適用 す る が、置換 文 字列 に 変 数代 入 を必 要 と しな い 場合 は、 regex_pattern に ".*" と指定します。正規表現の詳細については、付録 E:「正規表現の使用」 を参照してください。 • 引用符で囲 redirect_location: 必要に応じて 1 つ以上の変数代入を含むことのできる、 まれた文字列。 代入が実行されると URL 全体を置換します。生成される URL は完全であ ると見なされ、 regex_pattern サブ文字列と一致するサブ文字列を含む URL を置換しま す。 一致した regex_pattern のサブパターンは、 $(n) 構文を使用して redirect_location で代入することができます。このとき、n は一致したサブパターンを特定する 1 ~ 32 の整 数です。詳細は、付録 D:「CPL 代入値」 を参照してください。 • 引用符で囲ま replacement_host: 必要に応じて 1 つ以上の変数代入を含むことのできる、 れた文字列。 代入が実行されると URL のホスト部分を置換します。 生成される ホスト は、 完 全であると見なされ、 指定された URL 形式でホストを置換します。 一致した regex_pattern のサブパターンは、$(n) 構文を使用して replacement_host で代入することができます。 このとき、n は一致したサブパターンを特定する 1 ~ 32 の整数です。詳細は、付録 D:「CPL 代入値」を参照してください。 • • URL_form1, ...: URL またはホストを置換した要求 URL の形式を最大 3 つ記載したオ プションのリストです。このパラメータが空白の場合、3 つの形式すべてが書きかえられ ます。以下に、使用できる値を示します。 • log: ログ メッセージの生成時に使用される要求 URL。 • cache: ローカル キャッシュでオブジェクトを処理するのに使用される要求 URL。 • server: 配信元サーバーに送信される要求 URL。 引用符 replacement_component: 必要に応じて 1 つ以上の変数代入を含むことのできる、 で囲まれた文字列。regex_pattern サブ文字列と一致するヘッダーのコンポーネント全 体 を 置 換 し ま す。一 致 し た regex_pattern の サ ブ パ タ ー ン は、$(n) 構 文 を 使 用 し て このとき、n は一致したサブパタ replacement_component で代入することができます。 ーンを特定する 1 ~ 32 の整数です。詳細は、 付録 D:「CPL 代入値」を参照してください。 457 SGOS 6.4 Content Policy Language リファレンス 説明 要求 URL のサーバー フォームの書き換えはすべて、アップストリーム接続を制御するポリシーに よって遵守される必要があります。URL のサーバー フォームは、<Forward> レイヤで許可された唯一 の URL テストである server_url= 条件でテストされます。 URL のすべてのフォームは、アクセス ログの対象となります。特定のアクセス ログに表示される URL のバージョンは、アクセス ログ形式で適切な代入変数を含めて選択されます。 • c-uri: 元の URL • cs-uri: ログ メッセージの生成時に使用されるログ URL • s-uri: ローカル キャッシュでオブジェクトを処理するのに使用されるキャッシュ URL • sr-uri: アップストリーム要求で使用されるサーバー URL URL を変更するアクションがない場合、代入変数はすべて同じ値です。 レイヤおよびトランザクション メモ • <SSL-Intercept> レイヤまたは <Cache> レイヤで使用します。 <Proxy> レイヤ、 • URL およびホストの書き換えは、すべてのトランザクションに適用されます。ヘッダーの書き換 えは、 HTTP トランザクションに適用されます。 例 HTTP トランザクションの場合 : <Proxy> url.domain=//www.example.com/ action.twurl(yes) define action HTTP_rewrite rewrite(url, "^http://www\.example\.com/(.*)", "http://www.server1.example.com/$(1)") end HTTPS トランザクションの場合 : <SSL-Intercept> url.domain=//www.example.com/ action.twurl(yes) define action HTTPS_rewrite rewrite( url.host, "(.*)example.com(.*)", "$(1)server1.example.com$(2)" ) end 関連項目 458 • アクション : append( )、 delete( )、 delete_matching( )、 redirect( )、 set( )、 transform • 条件 : request.header.header_name=、request.header.header_name.address=、 request.x_header.header_name=、 request.x_header.header_name.address=、 response.header.header_name=、 response.x_header.header_name=、 server_url= • 定義 : transform url_rewrite • 付録 D:「CPL 代入値」も参照してください。 第 5 章 : アクション リファレンス set( ) ヘッダーのすべてのコンポーネントを削除した後、特定の文字列に特定のヘッダーを設定します。 HTTPS の制限事項 クライアントのブラウザが HTTPS 接続にプロキシを使用しており、 CONNECT または TUNNEL 方 式を使用しているとき、設定に使用可能なのはホストおよびポートのみです。これは、URL パスが暗号 化されており、設定に使用できないためです。 構文 set(header, string) set(im.message.text, value) set(url.port, port_number [, URL_form1, URL_form2, ...]) 各引数の意味は次のとおりです。 • 認識されるヘッダーの完全なリス header: 次の形式を使用して指定されるヘッダーです。 トについては、付録 C:「認識されている HTTP ヘッダー」を参照してください。 • request.header.header_name: 認識される HTTP 要求ヘッダーを識別します。 • response.header.header_name: 認識される HTTP 応答ヘッダーを識別します。 • request.x_header.header_name: カスタム ヘッダーを含むすべての要求ヘッダー を識別します。 • response.x_header.header_name: カスタム ヘッダーを含むすべての応答ヘッダー を識別します。 • exception.response.header.header_name: 例外応答からの認識される HTTP 応答 ヘッダーを識別します。 • exception.response.x_header.header_name: カスタム ヘッダーを含む例外応答か らのすべての応答ヘッダーを識別します。 • 引用符で囲まれた文字列。 string: 必要に応じて 1 つ以上の変数代入を含むことのできる、 代入が実行されると指定のヘッダー コンポーネントを置換します。 • im.message.text、value: 指定の value にインスタント メッセージ テキストを設定し ます。 • 範囲は、1 ~ 65535 の任意の整数です。 port_number: 要求 URL に設定されたポート番号。 • URL_form1、URL_form2、...: ポート番号が設定された要求 URL の形式を最大 3 つ記載し たオプションのリストです。このパラメータが空白の場合、要求 URL の 3 つの形式全てが 書き換えられます。表示される値は次のいずれかです。 • log: ログ メッセージの生成時に使用される要求 URL。 • cache: ローカル キャッシュでオブジェクトを処理するのに使用される要求 URL。 • server: 配信元サーバーに送信される要求 URL。 459 SGOS 6.4 Content Policy Language リファレンス 説明 要求 URL のサーバー フォームの変更はすべて、 アップストリーム接続を制御するポリシーによって 遵守される必要があります。 URL のサーバー フォームは、<Forward> レイヤで許可された唯一の URL テストである server_url= 条件でテストされます。 URL のすべてのフォームは、アクセス ログの対象となります。特定のアクセス ログに表示される URL のバージョンは、アクセス ログ形式で適切な代入変数を含めて選択されます。 • c-uri: 元の URL。 • cs-uri: ログ メッセージの生成時に使用されるログ URL。 • s-uri: ローカル キャッシュでオブジェクトを処理するのに使用されるキャッシュ URL。 • sr-uri: アップストリーム要求で使用されるサーバー URL。 URL を変更するアクションがない場合、代入変数はすべて同じ値です。 レイヤおよびトランザクション メモ • <Proxy> レイヤあるいは <Exception> レイヤ の exception.response.header.header_name とともに使用します。それ以外の場合は、<Proxy> レイヤ、<SSL-Intercept> レイヤあるいは <Cache> レイヤからのみ使用します。 • <SSL-Intercept> レイヤで使用するときは、 set (url.port) のみが使用できます。 • ヘッダーと共に使用すると、HTTP トランザクションに適用されます。 • IM トランザクションに適用されます。 im.message.text と共に使用すると、 • すべてのトランザクションに適用されます。 url.port と共に使用すると、 例 ; Modifies the URL port component to 8081 for requests sent to the server and cache. set(url.port, 8081, server, cache) 関連項目 460 • アクション : append( )、 delete( )、 delete_matching( )、 redirect( )、 rewrite(url.host, regex_pattern, replacement_host)、 rewrite(url, regex_pattern, redirect_location) • 条件 : request.header.header_name=、request.header.header_name.address=、 request.x_header.header_name=、 request.x_header.header_name.address=、 response.header.header_name=、 response.x_header.header_name=、 server_url= • 付録 D:「CPL 代入値」も参照してください。 第 5 章 : アクション リファレンス transform 呼び出されたト または URL_rewrite トランスフォーマを呼び出します。 javascript、 active_content、 ランスフォーマは、transform アクションが定義アクション定義ブロックで使用されており、そのブ ロックが action( ) プロパティにより有効になっている場合にのみ効果を発揮します。 注意 : ウイルス スキャン サーバーに送信されたコンテンツとは対照的に、変換されたコンテンツは キャッシュされません。 つまり、 クライアントの ID や時刻を含め、 どのような条件でも transform アクションを安全にトリガできます。 構文 transform transformer_id この ID ここで、transformer_id は、トランスフォーマ定義ブロックのユーザー定義 ID です。 は、大文字と小文字を区別しません。 レイヤおよびトランザクション メモ • <Proxy> レイヤまたは <Cache> レイヤで使用します。 例 ; The transform action is part of an action block enabled by a rule. <proxy> url.domain=!my_site.com action.strip_active_content(yes) ; transformer definition define active_content strip_with_indication tag_replace applet <<EOT <B>APPLET content has been removed</B> EOT tag_replace embed <<EOT <B>APPLET content has been removed</B> EOT tag_replace object <<EOT <B>OBJECT content has been removed</B> EOT tag_replace script <<EOT <B>SCRIPT content has been removed</B> EOT end define action strip_active_content ; the transform action invokes the transformer transform strip_with_indication end 461 SGOS 6.4 Content Policy Language リファレンス 関連項目 462 • プロパティ: action( ) • 定義 : define action、transform active_content、transform url_rewrite 第 6 章 : 定義参考 ポリシー ファイルで、 定義の役割は、 一組の条件、 アクション、または変換をユーザー定義ラベルにバ インドすることです。 定義には次の 2 つのタイプが存在します。 • 名前付き定義 : ポリシーで明示的に参照されます。 • 匿名定義 : すべてのポリシー評価に適用され、ルールで直接参照されません。 匿名定義には、DNS 制限および RDNS 制限の 2 つのタイプがあります。 この章のトピック この章は、次のトピックに関する情報で構成されています。 • 「定義名」 463 ページの 定義名 名前付き定義にはさまざまなタイプがあります。 これらの各定義には、その定義を参照するため、 ルー ル内で使用されるユーザー定義名が与えられます。 定義で使用されるユーザー定義ラベルは大文字と 小文字を区別しません。ラベルには次の文字を使用できます。 • 文字 • 数字 • スペース • ピリオド • 下線 • ハイフン • スラッシュ • アンパサンド 名前の最初の文字は、 文字または下線でなくてはなりません。スペースを入れる場合、名前の文字列は 引用符で囲まれている必要があります。 定義されたアクションに付ける名前に使用できるのは、英数字、下線、およびダッシュ文字だけです。 この章の残りの部分で、定義および指定可能な値をリストします。各定義が使用できる箇所と使用方 法の例についてのヒントも提供します。 463 SGOS 6.4 Content Policy Language リファレンス define action ユーザー定義ラベルを一連のアクション ステートメントにバインドします。action( ) プロパティの 構文は、トランザクションのポリシー評価に基づいて、各アクション定義ブロックを別々に有効にし たり、無効にしたりできます。アクション定義ブロックが有効になっていると、ブロック内のどのアク ション ステートメントも、各引数で指定されたとおりにトランザクションを操作します。使用できる さまざまなアクション ステートメントについての詳細は、443 ページの 第 5 章「アクション リファレ : ンス」 を参照してください。 注意 : 一組のシーケンス内で実行しなければならないアクション ステートメント、 および重複できない アクション ステートメントは、1 つのアクション定義ブロック内にリストする必要があります。 構文 define action label list of action statements end 各引数の意味は次のとおりです。 • 定義されたアクションに付けるラベルに使用 label: アクション定義のユーザー定義 ID。 できるのは、英数字、下線、 およびダッシュ文字だけです。 • 使用でき list of action statements: シーケンス内で実行されるアクションのリスト。 るアクションについての詳細は、443 ページの 第5章: 「アクション リファレンス」を参照し てください。 レイヤおよびトランザクション メモ 各アクション ステートメントには、 独自のタイミング要件とレイヤ適用性があります。アクション全 般のタイミング要件は、定義ブロックに含まれるいずれのアクション ステートメントも必要とする最 も厳しい要件です。 同様に、 アクション定義ブロックを参照できるレイヤは、 ブロック内のすべてのアクション ステート メントに共通のレイヤです。 トランザクションに対応していないアクション ステートメントは無視されます。 例 次は名前が scrub_private_info のサンプル アクションです。内部ドメインに無いサーバーに送信 される要求の From ヘッダーと Referer ヘッダー ( 通常、ユーザーおよびクリックされた場所の特定 に使用される可能性がある ) を消去します。 <cache> url.domain=!my_internal_site.com action.scrub_private_info(yes) define action scrub_private_info set( request.header.From, "" ) set( request.header.Referer, "" ) end 次に適切な値 ( この場合、指定 set( ) アクションが操作するオブジェクトは最初の引数で指定され、 されたヘッダーの新しい値 ) が続きます。これは多くのアクションに共通です。 464 第 6 章 : 定義参考 関連項目 • プロパティ: action( ) • 定義 : transform active_content, transform url_rewrite 465 SGOS 6.4 Content Policy Language リファレンス define active_content HTML または ASX ドキュメントのアクティブ コンテンツ を削除または置き換える場合のルールを 定義します。この定義は、define action 定義ブロックの transform アクションが呼び出され、ポリ シー評価の結果としてそのブロックが action( ) プロパティにより有効になっている場合にのみ効 果を発揮します。 アクティブ コンテンツ変換は、ドキュメント内の <applet>、<embed>、 および <script> の <object>、 4 つの HTML 要素で機能します。また、スクリプト変換では、ページ内のすべての JavaScript コンテン ツを削除します。各タグは、空と置き換えられる ( タグとそのコンテンツを削除 ) か、または新しいタグ と置き換えられます。複数のタグを 1 つのアクティブ コンテンツ トランスフォーマに変換できます。 コンテンツが変更されないように暗号化されます。 HTTPS トンネル接続を介して提供されるページは、 注意 : 変換されたコンテンツは、 ウイルス スキャン サーバーに送信されたコンテンツとは異なり、 キャッ シュされません。 このため、 トランスフォーマは、 クライアント ID や時刻など、どのような条件 でも安全にトリガできます。 置換 : transform active_content 構文 define active_content transformer_id tag_replace HTML_tag_name << text_end_delimiter [replacement_text] text_end_delimiter [tag_replace ...] ... end 各引数の意味は次のとおりです。 • transformer_id: トランスフォーマ定義ブロックのユーザー定義 ID。 define action 定 義ブロックの transform アクションを使用してトランスフォーマを起動する場合に使用 されます。 • 次のとおりです。 HTML_tag_name: 削除または置き換えられる HTML タグの名前で、 • Web ページの Java アプレットを置き換えます。 applet: <applet> 要素を操作し、 • Web ページにオブジェクト (マルチメディア ファイル embed: <embed> 要素を操作し、 など ) を埋め込みます。 • Web ページのオブジェクト ( アプレットやメディア object: <object> 要素を操作し、 ファイルなど ) を置き換えます。 • ペー Web ページにスクリプトを追加します。また、 script: <script> 要素を操作し、 ジに表示される可能性のある JavaScript のエンティティ、文字列、 またはイベントを すべて削除します。 複数の tag_replace キーワードをトランスフォーマの本文の中で繰り返し使用すると、 HTML タグを削除したり置き換えたりできます。 466 第 6 章 : 定義参考 • 引用符または text_end_delimiter: 置き換えテキストにないユーザー定義のトークンで、 空白文字を使用しません。区切り記号は最初の行で定義され、必須の二重山括弧 (<<) の後 に続きます。 この区切り記号から次の区切り記号までのすべてのテキストが、置き換えテ キストとして使用されます。 • 指定されたタグを削除する場合は空、またはタグを置き換える場合 は新しいテキスト (HTML タグを含む ) のどちらかです。 replacement_text: レイヤおよびトランザクション メモ • Proxy トランザクションに適用します。 • 定義アクション名に使用できるのは、英数字、下線、ダッシュ、およびスラッシュだけです。 例 <proxy> url.domain=!my_site.com action.strip_active_content(yes) define active_content strip_with_indication tag_replace applet <<EOT <B>APPLET content has been removed</B> EOT tag_replace embed <<EOT <B>APPLET content has been removed</B> EOT tag_replace object <<EOT <B>OBJECT content has been removed</B> EOT tag_replace script <<EOT <B>SCRIPT content has been removed</B> EOT end define action strip_active_content transform strip_with_indication end 関連項目 • アクション : transform • 定義 : define action、define url_rewrite • プロパティ: action( ) 467 SGOS 6.4 Content Policy Language リファレンス define category カテゴリの定義は、ベンダのコンテンツ カテゴリの拡張、または独自のカテゴリの作成に使用します。 通常コンテンツ フィルタのカテゴリ名が使用される場所 (category= テスト category_name 定義は、 など ) であればどこででも使用できます。 定 義 に 別 の 定 義 を 含 め て 階 層 を 作 る こ と が で き ま す。た と え ば、ス ポ ー ツ の 定 義 の 中 に スポーツにフットボールを含めることが可能です。 定義されたカテゴ category=football を加えて、 リは最大で 1 つの親カテゴリ ( 多重継承は許可されない ) を持つことができます。 同じ category_name を使用する複数の定義はまとめられます。 ポリシーによって、 要求 URL がトリガで指定されたカテゴリのいずれかにあるかどうかを判断する ときに、すべてのサブカテゴリもチェックされます ( 例を参照 )。 構文 define category category_name urlpaths end 各引数の意味は次のとおりです。 • 設定されたコンテンツ フィルタ サービスの既存の category_name: category_name が、 カテゴリの名前に一致する場合、 そのカテゴリの範囲を拡張するために使用されます。 一 致しない場合は、ユーザー定義の新しいカテゴリを定義します。category_name は、 通常 コンテンツ フィルタのカテゴリ名が使用される場所 (category= テストなど) であればど こででも使用できます。 • urlpaths: ドメイン サフィックスまたはパス プレフィックスの式のリスト。 URL の一部を指定するだけで済みます。 url.domain= 条件で使用されます。 • 指定するドメイン内のホストおよびサブドメインが自動的に追加されます。 • パスを指定すると、そのプレフィックスを持つすべてのパスが追加されます ( パスを 指定しないと、サイト全体が追加されます )。 レイヤおよびトランザクション メモ • <Proxy> および <Cache> レイヤで使用されます。 • すべてのトランザクションに適用されます。 例 次の例では、カテゴリ定義で使用できるバリエーションをいくつか示します。 define category Grand_Canyon kaibab.org www2.nature.nps.gov/ard/parks/grca/ nps.gov/grca/ grandcanyon.org end 468 第 6 章 : 定義参考 次の定義では、カテゴリのスポーツとフットボールを定義し、フットボールをスポーツのサブカテゴ リにします。 define category sports sports.com sportsworld.com category=football ; include subcategory end define category football nfl.com cfl.ca end 次のポリシーでは、サブカテゴリのフットボールをテストする場合でも、スポーツのカテゴリを参照 するだけで済みます。 <Proxy> deny category=sports ; includes subcategories 『Blue Coat ProxySG 管 理 者 ガ イ ド』の category= テ ス ト の 使 用 に つ い て の 詳 細 は ( 例 も 含 む )、 「Filtering Web Content」 の章を参照してください。 関連項目 • 条件 : category= • プロパティ: action( ) 469 SGOS 6.4 Content Policy Language リファレンス define condition ユーザー定義のラベルを条件のセットにバインドします。 condition= 式で使用するために、 条件定義の場合、 条件式がリストに表示される方法が重要になります。 空白スペース 1 行に含まれる、 で区切られた複数の条件式には、 ブール演算 AND の関係があるものと見なされます。 ただし、複数行 の条件式には、ブール演算 OR 関係があるものと見なされます。 パフォーマンスが最適化された条件定義は、 非常に多くの URL のテストに使用できます。 「define url 「define url.domain condition」、および「define server_url.domain condition」 、 condition」 を参照してください。 構文 define condition label condition_expression ... ... end 各引数の意味は次のとおりです。 • label: 条件定義のユーザー定義 ID。 action.action_label( ) プロパティから定義を呼 び出すために使用します。 • condition_expression: ルールで利用できる任意の条件。定義される条件のレイヤとタ イミングの制限は、含まれる式のレイヤとタイミングの制限に依存します。 define condition 定義ブロックの本文に含めることができる式の 1 condition= 条件は、 つです。このような方法で、1 つの条件定義ブロックは別の条件関連の定義ブロックを呼び出 すことができるので、事実上、入れ子になります。循環参照によって、コンパイル エラーが発生 します。 レイヤおよびトランザクション メモ 条件定義を参照できるレイヤは、ブロック内のすべての条件ステートメントに共通のレイヤです。 条件は、 すべてのトランザクションで評価できます。条件定義の行にあるすべての条件式がそのトラン ザクションに適用され、true に評価されると、条件は true に評価されます。トランザクションに適用さ れない条件式は false に評価されます。 例 この例では、一部のトラフィックがスキャナに送信されるのを防ぐために作成された簡単なウイルス スキャン ポリシーについて説明します。あるファイル タイプは感染リスクが低い ( 一部のウイルス ス キャナは特定のファイル タイプをスキャンしない ) と仮定し、あるファイル タイプは会社のサーバー に読み込まれたときにはスキャン済みであると仮定します。 注意 : 次のポリシーは、セキュリティ上の推奨事項ではなく、技術を説明するためのものです。トラ フィックを選択的にウイルス スキャナに送信する場合、ウイルス スキャン ベンダの能力に関す る現在の情報と知識に基づいて、独自のセキュリティ リスクを評価する必要があります。 470 第 6 章 : 定義参考 define condition extension_low_risk ; file types assumed to be low risk. url.extension=(asf,asx,gif,jpeg,mov,mp3,ram,rm,smi,smil,swf,txt,wax,wma,wmv,wvx) end define condition internal_prescanned ; will be prescanned so we can assume safe server_url.domain=internal.myco.com server_url.extension=(doc,dot,hlp,html) server_url.domain=internal.myco.com \ response.header.Content-Type=(text, application/pdf) end define condition white_list condition=extension_low_risk condition=internal_prescanned end <cache> condition=!internal_white_list action.virus_scan(true) define action virus_scan response.icap_service( "ICAP_server" ) ; configured service name end 関連項目 • 条件 : category=、 condition= • プロパティ: action.action_label( ) 471 SGOS 6.4 Content Policy Language リファレンス define javascript Javascript 定義は、指定した Javascript を HTML 応答に追加する Javascript トランスフォーマを定義 するために使用されます。 構文 define javascript transformer_id javascript-statement [javascript-statement] … end 各引数の意味は次のとおりです。 • transformer_id: トランスフォーマ定義ブロックのユーザー定義 ID。 define action 定 義ブロックの transform アクションを使用してトランスフォーマを起動する場合に使 用されます。 • javascript-statement には次の構文があります。 javascript-statement ::= section-type replacement section-type ::= prolog | onload | epilog replacement ::= << endmarker newline lines-of-text newline endmarker これにより、HTML ページの先頭 (prolog) に追加される Javascript ブロック、HTML ペー ジの最後 (epilog) に追加される Javascript ブロック、解析が終了しページが読み込まれる ときに (onload) 実行される Javascript ブロックを指定できます。各セクション タイプは オプションです。 レイヤおよびトランザクション メモ • プロキシ トランザクションに適用されます。 例 次に、簡単なコンテンツ フィルタ アプリケーションの一部として使用される各 Web ページの最上部 にメッセージを追加する Javascript トランスフォーマの例を示します。 define javascript js_transformer onload <<EOS var msg = "This site is restricted.Your access has been logged."; var p = document.createElement("p"); p.appendChild(document.createTextNode(msg)); document.body.insertBefore(p, document.body.firstChild); EOS end define action js_action transform js_transformer end <proxy> category=restricted action.js_action(yes) VPM は Javascript トランスフォーマを使用して、ポップアップ広告のブロックを実装します。 472 第 6 章 : 定義参考 関連項目 • アクション : transform • 定義 : define action • プロパティ: action( ) 473 SGOS 6.4 Content Policy Language リファレンス define policy ポリシー定義では、名前付きのポリシー マクロを定義します。ポリシー マクロは、他のレイヤから名 前を使用して呼び出すことができる一連のポリシー レイヤです。ポリシー マクロ内のすべてのレイ ヤは、 定義の 1 行目で宣言される同じタイプでなければなりません。 構文 define LayerType policy MacroName Layer1 Layer2 ... end たとえば、ここに proxy タイプのポリシー マクロがあります。 define proxy policy WebAccessPolicy <proxy> DENY hour=9..17 category=NotBusinessRelated DENY category=IllegalOrOffensive end ポリシー マクロは、 ルール内の policy.MacroName 構文を使用して、別のレイヤから呼び出されます。呼 び出し側のレイヤのタイプは、 ポリシー マクロのタイプと同じでなければなりません。 例を示します。 <proxy> url.address=TheInternet group=Operator ALLOW group=Employee policy.WebAccessPolicy DENY ポリシー マクロの呼び出し (policy.MacroName) は、CPL プロパティ設定と同様で、 ルール行のすべて の条件が true の場合に限り評価されます。 マクロの呼び出しが評価されるとき、対応するポリシー定 義内のすべてのレイヤが評価され、 一部のプロパティが設定されます ( プロパティを設定しないポリ シー マクロは、評価時に影響はありません)。 ポリシー評価時にルールに一致すると、そのルール内のすべてのプロパティ設定とマクロ呼び出しが 左から右に評価され、新しいプロパティ設定によって古いプロパティ設定がオーバーライドされま す。 つまり、マクロ呼び出し前のすべてのプロパティ設定がデフォルトになり、マクロ呼び出し後のす べてのプロパティ設定でオーバーライドが実行されます。 ポリシー定義には、他のポリシー マクロへの呼び出しを含めることができます。 ただし再帰呼び出し と循環呼び出しチェーンは使用できません。 ポリシー定義には、他の定義を含めることはできません。 474 第 6 章 : 定義参考 define server_url.domain condition ユーザー定義のラベルをドメインのサフィックス パターンのセッ condition= 式で使用するために、 トにバインドします。この定義ブロックを使用すると、大量の server_url.domain= 条件を素早くテ ストすることができます。define condition 定義ブロックは、ドメイン サフィックス パターンの セットをカプセル化する方法と同じように使用できますが、 この特殊化した定義ブロックによりパ フォーマンスが大幅に改善されます。 URL パターンと条件式がリストに表示される方法が重要になります。各行は、 URL パターンと、必要 に応じて 1 つ以上の条件式 ( すべてブール演算 AND の関係があるもの ) で開始されます。定義ブロッ ク内の各行は、ブロックの他の行とブール演算 OR の関係があるものと考えられます。 注意 : この条件は、<Forward> レイヤで使用するためのもので、URL の rewrite( ) アクションの影響 が考慮されます。<Forward> レイヤ ポリシーでは、 サーバーまたは他のアップストリーム デバ イス向けの URL の書き換えを必ず行う必要があるため、書き換えられない URL をテストする 条件は <Forward> レイヤでは使用できません。代わりの、この条件が用意されています。 構文 define server_url.domain condition label domain_suffix_pattern [condition_expression ...] ... end 各引数の意味は次のとおりです。 • condition= 条件で使用されます。 label: ドメイン条件定義のユーザー定義 ID。 • 完全 domain_suffix_pattern: 少なくともドメイン名 ( ドメイン ) を含む URL パターン。 な説明については、 url= 条件のリファレンスを参照してください。 • かつ <Forward> レイヤに含めることができ condition_expression: ルールで使用でき、 る条件を使用する、オプションの条件式。詳細は、55 ページの 第 3 章「条件リファレンス」 : を参照してください。 condition= 条件は、 define server_url.domain condition 定義ブロックの本文の URL パ ターンの後に追加できる式の 1 つです。このような方法で、1 つの server_url.domain 定義ブ ロックは別の条件関連の定義ブロックを呼び出すことができるので、事実上、 入れ子になりま す。 定義ブロックのトピックにある例を参照してください。 参照される条 define condition 件は、<Forward> レイヤで有効になっている必要があります。 レイヤおよびトランザクション メモ • <Forward> レイヤで使用します。 • すべてのトランザクションに適用されます。 475 SGOS 6.4 Content Policy Language リファレンス 例 define server_url.domain condition allowed inventory.example.com affinityclub.example.com end <Forward> condition=!allowed access_server(no) 関連項目 条件 : condition=、 server_url.domain= 定義 : define url.domain condition 476 第 6 章 : 定義参考 define string 名前付きの複数行の文字列を定義します。 構文 define string StringName >first line of text >second line of text ;comments and blank lines ignored >third line of text end メモ : • define string と end の間の、空白行とコメント行は無視されます。 • > 文字で始まる行には、文字列に追加されるテキストが含まれます。先頭の > 文字は 無視されます。 • > 文字の前にある先頭のスペースは無視されます。 • バックスラッシュ (\) を使用して行を続けることはできません。\ 文字は、文字通り扱われます。 文字列の名前は、exception( ) プロパティのオプションの 3 番目の引数として使用できます。これは、例 外の形式フィールドをオーバーライドします。この使用方法では、文字列に代入値を含めることがで きます。この代入値は、例外が発生すると拡張されます。 例 define string Message ><html> ><head> ><title>Notice</title> ><meta http-equiv=refresh content="10;$(url)"> ></head> ><body> >There are cookies in the lunch room.Help yourself. ></body> ></html> end <proxy> condition=ShouldBeNotified exception(notify,"",Message) 上記の CPL コードは、文字列定義名 Message によって HTML が定義されている、text/html タイプの 200 HTTP 応答を返します。文字列定義内の $(...) 形式の代入値が拡張されます。 関連項目 Properties: exception( ) 477 SGOS 6.4 Content Policy Language リファレンス define subnet ユーザー定義ラベルを IP アドレスまたは IP サブネット パターンのセットにバインドします。IP アド レスとしてトランザクションの一部をテストするいずれかの条件が含まれる、サブネット定義ラベル を使用します。この条件には、client.address=、proxy.address=、 request.header.header_name.address=、 request.x_header.header_name.address、 server_url.address= があります。 リストされている IP アドレスまたはサブネットは、それらすべてが 1 行に含まれているか、別個の行 に含まれているかにかかわらず、ブール演算 OR の関係を持つと考えられます。 構文 define subnet label { ip_address | subnet } { ip_address | subnet } ... ... end 各引数の意味は次のとおりです。 • label: このサブネット定義のユーザー定義 ID です。 • ip_address: IP address アドレス (10.1.198.0 など )。 • 例 : 10.25.198.0/16 subnet: サブネット仕様です。 例 define subnet local_net 1.2.3.4 1.2.3.5 ; can list individual IP addresses 2.3.4.0/24 2.3.5.0/24 ; or subnets end <proxy> client.address=!local_subnet deny 関連項目 • 478 条件 : client.address=、proxy.address=、 request.header.header_name.address=、 request.x_header.header_name.address、お よ び server_url.address= 第 6 章 : 定義参考 define url condition ユーザー定義ラベルを一連の URL プレフィックス パターンにバインドして condition= 式で使用し ます。この定義ブロックを使用することで多数の url= 条件群を迅速にテストすることができます。 URL プレフィックス パターンのセットをカプセル化する方法と同 define condition 定義ブロックは、 じように使用できますが、 この特殊化した定義ブロックによりパフォーマンスが大幅に改善されます。 URL パターンと条件式がリストに表示される方法が重要になります。各行は、 url= 条件に適した URL パターンと、必要に応じて 1 つ以上の条件式 ( すべてブール演算 AND の関係を持つもの ) で始まりま す。 定義ブロック内の各行は、ブロックの他の行とブール演算 OR の関係があるものと考えられます。 構文 define url condition label url_prefix_pattern [condition_expression ...] ... end 各引数の意味は次のとおりです。 • label: プレフィックス条件定義のユーザー定義 ID。 • 少なくとも次の部分により構成されています。 url_prefix_pattern:URL パターンは、 scheme://host:port/path • scheme: URL スキーム (http、https、ftp、mms、または rtsp) とそれに続くコロン (:) • オプションで先頭に 2 個のスラッシュ (//) を追 host: ホスト名または IP アドレス。 加 可 能。ホ ス ト 名 は、完 全 で あ る 必 要 が あ り ま す。た と え ば、url=http://www は、 単にドメイン名 http://www.example.com などの URL との一致に失敗します。 プレフィッ (example.com など ) だけでなく、完全なホスト名を使用することにより、 クスとドメイン条件定義ブロックとの相違が顕著になります。 • port: 1 と 65535 の間のポート番号 • path: スラッシュ (/) とそれに続く 1 つ以上の完全なディレクトリ名 指定可能なプレフィックス パターンには、次のパターンが含まれます。 scheme://host scheme://host:port scheme://host:port/path scheme://host/path //host //host:port //host:port/path //host/path host host:port host:port/path host/path /path 479 SGOS 6.4 Content Policy Language リファレンス • condition_expression: ルールで利用可能な条件のいずれかを使ったオプションの条件 式。 詳細は、55 ページの 第 3 章「条件リファレンス」 を参照してください。定義される条件 : のレイヤとタイミングの制限は、含まれる式のレイヤとタイミングの制限に依存します。 condition= 条件は、 define url condition 定義ブロックの本文の URL パターンの後に追 加できる式の 1 つです。このような方法で、1 つのプレフィックス定義ブロックは別の条件関 連の定義ブロックを呼び出すことができるので、事実上、入れ子になります。define condition 定義ブロックのトピックにある例を参照してください。 例 define url condition allowed http://www.inventory.example.com http.method=GET www.affinityclub.example.com/public ; any scheme allowed end <Proxy> condition=allowed allow 関連項目 条件 : category=、 condition=、 url= 定義 : define url.domain condition 480 第 6 章 : 定義参考 define url.domain condition ユーザー定義のラベルをドメインのサフィックス パターンのセッ condition= 式で使用するために、 トにバインドします。この定義ブロックを使用することで、多数の server_url.domain= 条件群を非 常に迅速にテストすることができます。define condition 定義ブロックは、ドメイン サフィックス パターンのセットをカプセル化する方法と同じように使用できますが、この特殊化した定義ブロック によりパフォーマンスが大幅に改善されます。 ドメインまたは URL の定義においては、URL パターンおよび条件式のリスト方法が重要となります。 各行は、 必要に応じて 1 つ以上の条件式 ( すべてブール演算 AND の関係があるもの ) URL パターンと、 で開始されます。定義ブロック内の各行は、ブロックの他の行とブール演算 OR の関係があるものと考 えられます。 構文 define url.domain condition label domain_suffix_pattern [condition_expression ...] ... end 各引数の意味は次のとおりです。 • condition= 条件で使用されます。 label: ドメイン条件定義のユーザー定義 ID。 • 少なくと domain_suffix_pattern: url.domain= 条件に合った URL パターンであり、 もドメイン名 (ドメイン) が含まれます。完全な説明については、url= 条件のリファレンス を参照してください。 • condition_expression: ルールで利用可能な条件のいずれかを使ったオプションの条件 式。 詳細は、55 ページの 第 3 章「条件リファレンス」 を参照してください。定義される条件 : のレイヤとタイミングの制限は、含まれる式のレイヤとタイミングの制限に依存します。 condition= 条件は、 define url.domain condition 定義ブロックの本文の URL パターンの 後に追加できる式の 1 つです。このような方法で、1 つのドメイン定義ブロックは別の条件関 連の定義ブロックを呼び出すことができるので、事実上、入れ子になります。define condition 定義ブロックのトピックにある例を参照してください。 レイヤおよびトランザクション メモ • <Proxy>、 <Cache>、 <ssl>、<ssl-intercept> および <Exception> レイヤで使用します。 • すべてのトランザクションに適用されます。 例 define url.domain condition allowed inventory.example.com method=GET affinityclub.example.com end <proxy> condition=allowed allow 481 SGOS 6.4 Content Policy Language リファレンス 関連項目 482 • 条件 : condition=、 server_url.domain= • 定義 : define url condition、define server_url.domain condition 第 6 章 : 定義参考 define url_rewrite または HTTP 応答で URL を書き換えるためのルールを定義します。URLS は、HTML、CSS、JavaScript、 ASX ドキュメント内のタグに埋め込まれているか、HTTP 応答ヘッダーに含まれています。URLS だけ でなく、任意の JavaScript も書き換えることができます。 このトランスフォーマは、define action 定義ブロックの transform アクションによっても呼び出 され、 そのブロックが今度は action( ) プロパティから呼び出された場合にのみ有効になります。 HTTP 応答内で検出された各 URL について、url_rewrite トランスフォーマは、まず URL を 絶対形 式に変換し、次に最初の rewrite_url_substring または server_URL_substring が検討対象の URL に一致する rewrite_url_prefix ステートメントを探します。このような一致が見つかった場合には、その サブ文字列は、client_url_substring によって置き換えられます。 一致では常に、大文字小文字は区別されません。 およ HTTP 応答内で URL を見つけるために、SG アプライアンスは、Location:、Content-Location:、 および ASX ファイルを解析します。 び Refresh: ヘッダーを探し、HTML、JavaScript、CSS、 SG アプラ イアンスは、 Javascript 内に埋め込まれている相対 URL に対しては、 rewrite_url_* ルールを適用しま せん。ただし、 rewrite_script_substring ルールを使用することで同じ効果を得ることができます。 注意 : HTTPS トンネル接続を介して提供されるページは暗号化されています。 したがって、 それらに埋め 込まれている URL は書き換えできません。 ウィルス スキャン サーバーに送信されるコンテンツとは異なり、 変換されたコンテンツは、 キャッ シュされません (ただし、元のオブジェクトはキャッシュ可能)。つまり、すべてのトランスフォーマは、 クライアントの ID や時刻を含め、どのような条件でも安全にトリガできます。 置換 : transform url_rewrite 構文 define url_rewrite transformer_id rewrite_url_substring "client_url_substring" "server_url_substring" rewrite_url_prefix "client_url_substring" "server_url_substring" rewrite_script_substring "client_substring" "server_substring" ... end 各引数の意味は次のとおりです。 • transformer_id: トランスフォーマ定義ブロックのユーザー定義 ID。 define action 定 義ブロックの transform アクションを使用してトランスフォーマを起動する場合に使用 されます。 • rewrite_url_substring: URL の任意の場所の server_url_substring に一致します。 • rewrite_url_prefix: URL のプレフィックスとしての server_url_substring に一致 します。 • rewrite_script_substring: Javascript 内の任意のサブ文字列に一致して書き換えを実 行します。サブ文字列は、 これ URL である必要はありません。何であっても構いません。 483 SGOS 6.4 Content Policy Language リファレンス は、Web アプリケーションの Javascript コードを変更してサーバー ポータルを正常に動 作させる必要がある特殊なケースで使用されます。 • client_url_substring: 読み込んだドキュメントの任意の URL にその文字列を照合し た場合に、server_url_substring を置き換える文字列です。代入されない URL の部分 は、 変化しません。 • server_url_substring: サーバー URL で検出された場合には、 client_url_substring で置き換えられる文字列です。そのドキュメントに埋め込まれている元の正規化された URL に対して比較が実行されます。 両方ともリテラル文字列 注意 : client_url_substring および server_url_substring は、 です。ワイルドカード文字と正規表現パターンは、サポートされていません。 説明 任意 url_rewrite 定義に一連の rewrite_url_substring と rewrite_url_prefix ステートメントがある場合、 の URL に一致する最初のステートメントが有効になり、その URL の処理は終了します。 レイヤおよびトランザクション メモ • プロキシ トランザクションに適用されます。 例 <Proxy> ; server portal for example url=example.com/ action.example_server_portal(yes) ; This transformation provides server portaling for example non video content define url_rewrite example_portal rewrite_url_prefix "http://www.example.com/" "http://www.server1.example.com/" end ; This action runs the transform for example server portaling for http content ; Note that the action is responsible for rewriting related headers define action example_server_portal ; request rewriting rewrite( url, "^http://www\.exampleexample\.com/(.*)", "http://www.server1.example.com/$(1)" ) rewrite( request.header.Referer, "^http://www\.example\.com/(.*)", "http://www.server1.example.com/$(1)" ) ; response rewriting transform example_portal end 関連項目 484 • アクション : transform • 定義 : define action、define active_content • プロパティ: action( ) 第 6 章 : 定義参考 restrict dns この定義では DNS 参照が制限されるため、DNS 解決へのアクセスが制限されているか、問題があるイ ンストールで有効です。この定義はルールによって直接参照されないため、 名前がありません。 この定 義は、ポリシー評価に対してグローバルであり、ポリシーに起因する DNS 参照を防止することを目的 として作成されます。ただし、アップストリーム接続に必要となる可能性のある DNS 参照は抑制しま せん。 任意の URL に指定されているドメインが domain_list で指定されているドメイン パターンのいず れかに一致する場合は、 または url.host= DNS 参照は、 category=、 url=、 url.address=、 url.domain=、 テストに対して実行されません。 特殊なドメイン "." は、すべてのドメインに一致し、したがって、すべてのポリシーベース DNS 参照 の制限に使用できます。 トリガの評価に参照が必要な場合、トリガは false と評価されます。 ポリシーで複数回示されることがあります。 コンパイラは、これらの定義の結 restrict dns 定義は、 合を試行し、結合時に定義が矛盾している場合や冗長である場合はさまざまなエラー メッセージや警 告を発します。 構文 restrict dns restricted_domain_list except exempted_domain_list end 各引数の意味は次のとおりです。 • restricted_domain_list: DNS 参照が制限されるドメインです。 • ポリシーは、これらの exempted_domain_list: DNS 制限が適用されないドメインです。 ドメインに関連するポリシーを評価するときに DNS 参照を使用できます。 レイヤおよびトランザクション メモ • すべてのレイヤおよびトランザクションに適用されます。 例 次の定義は mydomain.com を除くすべてに DNS 解決を制限します。 restrict dns . ; meaning “all” except mydomain.com end 関連項目 • 条件 : category=、 url=、 server_url= • 定義 : restrict rdns 485 SGOS 6.4 Content Policy Language リファレンス restrict rdns この定義は、 問題を起 DNS 逆引き参照を制限し、DNS 逆引き解決へのアクセスが制限されているか、 こしている場合のインストールに役立ちます。定義には名前はありません。ポリシー評価のすべてに 共通することであり、ルールから直接参照されることはありません。 要 求 さ れ た URL が IP 形 式 の ホ ス ト を 指 定 す る 場 合、category=、url=、 または url.domain=、 url.host= 条件に一致する DNS 逆引き参照は実施されません。 特殊なトークンである all はすべてのサブネットを照合するため、これを使ってすべてのポリシー ベースの DNS 逆引き参照を制限することができます。 トリガの評価に参照が必要な場合、トリガは false と評価されます。 コンパイラは、 これらの定義の結合を restrict rdns 定義はポリシーに数回現れることがあります。 試行し、結合時に定義が矛盾している場合や冗長である場合はさまざまなエラー メッセージや警告を 発します。 構文 restrict rdns restricted_subnet_list except exempted_subnet_list end 各引数の意味は次のとおりです。 • restricted_subnet_list: DNS 逆引き参照が制限されるサブネットです。 • ポリシーは、 exempted_subnet_list: DNS 逆引きの制限が適用されないサブネットです。 これらのサブネットに関連するポリシーを評価するときに DNS 逆引き参照を使用でき ます。 レイヤおよびトランザクション メモ • すべてのレイヤおよびトランザクションに適用されます。 例 次の定義は 10.10.100.0/24 サブネットを除くすべてに DNS 逆引き解決を制限します。 restrict rdns all except 10.10.100.0/24 end 関連項目 486 • 条件 : category=、 url=、 server_url= • 定義 : restrict dns 第 6 章 : 定義参考 transform active_content 使用されなくなったこの構文は define active_content に置き換えられました。詳細は、466 ページ の「define active_content」 を参照してください。 487 SGOS 6.4 Content Policy Language リファレンス transform url_rewrite 使用されなくなったこの構文は define url_rewrite に置き換えられました。詳細は、483 ページの 「define url_rewrite」 を参照してください。 488 付録 A: 用語集 <Admin> レイヤ ポリシーで許可されている 5 つのレイヤ タイプの中の 1 つ。Management Console とコ マンド ライン インターフェース (CLI) へのアクセスを制御するポリシー ルールを定義 するために使用されます。 <Cache> レイヤ ポリシーで許可されている 5 つのレイヤ タイプの中の 1 つ。キャッシュまたはプロキシ トランザクション中に評価されるポリシー ルールをリストするために使用されます。 <Forward> レイヤ ポリシーで許可されている 5 つのレイヤ タイプの中の 1 つ。<Forward> レイヤは、現在 のトランザクションでアップストリーム接続が必要な場合にのみ評価されます。 <Proxy> レイヤ ポリシー内で許可される 5 つのレイヤ タイプの 1 つ。SG に設定されたプロキシ サービ スへのアクセスを制御するポリシー ルールをリストするために使用されます。 ユーザ認証と承認要件、 時間制限、 およびコンテンツ <Proxy> レイヤ内のルールには、 フィルタが含まれます。 actions 定義のクラス。 CPL には、要求または応答の変更および通知という 2 つの一般的なアク ション クラスがあります。アクションには引数 ( 変更する要求または応答の部分など ) が 含まれ、 指定されたアクション定義ブロックに組み込まれます。 ポリシー ルールによっ てアクション定義がオンになると、それに含まれているアクションが各引数に基づいて 機能します。 allow 要求が許可されることを示すプロパティ設定の 1 つである exception(no) の推奨さ れる短い形式。 プロキシ ポリシー レイヤのデフォルト ルール。 allow または deny の 2 つの選択肢があ ります。deny を選択すると、SG へのすべてのアクセスが回避され、allow を選択すると、 SG へのフルアクセスが許可されます。 deny 要求を拒否する必要があることを示すプロパティ設定の 1 つである exception(policy_denied) の推奨される短い形式。 Forward ポリシー ファイル 以前の SGOS バージョンからのアップグレード中に作成するか、作成される可能性があ るファイル。 このファイルは、 他の 3 つのポリシー ファイルに記述されているすべての ポリシーを補完するために保持します。 通常、これは転送ポリシーに使用されます。 Forward ポリシー ファイルは、評価順序で常に最後です。 通常、転送ポリシーは一意で、 他のポリシーから独立しており、 多くの場合、 ネットワーク トポロジ管理の一環として使用されます。 Visual Policy Manager を使用して、転送ポリシーを作成および管理することもできます。 Visual Policy Manager ファイル Visual Policy Manager によって個々の SG に作成および保存されるファイル。VPM を使 用すると、CPL を直接書き込まなくてもポリシーを作成できます。VPM では CPL 機能の サブセットがサポートされるため、 ローカル ポリシー ファイルのルールを使用して、 新しい SG がある場合、 VPM ファイルのポリシーを補完することもできます。 VPM ファ イ ル は 空 で す。VPM ファイルは、VPM ファイルを Web サーバーにコピーした後、 ファイルをダウンロードおよび Management Console か CLI を別の SG から使用して、 インストールすることで、さまざまな SG アプライアンス間で共有できます。 489 SGOS 6.4 Content Policy Language リファレンス キャッシュ トランザ クション ローカル オブジェクト ストア内のコンテンツを保持するために、 SG によって生成され、 アップストリーム デバイスでリダイレクトされる要求のカプセル化。 セクション セクションは、セクション タイプを LIKE 構文のルールをまとめてグループ化する方法。 定義するセクション ヘッダーと、そのあとに続くポリシー ルールで構成されています。 セクション タイプによって、許可されるルールの構文と評価戦略が決定されます。 デフォルト ポリシー 設定から取得されたさまざまなトランザクション プロパティのデフォルト設定。 重要な 例としてデフォルト プロキシ ポリシーが挙げられます。 これは、allow または deny のい ずれかに対して設定できます。 トランザクション ポリシー評価の影響を受ける可能性のある結果応答と SG への要求のカプセル化。 一貫性のある結果を得るために、トランザクション開始時点のポリシーのバージョンが すべてのトランザクションの評価に使用されます。 トリガ トランザクションのいくつかの側面に関する指定されたテスト。 CPL トリガの形式は、 trigger_name=value です。 トリガは、ルールと条件定義で使用されます。 プロキシ トランザク ション SG に設定されたプロキシ サービス ポートを介して受け取られた要求ごとに作成される トランザクション。プロキシ トランザクションには、配信元サーバーまたはローカル オ ブジェクト ストアのどちらからフェッチしたかに関係なく、 要求とそれに関連付けられ た応答の両方が含まれます。 プロパティ 値に応じて処理されるトランザクションのいくつかの側面を制御する CPL 設定。CPL プ ロパティの形式は、property(setting) です。 それらの大 トランザクションの最初に、 すべてのプロパティがデフォルト値に設定され、 部分は構成設定から取得されます。 ポリシー トレース ポリシー評価の結果一覧。 ポリシー トレースは、 ポリシーのトラブルシューティングを 行う場合に便利です。 ポリシー ファイル CPL を含む次の 4 つのファイルのいずれか。Central、Local、VPM、または Forward。ポリ シーがインストールされている場合、各ファイルのコンテンツは評価順序に応じて連結 されます。 ルール 任意の順序で記載されているトリガとプロパティ設定のリスト。 ルールは、 行連結文字を 使用して複数行で作成できます。 ルールが一致すると ( すべてのトリガが true と評価されると )、すべてのプロパティが指 定どおりに設定されます。レイヤごとに、 最大で 1 つのルールが一致します。レイヤの評 価は、最初のルール一致で終了します。 レイヤ 単一のポリシー決定用ルールを表すための CPL 構成要素。複数の決定を行う場合は、複 数のレイヤを使用できます。レイヤは、順番に上から下に評価されます。後のレイヤに よって行われた決定は、 前のレイヤによって行われた決定をオーバーライドできます。 レ イヤの評価は、最初のルール一致で終了します。 レイヤ タイプによって、 このポリシーに対して評価さ 5 つのレイヤ タイプがあります。 れたトランザクションが定義され、レイヤで使用されているルールで許可されるトリガ とプロパティが制限されます。 5 つの各レイヤ タイプは、どのポリシー ファイルで使用することもできます。 490 付録 A: 用語集 ローカル ポリシー ファイル 1 つ以上の SG アプライアンスに固有のポリシーに対してネットワーク上で作成および 管理するファイル。 通常、 このファイルは、組織内の SG アプライアンスの一部のサブセッ トで使用するために、テキスト エディタで直接 CPL を作成するときに作成されます。 CacheOS 4.x システムからアップグレードする場合、このローカル ファイルには古いシ ステムに設定されていたすべてのフィルタ ルールが含まれます。 不一致 ルールが評価されるときに、いずれかのトリガが false と評価されると、指定されたすべ てのプロパティが無視されます。これは、( たとえば、ポリシー トレースで ) しばしばルー ル不一致と呼ばれます。 定義 定義は、ユーザー定義のラベルを条件、コンテンツ カテゴリ、変換、またはアクション グ ループにバインドします。 該当なし このトランザクションに対してルールを評価することはできず、 スキップされます。 N/A は、たとえば、ストリーミング条件を FTP トランザクションに適用しようとすると 生じます。 管理トランザクション ポリシー評価を目的として SG を管理するための要求のカプセル化。 <Admin> レイヤの ポリシーは管理トランザクションに適用されます。 また、ユーザが SG に対して非透過的 にプロキシ処理される場合、要求に対するプロキシ トランザクションも作成されます。 例外レイヤ ポリシーで許可されている 5 つのレイヤ タイプの中の 1 つ。例外レイヤは、 例外プロパ ティが設定され、 トランザクションの停止が強制される場合に評価されます。 例外レイヤ のポリシーを使用して、管理者は、配信元サーバーまたはキャッシュから返されたオブ ジェクトのプロパティを変更できる場合と同様に、 応答 ( 例外 ) オブジェクトのプロパ ティ ( ヘッダーなど ) を変更する最後の機会を得ることができます。 評価順序 Central、Local、VPM、および Forward という 4 つのポリシー ファイルが評価される順 序。あるファイルが最後に評価されると、 それによって指定されるポリシー ルールと関 連する構成設定によって、他のファイルでトリガされる設定がオーバーライドされる可 能性があります。 および VPM ポリシー ファイルの評価順序は、 Central、 Local、 policy order CLI コマン ドまたは Management Console を使用して設定できます。評価順序で、Forward ファイル は常に最後です。 条件 トリガ式のブール値の組み合わせ。 これにより、 評価時に true または false が生成されます。 要求変換 オブジェクトの要求の変更 (URL またはヘッダーのいずれか )。この変更によって、異な るオブジェクトのフェッチ、または異なるメカニズムを使用したオブジェクトのフェッ チが行われる場合があります。 一致 ルールが評価されるときに、 すべてのトリガが true と評価されると、 指定されたすべて のプロパティが設定されます。これは、( たとえば、ポリシー トレースで ) しばしばルール 一致と呼ばれます。 応答変換 返されるオブジェクトの変更。 この変更は、 クライアントに送信される応答に関連付けら れたプロトコル ヘッダーに行ったり、 HTML ページからのアクティブ コンテンツの削 除など、オブジェクト コンテンツ自体の変換に対して行ったりすることができます。 中央ポリシー ファイル Blue Coat テクニカル サポートによって提供されるファイル。このファイルにより、特 定のサイトにアクセスするときに、SG は適切かつ効率的に機能できるようになります。 複数のアプライアンスで共有するポリシーを含めて、このファイルを使用できます。 491 SGOS 6.4 Content Policy Language リファレンス 492 付録 B: テストおよびトラブルシューティング ポリシー ファイルで問題が発生している場合、 または短期間の評価をモニタする場合、 ポリシー言語 のポリシー トレース機能を使用することを検討してください。 Tracing を使用すると、SG ポリシーが特定の要求にどのように適用されているかを確認できます。ポリ シー ファイルでトレースを設定するには、いくつかのポリシー言語プロパティを使用してトレースを 有効にし、詳細レベルを設定して出力パスを指定します。トレース ルールのガードに適切な条件を使 用することで、トレース情報を収集する要求を具体的に指定できます。 注意 : ポリシー トレースは、トラブルシューティングのみに使用してください。トレースはトラブル シューティングのために一時的に使用する場合に最適で、継続的なモニタには log_message( ) アクションが最適です。log_message( ) アクションについての詳細は、449 ページの 「log_message( )」を参照してください。トレースが運用環境設定で有効になっている場合、SG ア プライアンスのパフォーマンスは低下します。トラブルシューティングの終了後、必ずポリシー トレースを削除してください。 CPL には、次のトレース関連プロパティがあります。 • trace.rules( トレースでは、不一致だったルール、一致 ): ルール評価のトレースを制御します。 したルール、および適用できなかった (N/A) ルール ( このトランザクションでは評価できないた めスキップされたルール ) を表示できます。N/A は、 FTP トランザクションにストリーミング ト リガを適用しようとした場合などに発生します。 • trace.request( トレースで処理されるトランザクションの説明が ): トレースを有効にします。 含まれます。no に設定されている場合、トレース出力は生成されません。 • trace.destination( ): トレースをユーザー指定のトレース ログに出力します。 ルール トレースの有効化 ルール トレースを有効または無効にするには、trace.rules( ) プロパティを使用します。 ルール ト レースには、ポリシー評価中に実行されたルールが表示されます。このプロパティでは次の構文を使 用します。 trace.rules(yes|no|all) 各引数の意味は次のとおりです。 • 表示されるのはマッチング ルールのみです。 yes: ルール トレースを有効にしますが、 • no: ルール トレースを無効にします。 • 一致しなかった条件に関する詳細も表示されます。 all トレースを有効にし、 例 トレースを有効にするには、次のように指定します。 <Proxy> trace.rules(yes) tracewhere:request(yes) 493 SGOS 6.4 Content Policy Language リファレンス 要求トレースの有効化 要求トレースでは、 ト 要求トレースを有効にするには、trace.request( ) プロパティを使用します。 ランザクションに関する情報の概要 ( 要求パラメータ、プロパティ設定、および実行されたすべてのア クションの効果 ) がログ記録されます。このプロパティでは次の構文を使用します。 trace.request(yes|no) 各引数の意味は次のとおりです。 • プロパティ設定、および実行されたすべてのアクションの効果が含 yes: 要求パラメータ、 まれます。 • トレース情報は生成されません。 no: trace.rules( ) が設定されている場合でも、 例 すべてのトランザクションの完全なトレース情報を有効にするには、次のように指定します。 <cache> trace.rules(all) trace.request(yes) パスの設定 SG でトレース情報を保存する場所を設定するには、trace.destination( ) プロパティを使用しま す。トレースの出力先を設定し、繰り返しリセットできます。出力先は、SG が要求および関連する応答 の処理を完了した場合にのみ有効になり、 トレースが実際に書き込まれます。 トレース出力は、 コンソー ル URL を使用してアクセスできるオブジェクトに次の形式で保存されます。 https://SG_appliance_IP_address:8081/Policy/Trace/path ここで、path はデフォルトでは default_trace.html です。このプロパティによって、出力先を変更 できます。このプロパティでは次の構文を使用します。 trace.destination(path) ここで、path はファイル名、ディレクトリ パス、またはその両方です。ディレクトリのみを指定した場 合、デフォルトのトレース ファイル名が使用されます。 Management Console で、[Statistics] > [Advanced] > [List of policy URLs] の順に選択してポリシーの統計 情報を表示できます。 例 次の例では、ポリシー トレース情報用に 2 つの出力先が設定されています。 <Proxy> client.address=10.25.0.0/16 trace.destination(internal_trace.html) client.address=10.0.0.0/8 trace.destination(external_trace.html) 情報を取得するコンソール URL は、 次のとおりです。 http://<SG_appliance_IP_address>:8081/Policy/Trace/internal_trace.html http://<SG_appliance_IP_address>:8081/Policy/Trace/external_trace.html 494 付録 B: テストおよびトラブルシューティング トレース情報を使用したポリシーの改善 このセクションには、トレースを理解するために役立つ、 注釈付きのトレース出力が含まれています。 これらのトレースでは、特定のポリシーに対する特定の要求の評価が表示されます。使用されるサン プル ポリシーは、特定の目的に適しているわけではありません。単にポリシー トレース出力の多くの 面を示すことを目的としています。 サンプルで示される関連ポリシーの要件は、次のとおりです。 • ホストされているサイト以外は DNS 参照が制限されます。 • DNS 逆引きにはアクセスできないため、DNS 逆引きは完全に制限されます。 • ホストされているサイトのアドレスが名前またはサブネットによって指定されていない場合、要 求は拒否されます。 • FTP POST 要求は拒否されます。 • ホストされているサイトに対する要求 URL は、 サイトへ向かう途中の要求ヘッダーに書き換えら れます。 サンプル ポリシー ; DNS lookups are restricted except for one site that is being hosted restrict dns . except my_site.com end ; No access to RDNS restrict rdns all end define subnet my_subnet 10.11.12.0/24 end <Proxy> trace.request(yes) trace.rules(all) <Proxy> ; deny url.host.is_numeric=no url.domain=!my_site.com deny url.address=!my_subnet <Proxy> deny ftp.method=STOR <Proxy> url.domain=my_site.com action.test(yes) define action test set(request.x_header.test, “test”) 495 SGOS 6.4 Content Policy Language リファレンス rewrite(url, “(.*)\.my_site.com”, “$(1).his_site.com”) end クライアント要求が評価されるときにポリシー ト trace.request() は yes に設定されているため、 レースが実行されます。 不一致だったルールと一致し trace.rules() は all に設定されているため、 たルールのすべてのルール評価が表示されます。 次に、 http://www.my_site.com/home.html に対する HTTP GET 要求で生成されたトレース出力を 示します。 注意 : 左側に表示されている行番号は、実際のトレース出力には表示されません。これらの行番号は注 釈として追加されています。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 start transaction -----------------------------CPL Evaluation Trace: <Proxy> MATCH: trace.rules(all) trace.request(yes) <Proxy> miss: url.domain=!//my_site.com/ miss: url.address=!my_subnet <Proxy> n/a : ftp.method=STOR <Proxy> MATCH: url.domain=//my_site.com/ action.foo(yes) connection: client.address=10.10.0.10 proxy.port=36895 time: 2003-09-11 19:36:22 UTC GET http://www.my_site.com/home.html DNS lookup was unrestricted rewritten URL(s): cache_url/server_url/log_url=http://www.his_site.com/ User-Agent: Mozilla 8.6 (Non-compatible) user: unauthenticated set header= (request) value='test' end transaction -------------------------------- メモ : 496 • 行 1 および 22 は、 このトランザクションのトレースの開始位置と終了位置を示す区切り記号です。 • 行 2 からトレースのルール評価部分が開始します。ルール評価部分は、trace.rules() が yes ま たは all に設定されている場合に生成されます。 • 行 3 ~ 4 および 10 ~ 11 にはルールの一致で、trace.rules() が yes または all に設定されてい る場合に表示されます。 • 行 5 ~ 9 は、 つまり、 trace.rules(all) に設定されている場合にのみ表示されます。 trace.rules 一致しないルールを含めるに (yes) の場合は一致するレイヤおよびルールのみが表示されます。 は、 trace.rules(all) を使用します。 • 行 9 は、 このトランザクション (HTTP) に適用できないルール (FTP 固有の条件を含む ) が n/a と マークされることを示しています。 • 行 12 ~ 21 は、trace.request(yes) の結果として生成されます。trace.request(yes) なしで トレースは生成されません。 trace.rules() を使用した場合、 • 行 12 は、クライアントに関する情報を示しています。 付録 B: テストおよびトラブルシューティング • 行 13 は、 トランザクションが処理された時間を示しています。 • 行 14 は、 要求行の概要です。 • 行 15 は、 評価中に DNS 参照が試みられ、 その参照が制限されていなかったことを示しています。 こ の行は、 DNS 制限があり、評価に DNS 参照が必要な場合にのみ表示されます。 • 行 16 および 17 は、要求 URL が書き換えられたことを示し、その効果が表示されています。 • 行 19 は、ユーザーの認証が不要だったことを示しています。 認証が必要だった場合、 ユーザー ID が 表示されます。 • 行 20 および 21 は、ヘッダーの変更アクションの結果を示しています。 次のサンプルは同じポリシーのトレースですが、このトランザクションの要求 URL にはホスト名の 代わりに IP アドレスが使用されています。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 start transaction -----------------------------CPL Evaluation Trace: <Proxy> MATCH: trace.rules(all) trace.request(yes) <Proxy> miss: url.host.is_numeric=no miss: url.address=!my_subnet <Proxy> n/a : ftp.method=STOR <Proxy> miss: url.domain=//my_site.com/ connection: client.address=10.10.0.10 proxy.port=36895 time: 2003-09-11 19:33:34 UTC GET http://10.11.12.13/home.html DNS lookup was restricted RDNS lookup was restricted User-Agent: Mozilla 8.6 (Non-compatible) user: unauthenticated end transaction -------------------------------- ここに示されている機能の多くは前回のトレースと同じですが、次の違いがあります。 • 行 12: 要求された URL は数値のホスト名です。 • 行 15 および 16: このトランザクションでは、DNS と RDNS 両方の参照が制限されています。 • 行 11: RDNS 参照は制限されているため、 ルールは不一致になっています。 トランザクションに書き換 えアクションは使用されず、 トランザクションの概要に書き換えアクションは報告されていません ( 行 12 ~ 18)。 トレース出力は、イベント ログで報告される可能性のあるアクションの競合の原因を特定するために 使用できます。たとえば、次のポリシー断片について考えます。 <Proxy> trace.request(yes) trace.rules(all) <Proxy> action.set_header_1(yes) [Rule] action.set_header_2(yes) action.set_header_3(yes) 497 SGOS 6.4 Content Policy Language リファレンス define action set_header_1 set(request.x_header.Test, "one") end define action set_header_2 set(request.x_header.Test, "two") end define action set_header_3 set(request.x_header.Test, "three") end すべてに同じヘッダーが設定されているため、これらのアクションは競合します。この例では、同じレ イヤですべてのアクションが有効になっているため、競合は明らかです。ただし、ポリシーの完全に独 立した部分でアクションが有効になっている場合に競合が発生する可能性もあります。アクションの 競合が発生した場合、 いずれかのアクションがドロップされ、 イベント ログに次のようなエントリが 記録されます。 Policy: Action discarded, 'set_header_1' conflicts with an action already committed 競合は、//www.my_site.com/home.html に対する要求の次のトレースに反映されます。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 start transaction -----------------------------CPL Evaluation Trace: <Proxy> MATCH: trace.rules(all) trace.request(yes) <Proxy> action.set_header_1(yes) [Rule] action.set_header_2(yes) MATCH: action.set_header_1(yes) MATCH: action.set_header_2(yes) MATCH: action.set_header_3(yes) connection: client.address=10.10.0.10 proxy.port=36895 time: 2003-09-12 15:56:39 UTC GET http://www.my_site.com/home.html User-Agent: Mozilla 8.6 (Non-compatible) user: unauthenticated Discarded Actions: set_header_1 set_header_2 set header=set_header_3 (request) value='three' end transaction -------------------------------- メモ : 498 • レイヤおよびセクションのガード式は、ルールがガードのサブジェクトになる ( 行 9) 前のトレー ス ( 行 7 および 8) で示されています。 • 行 15 は、 競合によりアクションが破棄されたことを示しています。 • 行 16 および 17 は、破棄されたアクションを示しています。 • 行 18 は残りのアクションを示し、行 19 はヘッダー値でのアクションの効果を示しています。 付録 C: 認識されている HTTP ヘッダー この付録にある表には、認識されているすべての HTTP 1.1 ヘッダーがリストされており、SG がそれ らとどのように相互作用できるかが示されています。各ヘッダーの列には、ヘッダーが要求フォーム または応答フォームのどちらに表示されるかということと、append( )、 ま delete( )、 rewrite( )、 たは set( ) アクションを使用してヘッダーを変更できるかどうかということが示されています。 認証されているヘッダーは、 request.header.header_name= および response.header.header_name= 条件と共に使用できます。 この表に表示されていないヘッダーは、request.x_header.header_name= および response.x_header.header_name= 条件を使用してテストする必要があります。また、次の 3 つのヘッダー フィールドにはアドレス値が含まれるため、 request.header.header_name.address= Client-IP, Host, X-Forwarded-For 条件で使用できます。 Blue Coat は ELFF #Remark ディレクティブを使用して、SG のシリアル番号と名前を ELFF フォーマッ ト済みアクセス ログに記録します。 表 C.1: プロキシ SG によって認識される HTTP ヘッダー ヘッダー フィールド Accept 要求 / 応答フォーム 許可されたアクション rewrite( ) set( ) append( ) delete( ) 要求 X X X Accept-Charset 要求 X X X Accept-Encoding 要求 X X X Accept-Language 要求 X X X Accept-Ranges 応答 X X X X X X X X Age 応答 Allow 要求 / 応答 Authorization 要求 Cache-Control 要求 / 応答 X Client-IP 要求 X Connection 要求 / 応答 X Content-Encoding 要求 / 応答 X Content-Language 要求 / 応答 Content-Length 要求 / 応答 Content-Location 要求 / 応答 Content-MD5 要求 / 応答 Content-Range 要求 / 応答 content-type 要求 / 応答 X X X X 499 SGOS 6.4 Content Policy Language リファレンス 表 C.1: プロキシ SG によって認識される HTTP ヘッダー ヘッダー フィールド Cookie 許可されたアクション rewrite( ) set( ) append( ) delete( ) X X 要求 X Cookie2 要求 X X Date 要求 / 応答 ETag 応答 X X Expect 要求 Expires 要求 / 応答 X X From 要求 X X Host 要求 If-Match 要求 If-Modified-Since 要求 If-None-Match 要求 If-Range 要求 If-Unmodified-Since 要求 Last-Modified 要求 / 応答 Location 応答 Max-Forwards 要求 Meter X X X X X 要求 / 応答 X X Pragma 要求 / 応答 X X Proxy-Authenticate 応答 Proxy-Authorization 要求 X X Proxy-Connection 要求 Range 要求 Referer 要求 X X Retry-After X X 応答 X X Server 応答 X X Set-Cookie 応答 X X X Set-Cookie2 応答 X X X TE 要求 X Trailer 要求 / 応答 X Transfer-Encoding 要求 / 応答 X Upgrade 要求 / 応答 X User-Agent 要求 X 応答 X Vary 500 要求 / 応答フォーム X X X 付録 C: 認識されている HTTP ヘッダー 表 C.1: プロキシ SG によって認識される HTTP ヘッダー ヘッダー フィールド 要求 / 応答フォーム 許可されたアクション rewrite( ) set( ) append( ) delete( ) Via 要求 / 応答 X X X Warning 要求 / 応答 X X X WWW-Authenticate 応答 次の表に、SG によって認識されるカスタム ヘッダーを示します。 表 C.2: SG によって認識されるカスタム HTTP ヘッダー ヘッダー フィールド 要求 / 応答フォーム 許可されたアクション Authentication-Info 応答 append( ) Front-End-Https 要求 / 応答 rewrite( ), set( ), delete( ) Proxy-support 応答 変更できません。 P3P 応答 rewrite( ), set( ), delete( ) Refresh 応答 rewrite( ), set( ), delete( ) X-BlueCoat-Error 要求 / 応答 変更できません。 X-BlueCoat-Via 要求 / 応答 delete( ) X-Forwarded-For 要求 rewrite( ), set( ), delete( ) 501 SGOS 6.4 Content Policy Language リファレンス 502 付録 D: CPL 代入値 代入値とは、次のような短い構文です。 $(user) 代入値を使用して、現在のトランザクションから情報をフェッチできます。 この情報を変換して、 文字 列やテキストのブロックに置き換えることもできます。 代入値は、次のコンテキストに使用されます。 • 例外ページ、ICAP お詫びページ、および認証フォーム内 • 代替レルムの定義内 • CPL プログラム内、定義文字列のステートメント内、および大部分の ( ただしすべてではない ) "..." または '...' 文字列リテラル内 • Event Log オブジェクトや Notify User オブジェクトなど、VPN 内の一部のコンテキスト内 代入値の一般的な構文は、"$(" field modifier* ")" です。 この構文では、field は ELFF フィールド名か CPL トリガ名のいずれかになります。ELFF フィールド 名は、 すべての CPL トリガ名を代入値に使用でき ELFF アクセス ログ形式の定義にも使用されます。 るわけではありません。 この付録で指定されているもののみ使用できます。 多くの場合、 ELFF と CPL の両方のフォームで同じフィールドを使用できます。このような場合、どちらかのフォームも使用で きます。 たとえば、 $(cs-ip) と $(proxy.address) は同等です。 代入値には、 フィールド名の後にゼロ個以上の 修飾子を含めることができます。 修飾子によって、 その 左側に指定された代入値が変換されます。修飾子は左から右に解釈されます。 代入修飾子の詳細については、504 ページの「アクセス ログ フィールド」を参照してください。 注意 : 特別な場合には、$ に置き換えられる $$ を CPL 代入値として使用できます。 たとえば、jQuery を使用して、プロキシ SG アプライアンスで例外ページをカスタマイズする場 合、jQuery $ 関数 ($(‘body’) など ) はエラーとして報告されます。このエラーは、プロキシ SG アプライアンスが jQuery $ 関数を無効な CPL 代入値と解釈するために発生します。 jQuery 関数 が間違った解釈をされないようにするために、$(‘body’) ではなく、$$(‘body’) を使用します。 次の表に、すべての ELFF フィールド名とすべての CPL 代入値フィールド名を示します。 $(request.x_header.<x-header-name>) と $(response.x_header.<x-header-name>) も有効な 代入値です。 503 SGOS 6.4 Content Policy Language リファレンス 使用可能な代入値 使用可能な代入値は、次のカテゴリに分類されます。 • bytes • streaming • connection • time • instant messaging (im) • url • req_rsp_line • user • special_token • ci_request_header • status • si_response_header アクセス ログ フィールド 次の表に、アクセス ログ形式の作成に使用できるすべてのフィールドを示します。ELFF 形式を作 成する場合、 ELFF 列から値を使用する必要があります。カスタム形式を作成する場合、 ELFF、 CPL、 またはカスタム列から値を使用できます。 表 D-1. アクセス ログ形式 ELFF CPL カスタム 説明 カテゴリ : バイト cs-bodylength cs-bytes クライアントからアプライアンスに送信された 本文 ( ヘッダーを除く ) のバイト数 %B クライアントからアプライアンスに送信された バイト数 cs-headerlength クライアントからアプライアンスに送信された ヘッダーのバイト数 rs-bodylength アップストリーム ホストからアプライアンスに 送信された本文 ( ヘッダーを除く ) のバイト数 rs-bytes アップストリーム ホストからアプライアンスに 送信されたバイト数 rs-headerlength アップストリーム ホストからアプライアンスに 送信されたヘッダーのバイト数 sc-bodylength アプライアンスからクライアントに送信された 本文 ( ヘッダーを除く ) のバイト数 sc-bytes %b アプライアンスからクライアントに送信された バイト数 sc-headerlength アプライアンスからクライアントに送信された ヘッダーのバイト数 sr-bodylength アプライアンスからアップストリーム ホストに 送信された本文 ( ヘッダーを除く ) のバイト数 504 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 sr-bytes アプライアンスからアップストリーム ホストに 送信されたバイト数 sr-headerlength アプライアンスからアップストリーム ホストに 送信されたヘッダーのバイト数 カテゴリ : cifs x-cifs-bytes-written 関連付けられたリソースに書き込まれたバイト 数の合計 x-cifs-client-bytesread 関連付けられたリソースから CIFS クライアン トによって読み取られたバイト数の合計 x-cifs-client-readoperations CIFS クライアントによって発行された、関連付 けられたリソースに対する読み取り操作の合計数 x-cifs-client-otheroperations CIFS クライアントによって発行された、関連付 けられたリソースに対する読み取り / 書き込み 以外の操作の合計数 x-cifs-client-writeoperations CIFS クライアントによって発行された、関連付 けられたリソースに対する書き込み操作の合計数 x-cifs-dos-error-class サーバーで生成された DOS エラー クラス (16 進表記 ) x-cifs-dos-error-code サーバーで生成された DOS エラー コード (16 進表記 ) x-cifs-error-code サーバーで生成されたエラー コード x-cifs-fid CIFS リソースの ID 表現 x-cifs-file-size CIFS リソースのバイト単位のサイズ x-cifs-file-type CIFS リソースのタイプ x-cifs-method CIFS 要求に関連付けられたメソッド x-cifs-nt-error-code サーバーで生成された NT エラー コード (16 進 表記 ) x-cifs-orig-path 名前変更前の、リソースのパス名 x-cifs-orig-unc-path 名前変更前の、リソースのパス名の UNC パス x-cifs-path UNC パスに指定された CIFS リソース名 x-cifs-server UNC パスに指定された CIFS サーバー x-cifs-server-bytesread 関連付けられたリソースから CIFS サーバーに よって読み取られたバイト数の合計 x-cifs-serveroperations CIFS サーバーに発行された、関連付けられたリ ソースに対する操作の合計数 x-cifs-share UNC パスに指定された CIFS 共有名 505 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 x-cifs-tid サーバー リソースへの認証された接続のインス タンスを表す ID x-cifs-uid 認証されたユーザー インスタンスを表す ID x-cifs-unc-path \\\\server\\share\\path 形式の CIFS パス (path は空の場合があります ) カテゴリ : 接続 cs-ip proxy.address クライアントの接続先の IP アドレス c-connect-type クライアントからアプライアンスへの接続のタ イプ (「透過」または「非透過」) c-dns %h x-cs-dns client.host c-ip client.address c-port クライアントのホスト名 ( クライアントの IP ア ドレスを使用して、DNS 逆引きを回避します ) DNS 逆引きによって取得されたクライアントの ホスト名。 %a クライアントの IP アドレス クライアントにより使用された送信元ポート x-cs-netbios-computer -name netbios.computer-name コンピュータの NetBIOS 名クエリが失敗する か、名前が報告されない場合、これは空の文字列 になります。代入値 $(netbios.*) を使用してユー ザー名を生成した場合、クライアント コン ピュータは NetBIOS over TCP/IP のノード ス テータス クエリに応答する必要があります。 x-cs-netbios-computer -domain netbios.computer-domain コンピュータが所属するドメインの名前。クエリ が失敗するか、名前が報告されない場合、これは 空の文字列になります。代入値 $(netbios.*) を使 用してユーザー名を生成した場合、クライアント コンピュータは NetBIOS over TCP/IP のノード ステータス クエリに応答する必要があります。 x-cs-netbios-messeng er-username netbios.messenger-username ログインしたユーザーの名前。クエリが失敗する か、名前が報告されない場合、これは空の文字列 になります。ログインしたユーザーが 2 人以上い る場合も空になります。代入値 $(netbios.*) を使 用してユーザー名を生成した場合、クライアント コンピュータは NetBIOS over TCP/IP のノード ステータス クエリに応答する必要があります。 506 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 x-cs-netbios-messeng netbios.messenger-username er-usernames s ターゲット コンピュータから報告されたすべて のメッセンジャ ユーザー名のコンマ区切りリス トクエリが失敗するか、名前が報告されない場 合、こ れ は 空 の 文 字 列 に な り ま す。代 入 値 $(netbios.*) を使用してユーザー名を生成した場 合、クライアント コンピュータは NetBIOS over TCP/IP のノード ステータス クエリに応答する 必要があります。 x-session-monitor-att session-monitor.attribute ribute RADIUS アカウンティングから報告された、この セッションに関連付けられた属性。既知のセッ ションがない場合、これは空の文字列になります。 x-cs-ident-username Ident クエリから返された、このセッションに関 連付けられたユーザー名。既知のセッションがな い場合、これは空の文字列になります。 ident.username x-cs-connection-negot client.connection.negotiated iated-cipher _cipher クライアント接続でネゴシエートされた OpenSSL 暗号スイート x-cs-connection-negot client.connection.negotiated iated-cipher-strength _cipher.strength クライアント接続でネゴシエートされた OpenSSL 暗号スイートの強度 x-cs-connection-negot iated-cipher-size クライアント接続でネゴシエートされた OpenSSL 暗号スイートの暗号サイズ x-cs-connection-negot client.connection.negotiated iated-ssl-version _ssl_version クライアント接続でネゴシエートされた SSL プ ロトコルのバージョン r-dns 送信サーバーの URL からのホスト名 r-ip 送信サーバーの URL からの IP アドレス r-port %p 送信サーバー URL からのポート r-supplier-dns アップストリーム ホストのホスト名 ( キャッ シュ ヒットでは利用できません ) r-supplier-ip アップストリーム ホストへの接続に使用された IP アドレス ( キャッシュ ヒットでは利用できま せん ) r-supplier-port アップストリーム ホストへの接続に使用された ポート ( キャッシュ ヒットでは利用できません ) sc-adapter proxy.card アプライアンスへのクライアントの接続のアダ プタ番号 sc-connection クライアントの接続の一意 ID ( つまり、SOCKET) x-bluecoat-server-con server_connection.socket_er nection-socket-errno rno アップストリーム ホストへの失敗した接続の試 みに関連付けられたエラー メッセージ s-computername proxy.name %N 設定されたアプライアンス名 507 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 s-connect-type アップストリーム接続のタイプ ( 直接、SOCKS ゲートウェイなど ) s-dns アプライアンスのホスト名 ( プライマリ IP アド レスを使用して、DNS 逆引きを回避します ) s-ip s-port proxy.port s-sitename %I クライアントの接続が確立されたアプライアン スの IP アドレス %P クライアントの接続が確立されたアプライアン スのポート %S トランザクションの処理に使用されたサービス のタイプ x-service-name service.name トランザクションを処理したサービスの名前 x-module-name module_name トランザクションを処理している SGOS モ ジュール s-supplier-ip %D アップストリーム ホストへの接続に使用された IP アドレス ( キャッシュ ヒットでは利用できま せん ) s-supplier-name %d アップストリーム ホストのホスト名 ( キャッ シュ ヒットでは利用できません ) x-bluecoat-transaction -id transaction.id アプライアンスによって生成された要求ごとの 一意 ID ( 注意 : この値は、複数のアプライアンス にわたって一意ではありません ) x-bluecoat-appliancename appliance.name 設定されたアプライアンス名 x-bluecoat-applianceprimary-address appliance.primary_address アプライアンスのプライマリ IP アドレス x-bluecoat-proxyprimary-address proxy.primary_address アプライアンスのプライマリ IP アドレス x-bluecoat-applianceidentifier appliance.identifier アプライアンスのコンパクトな ID x-appliance-serialnumber appliance.serial_number アプライアンスのシリアル番号 x-appliance-mc-certifi appliance.mc_certificate_fin cate-fingerprint gerprint 管理コンソールの証明書のフィンガープリント x-appliance-productname appliance.product_name アプライアンス製品名。例 : Blue Coat SG4xx x-appliance-producttag appliance.product_tag アプライアンスの製品タグ。例 : SG4xx x-appliance-fullversion appliance.full_version SGOS ソフトウェアの完全バージョン 508 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 x-appliance-first-mac -address appliance.first_mac_address 最初にインストールしたアダプタの MAC アド レス x-appliance-seriesname appliance.series_name アプライアンスのシリーズ名。例 : 400 x-client-address クライアントの IP アドレス x-client-connectionbytes クライアントとの間で送受信されたバイト数の 合計 x-client-ip クライアントの IP アドレス x-server-connectionbytes サーバーとの間で送受信されたバイト数の合計 x-server-adn-connecti on-bytes サーバーとの間で送受信された圧縮後の ADN バイト数の合計 x-rs-connection-negot server.connection.negotiated iated-cipher _cipher クライアント接続でネゴシエートされた OpenSSL 暗号スイート x-rs-connection-negot server.connection.negotiated iated-cipher-strength _cipher.strength サーバー接続でネゴシエートされた OpenSSL 暗号スイートの強度 x-rs-connection-negot iated-cipher-size サーバー接続でネゴシエートされた OpenSSL 暗号スイートの暗号サイズ x-rs-connection-negot server.connection.negotiated iated-ssl-version _ssl_version サーバー接続でネゴシエートされた SSL プロト コルのバージョン x-cs-connection-dscp client.connection.dscp DSCP クライアントの受信値 x-rs-connection-dscp server.connection.dscp DSCP サーバーの受信値 x-sc-connection-dscpdecision DSCP クライアントの送信値 x-sr-connection-dscpdecision DSCP サーバーの送信値 カテゴリ : im x-im-buddy-id インスタント メッセージングのバディ ID x-im-buddy-name インスタント メッセージングのバディの表示名 x-im-buddy-state インスタント メッセージングのバディの状態 x-im-chat-room-id 使用中のチャット ルームのインスタント メッ セージング ID x-im-chat-roommembers チャット ルームのメンバ ID のリスト 509 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL x-im-chat-room-type 説明 チャット ルームのタイプ。「public」の 1 つまた は「public」、および可能性があるものとして、 「invite_only」、「voice」および ( または ) 「conference」 x-im-client-info x-im-user-agent カスタム インスタント メッセージングのクライアント情報 im.user_agent インスタント メッセージングのユーザー エー ジェント文字列 x-im-file-path インスタント メッセージに関連付けられたファ イルのパス x-im-file-size インスタント メッセージに関連付けられたファ イルのサイズ x-im-http-gateway IM で使用された、アップストリームの HTTP ゲートウェイ ( ある場合 ) x-im-message-opcode im.message.opcode インスタント メッセージで使用されたオペコード x-im-message-reflected im.message.reflected IM メッセージが反映されたかどうかを示します。 x-im-message-route インスタント メッセージのルート x-im-message-size インスタント メッセージの長さ x-im-message-text インスタント メッセージのテキスト x-im-message-type インスタント メッセージのタイプ x-im-method インスタント メッセージに関連付けられたメ ソッド x-im-user-id インスタント メッセージング ユーザーの ID x-im-user-name クライアントの表示名 x-im-user-state インスタント メッセージング ユーザーの状態 カテゴリ : mapi x-mapi-method MAPI 要求に関連付けられたメソッド x-mapi-user-dn MAPI によってネゴシエートされたユーザーの 識別名 x-mapi-user MAPI によってネゴシエートされたユーザーの 名前完全識別名については、x-mapi-user-dn を 参照してください。 x-mapi-cs-rpc-count クライアントから受信した RPC メッセージの件数 x-mapi-sr-rpc-count サーバーに送信した RPC メッセージの件数 x-mapi-rs-rpc-count サーバーから受信した RPC メッセージの件数 x-mapi-sc-rpc-count クライアントに送信した RPC メッセージの件数 510 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 x-mapi-endpoint-rpccount エンド ポイントに送信した RPC メッセージの 合計数 x-mapi-peer-rpc-count ピアに送信した RPC メッセージの合計数 カテゴリ : p2p x-p2p-client-bytes クライアントからのバイト数 x-p2p-client-info ピアツーピア クライアントの情報 x-p2p-client-type p2p.client ピアツーピア クライアントのタイプ x-p2p-peer-bytes ピアからのバイト数 カテゴリ : パケット c-pkts-lost-client サーバーからクライアントへの転送中に失われ たパケットのうち、クライアント層でのエラー訂 正またはネットワーク層での UDP 再送信に よって回復しなかったパケットの数。 c-pkts-lost-cont-net サーバーからクライアントへの転送中にネット ワーク層で連続的に失われたパケットの最大数 c-pkts-lost-net ネットワーク層で失われたパケット数 c-pkts-received サーバーからのパケット (s-pkts-sent) のうち、1 回目の試みでクライアントによって適切に受信 されたパケットの数 c-pkts-recoveredECC クライアント層で修復および回復されたパケッ トの数 c-pkts-recoveredresent UDP による再送信によって回復したパケットの数 c-quality クライアントが受信したパケット数の割合。スト リームの品質を示します。 c-resendreqs 新しいパケットの受信を求めるクライアント要 求数 s-pkts-sent サーバーからのパケットの数 カテゴリ : req_rsp_line cs-method method x-cs-http-method http.method %m クライアントからアプライアンスへの要求で使 用された要求メソッド クライアントからアプライアンスへの要求で使 用された HTTP 要求メソッド。HTTP トランザ クション以外は空です 511 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 cs-protocol client.protocol cs-request-line http.request_line x-cs-raw-headerscount request.raw_headers.count 要求内の「未加工」ヘッダーの合計数 x-cs-raw-headerslength request.raw_headers.length 要求内の「未加工」ヘッダーの長さの合計 cs-version request.version x-bluecoat-proxy-viahttp-version proxy.via_http_version プロトコル修飾を除く、アプライアンスのデフォ ルトの HTTP プロトコル バージョン ( 例 : HTTP/1.1 の場合は 1.1)。 x-bluecoat-redirectlocation redirect.location リダイレクト CPL アクションによって指定され たリダイレクト場所の URL クライアントの要求で使用されたプロトコル %r %V rs-response-line クライアントの要求の 1 行目 クライアントの要求からのプロトコルとバー ジョン ( 例 : HTTP/1.1) アップストリーム ホストからアプライアンスへ の応答の 1 行目 ( ステータス行 ) rs-status response.code アップストリーム ホストからアプライアンスへ の応答のプロトコル ステータス コード rs-version response.version アップストリーム ホストからアプライアンスへ の応答のプロトコルおよびバージョン。例 : HTTP/1.1 sc-status %s アプライアンスからクライアントへのプロトコ ル ステータス コード x-bluecoat-ssl-failurereason ssl_failure_reason アップストリームの SSL ネゴシエーション エ ラーの理由 x-cs-http-version http.request.version クライアントからの要求の HTTP プロトコル バージョン。プロトコル修飾子は含まれません ( 例 : HTTP/1.1 の場合は 1.1) x-cs-socks-ip socks.destination_address プロキシ処理された SOCKS 要求の宛先 IP アド レス x-cs-socks-port socks.destination_port プロキシ処理された SOCKS 要求の宛先ポート x-cs-socks-method socks.method プロキシ処理された SOCKS 要求のメソッド x-cs-socks-version socks.version プロキシ処理された SOCKS 要求のバージョン x-cs-socks-compressi on SOCKS のクライアント側接続で使用された圧縮 x-sr-socks-compressi on SOCKS のサーバー側接続で使用された圧縮 x-sc-http-status 512 http.response.code アプライアンスからクライアントに送信された HTTP 応答コード 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF x-rs-http-version CPL カスタム http.response.version 説明 アップストリーム ホストからの応答の HTTP プ ロトコル バージョン。プロトコル修飾子は含ま れません ( 例 : HTTP/1.1 の場合は 1.1) x-sc-http-version クライアントへの応答の HTTP プロトコル バー ジョン。プロトコル修飾子は含まれません ( 例 : HTTP/1.1 の場合は 1.1) x-sr-http-version アップストリーム ホストへの要求の HTTP プロ トコル バージョン。プロトコル修飾子は含まれ ません ( 例 : HTTP/1.1 の場合は 1.1) sc(Content-Encoding) クライアントの応答ヘッダー : Content-Encoding sr(Accept-Encoding) サーバーの要求ヘッダー : Accept-Encoding カテゴリ : special_token x-bluecoat-specialamp amp アンパサンド文字 x-bluecoat-specialapos apos アポストロフィ文字 ( 一重引用符 ) x-bluecoat-special-cr cr 改行コードに解決します x-bluecoat-special-crlf crlf x-bluecoat-specialempty empty x-bluecoat-special-esc esc x-bluecoat-special-gt gt x-bluecoat-special-lf lf x-bluecoat-special-lt lt x-bluecoat-specialquot quot 二重引用符文字 x-bluecoat-specialslash slash スラッシュ文字 server.certificate.hostname サーバーの SSL 証明書からのホスト名 改行コードに解決します %l 空の文字列に解決します エスケープ文字に解決します (ASCII HEX 1B) 「より大」を示す文字 改行文字 「より小」を示す文字 カテゴリ : ssl x-rs-certificate-hostna me x-rs-certificate-hostna me-categories サーバーの SSL 証明書のホスト名のすべてのコン テンツ カテゴリ 513 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 x-rs-certificate-hostna me-categories-policy CPL により定義された、サーバーの SSL 証明書 のホスト名のすべてのコンテンツ カテゴリ x-rs-certificate-hostna me-categories-local ローカル データベースによって定義された、 サーバーの SSL 証明書のホスト名のすべてのコン テンツ カテゴリ x-rs-certificate-hostna me-categories-bluecoat Blue Coat Web Filter によって定義された、サー バーの SSL 証明書のホスト名のすべてのコンテ ンツ カテゴリ x-rs-certificate-hostna me-categories-provider 現在のサードパーティ プロバイダによって定義 された、サーバーの SSL 証明書のホスト名のす べてのコンテンツ カテゴリ x-rs-certificate-hostna me-categories-qualified カテゴリのプロバイダによって修飾された、サー バーの SSL 証明書のホスト名のすべてのコンテ ンツ カテゴリ x-rs-certificate-hostna server.certificate.hostname. me-category category サーバーの SSL 証明書のホスト名の単一のコン テンツ カテゴリ x-rs-certificate-validfrom サーバーにより提示された証明書の有効期間が 開始する日付 x-rs-certificate-valid-to サーバーにより提示された証明書の有効期間が 終了する日付 x-rs-certificate-serialnumber サーバーにより提示された証明書のシリアル番号 x-rs-certificate-issuer サーバーにより提示された証明書の発行元 x-rs-certificate-signat ure-algorithm サーバーにより提示された証明書の署名アルゴ リズム x-rs-certificate-pubkey -algorithm サーバーにより提示された証明書のパブリック キー アルゴリズム x-rs-certificate-version サーバーにより提示された証明書のバージョン x-rs-certificate-subject server.certificate.subject サーバーにより提示された証明書のサブジェクト x-cs-certificate-comm client.certificate.common_ on-name name クライアント証明書の共通名 x-cs-certificate-validfrom クライアントにより提示された証明書の有効期 間が開始する日付 x-cs-certificate-valid-to クライアントにより提示された証明書の有効期 間が終了する日付 x-cs-certificate-serialnumber クライアントにより提示された証明書のシリア ル番号 x-cs-certificate-issuer クライアントにより提示された証明書の発行元 514 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 x-cs-certificate-signat ure-algorithm クライアントにより提示された証明書の署名ア ルゴリズム x-cs-certificate-pubkey -algorithm クライアントにより提示された証明書のパブ リック キー アルゴリズム x-cs-certificate-version クライアントにより提示された証明書のバー ジョン x-cs-certificate-subject client.certificate.subject クライアントにより提示された証明書のサブ ジェクト x-cs-ocsp-error クライアント証明書の OCSP チェック時に検出 されたエラー x-rs-certificate-valida te-status サーバー SSL 証明書の検証結果 x-rs-certificate-observ ed-errors サーバー証明書で確認されたエラー x-rs-ocsp-error サーバー証明書の OCSP チェック時に検出され たエラー カテゴリ : ステータス x-bluecoat-release-id release.id ProxySG オペレーティング システムのリリース ID x-bluecoat-releaseversion release.version ProxySG オペレーティング システムのリリース バージョン cs-categories 要求 URL のすべてのコンテンツ カテゴリ cs-categories-external 外部サービスによって定義された、要求 URL の すべてのコンテンツ カテゴリ cs-categories-policy CPL によって定義された、要求 URL のすべての コンテンツ カテゴリ cs-categories-local ローカル データベースによって定義された、要 求 URL のすべてのコンテンツ カテゴリ cs-categories-bluecoat Blue Coat Web Filter によって定義された、要求 URL のすべてのコンテンツ カテゴリ cs-categories-provider 現在のサードパーティ プロバイダによって定義 された、要求 URL のすべてのコンテンツ カテゴリ cs-categories-qualified カテゴリのプロバイダによって修飾された、要求 URL のすべてのコンテンツ カテゴリ cs-category 要求 URL の単一のコンテンツ カテゴリ (sc-filter-category) cs-uri-categories 要求 URL のすべてのコンテンツ カテゴリ 515 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 cs-uri-categories-exte rnal 外部サービスによって定義された、要求 URL の すべてのコンテンツ カテゴリ cs-uri-categoriespolicy CPL によって定義された、要求 URL のすべての コンテンツ カテゴリ cs-uri-categories-local ローカル データベースによって定義された、要 求 URL のすべてのコンテンツ カテゴリ cs-uri-categoriesbluecoat Blue Coat Web Filter によって定義された、要求 URL のすべてのコンテンツ カテゴリ cs-uri-categoriesprovider 現在のサードパーティ プロバイダによって定義 された、要求 URL のすべてのコンテンツ カテゴリ cs-uri-categoriesqualified カテゴリのプロバイダによって修飾された、要求 URL のすべてのコンテンツ カテゴリ cs-uri-category 要求 URL の単一のコンテンツ カテゴリ (sc-filter-category) x-cs(Referer)-uricategories Referer ヘッダーの URL のすべてのコンテンツ カテゴリ x-cs(Referer)-uricategories-policy CPL によって定義された、Referer ヘッダーの URL のすべてのコンテンツ カテゴリ x-cs(Referer)-uricategories-local ローカル データベースによって定義された、 Referer ヘッダーの URL のすべてのコンテンツ カテゴリ x-cs(Referer)-uricategories-bluecoat Blue Coat Web Filter によって定義された、 Referer ヘッダーの URL のすべてのコンテンツ カテゴリ x-cs(Referer)-uricategories-provider 現在のサードパーティ プロバイダによって定義 された、Referer ヘッダーの URL のすべてのコン テンツ カテゴリ x-cs(Referer)-uricategories-qualified カ テ ゴ リ の プ ロ バ イ ダ に よ っ て 修 飾 さ れ た、 Referer ヘッダーの URL のすべてのコンテンツ カテゴリ x-cs(Referer)-uricategory Referer ヘッダーの URL の単一のコンテンツ カ テゴリ (sc-filter-category) r-hierarchy キャッシュ階層にオブジェクトが取得された方 法と場所 sc-filter-category sc-filter-result 516 category %f 要求 URL のコンテンツ フィルタ カテゴリ %W 廃止予定のコンテンツ フィルタ結果 : 拒否、プロ キシ、監視 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL s-action カスタム 説明 %w この要求を処理するためにアプライアンスが実 行したアクション。設定される可能性がある値 として ALLOWED、DENIED、FAILED、 SERVER_ERROR があります s-cpu-util プロキシのプロセッサの平均負荷 (0 ~ 100%) s-hierarchy %H キャッシュ階層にオブジェクトが取得された方 法と場所 s-icap-info %Z ICAP 応答情報 s-icap-status %z ICAP 応答ステータス x-bluecoat-surfcontrolcategory-id SurfControl 固有のコンテンツ カテゴリ ID x-bluecoat-surfcontrolis-denied トランザクションが拒否された場合は「1」、それ 以外の場合は「0」 x-bluecoat-surfcontrolis-proxied トランザクションが非透過的にプロキシ処理さ れている場合は「0」、トランザクションが透過的 にプロキシ処理されている場合は「1」 x-bluecoat-surfcontrolreporter-id SurfControl Reporter 専用の値 x-bluecoat-surfcontrolreporter-v4 SurfControl Reporter v4 の形式 x-bluecoat-surfcontrolreporter-v5 SurfControl Reporter v5 の形式 x-exception-category exception.category 例外のトリガを生じたコンテンツ カテゴリを定 義します x-exception-companyname exception.company_name 例外の下に設定された会社名 x-exception-contact exception.contact 例外の下に設定された、特定のタイプの例外が 発生した場合の連絡先が記述されています ( トラ ンザクションが終了していない場合は空です ) x-exception-details exception.details ポリシーに対応している選択された応答ページ の設定可能な詳細 ( トランザクションが終了し ていない場合は空です ) x-exception-header exception.header 例外応答に関連付けられるヘッダー ( トランザ クションが終了していない場合は空です ) x-exception-help exception.help 解決した例外に添えられたヘルプ テキスト ( トラ ンザクションが終了していない場合は空です ) x-exception-id exception.id 解決した例外の ID ( トランザクションが終了し ていない場合は空です ) 517 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 x-exception-last-error exception.last_error 現在のトランザクションに対して記録された最 後のエラー。これにより、予期しない問題が発生 した場合の手掛かりが得られます ( トランザク ションが終了していない場合は空です ) x-exception-reason exception.reason 特定の要求が終了した理由を示します ( トラン ザクションが終了していない場合は空です ) x-exception-sourcefile exception.sourcefile 例外の生成元であるファイル名 ( トランザク ションが終了していない場合は空です ) x-exception-sourceline exception.sourceline 例外の生成元である、ファイルの行番号 ( トラン ザクションが終了していない場合は空です ) x-exception-summary exception.summary 解決した例外の要約 ( トランザクションが終了 していない場合は空です ) x-exception-category- exception.category_review_ review-message message 例外ページのメッセージ。このメッセージにはリ ンクが含まれており、そのリンクを使用して内容 の分類について確認または議論できます x-exception-category- exception.category_review_ review-url url 内容の分類について確認または議論できる場所 を示す URL x-patience-javascript patience_javascript 「お詫び」応答を許可するために必要な Javascript x-patience-progress patience_progress 「お詫び」要求の進行状況 x-patience-time patience_time 「お詫び」要求の経過時間 x-patience-url patience_url 詳細なお詫び情報の確認で要求される URL x-virus-id icap_virus_id ウイルスの ID ( 検出された場合 ) x-virus-details icap_virus_details ウイルスの詳細 ( 検出された場合 ) x-icap-error-code icap_error_code ICAP エラー コード x-icap-error-details icap_error_details ICAP エラーの詳細 カテゴリ : ストリーミング audiocodec ストリームで使用されたオーディオ コーデック avgbandwidth クライアントがサーバーとの接続に使用した帯 域幅の平均 (bps 単位 ) channelURL .nsc ファイルへの URL c-buffercount ストリームを再生している間にクライアントが バッファ処理した回数 c-bytes クライアントに配信された合計バイト数に関す る MMS 専用の値 c-cpu クライアント コンピュータの CPU のタイプ 518 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 c-hostexe ホスト アプリケーション c-hostexever ホスト アプリケーションのバージョン番号 c-os クライアント コンピュータのオペレーティング システム c-osversion クライアント コンピュータのオペレーティング システムのバージョン番号 c-playerid プレーヤーのグローバル一意 ID (GUID) c-playerlanguage クライアントの言語 / 国コード c-playerversion プレーヤーのバージョン番号 c-rate 最後のコマンド イベントが送信されたときの Windows Media Player のモード c-starttime ログ ファイルにエントリが生成されたときのス トリームのタイムスタンプ ( 秒単位 ) c-status クライアントのステータスを説明するコード c-totalbuffertime クライアントがストリームのバッファ処理を行 うのにかかった時間 ( 秒単位 ) filelength ファイルの長さ ( 秒単位 ) filesize ファイルのサイズ ( バイト単位 ) protocol ストリームへのアクセスに使用されたプロトコ ル (mms、http、または asfm) s-session-id ストリーミング セッションのセッション ID s-totalclients サーバーに接続されたクライアント ( ただし、必 ずしもストリームを受信するとは限りません )。 transport 使用された転送プロトコル (UDP、TCP、マルチ キャストなど ) videocodec ストリームのエンコードに使用されたビデオ コーデック x-cache-info 値 : UNKNOWN、DEMAND_PASSTHRU、 DEMAND_MISS、DEMAND_HIT、 LIVE_PASSTHRU、LIVE_SPLIT x-duration クライアント イベント ( 早送り、巻き戻し、一時 停止、停止、マーカーへ移動 ) の前にクライアン トでコンテンツが再生された時間。 x-wm-c-dns Windows Media プロトコルから決定されたクラ イアントのホスト名 x-wm-c-ip Windows Media プロトコルから決定されたクラ イアントの IP アドレス 519 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 x-cs-streaming-client streaming.client 使用中のストリーミング クライアントのタイプ (windows_media、real_media、または quicktime)。 x-rs-streaming-content streaming.content 提供されたストリーミング コンテンツのタイ プ。( たとえば、windows_media、quicktime) x-streaming-bitrate bitrate 報告された、ストリームのクライアント側のビッ トレート カテゴリ : 時間 connect-time date 配信元サーバーへの接続に要した合計時間 ( ミリ秒 ) date.utc %x dnslookup-time YYYY-MM-DD 形式の GMT 日付 DNS 参照の実行に要した合計 ms キャッシュ duration %T 要求の処理にかかった時間 ( 秒単位 ) gmttime %t 次の形式のユーザー要求の GMT 日時 : [DD/MM/YYYY:hh:mm:ss GMT] x-bluecoat-day-utc day.utc 2 桁のスペースを使用するように書式設定され た、GMT/UTC の日 ( 数字表記 ) ( 例 : 月の第 7 日の場合は 07) x-bluecoat-hour-utc hour.utc 2 桁のスペースを常に使用するように書式設定さ れた、GMT/UTC の時 ( 例 : 午前 1 時の場合は 01) x-bluecoat-minute-utc minute.utc 2 桁のスペースを常に使用するように書式設定 された、GMT/UTC の分 ( 例 : xx 時 1 分の場合 は 01) x-bluecoat-month-utc month.utc 2 桁のスペースを使用するように書式設定され た、GMT/UTC の月 ( 数字表記 ) ( 例 : 1 月の場合 は 01) x-bluecoat-monthna me-utc monthname.utc GMT/UTC の月を表す短い形式の文字列表現 ( 例 : 1 月の場合は Jan) x-bluecoat-second-utc second.utc 2 桁のスペースを常に使用するように書式設定 された、GMT/UTC の秒 ( 例 : xx 時 xx 分 1 秒の 場合は 01) x-bluecoat-weekdayutc weekday.utc GMT/UTC の曜日を表す短い形式の文字列表現 ( 例 : 月曜日の場合は Mon) x-bluecoat-year-utc year.utc 4 桁のスペースを常に使用するように書式設定 された、GMT/UTC の年 localtime 520 %L 次の形式のユーザー要求のローカル日時 [DD/MMM/YYYY:hh:mm:ss +nnnn] : 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 x-bluecoat-day day 2 桁のスペースを使用するように書式設定され た、ローカル時間の日 ( 数字表記 ) ( 例 : 月の第 7 日の場合は 07) x-bluecoat-hour hour 2 桁のスペースを常に使用するように書式設定 された、ローカル時間の時 ( 例 : 午前 1 時の場合 は 01) x-bluecoat-minute minute 2 桁のスペースを常に使用するように書式設定 された、ローカル時間の分 ( 例 : xx 時 1 分の場 合は 01) x-bluecoat-month month 2 桁のスペースを使用するように書式設定され た、ローカル時間の月 ( 数字表記 ) ( 例 : 1 月の場 合は 01) x-bluecoatmonthname monthname ローカル時間の月を表す短い形式の文字列表現 ( 例 : 1 月の場合は Jan) x-bluecoat-second second 2 桁のスペースを常に使用するように書式設定 された、ローカル時間の秒 ( 例 : xx 時 xx 分 1 秒 の場合は 01) x-bluecoat-weekday weekday ローカル時間の曜日を表す短い形式の文字列表 現 ( 例 : 月曜日の場合は Mon) x-bluecoat-year year 4 桁のスペースを常に使用するように書式設定 された、ローカル時間の年 time time.utc %y HH:MM:SS 形式の GMT 時刻 timestamp %g Unix タイプのタイムスタンプ time-taken %e 要求の処理にかかった時間 ( ミリ秒単位 ) rs-time-taken 配信元サーバーとの間で要求の送信と応答の受 信を行うのにかかった合計時間 ( ミリ秒単位 ) x-bluecoat-end-timewft Windows ファイル時刻として表されるトランザ クションの終了ローカル時間 x-bluecoat-start-timewft Windows ファイル時刻として表されるトランザ クションの開始ローカル時間 x-bluecoat-end-timemssql シリアル日時として表されるトランザクション の終了ローカル時間 x-bluecoat-start-timemssql シリアル日時として表されるトランザクション の開始ローカル時間 x-cookie-date cookie_date Cookie 時刻形式の現在の日付 x-http-date http_date HTTP 時刻形式の現在の日付 x-timestamp-unix UNIX エポック (1970 年 1 月 1 日 ) からの秒 ( ローカル時間 ) 521 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 x-timestamp-unix-utc UNIX エポック (1970 年 1 月 1 日 ) からの秒 (GMT/UTC) cs-categorization-timedynamic 要求 URL を動的に分類するのにかかった時間 ( ミリ秒単位 ) カテゴリ : url cs-host %v cs-uri log_url cs-uri-address log_url.address 「ログ」URL からの IP アドレス。URL でホスト 名が使用される場合は DNS が使用されます。 cs-uri-extension log_url.extension 「ログ」URL からのドキュメント拡張子 cs-uri-host log_url.host 「ログ」URL からのホスト名。 cs-uri-hostname log_url.hostname 「ログ」URL からのホスト名。URL で IP アドレ スが使用される場合は RDNS が使用されます。 cs-uri-path log_url.path cs-uri-pathquery log_url.pathquery 「ログ」URL からのパスとクエリ cs-uri-port log_url.port 「ログ」URL からのポート cs-uri-query log_url.query cs-uri-scheme log_url.scheme cs-uri-stem %i クライアントの要求 URL からのホスト名。URL 書き換えポリシーを使用する場合、このフィール ドの値は「ログ」URL から派生します。 %U %Q 「ログ」URL 「ログ」URL からのパスクエリを含みません。 「ログ」URL からのクエリ 「ログ」URL からのスキーム 「ログ」URL からのステム。ステムには、パスの 最後までのすべての値 ( ただし、クエリを含ま ない ) が含まれます。 c-uri url 要求元の URL c-uri-address url.address 要求元の URL からの IP アドレス。URL がホスト 名として表される場合は DNS が使用されます。 c-uri-cookie-domain url.cookie_domain 要求元の URL の Cookie ドメイン c-uri-extension url.extension 要求元の URL からのドキュメント拡張子 c-uri-host url.host 要求元の URL からのホスト名 c-uri-hostname url.hostname 要求元の URL からのホスト名。URL が IP アドレ スとして表される場合は RDNS が使用されます。 c-uri-path url.path 要求元の URL のパス ( ただし、クエリを除く )。 c-uri-pathquery url.pathquery 要求元の URL のパスとクエリ c-uri-port url.port 要求元の URL からのポート 522 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 c-uri-query url.query 要求元の URL からのクエリ c-uri-scheme url.scheme 要求元の URL のスキーム c-uri-stem 要求元の URL のステム sr-uri server_url アップストリーム要求の URL sr-uri-address server_url.address アップストリーム要求で使用された URL からの IP アドレス。URL がホスト名として表される場 合は DNS が使用されます。 sr-uri-extension server_url.extension アップストリーム要求で使用された URL からの ドキュメント拡張子 sr-uri-host server_url.host アップストリーム要求で使用された URL からの ホスト名 sr-uri-hostname server_url.hostname アップストリーム要求で使用された URL からの ホスト名。URL が IP アドレスとして表される場 合は RDNS が使用されます。 sr-uri-path server_url.path アップストリーム要求の URL からのパス sr-uri-pathquery server_url.pathquery アップストリーム要求の URL からのパスとク エリ sr-uri-port server_url.port アップストリーム要求で使用された URL からの ポート。 sr-uri-query server_url.query アップストリーム要求の URL からのクエリ sr-uri-scheme server_url.scheme アップストリーム要求で使用された URL からの スキーム sr-uri-stem アップストリーム要求の URL からのパス s-uri cache_url キャッシュ アクセスに使用された URL s-uri-address cache_url.address キャッシュ アクセスに使用された URL からの IP アドレス。URL がホスト名として表される場 合は DNS が使用されます s-uri-extension cache_url.extension キャッシュ アクセスに使用された URL からの ドキュメント拡張子 s-uri-host cache_url.host キャッシュ アクセスに使用された URL からの ホスト名 s-uri-hostname cache_url.hostname キャッシュ アクセスに使用された URL からの ホスト名。URL で IP アドレスが使用される場合 は RDNS が使用されます s-uri-path cache_url.path キャッシュ アクセスに使用された URL のパス s-uri-pathquery cache_url.pathquery キャッシュ アクセスに使用された URL のパス とクエリ 523 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 s-uri-port cache_url.port キャッシュ アクセスに使用された URL からの ポート s-uri-query cache_url.query キャッシュ アクセスに使用された URL のクエ リ文字列 s-uri-scheme cache_url.scheme キャッシュ アクセスに使用された URL からの スキーム s-uri-stem キャッシュ アクセスに使用された URL のステム x-cs(Referer)-uri request.header.Referer.url x-cs(Referer)-uriaddress request.header.Referer.url.ad dress 「参照元」URL からの IP アドレス。URL でホス ト名が使用される場合は DNS が使用されます。 x-cs(Referer)-uriextension request.header.Referer.url.ex tension 「参照元」URL からのドキュメント拡張子 x-cs(Referer)-uri-host request.header.Referer.url.ho st 「参照元」URL からのホスト名。 x-cs(Referer)-urihostname request.header.Referer.url.ho stname 「参照元」URL からのホスト名。URL で IP アドレ スが使用される場合は RDNS が使用されます。 x-cs(Referer)-uri-path request.header.Referer.url.pa th 「参照元」URL からのパス。クエリを含みません。 x-cs(Referer)-uripathquery request.header.Referer.url.pa thquery 「参照元」URL からのパスとクエリ x-cs(Referer)-uri-port request.header.Referer.url.po rt 「参照元」URL からのポート。 x-cs(Referer)-uri-query request.header.Referer.url.qu ery 「参照元」URL からのクエリ。 x-cs(Referer)-urischeme request.header.Referer.url.sc heme 「参照元」URL からのスキーム。 x-cs(Referer)-uri-stem Referer ヘッダーからの URL。 「参照元」URL からのステム。ステムには、パス の最後までのすべての値 ( ただし、クエリを含 まない ) が含まれます。 x-cs-raw-uri raw_url 「未加工」要求 URL x-cs-raw-uri-host raw_url.host 「未加工」URL からのホスト名。 x-cs-raw-uri-port raw_url.port 「未加工」URL からのポート文字列。 x-cs-raw-uri-scheme raw_url.scheme 「未加工」URL からのスキーム文字列。 x-cs-raw-uri-path raw_url.path 「未加工」要求 URL からのパス。クエリを含み ません。 x-cs-raw-uri-pathquery raw_url.pathquery 「未加工」要求 URL からのパスとクエリ。 x-cs-raw-uri-query raw_url.query 「未加工」要求 URL からのクエリ。 524 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム x-cs-raw-uri-stem 説明 「未加工」要求 URL からのステム。ステムには、 パスの最後までのすべての値 ( ただし、クエリ を含まない ) が含まれます。 カテゴリ : ユーザー cs-auth-group group 認証されたユーザーが所属する 1 つのグループ。 ユーザーが複数のグループに所属する場合、ログ 記録の対象グループは、VPN に指定された [Group Log Order] の設定で決まります。[Group Log Order] が指定されていない場合、任意のグ ループがログ記録されます。考慮されるのは、ポ リシーによって参照されるグループのみです。 cs-auth-groups groups 認証されたユーザーが所属する一連のグループ。 含まれるのは、ポリシーによって参照されるグ ループのみです。 cs-auth-type cs-realm クライアント側 : 認証のタイプ ( 基本、ntlm など ) realm cs-user ユーザーのチャレンジを行われた認証レルム。 %u NTLM 用に修飾されたユーザー名。他のプロト コル用の相対的なユーザー名。 cs-userdn user プロキシによって認証されたクライアントの完 全なユーザー名 ( 完全識別 )。 x-cs-user-authorization -name user.authorization_name プロキシによって認証されたクライアントの承 認に使用されたユーザー名 x-cs-user-credentialname user.credential_name プロキシによる認証を受けるためにユーザーが 入力したユーザー名。 cs-username user.name プロキシによって認証されたクライアントの相 対ユーザー名 ( つまり、完全識別名ではない )。 sc-auth-status クライアント側 : 承認ステータス x-agent-sso-cookie 認証エージェントのシングル サインオン Cookie x-cache-user プロキシによって認証されたクライアントの相 対ユーザー名 ( つまり、完全識別名ではない ) (cs-username と同じ )。 x-cs-auth-domain user.domain 認証されたユーザーのドメイン。 x-sc-authenticationerror ユーザー認証エラー。 x-sc-authorizationerror ユーザー承認エラー。 x-cs-user-type 認証されたユーザーのタイプ。 525 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 x-cs-auth-form-action -url 認証フォームの送信先の URL。 x-cs-auth-form-domai n-field ユーザーのドメインに関する認証フォーム入力 フィールド。 x-cs-auth-form-empt y-domain-field ユーザーのドメインに関する空の認証フォーム 入力フィールド。 x-cs-auth-request-id フォーム ベース認証時の元の要求情報を含む bas64 エンコード文字列。 x-cs-username-or-ip 認証済みのプロキシ ユーザー名、またはその ユーザー名を利用できない場合はユーザーの IP アドレスを使用して、ユーザーを識別するために 使用されます。 x-radius-splash-sessi on-id セッション管理用に設定されたときに RADIUS によって利用可能になったセッション ID x-radius-splash-usern ame セッション管理用に設定されたときに RADIUS によって利用可能になったユーザー名 x-user-x509-issuer user.x509.issuer ユーザーが X.509 証明書によって認証された場 合、これが RFC2253 DN としての証明書の発行 元になります。 x-user-x509-serial-nu mber user.x509.serialNumber ユーザーが X.509 証明書によって認証された場 合、これが 証明書のシリアル番号 (16 進表記 ) に なります。 x-user-x509-subject user.x509.subject ユーザーが X.509 証明書によって認証された場 合、これが RFC2253 DN としての証明書のサブ ジェクトになります。 x-auth-challengestring ユーザーに表示する認証チャレンジ。 x-auth-privatechallenge-state 認証チャレンジの管理に必要なプライベート状態 x-cs-user-login-time user.login.time ユーザーがログインしていた秒数。 x-cs-user-login-count user.login.count ユーザーが現在ログインしているワークステー ション数。 x-cs-client-address-lo gin-count client.address.login.count クライアント IP アドレスで現在ログインしてい るユーザー数。 x-cs-user-loginaddress user.login.address この IP アドレスでユーザーは認証されました。 526 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 カテゴリ : ci_request_header cs(Accept) request.header.Accept 要求ヘッダー : Accept cs(Accept)-length request.header.Accept.length HTTP 要求ヘッダーの長さ : Accept cs(Accept)-count request.header.Accept.count HTTP 要求ヘッダーの数 : Accept cs(Accept-Charset) request.header.Accept-Charset 要求ヘッダー : Accept-Charset cs(Accept-Charset)length request.header.Accept -Charset.length HTTP 要求ヘッダーの長さ : Accept-Charset cs(Accept-Charset)count request.header.AcceptCharset.count HTTP 要求ヘッダーの数 : Accept-Charset cs(Accept-Encoding) request.header.AcceptEncoding 要求ヘッダー : Accept-Encoding cs(Accept-Encoding)- request.header.Acceptlength Encoding.length HTTP 要求ヘッダーの長さ : Accept-Encoding cs(Accept-Encoding)- request.header.Acceptcount Encoding.count HTTP 要求ヘッダーの数 : Accept-Encoding cs(Accept-Language) 要求ヘッダー : Accept-Language request.header.AcceptLanguage cs(Accept-Language)- request.header.Acceptlength Language.length HTTP 要求ヘッダーの長さ : Accept-Language cs(Accept-Language)- request.header.Acceptcount Language.count HTTP 要求ヘッダーの数 : Accept-Language cs(Accept-Ranges) request.header.AcceptRanges 要求ヘッダー : Accept-Ranges cs(Accept-Ranges)length request.header.Accept-R anges.length HTTP 要求ヘッダーの長さ : Accept-Ranges cs(Accept-Ranges)count request.header.Accept-R anges.count HTTP 要求ヘッダーの数 : Accept-Ranges cs(Age) request.header.Age 要求ヘッダー : Age cs(Age)-length request.header.Age.length HTTP 要求ヘッダーの長さ : Age cs(Age)-count request.header.Age.count HTTP 要求ヘッダーの数 : Age cs(Allow) request.header.Allow 要求ヘッダー : Allow cs(Allow)-length request.header.Allow.length HTTP 要求ヘッダーの長さ : Allow cs(Allow)-count request.header.Allow.count HTTP 要求ヘッダーの数 : Allow cs(Authentication-Info) request.header. Authentication-Info 要求ヘッダー : Authentication-Info cs(AuthenticationInfo)-length request.header. Authentication-Info.length HTTP 要求ヘッダーの長さ : Authentication-Info 527 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 cs(AuthenticationInfo)-count request.header. Authentication-Info.count HTTP 要求ヘッダーの数 : Authentication-Info cs(Authorization) request.header.Authorization 要求ヘッダー : Authorization cs(Authorization)length request.header.Authorization. length HTTP 要求ヘッダーの長さ : Authorization cs(Authorization)count request.header.Authorization. count HTTP 要求ヘッダーの数 : Authorization cs(Cache-Control) request.header.CacheControl 要求ヘッダー : Cache-Control cs(Cache-Control)length request.header.CacheControl.length HTTP 要求ヘッダーの長さ : Cache-Control cs(Cache-Control)count request.header.CacheControl.count HTTP 要求ヘッダーの数 : Cache-Control cs(Client-IP) request.header.Client-IP 要求ヘッダー : Client-IP cs(Client-IP)-length request.header.ClientIP.length HTTP 要求ヘッダーの長さ : Client-IP cs(Client-IP)-count request.header.ClientIP.count HTTP 要求ヘッダーの数 : Client-IP cs(Connection) request.header.Connection 要求ヘッダー : Connection cs(Connection)-length request.header.Connection. length HTTP 要求ヘッダーの長さ : Connection cs(Connection)-count request.header.Connection. count HTTP 要求ヘッダーの数 : Connection cs(Content-Disposition) request.header.ContentDisposition 要求ヘッダー : Content-Disposition cs(Content-Disposition) request.header.Content-length Disposition.length HTTP 要求ヘッダーの長さ : Content-Disposition cs(Content-Disposition) request.header.Content-count Disposition.count HTTP 要求ヘッダーの数 : Content-Disposition cs(Content-Encoding) 要求ヘッダー : Content-Encoding request.header.ContentEncoding cs(Content-Encoding) request.header.Content-length Encoding.length HTTP 要求ヘッダーの長さ : Content-Encoding cs(Content-Encoding) request.header.Content-count Encoding.count HTTP 要求ヘッダーの数 : Content-Encoding cs(Content-Language) 要求ヘッダー : Content-Language request.header.ContentLanguage cs(Content-Language)- request.header.Contentlength Language.length 528 HTTP 要求ヘッダーの長さ : Content-Language 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 cs(ContentLanguage)-count request.header.Content-Lan guage.count HTTP 要求ヘッダーの数 : Content-Language cs(Content-Length) request.header.Content-Len gth 要求ヘッダー : Content-Length cs(Content-Length)-le request.header.Content-Len ngth gth.length HTTP 要求ヘッダーの長さ : Content-Length cs(Content-Length)-c request.header.Content-Len ount gth.count HTTP 要求ヘッダーの数 : Content-Length cs(Content-Location) 要求ヘッダー : Content-Location request.header.Content-Loca tion cs(Content-Location)- request.header.Content-Loca length tion.length HTTP 要求ヘッダーの長さ : Content-Location cs(Content-Location)- request.header.Content-Loca count tion.count HTTP 要求ヘッダーの数 : Content-Location cs(Content-MD5) 要求ヘッダー : Content-MD5 request.header.Content-MD5 cs(Content-MD5)-len request.header.Content-MD gth 5.length HTTP 要求ヘッダーの長さ : Content-MD5 cs(Content-MD5)count request.header.Content-MD 5.count HTTP 要求ヘッダーの数 : Content-MD5 cs(Content-Range) request.header.Content-Range 要求ヘッダー : Content-Range cs(Content-Range)length request.header.Content-Rang e.length HTTP 要求ヘッダーの長さ : Content-Range cs(Content-Range)-co request.header.Content-Rang unt e.count HTTP 要求ヘッダーの数 : Content-Range cs(Content-Type) 要求ヘッダー : content-type request.header.Content-Type cs(Content-Type)-len request.header.Content-Type. gth length HTTP 要求ヘッダーの長さ : content-type cs(Content-Type)-cou request.header.Content-Type nt .count HTTP 要求ヘッダーの数 : content-type cs(Cookie) request.header.Cookie %C cs(Cookie)-length request.header.Cookie.length HTTP 要求ヘッダーの長さ : Cookie cs(Cookie)-count request.header.Cookie.count HTTP 要求ヘッダーの数 : Cookie cs(Cookie2) request.header.Cookie2 要求ヘッダー : Cookie2 cs(Cookie2)-length request.header.Cookie2.leng th HTTP 要求ヘッダーの長さ : Cookie2 cs(Cookie2)-count request.header.Cookie2.count HTTP 要求ヘッダーの数 : Cookie2 cs(Date) request.header.Date 要求ヘッダー : Date cs(Date)-length request.header.Date.length HTTP 要求ヘッダーの長さ : Date 要求ヘッダー : Cookie 529 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 cs(Date)-count request.header.Date.count HTTP 要求ヘッダーの数 : Date cs(Etag) request.header.Etag 要求ヘッダー : Etag cs(Etag)-length request.header.Etag.length HTTP 要求ヘッダーの長さ : Etag cs(Etag)-count request.header.Etag.count HTTP 要求ヘッダーの数 : Etag cs(Expect) request.header.Expect 要求ヘッダー : Expect cs(Expect)-length request.header.Expect.length HTTP 要求ヘッダーの長さ : Expect cs(Expect)-count request.header.Expect.count HTTP 要求ヘッダーの数 : Expect cs(Expires) request.header.Expires 要求ヘッダー : Expires cs(Expires)-length request.header.Expires.length HTTP 要求ヘッダーの長さ : Expires cs(Expires)-count request.header.Expires.count HTTP 要求ヘッダーの数 : Expires cs(From) request.header.From 要求ヘッダー : From cs(From)-length request.header.From.length HTTP 要求ヘッダーの長さ : From cs(From)-count request.header.From.count HTTP 要求ヘッダーの数 : From cs(Front-End-HTTPS) request.header.Front-EndHTTPS 要求ヘッダー : Front-End-HTTPS cs(Front-End-HTTPS) request.header.Front-End-length HTTPS.length HTTP 要求ヘッダーの長さ : Front-End-HTTPS cs(Front-End-HTTPS) request.header.Front-End-count HTTPS.count HTTP 要求ヘッダーの数 : Front-End-HTTPS cs(Host) request.header.Host 要求ヘッダー : Host cs(Host)-length request.header.Host.length HTTP 要求ヘッダーの長さ : Host cs(Host)-count request.header.Host.count HTTP 要求ヘッダーの数 : Host cs(If-Match) request.header.If-Match 要求ヘッダー : If-Match cs(If-Match)-length request.header.IfMatch.length HTTP 要求ヘッダーの長さ : If-Match cs(If-Match)-count request.header.IfMatch.count HTTP 要求ヘッダーの数 : If-Match cs(If-Modified-Since) request.header.If-ModifiedSince 要求ヘッダー : If-Modified-Since cs(If-Modified-Since)- request.header.If-Modifiedlength Since.length HTTP 要求ヘッダーの長さ : If-Modified-Since cs(If-Modified-Since)- request.header.If-Modifiedcount Since.count HTTP 要求ヘッダーの数 : If-Modified-Since cs(If-None-Match) request.header.If-None-Match 要求ヘッダー : If-None-Match cs(If-None-Match)length request.header.If-NoneMatch.length HTTP 要求ヘッダーの長さ : If-None-Match 530 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 cs(If-None-Match)count request.header.If-None-Matc h.count HTTP 要求ヘッダーの数 : If-None-Match cs(If-Range) request.header.If-Range 要求ヘッダー : If-Range cs(If-Range)-length request.header.IfRange.length HTTP 要求ヘッダーの長さ : If-Range cs(If-Range)-count request.header.IfRange.count HTTP 要求ヘッダーの数 : If-Range cs(If-UnmodifiedSince) request.header.If-Unmodifie d-Since 要求ヘッダー : If-Unmodified-Since cs(If-UnmodifiedSince)-length request.header.If-Unmodifie d-Since.length HTTP 要求ヘッダーの長さ : If-Unmodified-Since cs(If-UnmodifiedSince)-count request.header.If-Unmodifie d-Since.count HTTP 要求ヘッダーの数 : If-Unmodified-Since cs(Last-Modified) request.header.Last-Modified 要求ヘッダー : Last-Modified cs(Last-Modified)length request.header.Last-Modifie d.length HTTP 要求ヘッダーの長さ : Last-Modified cs(Last-Modified)count request.header.Last-Modifie d.count HTTP 要求ヘッダーの数 : Last-Modified cs(Location) request.header.Location 要求ヘッダー : Location cs(Location)-length request.header.Location. length HTTP 要求ヘッダーの長さ : Location cs(Location)-count request.header.Location. count HTTP 要求ヘッダーの数 : Location cs(Max-Forwards) request.header.MaxForwards 要求ヘッダー : Max-Forwards cs(Max-Forwards)length request.header.Max-Forwar ds.length HTTP 要求ヘッダーの長さ : Max-Forwards cs(Max-Forwards)count request.header.Max-Forwar ds.count HTTP 要求ヘッダーの数 : Max-Forwards cs(Meter) request.header.Meter 要求ヘッダー : Meter cs(Meter)-length request.header.Meter.length HTTP 要求ヘッダーの長さ : Meter cs(Meter)-count request.header.Meter.count HTTP 要求ヘッダーの数 : Meter cs(P3P) request.header.P3P 要求ヘッダー : P3P cs(P3P)-length request.header.P3P.length HTTP 要求ヘッダーの長さ : P3P cs(P3P)-count request.header.P3P.count HTTP 要求ヘッダーの数 : P3P cs(Pragma) request.header.Pragma 要求ヘッダー : Pragma cs(Pragma)-length request.header.Pragma.length HTTP 要求ヘッダーの長さ : Pragma cs(Pragma)-count request.header.Pragma.count HTTP 要求ヘッダーの数 : Pragma 531 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 cs(Proxy-Authenticate) request.header.Proxy-Authe nticate 要求ヘッダー : Proxy-Authenticate cs(ProxyAuthenticate)-length request.header.Proxy-Authe nticate.length HTTP 要求ヘッダーの長さ : Proxy-Authenticate cs(ProxyAuthenticate)-count request.header.Proxy-Authe nticate.count HTTP 要求ヘッダーの数 : Proxy-Authenticate cs(ProxyAuthorization) request.header.Proxy-Autho rization 要求ヘッダー : Proxy-Authorization cs(Proxy-Authorizati request.header.Proxy-Autho on)-length rization.length HTTP 要求ヘッダーの長さ : Proxy-Authorization cs(ProxyAuthorization)-count request.header.Proxy-Autho rization.count HTTP 要求ヘッダーの数 : Proxy-Authorization cs(Proxy-Connection) request.header.Proxy-Conne ction 要求ヘッダー : Proxy-Connection cs(Proxy-Connection) request.header.Proxy-Conne -length ction.length HTTP 要求ヘッダーの長さ : Proxy-Connection cs(Proxy-Connection) request.header.Proxy-Conne -count ction.count HTTP 要求ヘッダーの数 : Proxy-Connection cs(Range) request.header.Range 要求ヘッダー : Range cs(Range)-length request.header.Range.length HTTP 要求ヘッダーの長さ : Range cs(Range)-count request.header.Range.count HTTP 要求ヘッダーの数 : Range cs(Referer) request.header.Referer cs(Referer)-length request.header.Referer. length HTTP 要求ヘッダーの長さ : Referer cs(Referer)-count request.header.Referer.count HTTP 要求ヘッダーの数 : Referer cs(Refresh) request.header.Refresh 要求ヘッダー : Refresh cs(Refresh)-length request.header.Refresh. length HTTP 要求ヘッダーの長さ : Refresh cs(Refresh)-count request.header.Refresh.count HTTP 要求ヘッダーの数 : Refresh cs(Retry-After) request.header.Retry-After 要求ヘッダー : Retry-After cs(Retry-After)length request.header.Retry-After. length HTTP 要求ヘッダーの長さ : Retry-After cs(Retry-After)-count request.header.Retry-After. count HTTP 要求ヘッダーの数 : Retry-After cs(Server) request.header.Server 要求ヘッダー : Server cs(Server)-length request.header.Server.length HTTP 要求ヘッダーの長さ : Server cs(Server)-count request.header.Server.count HTTP 要求ヘッダーの数 : Server cs(Set-Cookie) request.header.Set-Cookie 要求ヘッダー : Set-Cookie 532 %R 要求ヘッダー : 参照元 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 cs(Set-Cookie)-length request.header.Set-Cookie. length HTTP 要求ヘッダーの長さ : Set-Cookie cs(Set-Cookie)-count request.header.Set-Cookie. count HTTP 要求ヘッダーの数 : Set-Cookie cs(Set-Cookie2) request.header.Set-Cookie2 要求ヘッダー : Set-Cookie2 cs(Set-Cookie2)length request.header.Set-Cookie2. length HTTP 要求ヘッダーの長さ : Set-Cookie2 cs(Set-Cookie2)-count request.header.Set-Cookie2. count HTTP 要求ヘッダーの数 : Set-Cookie2 cs(TE) request.header.TE 要求ヘッダー : TE cs(TE)-length request.header.TE.length HTTP 要求ヘッダーの長さ : TE cs(TE)-count request.header.TE.count HTTP 要求ヘッダーの数 : TE cs(Trailer) request.header.Trailer 要求ヘッダー : Trailer cs(Trailer)-length request.header.Trailer.length HTTP 要求ヘッダーの長さ : Trailer cs(Trailer)-count request.header.Trailer.count HTTP 要求ヘッダーの数 : Trailer cs(Transfer-Encoding) request.header.TransferEncoding 要求ヘッダー : Transfer-Encoding cs(Transfer-Encoding) request.header.Transfer-length Encoding.length HTTP 要求ヘッダーの長さ : Transfer-Encoding cs(Transfer-Encoding) request.header.Transfer-count Encoding.count HTTP 要求ヘッダーの数 : Transfer-Encoding cs(Upgrade) request.header.Upgrade 要求ヘッダー : Upgrade cs(Upgrade)-length request.header.Upgrade. length HTTP 要求ヘッダーの長さ : Upgrade cs(Upgrade)-count request.header.Upgrade. count HTTP 要求ヘッダーの数 : Upgrade cs(User-Agent) request.header.User-Agent cs(User-Agent)length request.header.User-Agent. length HTTP 要求ヘッダーの長さ : User-Agent cs(User-Agent)-count request.header.User-Agent. count HTTP 要求ヘッダーの数 : User-Agent cs(Vary) request.header.Vary 要求ヘッダー : Vary cs(Vary)-length request.header.Vary.length HTTP 要求ヘッダーの長さ : Vary cs(Vary)-count request.header.Vary.count HTTP 要求ヘッダーの数 : Vary cs(Via) request.header.Via 要求ヘッダー : Via cs(Via)-length request.header.Via.length HTTP 要求ヘッダーの長さ : Via cs(Via)-count request.header.Via.count HTTP 要求ヘッダーの数 : Via %A 要求ヘッダー : ユーザー エージェント 533 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 cs(WWWAuthenticate) request.header.WWW-Authe nticate 要求ヘッダー : WWW-Authenticate cs(WWWAuthenticate)-length request.header.WWW-Authe nticate.length HTTP 要求ヘッダーの長さ : WWW-Authenticate cs(WWWAuthenticate)-count request.header.WWW-Authe nticate.count HTTP 要求ヘッダーの数 : WWW-Authenticate cs(Warning) request.header.Warning 要求ヘッダー : Warning cs(Warning)-length request.header.Warning. length HTTP 要求ヘッダーの長さ : Warning cs(Warning)-count request.header.Warning. count HTTP 要求ヘッダーの数 : Warning cs(X-BlueCoat-Error) request.header.X-BlueCoatError 要求ヘッダー : X-BlueCoat-Error cs(X-BlueCoat-Error)- request.header.X-BlueCoatlength Error.length HTTP 要求ヘッダーの長さ : X-BlueCoat-Error cs(X-BlueCoat-Error)- request.header.X-BlueCoatcount Error.count HTTP 要求ヘッダーの数 : X-BlueCoat-Error cs(X-BlueCoat-MC-Cl request.header.X-BlueCoatient-Ip) MC-Client-Ip 要求ヘッダー : X-BlueCoat-MC-Client-Ip cs(X-BlueCoat-MC-Cl request.header.X-BlueCoatient-Ip)-length MC-Client-Ip.length HTTP 要求ヘッダーの長さ : X-BlueCoat-MC-Client-Ip cs(X-BlueCoat-MC-Cl request.header.X-BlueCoatient-Ip)-count MC-Client-Ip.count HTTP 要求ヘッダーの数 : X-BlueCoat-MC-Client-Ip cs(X-BlueCoat-Via) request.header.X-BlueCoatVia 要求ヘッダー : X-BlueCoat-Via cs(X-BlueCoat-Via)length request.header.X-BlueCoatVia.length HTTP 要求ヘッダーの長さ : X-BlueCoat-Via cs(X-BlueCoat-Via)count request.header.X-BlueCoatVia.count HTTP 要求ヘッダーの数 : X-BlueCoat-Via cs(X-Forwarded-For) request.header.X-Forwarded -For %X 要求ヘッダー : X-Forwarded-For cs(X-Forwarded-For)- request.header.X-Forwarded length -For.length HTTP 要求ヘッダーの長さ : X-Forwarded-For cs(X-Forwarded-For)- request.header.X-Forwarded count -For.count HTTP 要求ヘッダーの数 : X-Forwarded-For 534 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 カテゴリ : si_response_header rs(Accept) response.header.Accept 応答ヘッダー : Accept rs(Accept-Charset) response.header.AcceptCharset 応答ヘッダー : Accept-Charset rs(Accept-Encoding) response.header.AcceptEncoding 応答ヘッダー : Accept-Encoding rs(Accept-Language) response.header.AcceptLanguage 応答ヘッダー : Accept-Language rs(Accept-Ranges) response.header.AcceptRanges 応答ヘッダー : Accept-Ranges rs(Age) response.header.Age 応答ヘッダー : Age rs(Allow) response.header.Allow 応答ヘッダー : Allow rs(AuthenticationInfo) response.header. Authentication-Info 応答ヘッダー : Authentication-Info rs(Authorization) response.header. Authorization 応答ヘッダー : Authorization rs(Cache-Control) response.header.CacheControl 応答ヘッダー : Cache-Control rs(Client-IP) response.header.Client-IP 応答ヘッダー : Client-IP rs(Connection) response.header.Connection 応答ヘッダー : Connection rs(Content-Disposition) response.header.ContentDisposition 応答ヘッダー : Content-Disposition rs(Content-Encoding) response.header.ContentEncoding 応答ヘッダー : Content-Encoding rs(Content-Language) response.header.ContentLanguage 応答ヘッダー : Content-Language rs(Content-Length) response.header.ContentLength 応答ヘッダー : Content-Length rs(Content-Location) response.header.ContentLocation 応答ヘッダー : Content-Location rs(Content-MD5) response.header.ContentMD5 応答ヘッダー : Content-MD5 rs(Content-Range) response.header.ContentRange 応答ヘッダー : Content-Range rs(Content-Type) response.header.ContentType rs(Cookie) response.header.Cookie 応答ヘッダー : Cookie rs(Cookie2) response.header.Cookie2 応答ヘッダー : Cookie2 %c 応答ヘッダー : content-type 535 SGOS 6.4 Content Policy Language リファレンス 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 rs(Date) response.header.Date 応答ヘッダー : Date rs(Etag) response.header.Etag 応答ヘッダー : Etag rs(Expect) response.header.Expect 応答ヘッダー : Expect rs(Expires) response.header.Expires 応答ヘッダー : Expires rs(From) response.header.From 応答ヘッダー : From rs(Front-End-HTTPS) response.header.Front-EndHTTPS 応答ヘッダー : Front-End-HTTPS rs(Host) response.header.Host 応答ヘッダー : Host rs(If-Match) response.header.If-Match 応答ヘッダー : If-Match rs(If-Modified-Since) response.header.If-Modified -Since 応答ヘッダー : If-Modified-Since rs(If-None-Match) response.header.If-NoneMatch 応答ヘッダー : If-None-Match rs(If-Range) response.header.If-Range 応答ヘッダー : If-Range rs(If-UnmodifiedSince) response.header.IfUnmodified-Since 応答ヘッダー : If-Unmodified-Since rs(Last-Modified) response.header.LastModified 応答ヘッダー : Last-Modified rs(Location) response.header.Location 応答ヘッダー : Location rs(Max-Forwards) response.header.MaxForwards 応答ヘッダー : Max-Forwards rs(Meter) response.header.Meter 応答ヘッダー : Meter rs(P3P) response.header.P3P 応答ヘッダー : P3P rs(Pragma) response.header.Pragma 応答ヘッダー : Pragma rs(Proxy-Authenticate) response.header.ProxyAuthenticate 応答ヘッダー : Proxy-Authenticate rs(ProxyAuthorization) response.header.ProxyAuthorization 応答ヘッダー : Proxy-Authorization rs(Proxy-Connection) response.header.ProxyConnection 応答ヘッダー : Proxy-Connection rs(Range) response.header.Range 応答ヘッダー : Range rs(Referer) response.header.Referer 応答ヘッダー : Referer rs(Refresh) response.header.Refresh 応答ヘッダー : Refresh rs(Retry-After) response.header.Retry-After 応答ヘッダー : Retry-After rs(Server) response.header.Server 応答ヘッダー : Server rs(Set-Cookie) response.header.Set-Cookie 応答ヘッダー : Set-Cookie 536 付録 D: CPL 代入値 表 D-1. アクセス ログ形式 ( 続き ) ELFF CPL カスタム 説明 rs(Set-Cookie2) response.header.Set-Cookie2 応答ヘッダー : Set-Cookie2 rs(TE) response.header.TE 応答ヘッダー : TE rs(Trailer) response.header.Trailer 応答ヘッダー : Trailer rs(Transfer-Encoding) response.header.TransferEncoding 応答ヘッダー : Transfer-Encoding rs(Upgrade) response.header.Upgrade 応答ヘッダー : Upgrade rs(User-Agent) response.header.User-Agent 応答ヘッダー : User-Agent rs(Vary) response.header.Vary 応答ヘッダー : Vary rs(Via) response.header.Via 応答ヘッダー : Via rs(WWWAuthenticate) response.header.WWWAuthenticate 応答ヘッダー : WWW-Authenticate rs(Warning) response.header.Warning 応答ヘッダー : Warning rs(X-BlueCoat-Error) response.header.X-BlueCoatError 応答ヘッダー : X-BlueCoat-Error rs(X-BlueCoat-MCClient-Ip) response.header.X-BlueCoatMC-Client-Ip 応答ヘッダー : X-BlueCoat-MC-Client-Ip rs(X-BlueCoat-Via) response.header.X-BlueCoatVia 応答ヘッダー : X-BlueCoat-Via rs(X-Forwarded-For) response.header.X-ForwardedFor 応答ヘッダー : X-Forwarded-For 一部の代入値は、さまざまな修飾子を追加して変更できます。使用可能な代入修飾子は、 次のカテゴリ に分類されます。 • タイムスタンプ修飾子 • 文字列修飾子 通常、 修飾子の構文は次のようになります。 :modifier_name(arguments) この構文が、代入式のフィールド名に追加されて、次のようになります。 $(field_name:modifier(arguments)) 必要に応じて、次のように複数の修飾子を組み合わせることもできます。 $(field_name:first_modifier(arguments):second_modifier(arguments)) 537 SGOS 6.4 Content Policy Language リファレンス タイムスタンプ修飾子 次のように、タイムスタンプ修飾子はタイムスタンプ関数を表す特定の代入値フィールドで機能する ように制限されています。 • $(date) • $(time) • $(cookie_date): Netscape Cookie 形式の現在の日付。UTC を想定 • $(http_date): HTTP 1.1 形式の現在の日時。UTC を想定 これらの代入値によって生成されるタイムスタンプは、次のいずれかの修飾子を加えることで変更で きます。 • たとえば、 days.add: 日 (24 時間 ) を追加または差し引きます。 $(cookie_date:days.add(2)) のよう にすると、タイムスタンプの 48 時間が Ccookie 有効期限形式に追加されます。 • たとえば、$(http_date:hours.add(-1)) のように hours.add: 時間を追加または差し引きます。 すると、タイムスタンプの 1 時間が HTTP 1.1 ヘッダー形式から差し引かれます。 • たとえば、$(cookie_time:minutes.add(15)) のよ minutes.add: 分を追加または差し引きます。 うにすると、タイムスタンプの 15 分が Cookie 有効期限形式に追加されます。 • next_date: 指定したパターンと一致する次の日付まで将来の方向にゼロ秒以上をスキップしま す。next_date() を評価するには、現在のサイクルを判別する必要があります。 日付パターンの構文は、次のようになります。 [month] [day-of-month] [weekday] [HH:MM | HH: | :MM] S コンポーネントはの指定はすべて省略可能ですが、少なくとも 1 つのコンポーネントが存在 する必要があります。 S month は月の短縮名で、jan から dec が使用されます。 S day-of-month は 1 から 31 までの数字か、文字列 last です。 S weekday は曜日の短縮名で、mon から sun が使用されます。 S HH:MM は 00:00 から 23:59 までの 24 時間制で表示されます。 たとえば、次の例はすべて、January 00:00:00 が次に来る時点までのゼロ秒以上を同様に表してい ます。 S :next_date( jan ) S :next_date( jan 1 ) S :next_date( jan 1 00:00 ) たとえば、これらの修飾子を使用して、 明示的な有効期限を設定した Set-Cookie ヘッダーを作成でき ます。 午前 0 時に有効期限が切れる Cookie を設定するには、次のようにします。 <proxy> action.setcookie(yes) define action setcookie set(response.header.Set-Cookie, 538 付録 D: CPL 代入値 "myname=myvalue; expires=$(cookie_date:next_date(00:00))") end 注意 : このポリシーは、Internet Explorer のバグによって影響を受けます。Cookie の有効期限は プロ キシ SG アプライアンスのクロックと相対して設定されますが、Internet Explorer はクライアン ト ワークステーションのクロックと相対していると解釈します。 例 午前 2 時に有効期限が切れる場合 $(cookie_date:next_date(2:00)) 次の日の午前 2 時に有効期限が切れる場合 $(cookie_date:next_date(00:00):next_date(2:00)) 注意 : 最初の next_date では次の午前 0 時までが考慮されるため、時刻が午前 0 時と午前 2 時の間で ある場合、生成される午前 2 時は本日ではないと判断されます。 明後日の午前 2 時に有効期限が切れる場合 $(cookie_date:next_date(00:00):add.days(1):next_date(2:00)) 月曜日の朝、午前 2 時に有効期限が切れる場合 $(cookie_date:next_date(Mon 2:00)) 月末の午後 10 時に有効期限が切れる場合 $(cookie_date:next_date( last 22:00 )) 当月の第 3 火曜日の午前 2 時に有効期限が切れる場合 第 3 火曜日は当月の 15 日から 21 日の間である必要があります。 $(cookie_date:next_date( 15 Tue 2:00)) このように設定すると、当月の 15 日までゼロ秒以上進んだ後、火曜日までゼロ秒以上進み、最後に午前 2 時までゼロ秒以上進みます。 文字列修飾子 これらの代入修飾子は、どのフィールドにも適用できます。 • binary_address : こ の修飾子は ド ッ ト 区切 り の IP ア ド レ ス を 4 バ イ ト に変換 し ま す。 こ こ で、1 バ イ ト は 1 オ ク テ ッ ト を表 し ま す。 たとえば、クライアント アドレスを 4 つのバイト表記に変換するには、次のようにします。 $(client.address:binary_address) クライアント アドレスが 10.11.12.13 であった場合、バイナリ アドレスでは 0x0A0B0C0D のよう に表されます。 539 SGOS 6.4 Content Policy Language リファレンス • 引数をベース文字列 ( それが機能するフィールドによって生成 ) concat(string): この修飾子は、 に連結します。 この結果、リテラル文字列が生成されます。 この文字列は、 状況に応じて、引用符で 囲まれる必要があります。 例を示します。 log_message( "$(url:concat(?$(user)))") これを出力すると、次のようになります。 http://www.example.com/index.html?mark • escape_ldap_filter: こ の文字列修飾子を使用 し て、管理者は RFC 2254 に規定 さ れた LDAP 検索 フ ィ ル タ 構文を使 っ てポ リ シ ー代入値を エ ス ケ ー プ す る よ う に 指定で き ま す。 こ の修飾子は 引数を取 り ま せん。 例を示します。 検索フィルタが (cn=$(user:escape_ldap_filter)) のように定義されており、 ユーザー名が domain\user であった場合、結果は (cn=domain\5cuser) のようになります。\ の バイト値は 5c であるため、\ のエスケープ バージョンは \5c になります。 • URL のエンコードとデコード encode_base64 and decode_base64: これらの修飾子を使用して、 を行えます。これらの修飾子では、引数はサポートされません。 上記と同じ URL を使用して log_message("$(url:concat(?$(user)))" のようにし、次のよう に式を変更すると、base64 にエンコードされたバージョンを取得できます。log_message ("$(url:concat(?$(user)):encode_base64)") 元の URL を取得するには、$(url.query:decode_base64) を使用します。 • 変数が定義されているかどうかを確認し、 いずれも定義されていないときは if_null: この修飾子は、 デフォルト値を変数に割り当てる場合に使用すると便利です。 例を示します。 S1 が返されます。それ以外の場合、 S1:if_null(S2): 左側の引数 S1 が空ではない文字列の場合、 S1 は空の文字列であるため、文字列 S2 が返されます。 • rewrite(regex, substitution): こ の修飾子は、正規表現お よ び代入文字列パ ラ メ ー タ に基づ い て渡 さ れたテ キ ス ト フ ィ ール ド プ レ フ ィ ッ ク ス を書き換え ま す。 構文 : field:rewrite(regex_pattern, replacement_string) 各引数の意味は次のとおりです。 540 • field: 再作成するポリシー代入文字列変数と、ゼロ個以上の文字列代入関数。 • regex_pattern: field と一致するように引用された正規表現パターン。regex_pattern が一致しない場合、再作成アクションは無視されます。regex_pattern が一致すると、代入 変数の値が設定されます。常に書き換えを適用するが、置換文字列に変数代入を必要としない 場合は、regex_pattern に ".*" と指定します。正規表現の詳細については、付録 E: 543 ペー ジの 「正規表現の使用」を参照してください。 付録 D: CPL 代入値 • replacement_string: 引用される文字列であり、任意で 1 つ以上の変数代入値を含めるこ とができます。これにより、regex_pattern サブ文字列によって一致されたヘッダーのすべ てのコンポーネントが置き換えられます。一致した regex_pattern のサブパターンは $(n) 構文を使用して置き換えることができます。n には一致対象のサブパターンを示す 1 から 32 までの整数を指定します。 例を示します。 URL の署名はイベント ログにログ記録されます。 exception(content_filter_denied, “Protocol for URL is \ $(url:rewrite(([^:]*)(.*),$(1))”) • ASCII 変数文字列を 16 進数表記に変換します。 $(session.username:encode_hex): この修飾子は、 例を示します。 *#911# を 16 進数に変換すると、2A23393131123 になります。 変換された各バイトの間に区切りを挿入するには、$(session.username:encode_hex()) か、 0x$(session.username:encode_hex( 0x)) を使用します。 • $(session.username:encode_hex( )), *#911# を使用すると、2A 23 39 31 31 23 のように なります。 • • 0x$(session.username:encode_hex( 0x))*#911# を使用すると、 0x2A 0x23 0x39 0x31 0x31 0x23 のようになります。 特殊文字をエスケープします。 url_escape : %xx のような文字列で、 特殊文字とは、URL またはアクセス ログ フィールドでの元の形式、あるいは html 属性値で渡す ことができない文字のことを指します。 次の文字は特殊文字ではありません。A ~ Z、 および %。 a ~ z、 0 ~ 9、_。-、. 、 注 : % は特殊文字ではありません。url_escape_all を使用すると、% は特殊文字になります。 たとえば、ユーザー名が us%r;1 であるとします。 この場合、 ; は %3b にな $(user:url_escape) を使用すると us%r%3b1 のように表示されます。 ります。 また、 この場合、 $(user:url_escape_all) を使用すると、 us%25r%3b1 のように表示されます。 % は %25 になり、 ; は %3b になります。 • % を特殊文字に含めます。 url_escape_all: すべての特殊文字をエスケープし、 ホスト修飾子 この代入修飾子は、 $(url.host) フィールドに適用できます。 • label(n): この修飾子はホストから n 番目のラベルを抽出します。ラベルには 1 から始まる番号が 付けられます。1 は最上位レベルのドメインです (.com や .net など )。 たとえば、URL“http://publications.my_company.com”の場合は、次のようになります。 $(url.host:label(1)) yields “com” $(url.host:label(3)) yields “publications” 541 SGOS 6.4 Content Policy Language リファレンス 542 付録 E: 正規表現の使用 正規表現は、複雑なパターン照合に使用できます。 注意 : 正規表現以外の方法を使用できる場合は、正規表現を使用しないようにしてください。ほとんど の場合、正規表現は正規表現以外の方法よりも効率が悪く、エラーが多くなる傾向にあります。 この付録で説明されている SG の正規表現サポートは、 Philip Hazel の Perl 互換正規表現ライブラリ (PCRE) に基づいています。この付録のテキストは、PCRE ドキュメントに基づいています。 正規表現 (RE) は、 サブジェクト文字列に対して左から右に照合されるパターンです。 パターンの大部 分の文字はその文字自体を表し、サブジェクトの対応する文字に一致します。 正規表現のメリットは、 パターンに代替表現や繰り返し表現を含めることができる点にあります。 パターンでは、これらはメタ 文字を使用してエンコードされます。メタ文字は、 その文字自体を表さず、特殊な方法で解釈されます。 正規表現の理論や実装についての詳細は、 O’Reilly によって出版された Jeffrey Friedl の『Mastering Regular Expressions, Third Edition』(ISBN 0-596-00289-0) を参照してください。 SG では、正規表現エンジン (RE ENGINE) を使用して、正規表現を評価します。 この付録では、次のトピックについて説明します。 • 構文および意味 ( メタ文字の表を含む ) • RE ENGINE と Perl の違い 正規表現の構文 正規表現には、特殊文字と通常文字の両方を含めることができます。 'A'、'a'、または '3' などの大部分の 通常文字は最も簡単な正規表現で、単純にその文字自体に一致します。通常文字を連結して、'last' が文 字 'last' に一致するようにできます ( このセクションの残りの部分では、正規表現は courier フォント ( 通常は引用符なし ) で記載し、一致する文字列は一重引用符で囲んであります )。 メタ文字と呼ばれる特殊文字は、通常文字のクラスを表す場合 | や ( などの文字が特殊文字になります。 と、 そのメタ文字の周辺にある正規表現の解釈方法に影響を与える場合があります。次の表でメタ文字 について説明します。 表 E.1: 正規表現で使用されるメタ文字 メタ文字 説明 (?i) このメタ文字に続く式を大文字と小文字を区別しないで評価します。 . このメタ文字は、 改行を除くすべての文字と一致します ( ドット ) デフォルトのモードでは、 (CPL で正規表現を使用する場合、改行は検出されません )。 ^ ( 曲折アクセント記号またはキャレット ) 文字列の先頭に一致します。 $ 文字列の末尾に一致します。 * 先行する正規表現のゼロ (0) 回以上の繰り返しに一致 ( 最長一致 ) する正規表現を得られま す。ab* は、'a'、'ab'、または 'a' と任意の数の 'b' に一致します。 543 SGOS 6.4 Content Policy Language リファレンス 表 E.1: 正規表現で使用されるメタ文字 ( 続き ) メタ文字 説明 + 先行する正規表現の 1 回以上の繰り返しに一致する正規表現を得られます。 ab+ は、'a' と 1 つ以上の 'b' に一致します。'a' だけの場合は一致しません。 ? 先行する正規表現の 0 または 1 回以上の繰り返しに一致する正規表現を得られます。 ab? は、'a' または 'ab' に一致します。 *?, +?, ?? *、+、? 修飾子はすべて最長一致で、可能な限り長いテキストに一致します。 この動作が適していない場合もあります。 /page1/.*/ という正規表現が /page1/heading/images/ に対して照合されると、/page1/heading/ だけでなく文字列全 体に一致します。 修飾子の後に ? を追加することで、最短一致 (可能な限り短い文字に一致する最短形式) で照 合が実行されます。 前の式で .*? を使用すると、/page1/heading/ のみが一致します。 {m,n} 先行する正規表現の m ~ n 回の繰り返しに一致 ( 最長一致 ) する正規表現を得られます。た とえば、a{3,5} は 3 ~ 5 個の 'a' 文字に一致します。 {m,n}? 先行する正規表現の m ~ n 回の繰り返しに一致 ( 最短一致 ) する正規表現を得られます。こ れは、前の修飾子の最短一致バージョンです。たとえば、'aaaaaa' という 6 文字の文字列の場 合、a{3,5} は、5 個の 'a' 文字に一致しますが、a{3,5}? は 3 文字のみに一致します。 \ 特殊文字をエスケープ ('*?+&$' などの文字に一致するようにする ) したり、 特殊なシーケン ス ( 下記参照 ) を表したりします。 [] 文字のセットを示すために使用されます。 個別に文字を指定したり、 2 つの文字を '-' で区 切って文字範囲を指定したりできます。 セット内では、 特殊文字は非アクティブになります。 たとえば、[akm$] は 'a'、'k'、'm'、'$' のいずれかの文字、[a-z] は任意の小文字、[a-zA-Z0-9] は任 意の文字または数字に一致します。\w や \S などの文字クラス ( 下記で定義 ) も範囲内で使 用できます。] または - をセット内に含める場合、これらの前に円記号を配置します。 範囲内にない文字に一致するようにするには、 先頭 ^ をセットの先頭文字として含めます。 以外にある ^ は単純に '^' 文字と一致します。 | A|B (A と B は任意の正規表 ) は、A または B のいずれかに一致する正規表現になります。こ れは、 グループ内でも使用できます ( 下記参照 ) リテラル '|' に一致するようにするには、 \| を使用するか、[|] のように文字クラス内に含めます。 (...) 丸かっこ内の任意の正規表現に一致し、グループの開始と終了を表します。照合後にグルー プの内容を取得し、\number という特殊なシーケンス ( 下記参照 ) を使用して後方参照でき ます。リテラル '(' または ')' と一致するようにするには、 \( または \) を使用するか、 [(]、[)] の ように文字クラス内に含めます。 正規表現の詳細 このセクションでは、 サポートされている正規表現の構文および意味について説明します。正規表現 は、 大部分の Perl ドキュメントやその他の多くのドキュメントでも説明されています。これらの中に は大量の例が記載されているドキュメントもあります。O’ Reilly によって出版された Jeffrey Friedl の 『Mastering Regular Expressions』(ISBN 0-596-00289-0) には、正規表現の詳細が記載されています。 こ こで説明されている内容は、参考ドキュメントとして活用してください。 角かっこ内を除くすべてのパターンで認識されるメタ文字のセットと、角かっこ内で認識されるメタ 文字のセットがあります。角かっこの外部では、次のメタ文字が使用されます。 544 付録 E: 正規表現の使用 表 E.1: 角かっこの外部で使用されるメタ文字 メタ文字 説明 \ 一般的なエスケープ文字 ( 複数の用途あり ) ^ サブジェクトの先頭 ( 複数行モードの場合は行頭 ) を表すアサーション $ サブジェクトの末尾 ( 複数行モードの場合は行末 ) を表すアサーション . 改行を除く任意の文字に一致 ( デフォルト ) [ 文字クラス定義の開始 | 代替分岐の開始 ( サブパターンの開始 ) ? サブパターンの終了 「(」の意味の拡張、0 または 1 の量指定子、量指定子の最短一致 * 0 以上の量指定子 + 1 以上の量指定子 { 最小 / 最大量指定子の開始 角かっこ内のパターンの部分は「文字クラス」と呼ばれます。文字クラスでは、次のメタ文字のみが使 用されます。 表 E.2: 角かっこで使用されるメタ文字 ( 文字クラス ) メタ文字 説明 \ 一般的なエスケープ文字 ^ クラスの否定 ( 先頭文字の場合のみ ) - 文字範囲の指定 ] 文字クラスの終了 各メタ文字の使用については、次のセクションで説明します。 円記号 円記号には、複数の用途があります。英数字以外の文字が続く場合、 その文字が持っている特殊な意味 を取り除きます。円記号をエスケープ文字として使用する場合、内部の文字クラスと外部の文字クラ スの両方に適用されます。 たとえば、 「*」文字を照合する場合、 パターンに 「\*」 と記述します。これは、後続の文字がメタ文字とし て解釈されるかどうかに関係なく適用されます。したがって、英数字以外の文字の場合は、その文字の 前に 「\」 を付加し、その文字自体を意味するように指定すると常に安全です。特に、 円記号を照合する 場合は 「\\」と記述します。 円記号をエスケープ文字として使用し、スペースまたは「#」をパターンの一部として含めることがで きます。 545 SGOS 6.4 Content Policy Language リファレンス 円記号の 2 番目の使用法として、パターン内の印刷されない文字を表示できるようにエンコードする ことができます。パターンを終了させるバイナリ ゼロを除いて、 印刷されない文字の外観に制限はあ りません。ただし、通常、テキストを編集することでパターンを作成する場合は、 次のエスケープ シー ケンスの 1 つを使用するほうが、そのエスケープ シーケンスを表すバイナリ文字を使用するよりも簡 単です。たとえば、\a は「アラーム」、つまり BEL 文字 (16 進数の 07) を表します。 円 記 号 の 後 に 0 以 外 の 数 字 が 続 く 場 合、処 理 は 複 雑 に な り ま す。文 字 ク ラ ス の 外 部 の 場 合、RE 式内の円記 ENGINE は 円記号と後続の数字を 10 進数として読み取ります。数字が 10 未満の場合や、 号よりも前にある左キャプチャかっこの数がこの数字よりも多い場合、 シーケンス全体が後方参照と して使用されます。機能についての詳細は、かっこで囲まれたサブパターンの説明の後で説明します。 文字クラスの内部の場合や、10 進数値が 9 よりも大きく、キャプチャされたサブパターンの数がその 値よりも少ない場合、 RE ENGINE は、円記号以降の 8 進数字を最大で 3 桁読み直して、値の最下位 8 ビットから 1 バイトを生成します。後続の数字は各数字が示す値を表します。たとえば、\040 を使用し てスペースを記述することもできます。 3 桁を超える数字は読み取られないため、 100 以上の 8 進数値の先頭にゼロを付加しないでください。 文字クラスの内部と外部で使用できます。 また、文字ク 1 バイト値を定義するすべてのシーケンスは、 ラスの内部では、シーケンス「\b」 はバックスペース文字 (16 進数の 08) として解釈されます。文字クラ スの外部では、これは別の意味を持ちます ( 以下を参照 )。 円記号の 3 番目の使用法として、汎用的な文字タイプを指定できます。 \d 任意の 10 進数 \D 10 進数以外の任意の文字 \s 任意のスペース文字 \S スペース文字以外の任意の文字 \w 任意の語句文字 \W 任意の非語句文字 エスケープ シーケンスの各ペアによって、文字の完全セットが 2 つの交わらない文字セットに分割さ れます。指定された任意の文字が各ペアのどちらか ( および 1 つのみ ) に一致します。 「語句」文字とは、任意の文字、数字、または下線文字です。つまり、 Perl「語」の一部として使用できるあ らゆる文字です。 これらの文字タイプのシーケンスは、文字クラスの内部および外部に含めることができます。 それら のシーケンスは該当のタイプの 1 文字にそれぞれ一致します。現在の一致点がサブジェクトの文字列 の末尾に位置する場合、そのすべてが失敗します。一致する文字がないためです。 円記号の 4 番目の使用法は、 円記号を簡単なアサーションとして使用する方法です。 アサーションで は、 サブジェクトの文字列の文字を使用せずに、一致内の特定の位置で満たされる必要がある条件を 指定します。 サブパターンを使用してより複雑なアサーションを指定する方法についての詳細は、以 下を参照してください。円記号を使用するアサーションは次のとおりです。 546 \b ワード バウンダリ \B \A ワード バウンダリ以外 サブジェクトの先頭 ( 複数行モードとは無関係 ) 付録 E: 正規表現の使用 \Z \z サブジェクトの末尾、または末尾の改行 ( 複数行モードとは無関係 ) サブジェクトの末尾 ( 複数行モードとは無関係 ) これらのアサーションを文字クラスに含めることはできません ( ただし、 「\b」には異なる意味があり ます。 「\b」は文字クラスの内部ではバックスペース文字を意味します )。 ワード バウンダリの位置は、現在の文字と前の文字の両方が \w または \W に一致しない ( つまり、一 方が \w に一致し、もう一方が \W に一致する )、サブジェクトの文字列内の場所か、最初または最後の 文字が \w に一致する場合は、それぞれ、文字列の先頭または末尾になります。 \A、 \Z、および \z アサーションは従来の曲折アクセント記号またはドル記号 ( 以下を参照 ) とは異な ります。これらは、どのようなオプションが設定されているかに関係なく、サブジェクトの文字列の先 頭および末尾でのみ一致します。\Z と \z の違いは、\Z は、文字列の末尾だけでなく、 文字列の最後の 文字である改行の前に一致するのに対して、\z は、文字列の末尾でのみ一致することです (CPL で正規 表現を使用する場合、改行は検出されません )。 曲折アクセント記号とドル記号 正規表現では CPL アクションの redirect()、rewrite()、および rewrite() でアンカが置かれま すが、CPL およびコマンドで正規表現パターンを使用するその他の方法ではアンカが置かれません。 デフォルトでアンカが置かれない正規表現では、曲折アクセント記号およびドル記号 (^ および $) を 使用して、先頭または末尾に照合のアンカを置きます。 複数の選択肢が含まれる場合、曲折アクセント記号がパターンの最初の文字である必要はありません が、 パターンをそのブランチと照合する場合は、曲折アクセント記号が含まれる各選択肢の先頭が曲 折アクセント記号である必要があります。 すべての可能な選択肢が曲折アクセント記号で始まる場 合、 つまり、サブジェクトの先頭でのみ照合を行うようにパターンを制約する場合、そのパターンは 「アンカが置かれた」パターンと呼ばれます ( アンカが置かれたパターンとすることができる他の構成 要素もあります )。 ドル記号のアサーションが true になるのは、現在の一致点がサブジェクトの文字列の末尾にある場 合、 または文字列の最後の文字である改行文字の直前にある場合のみです (デフォルト)。 複数の選択肢 が含まれる場合、ドル記号がパターンの最後の文字である必要はありませんが、ドル記号が含まれる ブランチ内の最後の項目がドル記号である必要があります。文字クラス内ではドル記号に特別な意味 はありません。 ピリオド ( ドット ) 文字クラスの外部では、 パターン内のドットは、 印刷されない文字を含め、サブジェクト内の任意の 1 文字に一致します。 ただし、 ( デフォルトでは ) 改行には一致しません。(CPL で正規表現を使用する場 合、 改行は検出されません )。 ドットの処理は、曲折アクセント記号およびドル記号の処理とは完全に独 立しています。唯一の関係はどちらにも改行文字が含まれることです。文字クラス内ではドットに特 別な意味はありません。 角かっこ 左角かっこは文字クラスを導き、右角かっこで終了します。右角かっこ自体に特別な意味はありませ ん。クラスのメンバとして右角かっこが必要な場合、右角かっこをクラス内の最初のデータ文字とす る ( 曲折アクセント記号がある場合は曲折アクセント記号の後 ) か、 円記号でエスケープする必要があ ります。 547 SGOS 6.4 Content Policy Language リファレンス 文字クラスはサブジェクト内の 1 文字に一致します。クラス内の 1 文字目が曲折アクセント記号でな い限り、文字はクラスで定義された文字セットに含まれている必要があります。 クラス内の 1 文字目 が曲折アクセント記号の場合は、 サブジェクトの文字は、 クラスで定義されたセットに含まれないよ うにする必要があります。クラスのメンバとして曲折アクセント記号が実際に必要になった場合は、 曲折アクセント記号が 1 文字目にならないようにするか、曲折アクセント記号を円記号でエスケープ します。 たとえば、文字クラス [aeiou] は小文字の母音に一致しますが、 [^aeiou] は小文字の母音以外のあらゆ る文字に一致します。 曲折アクセント記号は、 クラスに含まれない文字を列挙することでクラスに含 める文字を指定するための単なる便利な表記法です。これはアサーションではありません。これは、サ ブジェクトの文字列からの文字を使用するものであり、 現在のポインタが文字列の末尾にある場合、 失敗します。 [^a] のようなクラスは改行に常に一致します。(CPL で正規表現を使用する場合、改行は検出されま せん )。 マイナス ( ハイフン ) 文字を使用して、文字クラス内の文字の範囲を指定できます。たとえば、[d-m] は d と m の間にあるすべての文字 (これらの文字を含む) に一致します。クラス内でマイナス文字が必要 になった場合、 マイナス文字を円記号でエスケープするか、マイナス文字を範囲を示すものとして解 釈できない場所に含める必要があります。通常は、クラス内の最初または最後の文字とします。範囲の 最後の文字として文字「]」 を使用することはできません。[w-] のようなシーケンスは 2 つの文字のクラ スとして解釈されるためです。ただし、8 進数または 16 進数表現の「]」は、範囲の最後に使用できます。 範囲は ASCII の照合順序で処理されます。また、範囲を使用して、数値として指定された文字を表すこ ともできます ( 例 : [\000-\037])。 文字タイプ \d、\D、 \s、\S、 \w、および \W を文字クラスに含めることができます。これらの文字タイ プは、 一致する文字をクラスに追加します。たとえば、[\dABCDEF] は、任意の 16 進数字に一致しま す。 大文字の文字タイプと共に曲折アクセント記号を使用することで、一致する小文字タイプよりも、 より制限された文字セットを容易に指定することができます。 たとえば、[^\W_] は、 下線以外の任意 の文字または数字に一致します。 文字クラス内では、\、 -、^ ( 先頭に位置する )、および終了の ] 以外のすべての非数値文字に特別な意味 はありません。ただし、これらをエスケープした場合、問題が発生することはありません。 縦棒 縦棒文字を使用して選択肢パターンを区切ります。たとえば、次のようなパターンがあります。 gilbert|sullivan これは、 「gilbert」 または「sullivan」のどちらかに一致します。任意の数の選択肢を含めることができま す。 また、空の選択肢も許可されます ( 空の文字列に一致します )。一致プロセスでは、 各選択肢が左か ら右に順番に処理され、成功した最初の選択肢が使用されます。選択肢がサブパターン ( 以下で定義さ れています ) に含まれる場合、メイン パターンの残りおよびサブパターン内の選択肢に一致すること で「成功」 します。 548 付録 E: 正規表現の使用 小文字の区別 デフォルトでは、正規表現の引数を使用する CPL 条件では大文字小文字を区別しない一致が実行され ます。SG アプライアンスで正規表現の一致が実行される他のすべての場所では、大文字小文字を区別 する一致が実行されます。 注意 : CPL では、Perl 構文に依存するのではなく、 「.case+sensitive」条件修飾子を使用して大文字小 文字の区別を行います。 次の構文を使用して、大文字小文字の区別に関するデフォルトをオーバーライドします。 (?i) 大文字小文字を区別しない一致モードを設定します。 (?-i) 大文字小文字を区別する一致モードを設定します。 モード設定の範囲は、パターン内のどの場所に設定が指定されているかによって異なります。サブパ ターン ( 次のセクションを参照 ) の外部に設定がある場合、オプションが一致の先頭に設定または設定 解除されている場合と同じ効果が得られます。次のパターンはすべて同じように動作します。 (?i)abc a(?i)bc ab(?i)c abc(?i) つまり、このような 「最上位レベル」の設定は、 パターン全体に適用されます ( ただし、サブパターンの 内部に他の変更がない場合 )。 最上位レベルに同じオプションの設定が複数ある場合、一番右の設定が 使用されます。 サブパターンの内部にオプション変更がある場合、 影響は異なります。 これは、 Perl 5.005 の動作の変更で す。 サブパターンの内部にあるオプション変更は、 それに続くサブパターン内の該当部分にのみ影響し ます。 したがって、 それ以外の文字列に一致しません ( デフォル (a(?i)b)c は abc および aBc に一致し、 トで大文字小文字が区別されると仮定した場合 )。 この方法により、 パターンの異なる部分に異なる設定 を含めるようにオプションを作成できます。 つの選択肢内に加えられた変更は、 同じサブパターン内の 1 後続のブランチに引き継がれます。 たとえば、 「ab」 「aB」 、 「c」 、 、 および 「C」 に一致しますが、 (a(?i)b|c) は 「C」 に一致する場合でも、 オプション設定の前の最初のブランチは破棄されます。 これは、 オプション設 定はコンパイル時に影響するためです。 これにより、 いくつかの不明な副作用が回避されます。 サブパターン サブパターンは、かっこ ( 丸かっこ ) によって区切られたものであり、入れ子にすることができます。パ ターンの一部をサブパターンとしてマーク付けすることによって、次の 2 つの処理が行われます。 • 一連の選択肢が局所化されます。 たとえば、パターン cat(aract|erpillar|) は「cat」、 「cataract」。 または「caterpillar」のいずれかに 一致します。かっこがない場合、これは「cataract」、 「erpillar」、 または空の文字列に一致します。 • サブパターンがキャプチャされたサブパターン (上で定義されています) としてセットアップされ ます。 パターン全体に一致する場合、 サブパターンに一致する、 サブジェクトの文字列の該当部分 が、 RE Engine_exec() の ovector 引数経由で呼び出し元に返されます。左から右に左かっこの数がカ ウントされ (1 から始まる )、 キャプチャされたサブパターンの数が取得されます。 549 SGOS 6.4 Content Policy Language リファレンス たとえば、パターン the ((red|white) (king|queen)) に対して文字列「the red king」を照合す る場合、キャプチャされるサブ文字列は「red king」、 「red」、 および「king」であり、 それぞれに 1、2、 および 3 の番号が付けられます。 平易なかっこは 2 つの機能を果しますが、この事実が常に役立つとは限りません。 キャプチャ要求な しでグループ化サブパターンが必要になる場合があります。左かっこの後に「?:」が続く場合、サブパ ターンでキャプチャは行われません。 また、 このサブパターンは、 後続のキャプチャされたサブパターン の数が計算されるときにカウントされません。 たとえば、 パターン the ((?:red|white)(king|queen)) に対して文字列「the white queen」を照合する場合、キャプチャされるサブ文字列は「white queen」 と 「queen」であり、それぞれに 1 と 2 の番号が付けられます。キャプチャされるサブ文字列の最大数は 99 であり、キャプチャされたサブパターンと非キャプチャされたサブパターンを含むすべてのサブパ ターンの最大数は 200 です。 つまり、 非キャプチャされたサブパターンの先頭にオプション設定が必要な場合、オプションの文字列 を 「?」 と 「:」 の間に指定できます。 したがって、 2 つのパターン (?i:saturday|sunday) と (?:(?i)saturday| サブパ sunday) は、まったく同じ一連の文字列に一致します。選択肢ブランチは左から右に処理され、 ターンの末尾に到達するまでオプションはリセットされないため、 つのブランチ内のオプション設 1 定は、後続のブランチに影響します。したがって、上のパターンは「SUNDAY」および 「Saturday」 に一致 します。 繰り返し 繰り返しは量指定子によって指定されるものであり、 次の項目のいずれかの後に続く可能性があります。 • 1 つの文字。メタ文字によってエスケープされている可能性があります • 文字クラス • 後方参照 ( 次のセクションを参照 ) • かっこで囲まれたサブパターン ( ただし、アサーションでない場合。以下を参照 ) 繰り返しの一般的な量指定子では、波かっこ ( 中かっこ ) 内にコンマで区切った 2 つの数字を指定する ことで、許可される最小一致数と最大一致数を指定します。 数字は 65536 未満であり、1 番目の数字が たとえば、 「zz」、 「zzz」、 または「zzzz」に一致しま z{2,4} は 2 番目の数字以下である必要があります。 す。右中かっこ自体に特別な意味はありません。右の数字を省略してコンマを残した場合、上限はあり ません。2 番目の数字とコンマの両方を省略した場合、量指定子は、 必要とされる正確な一致数を示し ます。 つまり、[aeiou]{3,} は少なくとも 3 つの連続する母音に一致しますが、それ以上の連続する母 音に一致する場合もあります。一方。\d{8} は正確に 8 桁に一致します。量指定子を指定できない場所 に含まれる左波かっこ、または量指定子の構文に一致しない左波かっこはリテラル文字として使用さ れます。たとえば、{,6} は、量指定子ではありませんが、4 文字のリテラル文字です。 量指定子 {0} は許可されます。これにより、式は、前の項目と量指定子が存在していない場合と同じよ うに動作します。便宜上 ( または従来との整合性を確保するために )、最も一般的な 3 つの量指定子に 1 文字の省略形が用意されています。 * {0,} に相当します + {1,} に相当します ? 550 {0,1} に相当します 付録 E: 正規表現の使用 どの文字にも一致しない可能性があるサブパターンの後に上限のない量指定子を続けることで、 無限 ループが構築される可能性があります ( 例 : (a?)*)? 以前のバージョンの Perl では、コンパイル時にこのようなパターンに対してエラーが生成されまし た。 ただし、これが役に立つ場合もあるため、このようなパターンが許容されるようになりました。た だし、実際にどの文字にも一致しないサブパターンの繰り返しがある場合、ループは強制的に終了さ れます。 デフォルトでは、量指定子は「欲張り」です。つまり、 可能な限り照合が行われ ( 最大許容回数まで )、 パ ターンの残りが失敗することはありません。 これが問題となる典型的な例は、 C プログラム内のコメン トの照合です。このコメントはシーケンス /* と */ の間に出現し、シーケンス内び個々の * と / 文字が 出現する場合があります。 次のパターンを適用して C のコメントを照合しようとすると失敗します。 このパターンは、.* 項目の「欲張りさ」が原因で文字列全体に一致するためです。 /\*.*\*/ このパターンを次の文字列に適用します /* first command */ not comment /* second comment */ ただし、量指定子の後に疑問符を続けると、 「欲張りさ」がなくなり、代わりに、可能な限り最小の回数 の照合が実行されます。したがって、C のコメントでは次のパターンが適しています。 /\*.*?\*/ 各種量識指定子の意味は変わりません。 必要な数に一致するのみです。 このような疑問符の使用法と、 量指定子自体としての疑問符の使用法を混同しないでください。疑問符には 2 つの使用法があるため、 場合によって、次のように 2 つの疑問符を使用することもできます。 これは、必要に応じて 1 つの数字 に一致しますが、これがパターンの残りを照合する唯一の方法である場合、2 つの数字に一致する可能 性があります。 \d??\d かっこで囲まれたサブパターンを、 1 よりも多い最小繰り返し数または制限された最大数で定量化す る場合、最小または最大サイズに比例して、コンパイルされたパターン用により多くのストアが必要 です。 パターンが .* で始まる場合、 暗黙的にアンカが置かれます。そのパターンの後にどのような文字が続 いても、その文字の照合が、サブジェクトの文字列内のすべての文字位置に対して試行されるためで す。RE ENGINE は、前に \A が付加されている場合と同じようにこれを処理します。 キャプチャされたサブパターンを繰り返す場合、 キャプチャされる値は最後の反復に一致するサブ文 字列です。 たとえば、 次の式が 「tweedledum tweedledee」に一致すると、 キャプチャされるサブ文字列 の値は 「tweedledee」になります。 (tweedle[dume]{3}\s*)+ ただし、入れ子になったキャプチャされたサブパターンがある場合、対応するキャプチャされる値は 以前の反復で設定されている場合があります。次に例を示します。 /(a|(b))+/ /(a|(b))+/ が "aba" に一致した後、2 番目のキャプチャされたサブ文字列の値は "b" になります。 551 SGOS 6.4 Content Policy Language リファレンス 後方参照 文字クラスの外で、円記号の後に 1 以上の数字を指定したものを後方参照といいます。後方参照には、 そのパターン内の前の ( つまり、左側の ) 部分一致がキャプチャされます。ただし、指定した数字と同じ 数だけ、左側にキャプチャ用の左かっこが存在していなければなりません。 円記号の後の数字が 9 以下の場合は常に後方参照とみなされます。その場合は、パターン全体で、その 数字と同じ数だけ、キャプチャ用の左かっこが存在していないときだけエラーになります。言い換え ると、参照されるかっこは、数字が 9 以下の場合は参照元の左側になくてもかまいません。円記号の後 の数字の処理に関する詳細は、前述の 「円記号」のセクションを参照してください。 後方参照では、現在のサブジェクト文字列内のキャプチャ サブパターンに実際に一致した文字列に一 致します。 サブパターンに一致するものすべてに一致するのではありません。 したがって、 次のパターン は、 と には一致しますが、 "sense and sensibility" "response and responsibility" "sense and responsibility" には一致しません。 (sens|respons)e and \1ibility 同じサブパターンに対して複数の後方参照が存在することもあります。あるサブパターンが特定の照 合で実際に使用されていない場合、その未使用のサブパターンに対する後方参照があると常にエラー になります。たとえば、 次のパターンは、最初の部分で "bc" ではなく "a" に一致すると、常にエラーと なります。後方参照は最大で 99 個指定できるため、円記号の後に続くすべての数字が後方参照の番号 の一部とみなされる可能性があります。次のパターンの後にさらに数字が続く場合は、いずれかの区 切り文字を使用して後方参照を終端させる必要があります。 (a|(bc))\2 後方参照が参照するかっこの中にその後方参照が現れる場合は、そのサブパターンが最初に使用され た時点でエラーになります。そのため、(a\1) などと書いても決して一致しません。ただし、こうした参 照は、繰り返しサブパターン内で使用すると便利なことがあります。たとえば、 次のパターンは、任意 の数の "a"、"aba"、"ababaa" などに一致します。サブパターンの繰り返しのたびに、後方参照が前回の繰 り返しに対応する文字に一致します。これを機能させるには、 初回の繰り返しで後方参照が一致する 必要がないようなパターンにする必要があります。それには、上記の例のように「選択」を使用するか、 次のように 0 回以上の繰り返し量指定子を使用します。 (a|b\1)+ アサーション アサーションとは、現在の一致点の前または後の文字をテストすることをいいます。アサーションに よって実際に照合が進むことはありません。簡単なアサーションについては既に出てきました。\b、 \B、 \A、 \Z、\z、 ^、$ などがそうです。複雑なアサーションはサブパターンとして書きます。アサーショ ンとしてのサブパターンには 2 種類あります。1 つは、 サブジェクト文字列内の現在位置の前方を見る もの ( 先読み )、もう 1 つは現在位置の後方を見るもの ( 戻り読み ) です。 アサーションとしてのサブパターンの照合は、現在の一致位置は変化しないという点を除けば、通常 の方法で実行されます。 先読みアサーションは、肯定アサーションの場合は (?=、否定アサーションの 場合は (?! で始まります。 たとえば、 次の式は単語の後にセミコロンが続く文字列と一致しますが、 一 致部分にセミコロンは含まれません。 \w+(?=;) 552 付録 E: 正規表現の使用 次の式は、"example" の後に "bar" が続かないすべてのケースに一致します。 example(?!bar) 次に示すパターンは一見、 上のパターンと似ていますが、"bar" の前に "example" 以外がくるケースを 見つけるわけではありません。このパターンは単に "bar" という文字列を見つけます。というのは、 (?!example) というアサーションは、次に続く 3 つの文字が "bar" であれば常に真となるからです。上記 のような照合を実現するには、戻り読みアサーションが必要です。 (?!example)bar 戻り読みアサーションは、肯定アサーションの場合は (?<=、否定アサーションの場合は (?<! で始まり ます。 たとえば、 次の式は、 戻り読みア "bar" の前に "example" 以外がくるすべてのケースを見つけます。 サーションの内容には、 一致するすべての文字列が固定長でなければならないという制限が付きます。 (?<!example)bar ただし、複数の選択がある場合は、それらがすべて同じ固定長である必要はありません。したがって、 (?<=bullock|donkey) は許されますが、(?<!dogs?|cats?) と書くとコンパイル時にエラーになります。 異なる長さの文字列に一致する選択肢は、戻り読みアサーションの最上位レベルにおいてのみ許され ます。 これは Perl 5.005 より新しいバージョンの拡張機能です。 Perl 5.005 以前では、すべての選択肢が 同一長文字列に一致する必要がありました。(?<=ab(c|de)) といったアサーションは、 単一の選択肢が 次のように 2 つの選択肢だけを含 2 つの異なる長さに一致する可能性があるため許可されませんが、 むように書き換えると許可されます。 (?<=abc|abde) 戻り読みでは、各選択について、 現在の一致位置を固定長分だけ一時的に前に戻して、 再度照合を試み ます。 現在の一致位置の前に存在する文字が足りない場合、照合は失敗すると考えられます。 アサーションは任意の組み合わせでネストすることができます。たとえば、次の式は、"baz" の前に "bar" がきて、さらにその前に "example" 以外がくる場合に一致します。 (?<=(?<!example)bar)baz アサーションとしてのサブパターンはそのサブパターンをキャプチャしません。 また繰り返しも行わ れません。同じ内容のアサーションを複数回行っても無意味だからです。アサーション内にキャプ チャ サブパターンが含まれている場合もその数はカウントされますが、 その目的は、パターン全体の 中のキャプチャ サブパターンに番号を振るためです。 肯定アサーションについては、サブ文字列の キャプチャリングは実行されますが、否定アサーションの場合はキャプチャリングを実行しても無意 味です。 アサーションは、かっこ付きサブパターン 200 個までカウントします。 1 回実行のサブパターン 最大回数の繰り返しと最小回数の繰り返しのどちらの場合も、 その後に続くパターンの照合に失敗す ると、通常は、繰り返しの項目を再評価して、 繰り返しの回数を変えたとき残りのパターンを照合する かどうかを確認します。この動作は、パターンの作成者がそうした動作を実行するのは無意味と分 かっている場合は、抑制したほうが有益なことがあります。それにより、照合の性質を変えたり、通常 よりも早い段階で照合を失敗させることができます。 553 SGOS 6.4 Content Policy Language リファレンス たとえば、\d+example というパターンを次のサブジェクト行に適用する場合を考えてみます。 123456bar 6 つの数字すべてを照合した後、"example" との照合に失敗すると、通常の照合アクションでは、\d+ の部分を 5 桁の数字のみを照合して再試行し、 続いて 4 桁、 最終的に照合が失敗と判断 3 桁と減らし、 されます。1 回実行のサブパターンとは、パターンの一部分が一度一致したら、上記のような方法で再 評価されないように指定するものです。これにより、"example" と最初に一致しなかった時点で即座に 照合が終了します。1 回実行のサブパターンの表記には、(?> で始まる別の種類の特殊なかっこを使用 します。次に例を示します。 (?>\d+)bar このかっこを使用すると、そのパターンが一致した時点で一致部分が「ロック」 されます。 以降、 ロック 部分には入り込めなくなるためその内部にバックトラックすることがなくなります。ただし、ロック 部分を通り過ぎてさらにその前の部分にバックトラックする動作は通常どおり行えます。 言い換えると、 このタイプのサブパターンは、 サブジェクト文字列の現在の位置にアンカリングされた とき、 そのサブパターンが単独のパターンであれば一致するはずの文字列に一致するということです。 1 回実行のサブパターンでは、サブパターンはキャプチャリングされません。上記のような簡単なケー スは、飲み込めるところまですべて飲み込んでしまう繰り返しの最大化と考えることができます。つ まり、\d+ および \d+? は、 後続のパターンで一致できるように、一致させる数字の数を調整するため に用意されていますが、(?>\d+) は数字の並び全体と一致させることしかできません。 この構文には、もちろん、 任意の数の複雑なサブパターンを含めることもできます。また、 ネストさせ ることもできます。 条件付きサブパターン アサーションの結果に応じて、または、前回のキャプチャ サブパターンが一致したかどうかによって、 サブパターンを条件的に適用したり、2 つのサブパターンのどちらかを選択したりすることもできま す。条件付きサブパターンには、次の 2 つの形式があります。 (?(condition)yes-pattern) (?(condition)yes-pattern|no-pattern) 条件が満たされると、yes-pattern が、そうでない場合は、no-pattern ( 指定されている場合 ) が使用され ます。 サブパターンに 3 つ以上の選択が含まれているとコンパイル時にエラーになります。 条件には次の 2 つのタイプがあります。 かっこで囲まれたテキストは数字の並びになっている場合、 その番号に対応するキャプチャ サブパターンが既に一致していれば、 その条件は満たされます。 次の パターンを見てください (読みやすくするために、また説明の都合上、3 つの部分に分割するために、余 分なスペースを挿入してあります )。 ( \( )? [^()]+ (?(1) \) ) 最初の部分は、 任意指定の開きかっこに一致します。 かっこが存在していれば、それを最初のキャプ チャされたサブ文字列として設定します。2 番目の部分は、かっこ以外の 1 つ以上の文字に一致しま す。 3 番目の部分は、最初のかっこのセットが一致したかどかをテストする条件付きサブパターンで す。 一致した場合、 つまり、サブジェクト文字列が開きかっこで始まる場合は、 条件が真となるため、 yes-pattern が実行され、閉じかっこが必要となります。一致しない場合は、no-pattern が存在しないた め、 サブパターンはいずれとも一致しません。言い換えると、このパターンは一連のかっこ以外の文字 と一致し、任意指定のかっこで囲まれます。 554 付録 E: 正規表現の使用 条件が数字の並びではない場合、その条件はアサーションでなければなりません。肯定または否定の 先読み、あるいは肯定または否定の戻り読みアサーションを指定できます。次のパターンを見てくだ さい ( やはり、余分なスペースを挿入してあります。また、 2 行目には 2 つの選択肢があります )。 (?(?=[^a-z]*[a-z]) \d{2}[a-z]{3}-\d{2}|\d{2}-\d{2}-\d{2} ) 条件は、 オプションの文字以外の並びのあとに文字が続くケースに一致する肯定の先読みアサーション です。 言い換えると、サブジェクト文字列に少なくとも 1 文字存在しているかどうかテストするもので す。 そうでない場合は、2 番目 1 文字見つかると、サブジェクト文字列は最初の選択肢と照合が行われ、 の選択肢と照合が行われます。このパターンは、dd-aaa-dd または dd-dd-dd のどちらかの形式の文字 列に一致します (aaa は文字、dd は数字 )。 コメント コメントの開始を示します。 コメントは次の閉じかっこまで続きます。 コメン (?# というシーケンスは、 トのネストは許可されません。コメントを形成する文字は、パターン照合には一切使用されません。 パフォーマンス パターン内で使用する表現によって、 実行効率に差が出ることがあります。たとえば、 文字クラス [aeiou] で書いたほうが、(a|e|i|o|u) などの選択のセットで書くよりも効率的です。一般には、必要 な動作を実現する構文のうち最も簡単なものが、通常は、 最も効率的です。非正規表現のほうが正規表 現よりも構文が簡単であるため、一般に実行効率も高いことを覚えておいてください。 RE ENGINE と Perl の違い このセクションでは、RE ENGINE と Perl 5.005 の違いについて説明します。 • 通常、 スペースは、スペース、改ページ、改行、改行コード、水平タブ、垂直タブに一致します。Perl 5 では、 スペースのセットに垂直タブが含まれなくなりました。\v というエスケープ シーケンスは、 ずっと前から Perl のドキュメントに記載されていたましたが、ほとんど知られていません。ただ し、垂直タブ自体は、少なくとも 5.002 まではスペースとみなされていました。5.004 と 5.005 では、 \s は垂直タブに一致しません。 • 先読みアサーションで、繰り返し量指定子を使用できません。Perl では使用で RE ENGINE では、 きますが、期待されるような意味にはなりません。 たとえば、 次の 3 文字が "a" ではないと (?!a){3} は、 いうアサーションにはなりません。 単に、次の文字が "a" ではないというアサーションを 3 回繰り 返すだけです。 • 否定の先読みアサーション内に現れるキャプチャ サブパターンはカウントされますが、オフセッ ト ベクトル内の対応するエントリはセットされません。Perl では、 否定の先読みアサーションに 含まれる分岐が 1 つである場合に限り、アサーションが照合に失敗して先に進む前に、照合したす べてのサブパターンの数値変数をセットします。 • 2 進数の 0 という文字は、サブジェクト文字列ではサポートされていますが、パターン文字列では、 通常の C の文字列 (0 で終端される ) として渡されるため使用できません。 パターン内では、 エス ケープ シーケンス "\0" を使用して 2 進数の 0 を表現できます。 555 SGOS 6.4 Content Policy Language リファレンス • Perl のエスケープ シーケンス \l、\u、\L、\U、\E、および \Q はサポートされていません。これら は Perl の汎用文字列処理で実装されているもので、パターン照合エンジン側で実装されているも のではありません。 • Perl の \G アサーションは、単一パターンの照合では使用しないため、サポートされていません。 • RE ENGINE は (?{code}) 構文をサポートしていません。 • このマニュアルの執筆時点では、 パターンの一部が繰り返される場合のキャプチャされた文字列の 設定に関して、 たとえば、 パターン Perl 5.005_02 が奇妙な動作をすることがわかっています。 /^(a(b)?)+$/ に対して "aba" を 照 合 す る と、$2 に 値 "b" が 設 定 さ れ ま す が、パ タ ー ン /^(aa(bb)?)+$/ に対して "aabbaa" を照合すると、 ところが、 上記 $2 は未設定のままになります。 のパターンを /^(aa(b(b))?)+$/ に変更すると、 今度は $2 ( および $3) が設定されます。Perl 5.004 では、 上記のどちらのケースでも $2 が設定されます。これは RE ENGINE でも同じです。 • もう 1 つ、 未解決の不具合があります。パターン /^(a)?(?(1)a|b)+$/ は、Perl 5.005_02 では "a" に一 致 し ま す が、RE ENGINE で は 一 致 し ま せ ん。と こ ろ が、Perl と RE ENGINE の ど ち ら も、 /^(a)?a/ を "a" に対して照合しても $1 は未設定のままです。 • RE ENGINE は、Perl の正規表現機能を拡張した機能を用意しています。戻り読みアサーション固 定長の文字列に一致しますが、戻り読みアサーションの各選択肢はそれぞれ、長さの異なる文字列 に一致できます。Perl 5.005 ではすべての選択肢が同じ長さでなければなりません。、 注意 : 正規表現を使用して URL を照合する場合、スペースは、要求 URL 内の %20 に一致します。ただ し、 正規表現パターン内に %20 と書いても、要求 URL 内のいずれかと一致することはありませ ん。これは、Regex による照合が行われる前に、サブジェクト文字列内で "%20" が "" に正規化さ れるためです。 556
© Copyright 2024 Paperzz