自分(自社)のWebサイトを持っていて、外部に公開している場合、そのサイトの管理画面へのアクセスは「自分」のみ許可し、外部からのアクセスは遮断しなければなりません。
一般的に遮断する方法としては、ログイン画面を用意し、「ユーザー名」と「パスワード」での認証方式が一般的ですが、昨今「ブルートフォースアタック」や、不正にアカウント情報を得ることによる、「不正ログイン」が多発しています。
なので、そもそも「ログイン画面」に外部からは一切アクセスさせないようにする必要があります。
そこで、「.htaccess」を利用して、自分のPC(グローバルIP)のみアクセスを許可し、その他のマシンへはアクセス制限をする設定をしました。
・・・が
” 昨日は、(自分のPCから)アクセスできていたのに、今日はなぜかアクセスができない、、、”
原因を調べてみたら、「プロバイダによって、自分のPCのグローバルIPが一定間隔で変更されていたからです」
※グローバルIPについては、こちら→【グローバルIPアドレス】と【プライベート(ローカル)IPアドレス】の違いと、確認方法についてまとめてみた
対策としては、以下3点になります。
- 自分のPCのグローバルIPを固定化する
- PCを立ち上げる度に、毎回「.htaccess」でアクセス許可しているIP情報を変更する
- 利用しているプロバイダの提供しているIPすべてをアクセス許可する(.htaccessに、サブネットマスク表記でIPを設定してやる)
※こちらに関しては、同じプロバイダの利用ユーザーはアクセス可能になります。
そこで、今回の記事では上記3つの対策手順を順に解説していきます。
自分のPCのグローバルIPを固定化する
自分のPCのグローバルIPを固定化することで、そのIPのみ「.htaccess」にて、アクセス許可してあげれば「自分のPC以外の全てのPC(IP)」をアクセス制限することができます。
通常、グローバルIPはプロバイダから割り当てられる際に、都度変更されているので、「IPを固定化するオプション」としてプロバイダと別途契約(有料)する必要があります。
「固定IP」をサービス提供しているプロバイダの中で、オススメなプロバイダを下記にまとめていますので、参考にしてください。
・「固定IPアドレスをサービス提供している主要各社(OCN等のプロバイダ)を比較してみた」
また、現状のプロバイダを変更せずに「固定IP」を利用したい場合 or 外出先からでも「固定IP」を利用したい場合の対策については下記で解説しています。
・「いつでもどこでも(利用プロバイダ関係なく)、固定化したグローバルIPを利用する手順まとめ」
PCを立ち上げる度に、毎回「.htaccess」でアクセス許可しているIP情報を変更する
アクセス制限は、「.htaccess」に設定した情報をもとにおこなっているので、「.htaccess」に設定している「アクセス許可対象のグローバルIP」を、PCを立ち上げる度に変更してあげれば “OK!” です。
ですが、この方法は非常に手間が掛かるので、推奨はしません。
利用しているプロバイダの提供しているIPすべてをアクセス許可する
通常「グローバルIP」は、プロバイダによってPCを立ち上げる度に、切り替わっています。
この時、指定される「グローバルIP」は、プロバイダが管理している「数万~数千万」のIPの中から選択されます。
なので、プロバイダが管理してるIPすべてをアクセス許可することで、上記案のように、わざわざ起動するごとに「アクセス許可対象のIP」を変更する手間がなくなります。
一点デメリットとしては、同じプロバイダを利用してるユーザーからはアクセスが可能になってしまう点です。
ですが、これで海外からのアクセスも防げますし、「同じプロバイダ」という特定されたユーザーのみアクセス許可することになるので、かなりセキュリティレベルは高くなります。
ちなみに、当ブログではこの方法で「アクセス制限」をしてあります。
方法としては・・・「.htaccess」に、プロバイダの管理しているIPすべてを、サブネットマスク表記で設定してやります。
では、以下手順になりますので、順に解説していきます。
- 自分のPCのグローバルIPを確認する
- 「確認したグローバルIP」を管理しているプロバイダの「ネットワークセグメント(管理範囲内のIP)」を確認する
- 「プロバイダの管理範囲内のIP」を、サブネットマスク表記(CIDR)で表記してみる
- サブネットマスク表記(CIDR)のIPを、「.htaccess」に設定する
【自分のPCのグローバルIPを確認する】
下記にアクセスすることで、今利用してるPCのグローバルIPを確認することができます。
確認したグローバルIPを管理しているプロバイダの「ネットワークセグメント(管理範囲内のIP)」を確認する
上記で、自分のPCの「グローバルIP」を確認することで、確認したグローバルIPを管理しているプロバイダの「ネットワークセグメント(管理範囲内のIP)」を確認することができます。
確認手順としては、以下サイト「aguse」にアクセスします。
※aguse:世界中にあるサーバーの様々な情報を確認できます(プロバイダの情報も)
下図のような画面が表示されたら、先ほど確認した「グローバルIP」を入力して「調べる」ボタンをクリックしてください。
すると、入力した「グローバルIP」に紐づく、様々な情報が表示されます(下図参考)
そして、画面を下の方へスクロールしていくと、「ネットワークセグメント」という項目が見当たります(下図参考)
こちらが、プロバイダが管理している「ネットワークセグメント(管理範囲内のIP)」になります。
上図だと、「126.0.0.0~126.255.255.255」までのグローバルIP(総数:16,777,216)を、一括して管理している。ということになります。
なので、今回の例だと、「126.0.0.0~126.255.255.255」までのグローバルIP(総数:16,777,216)を『アクセス許可』してやる事になります。
プロバイダの管理範囲内のIPを、サブネットマスク表記(CIDR)で表記してみる
上述で、プロバイダの管理しているIPは、「126.0.0.0~126.255.255.255」(総数:16,777,216)と非常に膨大な数になります。
これを一つ一つ
126.0.0.1 アクセス許可
126.0.0.2 アクセス許可
126.0.0.3 アクセス許可
126.0.0.4 アクセス許可
・
・
・
なんて、設定していたら何時になっても終わりません、、、
そこで、「126.0.0.0~126.255.255.255」を、一括(一行)で表すことができるのが、「サブネットマスク表記(CIDR)」になります。
アクセス制限する際の設定ファイル「.htaccess」には、「サブネットマスク表記(CIDR)」で記述できるので、こちらで記述していきます。
では、どのように表記するのか・・・今回の例である「126.0.0.0~126.255.255.255」を、「サブネットマスク表記(CIDR)」で表すと、
と表記できます。
重要なのが、赤文字で記した部分(上記)です。イメージしやすいように、下記にあと三つ例を出してみましょう。
「126.200.0.0~126.200.255.255」 → (CIDR表記)126 . 200 . 0 . 0 / 16
「126.200.50.0~126.200.50.255」 → (CIDR表記)126 . 200 . 50 . 0 / 24
「126.200.50.255~126.200.50.255」 → (CIDR表記)126 . 200 . 50 . 255 / 32
なんとなく、イメージできますかね?
例のとおり、赤文字部分(上記の右端)が増えていけばいくほど、IPの範囲は狭まっていきます。
「32」が上限値となっており、「32」である場合、対象のIPは一つのみとなります(上記であれば「126.200.50.255」)
ここで少し、IPの構成の話になりますが、IP(IPv4)は、32ビットで表されます(下図参考)
上述している「サブネットマスク表記(CIDR)」の赤文字部分の上限値が「32」となるのは、このためで、これは「32ビット」という意味になります。
では、なにが「32ビット」なのか・・・この「32ビット」とは、ネットワークセグメントを指します。
IPは、32ビットで構成され、構成情報として「ネットワークセグメント」と「ホストセグメント」があります。
以下、イメージ図です。
上図のように「サブネットマスク表記(CIDR)」の「/(スラッシュ)」以降の値が高ければ高いほど、ネットワークセグメントが広くなります。
また、ホストセグメントのホストとは「PC」の事です。なので、ホストセグメントの値が高ければ高いほど、同ネットワーク上に配置できるPCの上限数が増えます。
また、下記リンク先には「サブネットマスク表記(CIDR)」の「早見表」が分かりやすくまとめられています。
以上です。上述している内容を参考にして、「サブネットマスク表記(CIDR)」で記してみてください。
サブネットマスク表記(CIDR)のIPを、「.htaccess」に設定する
最後に、上記で設定した「サブネットマスク表記(CIDR)のIP」を、.htaccessに設定していきます。
まずは、「.htaccess」ファイルを、アクセス制限したいファイルがあるディレクトリ内に設置してください。
また、ディレクトリ内のファイル全てをアクセス制限したい場合も、そのディレクトリ内に設置してください。
「.htaccess」ファイルの中身は、下記のように記述してやります。
【任意のファイルをアクセス制限したい場合】
order deny,allow
deny from all
allow from 126.0.0.0/8
</files>
上記で、「wp-login.php」の部分にアクセス制限したいファイルを記述してください。
また、「allow from」のあとに、「サブネットマスク表記(CIDR)のIP」を記述してやります。
【ディレクトリ内の全ファイルをアクセス制限したい場合】
deny from all
allow from 126.0.0.0/8
以上で、「.htaccess」の設定は完了です。
これで、プロバイダの管理しているIPすべてをアクセス制限することができます。
まとめ
今回の記事では、プロバイダによって「グローバルIP」が一定間隔で変化してしまう場合の対処法を3つにわけて解説してきました。
最初に述べてる通り、目的は「外部に公開しているサイトの管理画面へのアクセスを「自分」のみに限定し、それ以外は全て遮断する事」です。
これにより、「ブルートフォースアタック」や、不正にアカウント情報を得ることによる「不正ログイン」を防ぐことができます。
ですが、サイト(ブログ)の管理者であれば、まだまだセキュリティ的に対策をおこなっておかなければなりません。
下記は、サイト(ブログ)の管理者がやっておくべきセキュリティ対策をまとめているので、ぜひ確認しておいてください。