セキュリティについて #2

さて、前回海外からのアクセス拒否設定を行って疲労困憊だがまだセキュリティでやっておくべき事があるようだ。

WordPressのセキュリティ対策でしておくべき11の項目

大体どこのサイトも同じような事を対策しておくべきと言っているので見ながらやってみる。

・テーマやプラグインは、Wordpress公式のものを利用する

・WordPress本体やテーマ・プラグインは、最新版にしておく

・WordPressのバージョン情報について

・「wp-config.php」を、アクセス不可に設定する

・データベーステーブルのプレフィックスを、デフォルト値から変更する

・「Akismet」プラグインを利用して、スパムコメント対策をする

・ブルートフォースアタック(総当たり攻撃)への4つの対策

・Web独自の攻撃手法(SQLインジェクションやクロスサイトスクリプト等)に対して、対策しておく

・WordPressの管理画面とログイン画面をSSL通信に設定する

・WordPressのセキュリティ関連プラグインについて

・バックアップをとっておく

参照元:WordPressのセキュリティ対策でしておくべき11の項目

 

テーマやプラグインは、Wordpress公式のものを利用する

これはまあ大丈夫だろう。

WordPress本体やテーマ・プラグインは、最新版にしておく

これも前回言っていた事なので大丈夫だろう。

WordPressのバージョン情報について

これは上記サイトにも書いてあるように最新版にしておく事が重要らしい。常に最新版にしておけば問題ないだろう。

「wp-config.php」を、アクセス不可に設定する

wp-config.phpとはデータベースとやらに関係していてすごく大事なものらしい。

前回いじった.htaccessと同じところにあるようなので今回も同じ.htaccessに記述する。

前回と同じように.htaccessを開いて下記を前回記述したプログラムの下に記述する。

<files wp-config.php>
order allow,deny
deny from all
</files>

次にパーミッションとやらを変えるようだ。このパーミッションとやらは数字を変えると誰が読んだり書いたり実行したりってのが決められるらしい。今回はこのパーミッションの数字を400にするらしいがこの400と言うのは自分だけが読めるって設定らしい。書いたり実行したりってのはしなくていいの?と思ったが推奨が400とどこのサイトを調べても書いているので、まあよく解らないし今知る必要性も感じないのであまり気にせず400にしておこうと思った。

mixhostでのパーミッションの変え方は

ファイルマネージャーの右の方にパーミッションってのがある。

 

数値のところを左クリック。

 

こんなんが出てくるので400に書き換える。

 

出来たようだ。

 

とりあえずこれでいいらしいので次へ。

データベーステーブルのプレフィックスを、デフォルト値から変更する

これはデータベーステーブルってモノの頭文字がデフォルトのままだとハッキングが簡単だから危ないですよーって事を言っているようだ。しかしどうやらmixhostではWordPressの自動インストール時にデータベーステーブルのプレフィックスってモノをランダムで設定してくれるようだ。まあつまりこのサイトの手順でWordPressをインストールしてれば、それだけでプレフィックスはすでにデフォルト値から変わっているらしい。

本当に変わっているのか確認したければ

wp-config.phpを右クリックしてViewかEditで開く。

 

「table_prefix = 〇〇」ってのがどっかにあるから、そこの〇〇の部分を見ておく。

mixhostにログインしてcpanelのデータベースの上記赤枠部をクリック。

 

次画面でデータベースってとこを選択するとデータベーステーブルとやらが出てくる。それっぽいテーブルをクリックして見てみると

 

テーブルの頭文字が「wp-」じゃなく上で確認した「table_prefix = 〇〇」の○○の部分と同じだったらOK、だと思う。

「Akismet」プラグインを利用して、スパムコメント対策をする

これは要するに変なコメントと普通のコメントを自動で分けてくれる機能を使いましょうって事だな。WordPressのセキュリティ対策でしておくべき11の項目に解りやすく書いているのでその通りにやってみる。

設定は完了したがまだスパムどころかコメントが全くないのでうまくいってるか確認が出来ない。とりあえず次へ進む事にする。

ブルートフォースアタック(総当たり攻撃)への4つの対策

ブルートフォースアタックってのは、たとえばダイヤル式の南京錠があって4桁なら0~9999の数値のどれかがロック解除番号になるが0~9999を順番に試していけばそのうちロック解除されてしまう、これと同じ事を手動じゃなくソフトを使って高速で行うハッキング方法らしい。原始的だが地道な分、結構確実性が高いらしく乗っ取られる事例もあるらしい。

これの対策として

・デフォルトユーザーの「admin」は削除しておく

・ログインページと管理ページへのアクセス制限をしておく

・アクセスログを取る

・『二段階認証』と『ワンタイムパスワード』・『画像認証』を取り入れる

とあるのでそれを試していく。

・デフォルトユーザーの「admin」は削除しておく

これはおそらくWordPressインストール~ログインまでで決めた「Admin Username」、つまりログイン時のユーザー名になってると思うがadminのままの場合はWordPressのadminユーザーを変更(削除)する方法。乗っ取られる前にセキュリティ強化!を参考にして変更する。

・ログインページと管理ページへのアクセス制限をしておく

これは決まったIPアドレス以外ログイン出来ないようにするって事だな。これも.htaccessにアクセス制限の文を記述するらしい。これをやるなら海外アクセス制限をやらなくてもこっちでアクセス制限出来たんじゃないかと思うが、まあ何事も経験と思ってこの設定もやってみる。

まずIPアドレスだがこれは【グローバルIPアドレス】と【プライベートIPアドレス】の2種類があるらしい。

多分IPアドレスと聞くと【192.168.〇.□】みたいのを思い浮かべる人が多いんじゃないだろうか?これはプライベートIPアドレスって方で今回制限するのはグローバルIPアドレスの方らしい。

IPアドレスについては下記のサイトが解りやすかった。

【グローバルIPアドレス】と【プライベート(ローカル)IPアドレス】の違いと、確認方法についてまとめてみた

まあつまり今回の制限はパソコン→ルータ間で使用してるプライベートIPアドレスじゃなくルータ→インターネット間で使用しているグローバルIPアドレスを自分が使うアドレス以外は制限しますよーって事だな。

ただこのグローバルIPアドレスってのは基本的には一定感覚で変更されているらしい。つまり今日使用しているグローバルIPアドレスだけログイン画面にアクセス出来るように設定したとしても明日はグローバルIPアドレスが変わってるから明日はログイン画面にアクセス出来ないって事になるらしい。

じゃあどーやってグローバルIPアドレスを調べるのかは下記のサイトが解りやすい。

自分のPCのみアクセス許可したいが、プロバイダによってグローバルIPが一定間隔で変化してしまう場合の対処法

方法としては

・自分のPCのグローバルIPを固定化する

・PCを立ち上げる度に、毎回「.htaccess」でアクセス許可しているIP情報を変更する

・利用しているプロバイダの提供しているIPすべてをアクセス許可する(.htaccessに、サブネットマスク表記でIPを設定してやる)

※こちらに関しては、同じプロバイダの利用ユーザーはアクセス可能になります。

の3つがあるらしい。

・自分のPCのグローバルIPを固定化する

これはそのまんまでグローバルIPを固定して、その固定したIPだけをログイン画面や管理画面にアクセス出来るように設定する方法だ。

しかしIPの固定化は有料らしいので今回はとりあえず見送ろうと思う。

・PCを立ち上げる度に、毎回「.htaccess」でアクセス許可しているIP情報を変更する

これはログイン画面や管理画面にアクセスする時に、その時の自分のグローバルIPアドレスを都度調べて、その調べたIPアドレスだけアクセス出来るように毎回設定し直すって方法らしい。

言ってる事は解るが・・・めんどくさい、却下。

・利用しているプロバイダの提供しているIPすべてをアクセス許可する(.htaccessに、サブネットマスク表記でIPを設定してやる)

これはグローバルIPアドレスってのはプロバイダが提供しているらしく、自分が利用してるプロバイダが提供出来るIPアドレス全集の中から毎回ランダムに一つ自分に振り分けられる、と言う仕組みなのだが、じゃあその自分が利用してるプロバイダが提供出来るIPアドレス全部許可しておけばどれを自分に振り分けられてもアクセス出来るよね、って事らしい。ただIPアドレスは膨大な数があるから一つ一つアドレスを入力してたらとんでもない時間がかかってしまうからサブネットマスクってのを使って楽に設定しましょうって事のようだ。

メリットはまあ当然別途お金がかかる訳では無いって事と毎回設定し直す必要が無いって事だが

デメリットとしては自分が利用してるプロバイダが提供してるIPアドレスは全部許可する訳だから、他の人が同じプロバイダを利用していたらその人にも当然自分と同じプロバイダのIPアドレスが振り分けられているので自分のサイトのログイン画面や管理画面にアクセスしようと思えば可能って事だ。

まあ一つのプロバイダだけに絞れる訳だし大分セキュリティは上がるかと思うのでこれで行こうと思う。ちなみにこれを設定すれば当然海外のプロバイダもアクセス制限がかかるので海外からのアクセスも拒否出来るって事になるらしい。

手順は上記のサイトにも書いてあるが

1.今現在の自分のグローバルIPアドレスを調べる。
2.それを元に自分が利用してるプロバイダが提供出来るグローバルIPアドレスはどれくらいあるのか調べる。
3.調べたグローバルIPアドレス全部をサブネットマスクとやらでまとめて、それだけを許可するよう.htaccessに記述する。

って流れのようだ。

上記サイト内に書いてあるやり方が解りやすいので参考にしてやってみる。

サブネットマスクだけちょっと説明すると

上記サイト内に書いてあるネットワークセグメントが【開始アドレス126.100.50.0~終了アドレス126.100.81.255】だったとするとこれの範囲は【0.0.31.255】になる(終了アドレス【126.100.81.255】-開始アドレス【126.100.50.0】=範囲【0.0.31.255】になる)

範囲の値を覚えておいて【CIDR表】を見てみる。【CIDR表】の中の終了アドレスと開始アドレスを同じように【終了アドレス-開始アドレス】で計算してみると【69.208.0.0/19】のところの範囲が【0.0.31.255】になる。

つまりサブネットマスクは/19で【0.0.31.255】の範囲が含まれるって事で、【126.100.50.0~126.100.81.255】の範囲も【0.0.31.255】なので、開始アドレスの【126.100.50.0】から【0.0.31.255】進んだ【126.100.81.255】までを指定しますよーって時は、開始アドレスの【126.100.50.0】に/19を書き足して【126.100.50.0/19】と書けば、【126.100.50.0~126.100.81.255】の範囲を指定したって事になるっぽい。

って事で上記サイト通りに設定してみる。

まず wp-login.phpにアクセス制限をかける。wp-login.phpは今まで何度かいじった.htaccessと同じところにあるので、今までと同じ.htaccessに記述する。

<files wp-login.php>
order deny,allow
deny from all

allow from 126.0.0.0/8
</files>

一番上の行の<files wp-login.php>は<files 〇〇>で〇〇ってファイルを指定しますよーって事らしい。

allow from 126.0.0.0/8はアクセス許可したい範囲をサブネットマスク表記で指定するようだ。

 

管理ページのアクセス制限はファイルマネージャーのwp-adminってフォルダ内全部に制限をかけるって事らしい。

wp-admin直下には.htaccessが無いようなので.htaccessを作ってそこに記述する。

wp-adminを開いて

 

左上にある+ファイルってのをクリック

 

新しいファイルってのが出てくるから新しいファイル名のところに.htaccessって書いて右下の「Create New File」をクリック。

 

.htaccessが出来るのでそこにいつものように書き込む。

 

下記のallow from 126.0.0.0/8の126.0.0.0/8をアクセス許可したい範囲に変えて記述。

記述したら保存。

order deny,allow
deny from all

allow from 126.0.0.0/8

これでOKらしい。

・アクセスログを取る

ログイン画面へのアクセスログをとっておく事で、”どのIPから・どこの国から・どのユーザー名で・・・”といった情報を確認することができます。

これにより、下記のような対策を行うことができます。

  • 「111.222.333.444」からのアクセスが頻繁にあるため、このIPを制限する
  • 海外からの不正アクセスがほとんどなので、海外のIPをアクセス制限する
  • 「admin」というユーザー名で、頻繁にログイン試行がされているので、ユーザー名を変更する

との事だ。

Crazy Boneってプラグインを紹介しているが前回導入したプラグインのSiteGuard WP Pluginでもログイン履歴が見れるのでそれでいいかなと思った。

ログイン履歴の確認の仕方は

SiteGuard WP Pluginを入れていれば管理画面の左側にSiteGuardってのがあると思う。そこにカーソルを合わせるとログイン履歴ってのが出てくるはず。それをクリック。

これでログイン履歴が確認出来るはず。不正アクセスされた履歴も残るらしいので確認するようにしよう。

 

・『二段階認証』と『ワンタイムパスワード』・『画像認証』を取り入れる

このうち『画像認証』は同じくSiteGuard WP Pluginで設定しているので問題ない。

『二段階認証』と『ワンタイムパスワード』に関しては同時に満たしてくれる「Google Authenticator」と言うモノがあるようだ。

これはスマホにアプリを入れて、そのアプリで1回だけ使えるパスワードが発行されるので、それを入力してログインするやり方らしい。スマホが手元に無いとログイン出来ないので面倒と言えば面倒なのだがセキュリティ対策としては、かなり良いらしいので設定をしておく。

スマホに「Google認証システム」ってアプリを入れて、WordPressにも「Google Authenticator」プラグインを入れて、スマホにWordPressの方の「Google Authenticator」の情報を登録すれば使えるようになるらしい。

詳しくは下記に書いてある。

【Google Authenticator】で、ワンタイムパスワードをWordPressログイン時に適用する手順

ログイン時に入力する情報が増えるので手間ではあるが1日に何度もログインをする訳ではないので設定も簡単だしセキュリティの為にもやっておいた方が良いかと思う。

Web独自の攻撃手法(SQLインジェクションやクロスサイトスクリプト等)に対して、対策しておく

これは色々な対策があるがその一つとして「WAF(Webアプリケーションファイアウォール)」と言ったモノがあるらしい。WAFはWebサイトの攻撃に特化したファイアウォールらしく有効なのようだ。mixhostにはWAFが採用されているようなのでmixhostを使用しているなら自動的にWAFで対策もされているようだ。

自分で出来る対策もあるようだがとりあえずはこのWAFに頼ろうと思う。もし今後何か攻撃された形跡があったらその時にまた調べて対策してみようと思う。

WordPressの管理画面とログイン画面をSSL通信に設定する

SSLってのはインターネットの通信を暗号化するモノらしい。たとえば何かの情報なんかをネットでやり取りした時、これを他人に見られたら内容が解ってしまうので情報が漏洩するって事になる。それを暗号化しておけば他人に見られても暗号化されているので内容が解らないから安心だよね、って事のようだ。これはmixhostではSSLに対応しているようで【http://】の部分が【https://】となってればSSL通信に設定されているって事らしい。

もし【https://】になっていないならmixhostの場合だが下記サイトにやり方が書いてあるので参考にする。

WordPressのSSL対応方法

WordPressのセキュリティ関連プラグインについて

セキュリティのプラグインは一応SiteGuard WP Pluginを入れているのでそれでいいかと思う。

このプラグインについては、プラグインを増やすとサイトが重くなるし自分で今までやってきたような対策しておけば必要ないとの意見もあるので、導入するしないは個人の意思になるが自分自身で考えるとちゃんと対策を出来ているのかも確信が持てないし念の為に何かしらのセキュリティプラグインは入れておいていいのではないかと思う。

バックアップをとっておく

まあこれは前回も言ったようにmixhostでとってあるはずなのでそれで良しとする。

 

今回の対策もかなり時間がかかってしまったが、前回の海外アクセスの件で色々調べた事もあったので前回ほど時間はかからなかった。とするとまあ多少ずつでも進歩しているのかなと思ったり。しかしまだ全然解らない事も多いのでしばらくは設定や更新がモタつくだろうと思う。みんなこれを当たり前のようにやってるなんてすごいなーと思ったり・・・。