OXY NOTES

手間をかけずにWordPressのスパムを1/25に減らす対策

1カ月に2万件以上!スパムが本気出してきた!!

WordPressのスパム対策と言えば、何はさておきAkismetという方も多いはず。

あまりにも効果的なのでAkismetに任せっぱなしで、以前紹介した「Optimize Database Options」を利用してスパムを自動削除していました。
どちらも有効に動作していたため、何のストレスもなくサイト運営をできていました。

そんなさなか、何気なくAkismetのダッシュボードを表示すると、なんと20,909件もスパムをブロックしていました。

いくらストレス無く運営できているといっても、これだけの処理をするには相当サーバのリソースを無駄にしています

スパムの一覧を見ると、バラバラのIPを利用しているように見えて、一定のIPを使いまわしてランダムに書き込みをしていることが分かりました。そこでAkismetでスパムとされたIPを抽出してアクセス規制をすることにします。
なかなか目的に合ったプラグインが見つけられず困っていると「Akismet htaccess writer」というプラグインがイメージに近いので利用することにしました。

かなり長い期間更新されないまま放置されているので、普段は手を出しませんが、背に腹には変えられません。


Akismet htaccess writerの使い方

使い方は至って簡単。
プラグイン > 新規追加」で「Akismet htaccess writer」を検索してインストール。有効化します。

すると「プラグイン > Akismet htaccess writer」という項目が追加されるのでクリック。

書き込み対象となる .htaccess ファイル名」にドキュメントルートへのフルパスを入力。(ドキュメントルートはレンタルサーバによって異なるのでマニュアルを参照してください)

まずは「ファイルをチェック」ボタンをクリックしてください。ファイルが存在する場合は赤文字で「チェック OK」と表示されます。

その後「設定を保存」ボタンをクリックして設定を有効にします。

その後「書き込む」ボタンをクリックすると「.htaccess」に以下のような拒否リストを書き込みます。
(IPはサンプル)

# BEGIN written by WordPress plugin - Akismet htaccess writer
Order Allow,Deny
Allow From All
Deny From 196.168.0.1
Deny From 196.168.0.2
Deny From 196.168.0.3
# END written by WordPress plugin - Akismet htaccess writer
運用ににあたっての注意点

拒否リストですが現在スパムに登録されているIPで上書きされます。
つまり当サイトのように定期的にスパムコメントを削除している場合、過去に登録されたIPであっても一定の期間スパムコメントをしていない場合は、再びコメントを許可してしまうということです。

これには一長一短があり、スパムに利用されたIPだからといって永遠にブロックしていては、正常な利用者が当該IPを割り振られた場合にサイトを閲覧できません。
また、何万件もあるスパムコメントを拒否リスト作成のために保存しておくのも現実的ではないので、ある程度のスパムは仕方ないという気持ちで月に1~2度程度拒否リストを上書きして、スパムコメントを削除するのが良いと思います。

余談ですが現在当サイトはnginxで運用しているため、拒否リストはiptablesで設定しています。その際はプラグイン画面の下に表示される「スパム送信元 IP アドレスのリストです」の項目を利用すると便利です。

以上のようなざっくりした運用ですが、タイトルにあるように1カ月に20,909件だったスパムが836件まで減りました。約1/25です。
(1カ月に800件でも十分多い気もしますが…)

更に細かく設定してスパムを減らすこともできますが、スパムのためにこれ以上手間と時間をかけるのも本末転倒です。
当初の目的であったサーバリソースの異常な消費は抑えられたので、よしとします。