WordPressの環境構築として、ローカル構築、AWS構築、セキュリティー対策までの手順を章立てて紹介しています。
- WordPress環境をローカルにdockerを使って構築する
- AWSにWordPress環境を構築!EC2にApache、RDSにMySQL使う
- お名前.comでドメインを取得してAWSでSSL化(https)の対応をする
- AWS環境のWordPressサイトヘルスステータス「1つ以上の必須モジュールが存在しません。」「バックルラウンドの更新が想定通りに動作していません。」の解消方法【Apache】
- AWSでWordPress構築をしたらやるべきセキュリティ対策【Apache】
ご自身の環境に合わせてよしなに参照してください。
基本的にはWordPress公式が展開しているWordPressの安全性を高めるに従い対応する。
無料でできるWordPressの脆弱性無料診断のサイトもあるので、うまく活用してセキュリティー強度を高めていく。
- WordPress、プラグインは常に最新を保つ
- 推測されるパスワードは避けて自動生成されたランダムなパスワードを設定する
- wp-config.php, .htaccessのパーミッションを適切に設定する
- デフォルトの管理者ユーザ「admin」は削除する
- Apache、およびPHPのバージョンを隠蔽
- 管理画面ログインページにアクセスできるIPを制御する
- 管理画面ログインページにBasic認証を入れる
- ディレクトリ一覧を表示させない、ディレクトリリスティングを無効化
- デフォルトのテーブルプレフィックス「wp_」は使わない
- wp-login.phpのURLを変更する
- ログインに画像認証を追加する
- xmlrpc.phpを無効にする
WordPress、プラグインは常に最新を保つ
脆弱性問題もあるから常に最新にアップデートする。
推測されるパスワードは避けて自動生成されたランダムなパスワードを設定する
プログラムで攻撃してくるので、passwordとかpassword1とかユーザ名と同じとかとか、
ある程度想定できるパスワードをさけて、しっかりと自動生成されたランダムな8桁以上のパスワードを設定する。
wp-config.php, .htaccessのパーミッションを適切に設定する
ファイルのパーミッションを適切に設定する。
wp-config.phpは、環境情報など重要な情報がはいっているので、所有者しか読み込めないように設定する。
chmod 400 wp-config.php
.htaccessは、読み込み可能、ファイルの所有者のみ変更可能に設定する。
chmod 604 wp-config.php
デフォルトの管理者ユーザ「admin」は削除する
デフォルトの管理者ユーザ「admin」は攻撃の対象となりやすいので、新たに管理者ユーザを作った方がよい。
Apache、およびPHPのバージョンを隠蔽
Apache、およびPHPのバージョンが表示されていると、セキュリティーホールが見つかった時など、このバージョンであればこの攻撃が有効だ!とわかってしまうので、バージョン情報を解らないようにする。
確認方法としては、サイトを表示してデバッグモードでResponse Headersを見ると、「server」「x-powered-by」にバージョン情報が載っている。
各種、設定をすると
serverバージョン情報が非表示に、x-powered-byが非表示になる。
またApacheのデフォルトであるTest Pageにもバージョンが記載されているので、表示しないように設定する。
Apacheバージョンの隠蔽方法
Response Headersのバージョンを非表示にする
/etc/httpd/conf/httpd.confに
ServerSignature Off ServerTokens ProductOnly
を追記する。
Test Pageを表示しないようにする
/etc/httpd/conf.d/welcome.confの
<LocationMatch "^/+$"> Options -Indexes ErrorDocument 403 /.noindex.html </LocationMatch>
をコメントアウトする。
PHPバージョンの隠蔽方法
/etc/php.iniを修正する。
expose_php = On
を
expose_php = Off
に変更する。
php.iniの場所がわからない場合は、
php -i | grep "Loaded Configuration File"
で検索する。
管理画面ログインページにアクセスできるIPを制御する
管理画面ログインページ(wp-login.php)にアクセスできるIP制御をする。
たとえば自宅からしかログインページにアクセスできないようにする場合は、自宅のグローバルIPを許可するように設定する。
現在使用中のグローバルIPを調べる方法は、あなたが現在インターネットに接続しているグローバルIPで調べることができる。※固定IP化してないと変更されるので注意
設定方法としては、.htaccessに
<Files wp-login.php> Order deny,allow Deny from all Allow from xxx.xxx.xxx.xxx # 許可するIPを設定 Allow from xxx.xxx.xxx.xxx # 複数設定することも可能 </Files>
を追記する。
管理画面ログインページにBasic認証を入れる
管理画面のログイン画面にBasic認証をかけて、設定したユーザ、パスワードで認証しないとログイン画面を表示できないようにする。
ユーザ、パスワードの組み合わせは、.htpasswd.phpファイルを作成
vi .htpasswd.php
して、「ユーザ:エンコードされたパスワード」の形式で、1行に認証する1ユーザーを追記する。
ユーザ:エンコードされたパスワードの形式は、こちらのサイトで作成できる。
上記生成例だと、.htpasswdには「hoge:xe2kTSigL35uA」を記述する。
Basic認証の設定方法としては、.htaccessに
AuthType Basic AuthName "Protected Area" AuthUserFile /pass/to/.htpasswd # .htpasswdの配置してあるパスを記載 require valid-user
を追記する。
ディレクトリ一覧を表示させない、ディレクトリリスティングを無効化
https://{ドメイン}/wp-content/uploads/にアクセスすると、ブラウザで画像の一覧が見れてしまう。
他にも、indexファイルがないディレクトリにアクセスすると一覧が表示されてしまうので、表示されないようにする。
設定方法は、.htaccessに
Options -Indexes
を追加する。
これを入れることで、indexファイルがないパスにアクセスすると、
となる。
デフォルトのテーブルプレフィックス「wp_」は使わない
「wp-config.php」で設定している、テーブルプレフィックス(prefix)を変更する。
$table_prefix = ‘wp_hoge_‘;
既に「wp_」で設定していた場合は、
まず、テーブル名を変更する。
ALTER TABLE wp_commentmeta RENAME TO wp_hoge_commentmeta; ALTER TABLE wp_comments RENAME TO wp_hoge_comments; ALTER TABLE wp_links RENAME TO wp_hoge_links; ALTER TABLE wp_options RENAME TO wp_hoge_options; ALTER TABLE wp_postmeta RENAME TO wp_hoge_postmeta; ALTER TABLE wp_posts RENAME TO wp_hoge_posts; ALTER TABLE wp_terms RENAME TO wp_hoge_terms; ALTER TABLE wp_term_relationships RENAME TO wp_hoge_term_relationships; ALTER TABLE wp_term_taxonomy RENAME TO wp_hoge_term_taxonomy; ALTER TABLE wp_usermeta RENAME TO wp_hoge_usermeta; ALTER TABLE wp_users RENAME TO wp_hoge_users;
wp_optionsとwp_usermetaテーブルでLIKE検索してヒットしたものを変更する。
SELECT * FROM `wp_hoge_options` WHERE `option_name` LIKE ‘wp_%’ SELECT * FROM `wp_hoge_usermeta` WHERE `meta_key` LIKE ‘wp_%’
wp-login.phpのURLを変更する
デフォルトのログインページのパスだと、攻撃するページが丸わかりなのでURLを変更する。
方法としては、プラグインの「SiteGuard WP Plugin」を導入する。
通常だと、
https://{ドメイン}/wp-login.php
になるが、SiteGuard WP
Pluginを導入すると、
https://{ドメイン}/任意の値(英数字、ハイフン、アンダーバー)
でURLを変更できる。
# ログインURLの例 https://{ドメイン}/login_86483
ログインに画像認証を追加する
プログラムによるなりすましでログイン攻撃をしてくるので、ログイン時にプログラムには判定できない画像認証を入れることで、攻撃対策をする。
方法としては、プラグインの「SiteGuard WP Plugin」を導入すれば、デフォルトで日本語の画像認証が入る。
設定で英語に変えたりもできるので、お好みで設定。
xmlrpc.phpを無効にする
XML-RPCピングバック、XML-RPCを利用したブルートフォースアタックの対策として、xmlrpc.phpを無効にする。
方法としては、プラグインの「SiteGuard WP Plugin」を導入して、管理画面サイドバーの「XMLRPC防御」で、「XMLRPC無効化」をチェックし保存。
機能説明にもありますが、XMLRPCを使用したプラグイン、アプリの使用ができなくなるので、注意して設定すること。
コメント