読者です 読者をやめる 読者になる 読者になる

女子WEBエンジニアのTechメモ

都内の某企業でマーケッターやってます。営業→WEBエンジニア・オフショア開発チーム駐在→マーケッター(SEO)ちょっと便利だなと思ったことをメモしています。

Basic認証配下のページで、Facebook/TwitterのOGPを確認する[UserAgent/ソースIP]

マーケティング インフラ

Digest認証をかけている開発環境にて、FacebookのOGPタグをテストしたいという状況があったのでメモ。

そのままだと、認証が必要なので401エラーになってしまい確認ができません。
そのため、下記の方法のどちらかで「Facebook/Twitterだ!」と判定して、限定的に許可をする設定変更をします。

  • HTTPヘッダのUserAgentから判定
  • OGPクローラのソースIPから判定

(はじめに)OGPタグの確認に便利なツール

下記の公式デバッグツールから、OGPタグの確認ができます。
Facebookデバッガー

タグの内容を変更した場合、facebookのキャッシュに残っていると変更が適用されないので、キャッシュをupdateしましょう。

HTTPヘッダのUserAgentから判定する方法

Virtual Hostsに追記する

/etc/httpd/conf.d/vhosts.confなどのVirtual Hostsに、追記をします。
Apacheのバージョンによって文法が違うので、利用中のバージョンをhttpd -vで確認して、利用中のバージョンにあう方を使ってください。

Apache2.2の場合
<VirtualHost *:80>
    …省略
    <Directory "/var/www/html/public">
######省略しています######
        AuthType      Basic
        AuthName      "Secret Area"
        #allowやrequireを許可しているか確認してください。
        Order deny,allow
        Deny from all
        #下記の6行を追加してください。
        #Facebook許可
        SetEnvIf User-Agent facebookexternalhit facebookexternalhit_ok
        Allow from env=facebookexternalhit_ok
        #Twitter許可
        SetEnvIf User-Agent Twitterbot twitter_ok
        Allow from env=twitter_ok
######省略しています######
    </Directory>
######省略しています######
</VirtualHost>
Apache2.4の場合
<VirtualHost *:80>
    …省略
    <Directory "/var/www/html/public">
######省略しています######
        AuthType      Basic
        AuthName      "Secret Area"
        #下記の6行を追加してください。
        #Facebook許可
        SetEnvIf User-Agent facebookexternalhit facebookexternalhit_ok
        Require env facebookexternalhit_ok
        #Twitter許可
        SetEnvIf User-Agent Twitterbot twitter_ok
        Require env twitter_ok
######省略しています######
    </Directory>
######省略しています######
</VirtualHost>

設定を読み込む

$ service httpd configtestで文法エラーがないか確認して、サーバーを再起動したら完了です。

# service httpd restart

もしくは

# service httpd graceful

※開発中・利用中のサービスの場合、gracefulを使うのが良いと思います。

OGPクローラのソースIPから判定する方法

Apacheを利用している場合の方法です。

ソースIPを確認する

下記のサイトから、ドメインのAS番号を調べます。
Hurricane Electric BGP Toolkit
上記のページにアクセスして、「facebook.com」や「twitter.com」で検索をします。
検索結果の「IP Info」にAS番号が書かれています。
f:id:bombomprin:20160923231826p:plain
今回は下記のようでした。

  • Facebook : AS32934
  • Twitter : AS13414

ソースIPを書いたファイルを作成

許可するIPが大量にあるので、ファイルを新しく作成し、その中に許可するIPたちを書いていきます。
/etc/httpd/conf.d/ips_ogp.confというファイルを作成して、中身を書き込んでいきます。
Apacheのバージョンによって文法が違うので、利用中のバージョンをhttpd -vで確認して、利用中のバージョンにあう方を使ってください。

Apache2.2の場合
# cd /etc/httpd/conf.d/
# echo '# Facebook IPs' >> ips_ogp.conf
# whois -h whois.radb.net -- '-i origin AS32934' | awk '/^route:/{print "Allow from " $2 ";" }' >> ips_ogp.conf
# echo '# Twitter IPs' >> ogp_allow_ips.conf
# whois -h whois.radb.net -- '-i origin AS13414' | awk '/^route:/{print "Allow from " $2 ";" }' >> ips_ogp.conf

先程しらべたAS番号をそれぞれ代入してください。

Apache2.4の場合

Apache2.4の場合、AllowではなくRequireを使います。

# cd /etc/httpd/conf.d/
# echo '# Facebook IPs' >> ips_ogp.conf
# whois -h whois.radb.net -- '-i origin AS32934' | awk '/^route:/{print "Require ip " $2 ";" }' >> ips_ogp.conf
# echo '# Twitter IPs' >> ogp_allow_ips.conf
# whois -h whois.radb.net -- '-i origin AS13414' | awk '/^route:/{print "Require ip " $2 ";" }' >> ips_ogp.conf

Virtual Hostsで作成したファイルを読み込む

/etc/httpd/conf.d/vhosts.confなどのVirtual Hostsで、先ほど作成したconfファイルを読み込みます。

<VirtualHost *:80>
    …省略
    <Directory "/var/www/html/public">
######省略しています######
        AuthType      Basic
        AuthName      "Secret Area"
        #allowやrequireを許可しているか確認してください。
        Order deny,allow
        Deny from all
        #下記の1行を追加してください。
        Include /etc/httpd/conf.d/ips_ogp.conf
        Require       valid-user
######省略しています######
    </Directory>
######省略しています######
</VirtualHost>

設定を読み込む

$ service httpd configtestで文法エラーがないか確認して、サーバーを再起動したら完了です。

# service httpd restart

もしくは

# service httpd graceful

※開発中・利用中のサービスの場合、gracefulを使うのが良いと思います。

あとがき

最初ソースIPの方を使っていたのですが、「UserAgentを見たほうがいいのでは」と先輩にアドバイスをもらったので最終的にUser Agentでやりました。

参考にした下記の記事にはUserAgentだと偽造ができるからセキュリティ的に良くない、と書いてあるけど、短時間しか確認しないのであれば、

  • 大量のIPを許可するのはセキュリティ的に良くない
  • IP変更に都度都度対応しなきゃいけない

ということもあり、UA判定のほうが良さそうというのも納得。

Webコンテンツマーケティング サイトを成功に導く現場の教科書

Webコンテンツマーケティング サイトを成功に導く現場の教科書

  • 作者: 株式会社日本SPセンター
  • 出版社/メーカー: エムディエヌコーポレーション(MdN)
  • 発売日: 2015/12/18
  • メディア: Kindle版
  • この商品を含むブログを見る