共有レンタルサーバーで WordPressを使う前にセキュリティ強化を図る
昨今では、Wordpressの人気もあり、共有レンタルサーバーでは、当たり前のようにWordpressの簡単インストール機能があります。
加えて個別のセキュリティアップのためのプラグインなども用意されていて、先の簡単インストールでは、デフォルトでそのセキュリティ対応のプラグインが組み込まれたりします。
しかし、共有レンタルサーバーが提供してくれるWordpressをインストールしていれば安心というわけではありません。
今回は、Wordpressを使う時(公開前(インストールを含む)、公開後)にセキュリティ強化を図るための施策を簡単に解説してみます。
公開前に行っておきたいこと
Wordpressのサイト公開前、つまりインストール時や環境設定時において、気を付けておきたいことを以下に列挙してみます。
- 最新のWordpress および 最新のプラグインへアップグレードを行う。
名にはともあれ、古いWordpressには、セキュリティ面で非常に問題が多いバージョンも存在するのも事実です。
インストール時はもちろんのこと、常に、最新のWordpress および 最新のプラグインへアップグレードすることを心掛けておきましょう。
- 管理ユーザ名は、デフォルトの admin を使わない。
アタックの対象になるユーザは、ほとんどが "admin" です。
"admin"は、Wordpressのデフォルトの管理ユーザ名です。インストール時に、Wordpressの管理のための ユーザ、パスワードを設定すると思います。
その際に、"admin" を使わないようにしましょう。
また、誤って"admin" でインストールされた方は、後ででもデータベースを直接変更することで、ユーザ名を変更することができます。
(管理画面のユーザ管理でユーザ名は変更できません。)
/* 後で変更する場合は、以下のSQLを実行するとadmin → newuserへ変更できます。 */
/* ( wp_users の wp_ は、インストール時に指定したテーブルプレフィックスになります。) */
UPDATE wp_users SET user_login='newuser' WHERE user_login='admin';
|
テーブルプレフィックス名は、Wordpressのインストール先ディレクトリに wp-config.php がありますので、そこで確認できます。
...
$table_prefix = 'wp_';
...
|
上記のように記載されていれば、'wp_' になります。
- パスワードは、数字を含めて最低でも8文字以上とする。
パスワードに数字を含めるだけでもパスワードの強度は上がります。
先のユーザ名 'admin' でアタックを仕掛ける場合、ほとんどが、パスワードをひたすら試すやり方が多いので、
パスワード自体の強度を高めておくことで、クラックされる可能性を低くすることができます。
- テーブルプレフィックスはデフォルトの wp_ を使わない。
これもデフォルトの 'wp_' を使用しないようにしましょう、というものです。
デフォルトの wp_ を使っていると、Wordpressの存在するテーブル名を使って、SQL インジェクション攻撃される可能性があります。
適当な英字を5文字から8文字程度で設定しておくと良いと思います。
- インストールを終えたら install.php を消す(あるいは名前を変更する)。
Wordpressのインストール用phpファイル(install.php)を使ってクラックされる可能性があります。
このファイルは、
Wordpressのインストールディレクトリ/wp-admin/install.php
になります。
このファイルは、Wordpressをインストール時のみ必要です。
インストールを終えたら、削除(あるいは名前を変更)しておきます。
- インストールを終えたら WordPress配下の全てのファイルのパーミッションは管理者以外書き込み禁止とする。
共有レンタルサーバーでWordpressをインストールした場合、ほとんど、
ディレクトリ : 755(rwxr-xr-x)
ファイル : 644(rwxr--r--)
となっていると思います。
一番問題なのは、wp-config.php のパーミッション だと思います。
wp-config.php は、インストール時にWordpressのインストーラが自動で書き込みます。
そのため、インストール時においては、読み書き可としておき、後で変更することが多いと思います。
その際、wp-config.php については、読み込み許可をグループに与えない ( 604(rwx----r-) )ように設定しておきましょう。
(wp-config.php は、Wordpressのインストール先ディレクトリにあります。)
$ chmod 604 wp-config.php
|
さらに、この wp-config.php は、インストールを終えたら、ほとんど修正することがありませんので、
404 に設定しておくと よりセキュア です。
全てのファイルに対してグループを拒否するようにすることがよりセキュアですし、ここでは、間違いなく
おすすめします。
$ chmod 404 wp-config.php
$ find ~/html/wordpress -type d -exec chmod 705 {} \;
$ find ~/html/wordpress -type f -exec chmod 604 {} \;
|
共有レンタルサーバーでは、グループを拒否することで、同じサーバーの同居人(ユーザ)からファイルを覗かれることがなくなります。
公開後に行っておきたいこと
- バックアップは毎日とる。
バックアップを毎日取っておくようにしましょう。
改ざんやハッキングされたのが何時頃なのかも、そのバックアップからわかることもあります。
- mysql のバックアップ スクリプトの例
UPDATE_DATE_FILE=`date '+%Y%m%d'`
PREV_DATE_FILE=`date -d '1 weeks ago' '+%Y%m%d'`
BACKUP_DIR=/var/www/backup
OUTPUTFILE="$BACKUP_DIR"/sql_"$DBNAME"_"$UPDATE_DATE_FILE".sql
PREV_SQLFILE="$BACKUP_DIR"/sql_"$DBNAME"_"$PREV_DATE_FILE".sql.gz
DBNAME=wpdb
DBUSER=hoge
DBPASS=hogehoge987
DBHOST=localhost
MYSQLPATH=/usr/bin
$MYSQLPATH/mysqldump --default-character-set=utf8 --host="$DBHOST" --user="$DBUSER" --password="$DBPASS" "$DBNAME" > "$OUTPUTFILE"
gzip "$OUTPUTFILE"
rm -f "$PREV_SQLFILE"
|
- WordPress のバックアップ スクリプトの例
UPDATE_DATE_FILE=`date '+%Y%m%d'`
PREV_DATE_FILE=`date -d '1 weeks ago' '+%Y%m%d'`
BACKUP_DIR=/var/www/backup
OUTPUTFILE="$BACKUP_DIR"/wp_"$DBNAME"_"$UPDATE_DATE_FILE".tar.gz
PREV_SQLFILE="$BACKUP_DIR"/wp_"$DBNAME"_"$PREV_DATE_FILE".tar.gz
WPDIR=var/www/html/wordpress
tar cfz "$OUTPUTFILE" -C / "$WPDIR"
rm -f "$PREV_SQLFILE"
|
これを共有レンタルサーバーで提供されているCRONで毎日実行すればOKのはずです。
実行する際は、比較的アクセスが少ない時間帯で実行すると良いでしょう。
- 使っていないプラグイン、テーマは削除する。
使っていない あるいは 使わなくなったプラグイン、テーマは、メンテナンスしなくなりがちです。
不用意に古いままのプラグイン、テーマを残しておくと、そこからクラックされることもありえます。
無駄にファイル、ディレクトリが残っているとセキュリティのみならず 動作も遅くなりますので、
いらなくなったプラグイン、テーマは、要らなくなった時点で ディレクトリ毎 削除することをおすすめします。
特にテーマは、デフォルトのテーマを使う場合は、ディレクトリ名を変更しましょう。
また、有名なテーマも同様です。プラグインもディレクトリを変更したいところですが、変更することで動作しなくなることもありますから、変更時は十分なテストが必要でしょう。
- 管理者がログインするIPアドレスがある程度固定なら、IPアドレスでログイン規制する。
ほとんどのログインアタックは、海外からなので、日本国内のIPアドレスのみを有効にするのも良いです。
ただ、それは、IPアドレスのチェックが増えてしまうので、もし、管理者がログインするIPアドレスが限定的なら、その限定されたIPアドレスをチェックする方が効率的でしょう。
テーマの functions.php に以下のように追記することで、ログイン時 IPアドレス をチェックすることができます。
...
add_filter('authenticate', 'my_login_authenticate', 30, 3);
function my_login_authenticate ($user,$username, $password) {
$ip = $_SERVER['REMOTE_ADDR'];
if( !isset($username) || empty($username) ||
(
$ip != '127.0.0.1' &&
$ip != '111.122.133.144' /* ここにあなたのIPアドレスを指定します。もし複数あれば、以下に追記すると良いでしょう。*/
)
) {
return new WP_Error( 'denied', "<strong>ERROR</strong>: ログインが許可されていません。" );
}
return $user;
}
...
|
日本語使う時は、必ず、UTF8で保存しましょうね、エラーになっちゃいますので、忘れないようにしましょう。
どうでしょうか。ほとんどが実行されていることと思います。
もし、対策されていないことがあれば、是非、対応されることをおすすめします。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事
口コミ・評判
口コミ・評判を投稿 :