WebサイトをWordPressで構築してから20日程たちました。
こんなマイナーなサイトでもロボットは巡回してきますし、コメントフォームを公開しているのでSPAM投稿ボットもやってきます。
現在の私が行っているWordPressを使ったWebサイトのセキュリティ対策!?(たぶん最低限)をご紹介します。
サーバサイドの対策
fail2ban を基本として、TCPラッパー(hosts.allow と hosts.deny)と組み合わせます。
ssh の接続についての対策は、このページに詳しく書いてありますので、よければご覧ください。
apache については、新しいフィルターをつくりました。
/etc/fail2ban/filter.d/wp-login.conf
# Fail2Ban configuration file
[Definition]
failregex = ^<HOST> -.*"POST /wp-login.php HTTP.*$
ignoreregex =
jail.conf には下記を追加します。
/etc/fail2ban/jail.conf
[apache-wplogin]
enabled = true
port = http,https
filter = wp-login
logpath = /var/log/apache2/access.log
maxretry = 3
findtime = 600
bantime = 1800
これで10分間に3回以上ログインしようとする試みを見つけると、BAN対象として30分間アクセスできなくなります。
※この設定はログインに失敗した回数をカウントするフィルターではありません。あくまでログインを行う(もしくは行おうとした)回数ですので、必ず管理者(自分)がログインする接続元IPアドレスを jail.conf の ignoreip に設定してください。この設定を忘れると最悪しばらく(30分間)ログインできなくなります。
WordPress側の対策
不正なログイン対策は、Jetpackプロテクトを使っています。このプラグインを使っている世界中のWebサイトでブルートフォース攻撃をしかけてきたIPアドレスを共有するシステムです。他のサイトを攻撃してくる(もちろん自サイトも)相手先をブロックするので、とても有効です。
次に、定番のAkismetは外せません。サイトをオープンして1ヶ月たっていないのに、すでに246個のSPAMコメントをブロックしてくれました。ブロックしたSPAMコメントはSPAMフォルダーに自動的に仕分けされますが、ほっておいても15日後に自動削除してくれるので助かります。同一IPアドレスからしつこく送られてくる場合には、Block Spammers のブラックリストに登録すると、SPAMコメントフォルダーの中身が増えないので、精神衛生上よろしいかと思います。
最後になりますが、国別にアクセスを制限する iQ Block Country がなかなか便利です。しかも、通常アクセスしてきたユーザに見えている(公開されている)画面と管理画面(管理者しか見られない)をそれぞれ別々にアクセス制限をかけることができます。
まずは Home というタグにある全体設定画面です。制限された国からアクセスされた場合に表示する特別な画面を用意している場合には Page to redirect to: という所に、そのページ名を指定します。私がチェックした(有効にした)項目は以下の通りです。
Send headers when user is blocked: Buffer output?: Allow tracking:
GeoIP API Key: については、 https://geoip.webence.nl/ へ行って light プランを契約してきました。
25.000 API requests/month で、€15.00 EUR/年は、リーズナブルだと思います。
このサイトで利用費を支払うと、登録したメールアドレスに API キーが送られてくるので、そのキーを GeoIP API Key: にセットします。
次に Frontend を設定します。ここでは通常アクセスしてきたユーザに見えている(公開されている)画面のアクセス制限を設定します。どの国からのアクセスを制限するかはお好みで…
Backend は管理画面というか管理者がアクセスする画面のアクセス制限です。
ここでは Inverse the selection above: にチェックを入れてこの機能を有効にしています。これはとてもユニークな機能で、ここにチェックを入れると、1行上で設定したブロック対象国の意味が全く反対になります。
ブロック対象国に Japan, Netherlands, United States と3カ国指定していますが、実際にブロックされるのは、この指定した3カ国以外という意味になります。
※つまり、指定した3カ国からはアクセスできます(whiteリスト形式)。
この Backend のアクセス制限の設定には注意が必要です。というのも、インストールされたプラグインが独自に外部と通信する際にも、このアクセス制限が効いてくるからです。
※例えば、iQ Block Country が使用する GeoIP Database は https://geoip.webence.nl/ からダウンロードしてくるのですが、このサイトがオランダにあるので、Netherlands をアクセス可にしています。
※ここでも jail.conf の設定と同様に、管理者としてアクセスする接続元IPアドレスを Backend whitelist へ登録しておきます。IPアドレスの設定方法が表示通り、本当にセミコロンだけがOKで、他のデリミタ(スペースとかCRとか…)を入力するとそれ以降のIPアドレスは無効になりますのでご注意ください。
任意のIPアドレスがどの国に属するのか?は、Tools の IP Address to check: に調べたいIPアドレスを入力して Check IP address をクリックすると結果が表示されます。
【ご参考】
管理画面へのログインをストックホルムとロンドンから行ったときのログ画面です。しっかりアクセス制限が効いています。
■以上、駆け足で書いてみましたが誰かの参考になればうれしいです。