【.htaccess】国ごとのIPアドレスでサイトアクセスを拒否する

.htaccessファイルでIPアドレスブロック

以前の記事【.htaccess】特定の相手のアクセスを拒否・サイトに制限をかける にて、IPアドレスやドメインを使って、サイトへのアクセスをブロックする方法をご説明しました。
今回は、特定の国からのアクセスを全て弾く設定についてご説明します。
国ごとアクセス拒否

【追記】
2022年3月、弊社サイトに対して不正ログインを試みるIPアドレスが多い地域のIPアドレスリストを記載した記事を公開しました。
合わせてご覧ください。
【.htaccess】特定の国のIPアドレスでアクセスを拒否(ブロック)する

まずは不審な相手を見極める

最近特定の国からのWordPress管理画面に対する不正アクセスが異常に多く、総当たり攻撃でパスワードを解除しようとしている痕跡がログに残っていました。
うちのパスワードはとても長くしている上に、何度もパスワード入力をミスるとサイト自体にアクセスできなくするプラグインを入れているので別に問題は無いのですが、不正アクセスの頻度によってはサーバーに負担が掛かってサイトの表示速度が遅くなることもありますし、他にも迷惑メールを送ってきたり、以前お話したネイバーからの不正リンクの件があったり、といったことが重なったので、国ごとまとめてブロックすることにしました。

※国ごとのアクセス拒否を設定する場合には慎重に!

もし自分がWordPressで使用しているプラグインや、データバックアップ先になっているサーバーがある国を間違えてブロックすると、それらが正常に動作しなくなります。
また、GoogleやBingなどの検索エンジンのクローラーも国外IPのことが多いので、その国やIPアドレスは本当に弾いても良いものか、きちんと確認してからブロックしてください。

.htaccess(エイチティーアクセス)ファイルでアクセス制限をかける

サーバーの挙動を制御するApacheというプログラムソフトに対する様々な設定を行うためのファイルが.htaccess です。

こうして言葉にすると何を言っているのか良く分かりませんね。
要するに、自分がサイトを置くために間借りしているサーバーに対して『こういう時はこうしてほしい』というお願いを記述するファイルが.htaccessです。

今回ご紹介するのは、その.htaccessファイルに、怪しいドメインや来てほしくないホストを記入して、サーバーでアクセスを弾いてもらう方法です。
うっかり一般の人も使っているドメインを弾くとその人達も入れなくなってしまうので、ドメイン指定をする場合は慎重に行ってください。

また、.htaccess ファイルは記述やアップロード方法を間違えるとサイトそのものがエラーで表示されなくなったりするので取り扱いは慎重になさってください。
何か間違えてしまった時にすぐ元に戻せるように、念のため元の.htaccess ファイルのコピーを保存しておいてくださいね。

今の.htaccess ファイル状態を保存・確認

いつも.htaccess ファイルを編集して使っている方なら良いのですが、今まではテンプレートを借りてそのまま運営していて、今回初めてhtaccess ファイルを編集する方は、まず現状の確認とコピー作成を行ってください。

FFFTPなどのFTPクライアントソフトを使って、現状の.htaccess ファイルをダウンロードします。
htaccessファイル状態を保存・htaccessファイルコピー
ファイルが保存されているフォルダを開き、ダウンロードした.htaccess ファイルを見つけてください。
右クリックでコピー&貼り付けして複製を作り、ファイルの名前と拡張子を変更します。
『 .(ドット) 』 から始まる名前のままだと、編集・保存ができないので、ドットは削除して、テキスト用の拡張子『.txt』を最後に付けてください。
これがいざという時のバックアップなので、間違えて編集・削除しないようご注意ください。

次に元のファイルの名前を変更します。
これも『 .(ドット) 』 から始まる名前のままだと、編集・保存ができないので、一時的に名前を変更して、テキスト用の拡張子『.txt』を付けてください。

テキストファイルとして保存されたら、ダブルクリックで開くか、テキストエディタを選択して開きます。
テンプレートでくっついている.htaccess ファイルはほぼデフォルトの状態で何も記載されていないと思います。
既に何かが記載されている場合は、何が書かれているのかこの機会に調べてみてもいいですね。

.htaccess ファイルに記述する内容

『deny from 』の後に拒否したい相手のドメインやIPアドレスを入れます。
メモ帳やTeraPadなどのテキストエディタで拒否内容を記述して保存しましょう。

国ドメイン指定でブロックする場合

『 deny from .●● 』の形式で記述します。
国ドメインの一覧はこちら⇒日本ネットワークインフォメーションセンター

# ?<ここからサイトへのアクセスについて書いてるよ。
# ?<最初に許可(allow)、次に拒否(deny)について書くのでヨロシクね、というお願い。
Order allow,deny
# ?<基本的に全てのアクセスを許可(allow)する。いらっしゃいませ。
allow from all
# ?<こっからは拒否(deny)。うちのサイトへの訪問を許可しないのでサーバーで弾いてね。
# ?<拒否する国ドメイン ↓
deny from .ru
deny from .cn
deny from .kr
deny from .ro
deny from .hr
deny from .il

# ?←この行は分かりやすいように説明コメントを入れただけなので、実際の.htaccessファイルには記述しないようにしてくださいね。
英数字や一部記号以外を記述するとエラーが起きます。
また、半角スペース(空白)や半角ピリオド(.)の部分を全角にしないようにご注意ください。

上から順に ru(ロシア)、cn(中国)、kr(韓国)、ro(ルーマニア)、hr(クロアチア)、il(イスラエル)となっています。
ただ、これでブロックをかけると国内のネットワークとも被る可能性がなきにしもあらず。
例えば『.ro』(ルーマニア)をブロックしたことで『.rokko』(六甲のケーブルネットワーク。実際にこのドメインがあるかどうか知らないので一例としてですが)も巻き込まれてブロックされる、といったことがあるかもしれませんので、この大雑把なブロックをかける時はくれぐれも慎重に。
可能であれば一つブロックしたらしばらく様子を見て、ブロックで入れていない中に国内IPも巻き込まれているようであればブロックの解除などを検討ください。

しかしどうもログを詳しく確認すると、これを掻い潜ってうちのWordPress管理画面に不正アクセスしようとしているIPアドレスがいるようなので、念には念を入れ、IPアドレスでも国を丸ごと拒否してみました。

国ごとのIPアドレスでブロックする場合

国や企業には、それぞれのいわば持ち分のようにIPアドレスが被らないように割り振られています。
そのため、その国に割り振られているIPアドレスを調べて、その範囲でまとめてIPアドレスでブロックすることもできます。

まずCreate ACLにアクセス。
①拒否したいIPアドレス所属国にチェックを入れ、
②【 Apache .htaccess Deny 】にチェックを入れて
③【 Create ACL 】ボタンをクリック。
countryipblocks使い方
該当国に割り振られているIPアドレスの一覧が画面右側に表示されるので、これを.htaccessファイルに丸ごとコピペします。
countryipblocks使い方2

# ?<ここからサイトへのアクセスについて書いてるよ。
# ?<最初に許可(allow)、次に拒否(deny)について書くのでヨロシクね、というお願い。
Order allow,deny
# ?<基本的に全てのアクセスを許可(allow)する。いらっしゃいませ。
allow from all
# ?<以下は拒否(deny)。うちのサイトへの訪問を許可しないのでサーバーで弾いてね。
# ?<ここから先が拒否するIPアドレス ↓
deny from 57.73.224.0/19
# ? …(ずらーっとIPアドレスが並ぶ)…
# ? …(国まるごとなので、かなり数が多くなります)…
deny from 223.255.192.0/19
# ?<ここまでが拒否するIPアドレス ↑

# ?←この行は分かりやすいように説明コメントを入れただけなので、実際の.htaccessファイルには記述しないようにしてくださいね。
英数字や一部記号以外を記述するとエラーが起きます。
また、半角スペース(空白)や半角ピリオド(.)の部分を全角にしないようにご注意ください。

説明コメントを省くとこうなります。

Order allow,deny
allow from all
deny from 57.73.224.0/19
deny from 223.255.192.0/19

タイトルとURLをコピーしました