WordPressのセキュリティを高める.htaccessの設定

.htaccess」ファイルはページやファイルへのアクセスを制御する、Webサーバー用の設定ファイルです。

WordPressでもパーマリンク設定に使われる重要なファイルで、内容も複雑なコマンドで書かれているので初心者の方には取り扱いが難しく感じられそうですが、特定の内容を書き加えるだけでWordPressのセキュリティを向上できるため、WordPressを立ち上げたら最初に実施したい内容を紹介します。

 

WordPressの.htaccessを編集するうえでの注意

WordPressをインストールした直後の.htaccessは以下のようになっています。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^index\.rdf$ /feed/rdf/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# BEGIN WordPressから# END WordPressに挟まれた範囲はWordPressのための設定で、WordPressで設定を変更すると書き換えられるため、よく分からないうちは# BEGIN WordPressより上に書き加えるようにしましょう。

 

.htaccessの保護

.htaccess自体が不正アクセスされては他の設定も無意味になってしまうので.htaccessファイルへのアクセスをすべて拒絶します。

<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>

 

ディレクトリ表示の禁止

ブラウザでディレクトリにアクセスされた時にファイル一覧が見れる状態は攻撃の手がかりになってしまうため、表示されないようにします。

Options -Indexes

 

ログイン管理画面(wp-login.php)のアクセス制限

ログイン画面への攻撃を防ぐため、関係者以外はログイン画面にアクセスできないようにします。
IP制限かベーシック認証を使うパターンがあります。

IP制限

会社で固定IPを持っている場合はIP制限をします。

<Files wp-login.php>
Order deny,allow
Deny from all
Allow from 00.00.00.00
</Files>

Allow fromにはIPを記入してください。

ベーシック認証

固定IPを持っていない、また外部関係者がアクセスする場合はベーシック認証をかけます。

まずベーシック認証用に暗号化されたユーザーIDとパスワードを記した「.htpasswd」ファイルが必要です。 以下のサイトで簡単に作ることができます。

<Files wp-login.php>
AuthName "Please enter your ID and password"
AuthType Basic
AuthUserFile /home/www/***/.htpasswd
Require valid-user
</Files>

AuthUserFileにはアップした.htpasswdのサーバーパスを記入してください。

 

管理者画面(wp-admin)のアクセス制限

wp-adminディレクトリ以下はログインユーザー以外は不要なため、一切のアクセスを禁止します。 wp-adminディレクトリ内に.htaccessを新規作成しアクセス制限をかけます。

Order deny,allow
Deny  from all
Allow from 00.00.00.00

Allow fromにはIPを記入してください。

 

攻撃されやすいファイルのアクセス制限

  • wp-config.php :WordPressの動作に必要な設定ファイル
  • wp-cron.php :予約投稿やアップデート通知など時刻連動の処理に使われるファイル
<FilesMatch "^(wp-config\.php|wp-cron\.php)">
order allow,deny
deny from all
</FilesMatch>
  • xmlrpc.php :特定のホストへpinbackを送るファイル
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^xmlrpc\.php$ "http\:\/\/0\.0\.0\.0\/" [R=301,L]
</IfModule>

xmlrpc.phpへのアクセスは0.0.0.0へリダイレクトして負荷を避けるノウハウが一般化されています。

なおxmlrpc.phpは有名プラグイン「Jetpack」で使われているため、もし使っている場合は以下の対応も検討してください。

参考:WordPressのxmlrpc.phpへのブルートフォースを防ぐ

 

まとめ

.htaccessで制御できるWordPressのセキュリティ対策はおよそ以上となります。定番の形さえ掴んでしまえばあとはほぼコピペで流用できるので、.htaccessの編集に挑戦してみてください。