実はWebサーバーでわざわざ設定しなくてもIP制限を書けるためのプラグインも存在します。
最後に軽く紹介しますが、個人的にはセキュリティ系はアプリより下層のレイヤで制御できるならそちらでしたほうがよいと思うのでウェブサーバー側での制御をお勧めします。
Nginx (リバースプロキシ) – Nginx (Web サーバ)で構成している場合ですが、どちらのNginxで制限することも可能ですが、まずは、リバースプロキシに設定を追加します。
こちらで紹介したの設定ファイルに実際に追加したものを下に。 追加した箇所は72行目から79行目までです。
# ドキュメントルート
root /var/www/html/wordpress;
# インデックスファイル指定
index index.php index.html index.htm;
# キャッシュしたファイルが保管されるパスと、キャッシュゾーンの名前、容量を指定
# キャッシュ保管場所 /var/cache/nginx
# キャッシュを保存するサブディレクトリ階層の深さ 1:2
# キャッシュゾーン czone メモリの割当量 32m
# ゾーン内に保存できるキャッシュ最大値 256m
# アクセスの無いキャッシュを削除するまでの期間 1440m
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=czone:32m max_size=256m inactive=1440m;
# 利用するキャッシュゾーンの名前を指定
proxy_cache czone;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# ステータスコードが通常応答の「200」と、ファイルが存在しない「404」の場合30分間キャッシュを保持
proxy_cache_valid 200 404 30m;
# プロキシサーバ設定
server {
listen 80 default_server;
# ドットファイルへのアクセスを禁止、ログへの記録オフ
location ~ /\. {deny all; access_log off; log_not_found off; }
# robots.txt へのアクセスはログへの記録オフ
location = /robots.txt { access_log off; log_not_found off; }
# favicon へのアクセスはログへの記録オフ
location = /favicon.ico { access_log off; log_not_found off; }
# JavaScript CSS 画像へのアクセスはログへの記録オフ、直ちにプロキシに通しキャッシュ。
# この期の設定でアクセス元の状態で複数キャッシュを行うが画像ファイルなどは複数キャッシュさせない
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
log_not_found off;
proxy_pass http://unix:/var/run/nginx.sock;
expires 7d;
}
# プロキシキャッシュ設定
# 初期値はキャッシュするにセット
set $do_not_cache 0;
# .php ファイルへ直接アクセスがあるのは基本的に管理ページのみのためキャッシュしない
if ($uri ~* "\.php$") {
set $do_not_cache 1;
}
# POST 時はキャッシュしない
if ($request_method = POST) {
set $do_not_cache 1;
}
# $proxy_cache_key に任意の文字を加えることで別のキーでページをキャッシュ可能にする
set $proxy_cache_key "$scheme://$host$request_uri";
# ログイン状態またはコメントを記入したことがあれば、その情報ごとにキャッシュを分ける
if ($http_cookie ~ "(wordpress_logged_in_|comment_author_)(.*)") {
set $proxy_cache_key "$2::$proxy_cache_key";
}
# 今まで組み立てたプロキシ設定でキャッシュを実行
location / {
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache_key $proxy_cache_key;
proxy_pass http://unix:/var/run/nginx.sock;
}
#IP制限を追加
location = /wp-login.php {
allow xxx.xxx.xxx.xxx;
allow xxx.xxx.xxx.yyy;
deny all;
proxy_pass http://unix:/var/run/nginx.sock;
}
}
# ウェブサーバ設定
server {
# ポートを指定
#listen 80;
listen unix:/var/run/nginx.sock;
# WordPress カスタム パーマネントリンク対応
try_files $uri $uri/ /index.php?q=$uri&$args;
# PHP-FPM 設定
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass_header "X-Accel-Redirect";
fastcgi_pass_header "X-Accel-Buffering";
fastcgi_pass_header "X-Accel-Charset";
fastcgi_pass_header "X-Accel-Expires";
fastcgi_pass_header "X-Accel-Limit-Rate";
fastcgi_read_timeout 1200;
}
}
次はリバプロ側ではなく、Webサーバー側に設定します。
ちなみにですが、使ったことは無いのですが、特定のIPアドレスから何度もログインしようとした場合に、そのIPアドレスを一定時間ブロックするWordPressのプラグインも存在します。
Limit Login Attempts
管理者側に固定IPアドレスがなくて制限をかけられない場合は、このようなプラグインを使うのもひとつの手かもしれません。
0 件のコメント:
コメントを投稿