はじめに:
 iRuleを使ってサーバ負荷をどうやってオフロードしていくか? BIG-IPをADC(Application Delivery Controller)としてより活用いただくことで、この課題の多くは解決できます。実はWEBサーバ上で設定されるアクセス制限やリダイレクト等の処理の大半はBIG-IPでできてしまうのです。今回はreferrerチェックを取り上げます。今月のiRuleは以下の下記のURLでもご確認いただけます: http://devcentral.f5.com/Wiki/default.aspx/iRules/BlockReferralRequests.html

タイトル:referrerチェックをBIG-IPで行うiRule

メリット: ・通常サーバサイドで行われるreferrerチェックをBIG-IPで行いサーバ負荷を低減する・設定個所がBIG-IPに集約されるため設定の管理が簡単(特にサーバ台数が多い場合など)

機能説明: referrerをチェックすることにより、いわゆる"直リンク"を防止します。 BIG-IP上で直リンクを禁止するコンテンツと正当なリンク元ホスト名を定義し、リクエストが禁止されたコンテンツかつ、正当なリンク元でない場合、エラーページへリダイレクトされます。

設定概要: 直リンク禁止されるコンテンツと、正当なリンク元はそれぞれDataGroup(class)として定義してリクエストURIとマッチングを行います。禁止コンテンツかつ非正当なリンク元であった場合は、指定のページにリダイレクトを行います。

【iRule定義】 

 class images {
  ".gif"
  ".jpg"
  ".jpeg"
  ".bmp"
  ".png"
}

 

class allowed_referers {
  "www.companya.com"
  "www.companyb.com"
  "www.companyc.com"
}

when HTTP_REQUEST {
   set refer_host [string tolower [URI::host [HTTP::header Referer]]]
   if { ( [matchclass [HTTP::path] ends_with $::images] ) and
        ( $refer_host ne "" ) and
        ( not [matchclass $refer_host contains $::allowed_referers] ) } {
      log local0.NOTICE "hotlink detected from host: $refer_host"
      HTTP::respond 301 "Location" "http://[HTTP::host]/hotlink.gif"
   }
}

※F5ネットワークスジャパンでは、サンプルコードについて検証を実施していますが、お客様の使用環境における動作を保証するものではありません。実際の使用にあたっては、必ず事前にテストを実施することを推奨します。