Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから
公開日:2017年1月30日

僕が WordPress のサイトで行っているセキュリティ対策

はじめに

このサイトは、さくら VPS の CentOS 6.x で WordPress を使って構築されています。

一応、Web セキュリティをうたっている訳なので、それなりにセキュリティ対策はしています。

初心者でもできるだけ分かるように、このサイトで行っているセキュリティ対策をご紹介したいと思います。

 

CentOS のセキュリティ対策

CentOS のセキュリティ対策ですが、なにはともあれ CentOS 6 でも 7 でも VPS が使えるようになったのなら、yum -y update と reboot を実行してください。これには、root という管理者権限が必要です。

いいですか? yum -y update ですよ?

その次は reboot です。

これは忘れずに行ってください。でないとサイトの設定をしている間に乗っ取られるという笑えないことが起こります。

yum -y update がなにをするのかというと、OS を含めたすべてのパッケージを最新版に更新します。-y のスイッチはパッケージをアップデートする際に確認メッセージを表示しないというものです。パッケージのアップデート確認メッセージが大量に出てきたら面倒なのでこのスイッチを入れています。

じゃあ、yum -y update を行えば完全かというとそうではなく、このままでは動いているサービスは古いままです。この仕組もどうなのかと思いますが、reboot で再起動することでパッケージの最新版が動作するようになります。

次に行うのが root ユーザーのパスワードを強いものに変更することです。デフォルトのパスワードは覚えにくいでしょうから、英数大文字小文字記号3種類以上の組み合わせで 6文字以上のパスワードを設定しましょう。

以下の記事も参考にしてください。

次は、CentOS 6.x なら iptables, CentOS 7.x なら firewalld の設定を行います。この設定がなにかというと、いわゆる OS のファイアウォール機能を有効にするということです。そうすれば、サーバーの管理者が許可したサービス以外は外からアクセスすることができなくなります。

他にも root ユーザーが SSH でログインできないようにするとか、公開鍵認証にするとか、ウィルス対策ソフトをインストールするとかいろいろありますが、まずはこの辺でしょう。この対策もできていないサイトはあるでしょうし。

具体的な対策方法などは、以下の記事を参考にしてください。

WordPress のセキュリティ対策

WordPress のセキュリティ対策で重要なのことは、WordPress 本体とプラグインとテーマを常に最新の状態にしておくということです。

プラグインのアップデートにより不具合が生じる可能性がありますが、不具合による利便性の低下よりも、セキュリティ事故によるサイトやコーポレートブランドの信頼性低下を防ぐ「セキュリティファースト」のアプローチが堅実でしょう。

また、WordPress の管理者パスワードも、先程の OS の管理者と同様に強力なパスワードを設定します。

そしてバックアップも重要です。セキュリティ事故が起きたとき、サイトの移転に備えてバックアップをとっておくことは重要です。できるなら1ヶ月位の世代バックアップを取っておいて、サイトが改ざんされた際、改ざんされる前の状態に戻せるのが理想です。

これらの対策を行える WordPress のプラグインを3つご紹介します。

SiteGuard WP Plugin

このプラグインは、管理画面のログイン時やコメントの登録時に画像認証を追加し、不正なログインや投稿を防ぐことができます。

ログイン時に画像認証を行うことで2要素認証になり、攻撃者のログインを防ぐことが可能になります。また、このプラグインの画像認証はひらがななので、海外のボットは手がだせないようです。

コメントでこのプラグインの画像認証を使うとスパムコメントがなくなります。このサイトでも導入していますが、一切のスパムコメントがなくなったので、スパムコメント対策用の Akismet  も不要になりました。

Akismet もすばらしいプラグインなのですが、どうしても誤認識して正しいコメントをスパム判定して削除することがあるのですよね。登録もちょっと手間がかかりますし。

他にもこのプラグインにはよい機能がついていますので、ぜひ導入したいプラグインです。

 

Advanced Automatic Updates

WordPress 本体のアップデートは最近は自動で行ってくれるようになりましたが、プラグインやテーマなどは管理画面にログインしないとアップデートがあるかどうか分かりません。そして手動でアップデートする必要があるのですが非常に面倒です。

このプラグインは、WordPressのプラグインやテーマにアップデートがあった場合、自動的にアップデートしてくれるというナイスなプラグインです。

これでプラグインのために、毎日ログインする必要がなくなりますね。

 

BackWPup

WordPress のバックアップを取ってくれるプラグインです。単にデータベースのバックアップを取るだけでなく、画像ファイルやプラグイン、WordPress のシステム全体をバックアップしてくれるすぐれものです。復旧も簡単です。

また、バックアップ先もローカルだけでなく、Dropbox、Amazon S3、Microsoft Azure、SugarSync などのストレージサービスを選べます。サーバーが完全にダメになっても安心のバックアップです。

 私は Dropbox で世代管理バックアップを行っています。

 

WAF (Web Application FIrewall) の導入

最近は、Web サイトのセキュリティ対策を行っていても、ゼロデイ攻撃というセキュリティパッチが提供される前に攻撃を受けることがあります。

また、大人の事情により脆弱性対策を行えないこともあります。

そんなときにセキュリティ対策として採用されるのが、WAF (Web Applicaiton Firewall) の導入です。

WAF とは Web アプリケーションレベルで脆弱性対策を行うもので、不正なリクエストを検知したらその時点でリクエストを拒絶するものです。誤検知などの問題もありますが、最近は WAF を無料で提供している WordPress のサービスもありますし、ModSecurity といったオープンソースの無償で利用できる WAF もありますので、ぜひ導入したいものですね。

このサイトも ModSecurity を導入しています。

WAF については以下のページでいろいろ紹介していますので、参考にしてみてください。

常時 HTTPS 化の取り組み

Google のサイト評価やブラウザでも、HTTPS 化していないサイトの評価が下がるという風潮が強まっています。

今まではサイトの HTTPS 化には SSL/TLS 証明書を購入する必要があり、安い証明書を購入したい場合は海外サイトで購入する必要があったりと敷居が高かったものです。

ですが、無償で SSL/TLS 証明書を取得できる Lets’s Encrypt というサービが開始されたことで状況は一変しました。誰でも、無償で 利用できるようになりました。

このサイトも Let's Encrypt の SSL/TLS 証明書を利用しています。この証明書の取得方法などは、以下の記事を参考にしてください。

Let's Encrypt により無償で 常時 HTTPS 化に取り組めるようになったのですから、個人でも積極的に対応していくことが望ましいでしょう。但し、既存の WordPress のサイトの常時 HTTPS 化にはコツが必要なので、下記記事を参考にしてみてください。

また、SSL/TLS 証明書を導入して常時 HTTPS 化すれば安全かといえばそういう訳でもありません。HTTPS を行うに辺り必要なセキュリティ設定があるのです。デフォルト設定では脆弱性が存在していますので、下記記事を参考にして対策を行ってください。

 

OS やパッケージを常に最新に保つ

このサイトはサービスレベルを要求されている訳ではないので、毎晩スケジュールによって yum -y update と reboot を行っています。Let’s Encrypt の SSL/TLS 証明書の期限も90日間なので、毎日更新をかけています。

スケジュールの実行は、CentOS の crontab というもので行っています。root ユーザーの crontab を公開しますので、参考にしてみてください。必要以上に reboot や httpd の再起動を行っているのは、パフォーマンスの劣化を防ぐためです。さくら VPS だと、突然パフォーマンスが落ちることがあるのでその対策です。

MAILTO=""

1 1 * * * yum -y update

1 3 * * * reboot

1 4 * * * reboot

1 0 * * * /etc/cron.daily/letsencrypt_renew

1 9 * * * /etc/cron.daily/letsencrypt_renew

1 14 * * * service httpd restart

 ちなみに、root ユーザーの crontab を開くには、root ユーザーでログインして以下のコマンドを実行します。ファイルの編集は Vi と同様です。

crontab -u root -e

 

日々の運用でのセキュリティ対策

日々の運用でのセキュリティ対策で大事なことはログの確認を行い、問題が起きていないか確認することです。非常に重要な対策なのですが、ちょっと手が回っていないのが正直なところです。

また、バックアップが正しく行われているか確認することも大事です。バックアップを取っているつもりが実は取れていなかったなんて有事の際には冗談になりませんので。

 

おわりに

駆け足でしたが、このサイトで行っているセキュリティ対策をご紹介してみましたがいかがだったでしょうか。

セキュリティ対策には終わりはありませんが、まあ妥当なレベルでやっているのではないかと思います。

この記事がみなさんのサイトのセキュリティレベルの向上に役立てば幸いです。

 

 


スポンサーリンク




カテゴリー:ブログ

Twitter でも、いろんな情報を発信しています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA