システム開発 備忘録





.htaccessでサイトへのアクセスを国内のみ可能にする方法
*** *** *** *** ***


海外からのアクセスを遮断したい

Webサイトを運営していると、海外からのアクセスは全て拒否して日本国内でのみ閲覧可能にしたいということは多い。(主にセキュリティ上の理由で)

.htaccessに許可したいIPアドレスの帯域を全て書き込めばよいのでそのやり方。

・<RequireAny>タグで囲んだ中に、許可するIP帯域を全て書く
・検索エンジンのクローラーや大手SNSのボット、AIのクローラーは海外からなのでこれらだけは許可するようにする

(例)


    # --- 主要な検索エンジン・SNSボット ---
    Require expr %{HTTP_USER_AGENT} =~ /Googlebot/
    Require expr %{HTTP_USER_AGENT} =~ /bingbot/
    Require expr %{HTTP_USER_AGENT} =~ /Yahoo/
    Require expr %{HTTP_USER_AGENT} =~ /Slurp/
    Require expr %{HTTP_USER_AGENT} =~ /Applebot/
    Require expr %{HTTP_USER_AGENT} =~ /DuckDuckBot/
    Require expr %{HTTP_USER_AGENT} =~ /facebookexternalhit/
    Require expr %{HTTP_USER_AGENT} =~ /Twitterbot/
    Require expr %{HTTP_USER_AGENT} =~ /Slackbot/
    Require expr %{HTTP_USER_AGENT} =~ /Google-Site-Verification/

    # --- AI・次世代クローラー ---
    Require expr %{HTTP_USER_AGENT} =~ /Google-InspectionTool/
    Require expr %{HTTP_USER_AGENT} =~ /Google-CloudVertexBot/
    Require expr %{HTTP_USER_AGENT} =~ /GPTBot/
    Require expr %{HTTP_USER_AGENT} =~ /ChatGPT-User/
    Require expr %{HTTP_USER_AGENT} =~ /ClaudeBot/
    Require expr %{HTTP_USER_AGENT} =~ /PerplexityBot/
    Require expr %{HTTP_USER_AGENT} =~ /CCBot/
    Require expr %{HTTP_USER_AGENT} =~ /Amazonbot/
    
    # --- Microsoftサブボット ---
    Require expr %{HTTP_USER_AGENT} =~ /adidxbot/
    Require expr %{HTTP_USER_AGENT} =~ /BingPreview/

    # 日本IPリストを許可(ip_allow.confの中身が Require ip ... であること)
    Require ip 1.0.16.0/20
    Require ip 1.0.64.0/18
    Require ip 1.1.64.0/18
    …
    中略
    …
    Require ip 223.252.64.0/19
    Require ip 223.252.112.0/20


問題は、中略とした箇所。じつはこれ数千行ある。
APNICから公式データを取得はできるのだが、.htaccessにそのまま書き込める形式ではない。

(APNICのデータ例)
    			…
apnic|*|asn|*|13434|summary
apnic|*|ipv4|*|53930|summary
apnic|*|ipv6|*|16674|summary
apnic|JP|asn|173|1|20020801|allocated
apnic|NZ|asn|681|1|20020801|allocated
apnic|SG|asn|963|1|20220622|allocated
apnic|SG|asn|997|1|20220628|allocated
				…

形式|レジストリ名|国コード|タイプ|開始アドレス|数(量)|割り当て日|状態
という風に並んでいて数万行ある。
しかも毎日更新される。

手作業で変換するのは不可能なのでスクリプトなどでやるしかない。手順は、
・apnic|JP|ipv4| のデータだけを取り出す
・開始アドレスと数(量)からCIDRに変換する

結構たいへんだったので、毎日自動でサーバーにやってもらうことにした。

  1. APNIC(アジア太平洋地域のIP管理団体)から最新の全割り当てデータを取得。
  2. 日本(JP)に割り当てられたIPv4アドレスのみを厳選して抽出。
  3. アドレス数からCIDR(/24等)形式へ正確に変換し、.htaccessですぐ使える形で出力。

というわけで、

<RequireAny>タグをまるごと(クローラーの許可も含む)自動作成して公開しました。
コピーして.htaccssに張り付けるだけで、国外からのアクセスを拒否できます。
ご自由にお使いください。

 →日本国内IPアドレス許可リスト(.htaccessに追記用)

サイトの性質にもよりますが、1ヶ月〜3ヶ月に1回程度は.htaccessを更新すると良いでしょう。
※APNICのデータは毎日更新されますが、日本に割り当てられたIPが明日突然アメリカに変わるようなことは稀なので。



Copyright (C) 2009- station-t.com All Rights Reserved , Link Free