WordPressのサイトで許可したIPアドレスのみアクセス可能といった、アクセス制限をかける方法について解説しています。
.htaccessを編集する
IPアドレスでアクセス制限をかけるにはWordPressのルートディレクトリにある「.htaccess」というファイルを編集します。
デフォルトの状態
.htaccessはデフォルトでは以下のようになっています。
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /past/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /past/index.php [L]
</IfModule>
# END WordPress
以下でIPアドレスによる制限をかける方法について解説していきます。
現在のIPアドレスの調べ方
初めに、現在自分が使っているネット環境のIPアドレスの調べ方についてです。
CMANのサイトにアクセスするとすぐに現在使用しているIPアドレスがわかります。
特定のアドレスのみ許可する
一般的に公開したくないサイトで、特定のIPアドレスのみをアクセスを許可する場合は「.htaccess」の冒頭に以下のように追記します。
order deny,allow
deny from all
allow from 許可するIPアドレス1
allow from 許可するIPアドレス2
order deny,allow
一番上の行の「order deny,allow」は「以下にIPアドレスによる制限を拒否(deny)、allow(許可)の順に記述します」という宣言です。
deny from all
二行目の「deny from all」はすべてのアクセスを拒否するという指示です。
allow from IPアドレス
三行目の「allow from IPアドレス」は指定したIPアドレスのアクセスを許可するという指示です。
複数許可したい場合は下に同じ記述をしていきます。
実例
実際の.htaccessは以下のようになります。
order deny,allow
deny from all
allow from 123.45.678.901
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /past/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /past/index.php [L]
</IfModule>
# END WordPress
試しに指定したIPアドレス以外の通信環境を使ってアクセスすると403エラーが表示されます。もちろん、指定したIPアドレスはきちんとアクセスできます。
特定のアドレスのみアクセス不可にする
特定のIPアドレスのみアクセスを拒否したい場合は以下のように記述します。
order allow,deny
allow from all
deny from 拒否するIPアドレス1
deny from 拒否するIPアドレス2
order allow,deny
一番上の行の「order deny,allow」は「以下にIPアドレスによる制限をallow(許可)、拒否(deny)の順に記述します」という宣言です。
allow from all
二行目の「allow from all」はすべてのアクセスを許可するという指示です。
deny from IPアドレス
三行目の「deny from IPアドレス」は指定したIPアドレスのアクセスを拒否するという指示です。
複数許可したい場合は下に同じ記述をしていきます。
実例
実際の.htaccessは以下のようになります。
order allow,deny
allow from all
deny from 123.45.678.901
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /past/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /past/index.php [L]
</IfModule>
# END WordPress
これで、指定したIPアドレスの通信環境を使って対象のサイトにアクセスしようとすると403エラーが表示されます。
特定の国からのアクセスを拒否する
.htaccessのアクセス制限では、特定の国からのアクセスも拒否することができます。
国ごとにアクセスを拒否(または許可)する記述する場合はIP2LOCATIONのサイトが便利です。
これで対象の国のIPアドレスの一覧を指定した指示で得ることができます。
# -------------------------------------------------------
# Free IP2Location Firewall List by Country
# Source: https://www.ip2location.com/free/visitor-blocker
# Last Generated: 10 May 2024 06:16:40 GMT
# [Important] Please update this list every month
# -------------------------------------------------------
<Limit GET HEAD POST>
order allow,deny
allow from all
deny from 8.29.109.122/32
deny from 41.63.160.0/19
deny from 41.70.128.0/17
deny from 41.74.240.0/20
deny from 41.78.16.0/22
deny from 41.194.72.0/24
deny from 41.205.32.0/19
deny from 41.210.192.0/18
deny from 41.216.236.0/22
deny from 41.218.108.0/24
deny from 41.218.112.168/30
deny from 41.218.117.56/30
deny from 41.218.124.0/23
deny from 41.218.126.0/24
deny from 41.221.240.0/20
deny from 41.222.200.0/22
deny from 41.222.236.0/22
deny from 41.222.248.0/21
deny from 41.223.40.0/22
特定のファイルへのアクセスを拒否する
.htaccessのIPアドレスによるアクセス制限では、特定のファイルへのアクセスを拒否(または許可)することもできます。
<Files ~ "^ファイル名$">
Deny from all
</Files>
Files ~ “^ファイル名$”
.htaccessにおけるFilesの表記は、ApacheのFilesディレクティブです。
<Files ~ "^ファイル名$">
</Files>
これで、サーバー上のファイルを指定することができます。
Filesの後ろのダブルクオテーションの中は正規表現になっています。
"^ファイル名$"
は、「^」キャレットと「$」でファイル名が完全一致する指示です。
複数ファイルを指定する
Filesディレクティブで複数ファイルを指定するときは正規表現でパイプを使います。
“^(ファイル名1|ファイル名2)$”>
Deny from all
「Deny from all」はすべてのアクセスを拒否するという意味です。
実例
実際の.htaccessは以下のようになります。
<Files ~ "^(access.html|index.html)$">
Deny from all
</Files>
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /past/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /past/index.php [L]
</IfModule>
# END WordPress