国別にアクセスを制限できるプラグイン「iQ Block Country」を導入してセキュリティを高める

テクニック
記事内に広告が含まれています。

海外からのアクセスで困っていませんか? 以前から酷かったですが、ここ数年は特に酷い状態です。主にbotの自動アクセスで、ログには同じ時刻に10〜20アクセスといった大量に意味の無いアクセスログになります。

セキュリティホールを突いてくるのが多く、スクレイピングも含まれます。人間が閲覧しているわけではないので非常に厄介です。

こういったアクセスは、国別にブロックしたいところです。そこで有用なプラグイン「iQ Block Country」が手助けになります。

iQ Block Countryは、無料のGeoLite2データベースを使用できるので、プラグイン本体も含め無料で利用が可能です。反面、無料であるGeoLite2データベースは精度が低く、1日1サービス1,000のIPアドレスに制限されています。

国別のIPアドレスといってもたくさんあります。それに加えIPアドレスは日々増える一方ですから、完全なデータベースは利用できません。それでも1日1,000IPアドレスをブロックできるのは助かりますね。

この記事はバージョン:1.2.17時点の情報です。バージョンによって画面構成や設定内容が異なりますから注意してください。

ブロックした統計ログ

国別にブロックしている実際の数字 画像のように、設定のLoggingタブではブロックした国毎、直近が時間毎、総数のトップ10が表示されます。

時間を見てください。秒数まで同じ同時刻に何回もアクセスを試みているのが分かります。悪質ですね。

この時点では、シンガポールが圧倒的に多くなっていますが、数ヶ月前はオーストラリア、半年前はロシア、昨年は中国やウクライナが一番ブロックされていました。2024年以降はブルガリアが突出しています。

証拠はありませんが、中国とシンガポールは同じ中国とみています。ロシアとウクライナの関係も同じだと思います。個人レベルでの経験として、この二国間は企業の設置が互いに多いからだと感じています。

データは当サイトとは別の運営サイトの実績です。

mmdbファイルをuploadフォルダに置く

データベースファイル「GeoLite2-Country.mmdb」は、Wordpressの/uploadフォルダ直下にアップすることで有効になります。

zipファイルを解凍してGeoLite2-Country.mmdbをFTPソフトなどでアップロードするだけです。

データベースファイルのダウンロードが非常に分かりにくく、上手く説明できませんが、以下URLから無料のアカウントを取得し、ダウンロードしたデータベースファイルをFTPでアップロードディレクトリにアップするだけです。

ログイン:https://www.maxmind.com/en/accounts/current/geoip/downloads

画像のように、赤枠で囲った箇所のZIPファイルをダウンロードします。

ちなみに、このデータベースファイルは、約4ヶ月毎に更新しないとなりません。つまり、無料の場合は同じ作業をしないとならないのです。これは面倒ではありますが無料なので仕方ないですね。

アカウントには有料プランもあり、有料なら自動的にデータベースを更新してくれます。15ユーロからです。

iQ Block Countryの設定

iQ Block Countryの設定は機能が豊富な面、とても複雑に感じられます。それに英語ですから、ニュアンスで勘違いすることもでてきます。

でも、一度設定してしまえば、普段は気にすることもなくなるので、最初に頑張って設定しましょう。

サイト運営によっても異なってくるため、推奨する設定ではなく、実際に運用している例を踏まえ、各項目を列挙してみます。

ご自分のサイトに合わせて参考にしてください。

各タブの設定は、設定例の画像です。

トグルボタンはクリックで開いていただくと英語と日本語、設定例をご紹介しています。最初のHomeがとても多くの設定があります。

セキュリティ的に必要なのはBackendタブですが、すべてのタブにある設定項目に目を通すことをおすすめします。

Home

Block type
You should choose one of the 3 block options below. This wil either show a block message, redirect to an internal page or redirect to an external page.
Message to display when people are blocked:

以下の 3 つのブロック オプションのいずれかを選択する必要があります。 これにより、ブロック メッセージが表示されるか、内部ページにリダイレクトされるか、外部ページにリダイレクトされます。
ブロックされたときに表示するメッセージ:

アクセス拒否した時に表示されるメッセージを入力できます。もしくはリダイレクトもおこなえます。

Page to redirect to:
If you select a page here blocked visitors will be redirected to this page instead of displaying above block message.

リダイレクト先のページ:
ここでページを選択すると、ブロックされた訪問者は、上記のブロック メッセージを表示する代わりに、このページにリダイレクトされます。

URL to redirect to:
If you enter a URL here blocked visitors will be redirected to this URL instead of displaying above block message or redirected to a local page.

リダイレクト先の URL:
ここに URL を入力すると、ブロックされた訪問者は、上記のブロック メッセージを表示したり、ローカル ページにリダイレクトしたりする代わりに、この URL にリダイレクトされます。

メッセージを表示するだけか、ローカルの固定ページを選んでリダイレクトして飛ばすか、もしくが投稿などURLにリダイレクトするか、を選べます。

特にこだわりが無ければ、メッセージだけでも良いでしょう。

設定例

General settings
Send headers when user is blocked:
Under normal circumstances you should keep this selected! Only if you have “Cannot modify header information – headers already sent” errors or if you know what you are doing uncheck this.

一般設定

ユーザーがブロックされたときにヘッダーを送信する:
通常の状況では、これを選択したままにしておく必要があります。 「ヘッダー情報を変更できません – ヘッダーは既に送信されています」というエラーがある場合、または何をしているのかわかっている場合にのみ、これをオフにしてください。

通常はON

Buffer output?:
You can use this option to buffer all output. This can be helpful in case you have “headers already sent” issues.

バッファ出力?:
このオプションを使用して、すべての出力をバッファリングできます。 これは、「ヘッダーが既に送信されている」問題がある場合に役立ちます。

私は問題無いのでオフ


Do not log IP addresses:
Check this box if the laws in your country do not permit you to log IP addresses or if you do not want to log the ip addresses.

IP アドレスをログに記録しない:
お住まいの国の法律で IP アドレスを記録することが許可されていない場合、または IP アドレスを記録したくない場合は、このボックスをオンにします。

記録したいのでON

Do not block admin-ajax.php:
Check this box if you use a plugin that uses admin-ajax.php.

admin-ajax.php をブロックしない:
admin-ajax.php を使用するプラグインを使用する場合は、このボックスをオンにします。

参考画像ではオフになっていますが、admin-ajaxを使いたいのでON。.htaccessやrobot.txtの記述も関係します。


Number of rows on logging tab:
How many rows do you want to display on each column on the logging tab.

ログ タブの行数:
ログ タブの各列に表示する行数。

個人的にデフォルトのまま


Number of days to keep logging:
How many days do you want to keep the logging used for the logging tab.

ログを保持する日数:
[ログ] タブで使用されるログを保持する日数。

30日なりお好きにどうぞ。


設定例

Do not lookup hosts on the logging tab:
On some hosting environments looking up hosts may slow down the logging tab.

[ログ] タブでホストを検索しない:
一部のホスティング環境では、ホストを検索するとログ タブの速度が低下する場合があります。

遅いと思ったり、必要性がなければONで検索しない。


Allow tracking:
This sends only the IP address and the number of attempts this ip address tried to login to your backend and was blocked doing so to a central server. No other data is being send. This helps us to get a better picture of rogue countries.

追跡を許可:
これは、IP アドレスと、この IP アドレスがバックエンドへのログインを試行し、ブロックされた試行回数のみを中央サーバーに送信します。 他のデータは送信されていません。 これにより、不正な国をより正確に把握することができます。

不正ログインの国を特定したいのでON


GeoIP API Key:
If for some reason you cannot or do not want to download the MaxMind GeoIP databases you will need an API key for the GeoIP api. You can get an API key from: https://webence.nl/geoip-api/

GeoIP API キー:
何らかの理由で MaxMind GeoIP データベースをダウンロードできない、またはダウンロードしたくない場合は、GeoIP API の API キーが必要になります。 API キーは https://webence.nl/geoip-api/ から取得できます。

有料プランでAPIキーを設定できます。

GeoIP API Key Server Location:
Choose a location closest to your own location.

GeoIP API キー サーバーの場所:
自分の場所に最も近い場所を選択してください。

日本からだと西海岸のサンフランシスコが近いと思う。

Admin block API Key:
For additional security you can protect your backend from known IP addresses who have made hack attempts at other WordPress sites. You can get more information and an API key from: https://webence.nl/admin-block-api/

管理ブロック API キー:
セキュリティを強化するために、他の WordPress サイトでハッキングを試みた既知の IP アドレスからバックエンドを保護できます。 詳細情報と API キーは、https://webence.nl/admin-block-api/ から取得できます。

これも有料プランから設定可能。


設定例

Accessibility options:
Set this option if you cannot use the default country selection box.

アクセシビリティ オプション:
デフォルトの国選択ボックスを使用できない場合は、このオプションを設定します。

表示上の問題。ONならズラッと一覧のチェックボックス。オフなら検索して選ぶ形式の違い。

国選択の表示設定

Override IP information:
This option allows you to override how iQ Block Country gets the real IP of your visitors.

IP 情報をオーバーライドします。
このオプションを使用すると、iQ Block Country が訪問者の実際の IP を取得する方法をオーバーライドできます。

必要性がなければOFFのまま


Log all visits:
This logs all visits despite if they are blocked or not. This is only for debugging purposes.

すべての訪問を記録します。
これにより、ブロックされているかどうかに関係なく、すべての訪問が記録されます。 これはデバッグのみを目的としています。

デバッグの時に使おう。通常だとサイト規模によってはログが大きくなりすぎます。

Frontend

ここから国別にブロックする設定です。先ずはフロントエンド、つまり通常の閲覧です。

Frontend options
Block visitors from visiting the frontend of your website:

フロントエンド オプション
訪問者が Web サイトのフロントエンドにアクセスできないようにブロックします。

後で国を選びます。その国に見せないというならONにします。見るのは自由というならOFFで。ただ、フロントエンドからも不要なアクセスがあるのも事実。


Do not block visitors that are logged in from visiting frontend website:

ログインしている訪問者がフロントエンド Web サイトにアクセスするのをブロックしない:

ログインしているユーザーとは主にサイト運営者も含まれるため、これがOFFだと自分もサイトが見られなくなってしまいます。除外したいのでONで。


Block visitors from using the search function of your website:

訪問者が Web サイトの検索機能を使用できないようにブロックします。

これは主にWordpress標準の検索ボックスでクエリ検索をさせないようにブロックします。このクエリに任意の不正なコードを仕込まれ、別のページに飛べるようなスパムもあるため、検索させない方がいいでしょう。だからONにしています。

Block countries selected below:
Block all countries except those selected below

以下で選択した国をブロック
以下で選択した国を除くすべての国をブロックする

ラジオボタンでどちらかを選ぶ形式です。上をチェックするなら、次の項目になる国だけをブロックし、下段のチェックボックスを選んだなら、除外する国を選びます。

これ、逆になると大変なことになります。個人的にはブロックしている国が分かりやすいように、上段のチェックにしています。

Select the countries:
Use the CTRL key to select multiple countries

国を選択してください:
CTRL キーを使用して複数の国を選択します

ボックスをクリックするとプルダウンメニューになります。ABC順で並んでいます。一部の文字を入力してインクリメンタルサーチも可能です。

1つ前の設定で、ブロックする国を選ぶならば、単純にブロックしたい国を選んでいくだけです。

これは非常に難しい面があります。WordPressのプラグインで使っている(通信している)国や、何かしらのサービスを使っている国までブロックしてしまうと、それが機能しません。

強固にするなら、日本とアメリカ以外をブロックするのが効果は高いものの、一部使えないプログラムも出てくるでしょう。一度、日本以外を全てブロックしログを参照してみると、ブロックした国が表示されます。その傾向をみて個別にブロックするのも1つの手です。

設定例

Block tag pages:
If you select this option tag pages will be blocked.

ブロック タグ ページ:
このオプションを選択すると、タグ ページがブロックされます。

そのままです。タグ一覧のページをブロックするかしないか。


Block feed:
If you select this option feed pages will be blocked.

ブロックフィード:
このオプションを選択すると、フィード ページがブロックされます。

feedも記事をパクられたりするので、気になる人はブロックのONで。


Frontend allow list IPv4 and/or IPv6 addresses:
Use a semicolon (;) to separate IP addresses
This field accepts single IP addresses as well as ranges in CIDR format.

フロントエンド許可リスト IPv4 および/または IPv6 アドレス:
セミコロン (;) を使用して IP アドレスを区切ります
このフィールドは、単一の IP アドレスと CIDR 形式の範囲を受け入れます。

個別に許可が必要であれば入力

Frontend block list IPv4 and/or IPv6 addresses:
Use a semicolon (;) to separate IP addresses
This field accepts single IP addresses as well as ranges in CIDR format.

フロントエンド ブロック リスト IPv4 および/または IPv6 アドレス:
セミコロン (;) を使用して IP アドレスを区切ります
このフィールドは、単一の IP アドレスと CIDR 形式の範囲を受け入れます。

個別にブロックが必要なら入力

Backend ックエンドは、主に管理している側の画面のことです。管理画面などがそれに含まれます。

設定例

最も重要な設定です。

日本以外を全てブロックするなら、下段オプション「Block all countries except those selected below」を選び、日本を追加する必要があり、指定した国だけをブロックするなら、逆に上段オプションを選び指定する国を追加しておくことになります。

フロントエンドと同じように、バックエンドもIPアドレスとその範囲で許可かブロックするかを設定できます。

Block visitors from visiting the backend (administrator) of your website:

訪問者が Web サイトのバックエンド (管理者) にアクセスできないようにブロックします。

これはON


Block countries selected below:
Block all countries except those selected below

以下で選択した国をブロック:
以下で選択した国を除くすべての国をブロックする

2択です。上段が国を選んでブロックするか、下段は除外する国を選ぶかの違いです。

Select the countries:
Use the CTRL key to select multiple countries

フロントエンド同様に国を選びます。

許可か除外かにより意味が真逆になるため気を付けます。

バックエンドなので、基本は自分以外、つまり日本以外は全てブロックで良いかと思います。

Do you want to block individual pages:
If you do not select this option all pages will be blocked.

個々のページをブロックしますか:
このオプションを選択しない場合、すべてのページがブロックされます。

個別にブロックしたいなら、最初のチェックボックスをONに。

Block pages selected below:
Block all pages except those selected below

以下で選択したブロック ページ:
以下で選択したページを除くすべてのページをブロックする

2択です。上部がブロックする固定ページを選ぶ形式で、下段が除外する固定ページを選ぶ形式です。


参考画像だと、個々のページをブロックするから最初にチェックを入れ、次の2択で下段の除外を選び、リストからブロックしない固定ページを選んでいます。

つまり、選んだ固定ページ以外はブロックしています。

Do you want to block individual categories:
If you do not select this option all blog articles will be blocked.

個々のカテゴリをブロックしますか:
このオプションを選択しない場合、すべてのブログ記事がブロックされます。

カテゴリーをブロックしないなら、逆にチェックボックスをONにします。

画像のようにオフのままなら、すべてのカテゴリがブロックされます。


Do you want to block the homepage:
If you do not select this option visitors will not be blocked from your homepage regardless of the categories you select.

ホームページをブロックしますか:
このオプションを選択しない場合、選択したカテゴリに関係なく、訪問者はホームページからブロックされません。

こちらもブロックしないならチェックは入れない。個別にブロックするなら最初のチェックを入れ、ブロックするカテゴリを選ぶ形です。


この表現方法は、チェックを入れるのか入れないのか少し分かりづらいです。勘違いすると全くの逆になってしまいます。気をつけてください。

WordPressのタグ別にブロックできます。

ブロックするならすべてオフのまま。個別にブロックしたいなら、最初をチェックして個別にカテゴリを選んでブロックします。

WordPressにある投稿タイプ別にブロックできます。

ブロックするならすべてオフのまま。個別にブロックしたいなら、最初をチェックして個別に投稿タイプを選んでブロックします。

必要無いか分からない場合はオフのままでブロックさせておきましょう。

Select which services you want to allow:
This will allow a service like for instance a search engine to your site despite if you blocked the country.
Please note the “Search Engine Visibility” should not be selected in reading settings.

許可するサービスを選択します。
これにより、国をブロックした場合でも、サイトへの検索エンジンなどのサービスが許可されます。
読み取り設定で「検索エンジンの可視性」を選択しないでください。

許可するWebサービスを選択できます。検索エンジンや巡回ボットなどを指定できるので、自分が使っているサービスは許可させておきましょう。

Check which country belongs to an IP Address according to the current database.

現在のデータベースに従って、どの国が IP アドレスに属しているかを確認します。

Reset Counters
When you click on the Reset Counter button the counters of total Frontend & Backend blocks will be set to 0.

カウンターのリセット
[カウンターのリセット] ボタンをクリックすると、フロントエンド ブロックとバックエンド ブロックの合計のカウンターが 0 に設定されます。


このタブではデータベースのリセットもおこなえます。データベースのバージョンも確認できます。

このタブでブロックした統計情報を見ることができます。

恐らく一番多く見ることになるタブです。

最下段にある「Top URLs that are blocked」で実際にアクセスされているURLが表示されていますので、問題を特定できる参考になります。

保持しているログはすべてCSVでダウンロードできます。

説明の必要はないですね。設定ファイルの書き出しと読み込みができます。

Export
When you click on Backup all settings button a backup of the iQ Block Country configuration will be created.
After exporting, you can either use the backup file to restore your settings on this site again or copy the settings to another WordPress site.

エクスポート
[すべての設定をバックアップ] ボタンをクリックすると、iQ Block の国設定のバックアップが作成されます。
エクスポート後、バックアップ ファイルを使用してこのサイトの設定を再度復元するか、設定を別の WordPress サイトにコピーすることができます。

Import
Click the browse button and choose a zip file that you exported before.
Press Restore settings button, and let WordPress do the magic for you.

インポート
参照ボタンをクリックして、以前にエクスポートした zip ファイルを選択します。
[設定の復元] ボタンを押して、WordPress に魔法をかけてもらいましょう。

お疲れ様でした。

設定の説明が、逆説的に書いてある部分もあり、文章としては非常に理解しにくいと思いました。

最低限のセキュリティとして、バックエンドはブロックしたいところです。

これで総当たり攻撃やスパムアタックを、ある程度防ぐことが出来ているのでお薦めのプラグインです。

新規プラグインの検索窓で「iQ Block Country」で探せます。

セキュリティ対策に適したWordpressテーマ

冒頭のように無料かつ制限のある無料プランでは、ある程度は防いでくれます。アクセス数が多いと半分もカバーできませんが、導入していないよりは明らかにブルートフォースアタック(総当たり攻撃)などで表面に出てくる不具合が減ります。

他にも、セキュリティ対策として、「XO Security」がおすすめです。特にログインURLの変更や、余計な情報を与えないように秘匿できる機能が助かっています。

これに加え、BBQ Firewallというプラグインの組み合わせで更に安心な組み合わせになります。

セキュリティ系はこれしかインストールしていませんが、全く問題ありません。お問い合わせ系のプラグインも使用せず、Google reCAPTCHAのプラグインも入れていません。

お問い合わせフォームはGoogleフォームがオススメです。