【付録】あなたのサーバーは既に狙われている
こんにちは!「リナックス先生」です。
全3回の構築講座、お疲れ様でした!
「これで自分だけのブログができた!安心だ!」と思っていませんか?
残念ながら、Webサーバーをインターネットに公開した瞬間から、24時間365日、世界中のハッカー(ボット)からの攻撃に晒され続けます。
えっ…脅かさないでくださいよ。
僕のサイトなんてまだ誰も知らないし、記事も数個しかないですよ?
そんな過疎サイトを攻撃して何の意味があるんですか?
甘いわね。
攻撃者は「あなた」を狙ってるんじゃない。「WordPress」というシステムを機械的に探しているの。
今回は、当サイトのサーバーで実際に観測された「生々しい攻撃ログ」を公開するわ。
これを見て、自分が戦場にいることを自覚しなさい!
1. 恐怖の実録!これが「偵察」と「侵入」のログだ
これは、サーバーを立ち上げてわずか数日後に記録された、実際のアクセスログ(Apache access_log)です。
※IPアドレスやユーザー名は伏せ字にしています。
【フェーズ1】ユーザー名の特定(偵察)
103.xxx.xxx.xxx - - "GET //?author=1 HTTP/1.1" 301 - "-" "Mozilla/5.0..." 103.xxx.xxx.xxx - - "GET //wp-json/wp/v2/users/ HTTP/1.1" 200 770 "-" "Mozilla/5.0..."
解説:
- 1行目
/?author=1: WordPress特有の仕様を突いています。「ユーザーIDが1番の人(=管理者)」のページをリクエストしています。デフォルトでは、ここから/author/user01/のようなURLに転送(301)され、ログインID(user01)がバレてしまいます。 - 2行目
/wp-json/...: REST APIという機能を使い、ユーザー一覧データを丸ごと抜き出しています。ステータスコードが200(成功)になっているのが致命的です。
【フェーズ2】パスワード総当たり攻撃(侵入試行)
ユーザー名がバレた直後、今度は別のIPアドレス群から猛烈な攻撃が始まりました。
184.75.xxx.xxx - - "POST /xmlrpc.php HTTP/1.1" 200 258 "-" "Go-http-client/1.1" 202.50.xxx.xxx - - "POST /xmlrpc.php HTTP/1.1" 200 258 "-" "Go-http-client/1.1" 64.42.xxx.xxx - - "POST /xmlrpc.php HTTP/1.1" 200 258 "-" "Go-http-client/1.1"
解説:
- 攻撃対象
xmlrpc.php: 通常のログイン画面ではなく、プログラム用の裏口を叩いています。 - User-Agent
Go-http-client: 人間ではなく、Go言語で作られた攻撃ボットです。 - ステータス
200: 攻撃リクエストが「正常に受け付けられている」状態です。これはサーバーがパスワード照合の負荷に耐えている(攻撃を受け続けている)ことを意味します。
うわぁ…。
「ユーザー名がバレて」→「そのユーザー名で総当たり攻撃を受ける」という完璧な流れじゃないですか。
これ、放置してたらどうなってたんですか?
パスワードが破られて乗っ取られるわね。
その後は、スパムメールの配信拠点にされたり、フィッシング詐欺サイトに書き換えられたりして、あなたが「加害者」になるの。
さあ、今すぐ対策するわよ!
2. 対策①:ユーザー名を隠蔽せよ(コード編)
まずは「敵に名乗る」のをやめさせます。
使用しているテーマの functions.php に以下のコードを追記することで、ユーザー名の流出を防げます。
※必ずバックアップを取ってから行ってください。
// 1. REST APIでのユーザー一覧取得を停止
add_filter('rest_endpoints', function( $endpoints ) {
if ( isset( $endpoints['/wp/v2/users'] ) ) {
unset( $endpoints['/wp/v2/users'] );
}
return $endpoints;
});
// 2. 著者アーカイブ(?author=1)へのアクセスをトップページへ転送
function disable_author_archive() {
if ( is_author() ) {
wp_redirect( home_url(), 301 );
exit;
}
}
add_action( 'template_redirect', 'disable_author_archive' );
3. 対策②:xmlrpc.php を完全封鎖せよ(設定ファイル編)
次に、攻撃の入り口となっている xmlrpc.php を塞ぎます。
Webサーバーの設定ファイル .htaccess に以下を追記します。
# XML-RPCへのアクセスを拒否 <Files xmlrpc.php> Order Deny,Allow Deny from all </Files>
これにより、攻撃者がアクセスしても WordPress が起動する前に門前払い(403エラー)できます。
4. 【初心者推奨】プラグインで手軽に守る
「コードを編集するのは画面が真っ白になりそうで怖い…」という方は、プラグインを使いましょう。
日本国内で多くの実績がある「SiteGuard WP Plugin」がおすすめです。
SiteGuard WP Pluginでできること
- 管理ページアクセス制限: ログインしていない端末からの管理画面アクセスを拒否します。
- ログインページ変更:
wp-login.phpというバレバレの入り口をlogin_54321などの独自URLに変更します。 - XMLRPC防御: 上記で解説した攻撃を、チェックを入れるだけで防げます。
インストールして有効化するだけで、今回解説した攻撃のほとんどを防ぐことができます。
VPS初心者の方は、無理せずまずはプラグインから始めることを強く推奨します。
5. 勝利宣言!対策後のログを確認しよう
対策(コード編集またはプラグイン導入)を行った後のログを見てみましょう。
62.102.xxx.xxx - - "POST /xmlrpc.php HTTP/1.1" 403 199 "-" "Go-http-client/1.1" 62.102.xxx.xxx - - "POST /xmlrpc.php HTTP/1.1" 403 199 "-" "Go-http-client/1.1"
ステータスコードが 200(成功)から 403(Forbidden / 禁止) に変わりました!
これが「勝利」の証です。
まとめ:全3回講座の振り返り
今回でWordPress構築講座シリーズは完結です。
セキュリティ対策も含め、VPS運用の奥深さを感じていただけたでしょうか。
過去の記事を見返したい場合は、以下のリンクからアクセスしてください。
▼第1回:ApacheとPHPの導入

▼第2回:MariaDBとWordPress導入

▼第3回:SSL化とApache/PHP設定

先生、正直に言います。
勉強にはなりましたけど、これをずっと続けるのは…僕には荷が重いです。
記事を書く時間より、ログを見る時間のほうが長くなりそうです。
それが普通の感覚よ。
だからこそ、プロのブロガーは、これらを全部自動でやってくれる「レンタルサーバー」を使うの。
技術を楽しむならVPS、成果(収益)を求めるならレンタルサーバー。
この使い分けが大事なのよ。
▼セキュリティ対策済みのサーバーを使うなら
当サイトで推奨している以下のレンタルサーバーなら、今回解説した「XML-RPC防御」や「WAF」などの機能が標準装備されています。
自分に合ったサーバーを見つけるために、まずは比較記事をチェックしてみてください。

▼学習用VPSを用意するなら
本講座で使用した、コマンド操作の練習に最適なVPSはこちらの記事で紹介しています。

▼おすすめのレンタルサーバー
1. エックスサーバー (Xserver)
国内シェアNo.1。セキュリティ機能「WAF」の設定が非常に簡単で強力です。
2. ConoHa WING
表示速度最速クラス。コントロールパネルから「セキュリティ」設定が直感的に行なえます。


コメント