1. プラグイン概要・解決する課題
警察庁の統計によると、日本国内のECサイトやWebサーバーに向けられる不審アクセス・脆弱性スキャンの実に99%が海外発であることが明らかになっています。特に昨今では、海外IPや自動化ボットによる「不正注文・不正アクセス」や「大量スパム会員登録」、管理画面へのブルートフォース攻撃が深刻な課題となっています。
本プラグイン(SiteOverseasIpBlocker)は、この問題を根本から解決するために開発されました。
2. 動作要件・システム環境
本プラグインは、以下の環境において動作検証およびセキュリティ検証を実施しています。
| 項目 | 要件・対応仕様 |
|---|---|
| EC-CUBE バージョン | EC-CUBE 4.2.0 〜 4.3.x(4.2系・4.3系両対応) |
| PHP バージョン | PHP 8.1 / PHP 8.2 / PHP 8.3 |
| データベース | MySQL 5.7 / 8.0 / PostgreSQL 10〜16 |
| 必要拡張モジュール | PHP標準関数(fseek, pack, unpack)のみ。特殊なPECL拡張や外部モジュールは不要です。 |
| プロキシ・CDN環境 | Cloudflare(CF-Connecting-IP)、AWS ALB、リバースプロキシ(X-Forwarded-For)に完全対応。 |
本プラグインの超高速GeoIP判定エンジンは「IPv4アドレス専用」の設計となっております。
エックスサーバー、ConoHa、さくらのレンタルサーバなど、一般的なEC-CUBEホスティング環境(DNSのAレコードのみ設定されたIPv4環境)では、お客様がIPv6回線(v6プラス・IPoE等)をご利用の場合でも通信事業者(プロバイダ)側で自動的に国内IPv4へ変換されるため、通常通り正常に判定・通過いたします。
※以下の環境ではご注意ください:
- WebサーバーのDNSにIPv6(AAAAレコード)を直接設定されている場合
- Cloudflare等のCDN経由でIPv6アドレスが直接Webサーバーへ到達する環境
上記のようにサーバーへ直接IPv6アドレスで通信が到達する場合、日本国内からのアクセスであっても「国籍判定不可」としてブロック対象となります。Cloudflare等をご利用の際は、Cloudflare管理画面にて「Pseudo IPv4(疑似IPv4)」機能等の併用をご検討ください。
3. インストール・有効化手順
-
1
プラグインの入手・インストール
EC-CUBE管理画面の「オーナーズストア > プラグイン > プラグイン一覧」より本プラグインをインストールします。
-
2
プラグインの有効化
プラグイン一覧画面にて、本プラグインのトグルスイッチまたは「有効化」ボタンを押下します。
-
3
初期設定の確認・保存
左メニューの「設定 > システム設定 > 海外IPブロック設定」へ進み、店舗の運用ポリシーに合わせて設定を行い「保存」をクリックします。
4. 管理画面の設定項目一覧
管理画面の「設定 > システム設定 > 海外IPブロック設定」で提供される設定パラメータの一覧です。
| 設定項目名 | 初期値 | 説明・設定のポイント |
|---|---|---|
プラグインの有効化isEnabled |
OFF(無効) | 海外IPブロック機能全体の有効/無効を切り替えます。 |
保護モードprotectionMode |
決済・会員登録のみ (推奨) |
以下の3つのモードから選択できます:
|
管理画面の海外遮断blockAdmin |
ON(有効) | 管理画面(/%eccube_admin_route%/)への海外IPアクセスを個別に遮断するか指定します。フロント側の保護モード設定に関わらず独立して機能します。 |
許可する国コードallowedCountries |
JP |
アクセスを許可する国コード(ISO 3166-1 alpha-2)をカンマ区切りで指定します(例: JP,US)。通常は日本国内限定(JP)のままで問題ありません。 |
検索クローラー通過allowSearchBots |
ON(有効) | GooglebotやBingbotなどの検索エンジンクローラーを自動認証し、無条件で通過させる機能です。SEO維持のため常時ONを強く推奨します。 |
手動ホワイトリストIPwhitelistIps |
空(未設定) | 海外IPであってもアクセスを無条件許可したいIPアドレスまたはCIDR範囲を改行区切りで入力します(例: 203.0.113.10 または 198.51.100.0/24)。海外出張時や外部連携サーバーの登録に利用します。 |
手動ブラックリストIPblacklistIps |
空(未設定) | 国判定に関わらず、特定IPからの接続を強制拒絶したい場合に入力します。 |
GeoIP自動更新autoUpdate |
ON(有効) | GitHub Actionsにより日次配信される最新のIP割当バイナリへの自動追従設定です。 |
5. SEO保護(Googlebot通過判定)の仕組み
悪意あるボットが User-Agent: Googlebot と偽装してアクセスしてくる攻撃(UAスプーフィング)を防ぎつつ、本物のGooglebotのみを100%安全に通過させるため、本プラグインはGoogle公式が推奨する「Forward-Confirmed Reverse DNS(FCrDNS / 二重逆引き照合)」を採用しています。
- User-Agentの一次判定: リクエストのUser-Agentに「Googlebot」や「bingbot」が含まれるかを検知。
- Reverse DNS逆引き: 接続元IPをホ스트名に逆引き(例:
crawl-66-249-66-1.googlebot.com)。ドメイン末尾が.googlebot.comまたは.google.comであることを検証。 - Forward DNS正引き照合: 取得したホスト名を再度IPアドレスに正引き解決し、元の接続元IPと完全に一致することを確認。
この検証結果はキャッシュ(APCuまたはファイルキャッシュ)に保存されるため、2回目以降の巡回アクセスでDNS問い合わせのオーバーヘッドは発生しません。
6. リアルタイム遮断ログ&IPシミュレーター
管理画面のタブメニューより、遮断実績の確認や任意のIPに対する判定テストが可能です。
リアルタイム遮断ログ
海外IPからのアクセスが遮断された際の日時、アクセス先URL(/shoppingや/adminなど)、接続元IP、国コード、ユーザーエージェントが一覧で記録されます。どの国からどのような攻撃が仕掛けられているかを視覚的に把握できます。
IP判定シミュレーター
調査したいIPアドレスを入力して「判定テスト」を実行することで、本プラグインがそのIPをどのように認識するか(国コード、許可/遮断判定、ホワイトリスト該当有無)を事前シミュレーションできます。
7. SSHコンソールコマンド
万が一の設定ミスや緊急時、サーバーのSSHターミナルから直接プラグインの状態確認・緊急解除が行えるSymfony Consoleコマンドを完備しています。
# 現在の稼働ステータスと設定内容を確認
$ bin/console site-overseas-ip-blocker:status
# プラグインの有効/無効を緊急トグル切替(即座にON/OFF)
$ bin/console site-overseas-ip-blocker:toggle
# 内蔵GeoIPバイナリデータを最新版に強制アップデート
$ bin/console site-overseas-ip-blocker:update-geoip
8. よくある質問・トラブルシューティング
Q. 海外出張先や海外拠点から管理画面にアクセスできなくなりました。
海外IPからの接続のため、正常に403遮断されています。あらかじめ出張先のIPを「手動ホワイトリスト」に登録しておくか、サーバーへSSH接続できる環境であれば bin/console site-overseas-ip-blocker:toggle で一時的に機能をOFFにしてください。
Q. CloudflareなどのCDNを導入していますが、正常に判定されますか?
はい、完全に対応しています。Cloudflareが付与する CF-Connecting-IP や一般的なプロキシの X-Forwarded-For ヘッダーから真のクライアントIPを自動抽出して厳格に判定します。
Q. Google Merchant CenterやFacebook広告の審査ボットが遮断されませんか?
推奨の「決済・会員登録のみ遮断」モードをご利用の場合、商品詳細ページやカート画面などは海外にも開放されているため、各種広告審査クローラーが商品ページを巡回する際に遮断される心配はございません。
Q. お客様がIPv6環境(v6プラス・IPoE等)を利用している場合でも正常にアクセスできますか?
はい、エックスサーバーやConoHa、さくらのレンタルサーバなど一般的なホスティング環境(DNSにAレコードのみ設定されたIPv4サーバー)であれば問題ございません。お客様のアクセス時にプロバイダ側で自動的に国内IPv4へ変換されてWebサーバーへ到達するため、通常通り正常に国内判定されて通過します。
ただし、WebサーバーのDNSにIPv6(AAAAレコード)を設定している場合や、Cloudflare等のCDN経由でIPv6が直接Webサーバーへ到達する場合は「国籍判定不可」となり遮断対象となるため、Cloudflareの「Pseudo IPv4(疑似IPv4)」機能等の併用をご検討ください。