
「またお前か…」サーバーログを見て、そっとため息をついた朝
「また海外からの不正アクセスか…」
ある朝、クライアントさんのECサイトのサーバーログを眺めてて、僕は思わず独り言をこぼしてました。見慣れた海外のIPアドレスから、数秒おきにブルートフォース攻撃がガンガン来てる。まあ、WAF(Web Application Firewall)がガッチリ仕事してくれてるんで実害はないんですけど、サーバーに無駄な負荷がかかるのは、やっぱり気分が悪い。ログが攻撃の記録で埋め尽くされるのも、正直ウンザリなんですよね。
こんなとき、「もう、このIPアドレスからのアクセスは全部シャットアウトしたい!」って思いますよね。そんな痒い所に手が届くのが、Webサーバーの設定ファイル「.htaccess」なんです。
実は、僕も以前、ある企業サイトを運用してた時に、特定の国からのブルートフォース攻撃が止まらなくて、マジで困ったことがあります。セキュリティプラグインは入れてたんですけど、それでもサーバーの負荷が上がりっぱなしで、レスポンスが遅くなってクライアントさんからクレームが来る始末。で、「もうこれは根本的に弾くしかない!」って決断して、.htaccessで攻撃元のIP範囲をゴソッとブロックしたんです。そしたら、嘘みたいにサーバーの負荷が下がって、クライアントさんからも「最近サイトが軽くなりましたね!」って喜ばれました。あの時の達成感は、今でも忘れられないですね。
こいつは、Webサーバーの動きをディレクトリ単位で細かくコントロールできる優れもの。うまく使えば、サイトのセキュリティをグッと引き上げることができます。特に、特定のIPアドレスを弾く設定は、不正アクセス対策の基本中の基本。知ってるか知らないかで、対応スピードが天と地ほど変わってきます。
この記事では、僕みたいな現場のエンジニアが、.htaccessを使って特定のIPを弾く方法を、具体的なコードを交えながら、できるだけ噛み砕いて解説していきます。Apacheのバージョンの違いとか、WordPressでのうまい使い方、やらかしがちな注意点まで、僕の経験も踏まえて全部話しますんで、ぜひついてきてください。

.htaccessって、ぶっちゃけ何者?
「そもそも.htaccessって何なの?」って方もいるかもしれませんね。一言で言うと、Apache(アパッチ)っていうWebサーバーの動きを、ディレクトリごとにカスタマイズするための「ローカルルール設定ファイル」みたいなもんです。
サーバー全体の設定ファイル(httpd.conf)をいじるには管理者権限が必要で、レンタルサーバーとかだと普通は触れません。でも、.htaccessなら、各ディレクトリにポイっと置くだけで、そのディレクトリ以下にだけ適用される自分ルールを上書きできちゃう。これがめちゃくちゃ便利なんです。
具体的には、アクセス制御、リダイレクト、URLの書き換え、BASIC認証、エラーページのカスタマイズ…と、できることは多岐にわたります。僕も最初は「なんか黒い画面でカタカタやるやつでしょ?難しそう…」って敬遠してたんですけど、いざ使ってみると意外とシンプルで、今じゃもう手放せない相棒みたいな存在です。
ただし、こいつは結構デリケートで、記述を一行でもミスると、サイトが真っ白になる「500 Internal Server Error」を吐きやがる。なので、いじる前には、必ずバックアップを取る。これは絶対のルールです。僕との約束ですよ!
なんでIPアドレスで弾くのが効くの?
特定のIPを弾くのが、なんでそんなにセキュリティ対策として有効なのか。理由は大きく3つあります。
まず、ブルートフォース攻撃を門前払いできること。WordPressのログイン画面に、特定のIPからアホみたいに連続でアタックしてくるやつらを、サーバーの手前で「お前は入ってくんな」ってブロックできます。これだけでサーバーの負荷が軽くなるし、不正ログインのリスクも減って、精神的にかなり楽になります。
次に、特定の国や地域からの攻撃をまとめてシャットアウトできること。悲しいかな、サイバー攻撃って特定の国から来ることが多いんですよね。もしサイトのターゲットが日本国内だけなら、思い切って海外からのアクセスを拒否しちゃうのも一つの手です。(ただし、Googleとかの検索エンジンのクローラーまで弾いちゃわないように、そこは注意が必要ですが)
最後に、しつこいコメントスパムを撃退できること。WordPressやってると、海外からのコメントスパムが特定のIPから何度も何度も投稿されること、ありますよね。.htaccessでそのIPを拒否すれば、スパム業者のやる気を削ぐことができます。
僕が管理してるブログサイトでも、一時期、中国の特定のIPから毎日100件以上のスパムコメントが投稿されてて、もう削除するのが日課になってました。Akismetっていうスパム対策プラグインも入れてたんですけど、それでもすり抜けてくるやつがいるんですよね。で、ログを見たら、ほぼ同じIPアドレスから来てることが判明。「よし、お前は出禁だ!」って.htaccessでそのIPを拒否したら、ピタッとスパムが止まりました。あの静寂は、まるで嵐の後の晴れ間みたいで、心底ホッとしましたね。
.htaccessの基本的な書き方講座
お待たseしました。いよいよ.htaccessの具体的な書き方です。ここで一つ、めちゃくちゃ大事なポイントがあります。それは、お使いのWebサーバーのApacheのバージョンによって、書き方が違うってこと。これを間違えると動かないんで、しっかり確認してくださいね。
Apache 2.4以降の場合(今どきはこっちが主流)
最近のレンタルサーバーなら、ほぼApache 2.4以降が使われてます。こっちの書き方のほうが、新しくて直感的です。Requireっていう命令を使います。
1. 特定のIPを「出禁」にする
特定のIPアドレス(例: 123.45.67.89)を拒否したい場合は、こう書きます。
<RequireAll>
Require all granted
Require not ip 123.45.67.89
</RequireAll>意味としては、「全員OK!…だけど、123.45.67.89、お前はダメだ」って感じです。簡単でしょ?
複数のIPをまとめて出禁にしたいなら、Require not ipを並べるだけ。
<RequireAll>
Require all granted
Require not ip 123.45.67.89
Require not ip 98.76.54.32
</RequireAll>2. 特定のIPだけを「VIP待遇」する
逆に、特定のIPアドレス(例: 123.45.67.89)だけを許可して、それ以外は全員お断り!って場合はこう。WordPressの管理画面みたいに、自分だけが触る場所に設定すると、セキュリティが爆上がりします。
<RequireAll>
Require all denied
Require ip 123.45.67.89
</RequireAll>「全員お断り!…だけど、123.45.67.89さん、あなたはどうぞ」って感じですね。
Apache 2.2以前の場合(古めのサーバーならこっち)
もし、お使いのサーバーがちょっと古めだと、Apache 2.2の可能性があります。その場合は、Order, Deny, Allowっていう、ちょっと古風な書き方をします。
1. 特定のIPを拒否する
Order Allow,Deny
Allow from all
Deny from 123.45.67.89「許可(Allow)を先に見て、次に拒否(Deny)を見る」という順番。まず全員許可しといて、後から指定したIPを拒否する、という流れです。
2. 特定のIPだけを許可する
Order Deny,Allow
Deny from all
Allow from 123.45.67.89「拒否(Deny)を先に見て、次に許可(Allow)を見る」という順番。まず全員拒否しといて、後から指定したIPだけを特別に許可する、という流れですね。
IPアドレスのいろんな指定方法
IPアドレスは、ピンポイント指定以外にも、範囲で指定することもできます。
- 前方一致:
123.45.みたいに指定すると、123.45.xxx.xxxの範囲をゴソッとまとめて指定できます。便利! - CIDR表記:
123.45.67.0/24みたいに、サブネットマスクを使って範囲を指定する方法。ちょっとネットワークの知識がいりますが、より柔軟な指定ができます。

WordPressでの実践テクニック
さあ、基本的な書き方がわかったところで、WordPressでどう使うのか、僕がよくやる実践的な例を紹介します。
1. 聖域!WordPress管理画面(/wp-admin/)を鉄壁にする
WordPressのセキュリティ対策で、一番効くと言っても過言じゃないのが、管理画面へのアクセスを自分のIPアドレスだけに制限すること。これで、悪意のある第三者がログイン画面にたどり着くことすらできなくなります。
まず、/wp-admin/ディレクトリに、新しく.htaccessファイルを作ります。(もし既にあれば、それに追記)
で、そのファイルにこう書きます。(自分のIPアドレスは、「IPアドレス 確認」とかでググって調べてくださいね)
# Apache 2.4以降
<RequireAll>
Require all denied
Require ip 自分のIPアドレス
</RequireAll>
# Apache 2.2以前
Order Deny,Allow
Deny from all
Allow from 自分のIPアドレスこれで、あなたのIP以外からは管理画面にアクセスできなくなります。まさに鉄壁。ただし、外出先のカフェとか、IPアドレスが変わる場所からアクセスする必要がある場合は、その都度IPを追加するか、VPNを使うなどの工夫が必要になります。
2. ログインページ(wp-login.php)だけをピンポイントで守る
管理画面全体じゃなくて、ログインページ(wp-login.php)だけを守りたいって場合もありますよね。その場合は、WordPressのルートディレクトリ(一番上の階層)にある.htaccessに、こう書きます。
<Files wp-login.php>
# Apache 2.4以降
<RequireAll>
Require all denied
Require ip 自分のIPアドレス
</RequireAll>
# Apache 2.2以前
Order Deny,Allow
Deny from all
Allow from 自分のIPアドレス
</Files><Files>っていうのでファイル名を囲むことで、そのファイルだけにルールを適用できるってわけです。

先輩からのガチアドバイス!.htaccessをいじる時の注意点
最後に、.htaccessをいじる時に、これだけは絶対に守ってくれ!っていう注意点をいくつか。僕も昔やらかして、サイトを真っ白にして冷や汗をかいたことがあるんで、マジで気をつけてください。
1. バックアップは命綱!絶対に取ること
もう、口を酸っぱくして言いますが、これが一番大事。いじる前には、必ずFTPソフトとかで.htaccessファイルをPCにダウンロードして、バックアップを取っておきましょう。何かあっても、バックアップさえあれば、すぐに元に戻せます。この一手間が、あなたを救います。
2. 自分のIPアドレスを間違えて、自分を締め出すな!
アクセス許可に自分のIPを指定するとき、絶対に間違えないでください。もし間違ったIPを指定しちゃうと、自分自身がサイトにアクセスできなくなって、リアルに「詰み」ます。自分のIPアドレスは、コピペで慎重に貼り付けましょう。
3. 全角スペース、お前は敵だ!
.htaccessは、たった一文字の記述ミス、特に目に見えない全角スペースが紛れ込んでるだけで、500エラーを吐いてサイトをダウンさせます。コードをコピペするときは、余計な文字が入らないように細心の注意を払ってください。もしサイトが真っ白になったら、慌てずにバックアップで上書きすれば大丈夫。原因の9割は、こういう凡ミスです。

よくある質問(FAQ)
Q1. .htaccessファイルが見つからないんだけど…
A1. あー、それ、よくあります。ファイル名の先頭にドット(.)が付いてるファイルは、「隠しファイル」扱いなんです。使ってるFTPソフトの設定で、「隠しファイルを表示する」みたいなオプションをONにしてみてください。それでもなければ、自分で作ってアップロードしちゃえばOKです。
Q2. うちのサーバーのApacheのバージョンがわからん!
A2. レンタルサーバーの管理画面に書いてあることが多いですね。それでも分からなければ、サポートに聞くのが一番早いです。まあ、とりあえずApache 2.4の書き方(Require)で試してみて、エラーが出たら2.2の書き方を試す、っていうのでも大丈夫です。
Q3. IP拒否と、WAFとかセキュリティプラグインって、どっちがいいの?
A3. どっちか、じゃなくて「どっちも」です。.htaccessは特定のIPを素早くブロックするのに向いてて、WAFやプラグインはもっと賢い攻撃パターンを見つけて防いでくれます。両方使う「多層防御」が最強です。
Q4. カフェとかで仕事するから、IPアドレスがコロコロ変わるんだけど…
A4. ですよね。そういう場合は、IP制限だけだと管理が面倒くさいです。BASIC認証っていう別の認証を組み合わせるか、VPNサービスで固定IPを手に入れる、あるいは二要素認証(2FA)でログイン自体を強化するのが現実的ですね。
Q5. .htaccessいじったらサイトが真っ白に!助けて!
A5. 落ち着いて!500エラーですね。ほぼ100%、.htaccessの記述ミスです。FTPソフトでサーバーに接続して、問題の.htaccessファイルの名前を.htaccess_oldとか適当に変えちゃってください。それだけでサイトは元に戻るはず。その後、バックアップと見比べて、どこを間違えたかじっくり探しましょう。

まとめ
今回は、.htaccessを使って特定のIPを弾く方法について、かなり突っ込んで解説してきました。
.htaccessは、サーバーの動きを柔軟にいじれる、僕らエンジニアにとっては強力な武器です。特にIPアドレスでのアクセス拒否は、ブルートフォース攻撃やスパム対策の第一歩。Apacheのバージョンに合わせた正しい書き方を覚えて、WordPressの管理画面を守るだけで、サイトのセキュリティは格段に上がります。
もちろん、記述ミスは即サイトダウンにつながる諸刃の剣でもあります。だからこそ、バックアップは絶対に忘れないでください。自分を締め出しちゃう、なんていうお茶目なミスもしないように(笑)。
.htaccessを使いこなせるようになると、セキュリティ管理が「やらされ仕事」じゃなくて、「自分でサイトを育て、守る」っていう能動的で面白いものに変わっていくはずです。WAFやプラグイン任せにせず、自分の手で基本的な防御を固められるって、エンジニアとして結構自信になりますよ。まずは、テスト環境で気軽にいじってみてください。この記事が、あなたのサイトを守るための、ちょっとした手助けになれば嬉しいです。
WordPressのセキュリティ対策、一人で悩んでいませんか?
WordPressセキュリティ診断サイトでは、あなたのサイトの脆弱性をプロの目で無料で診断し、具体的な対策をアドバイスします。お気軽にご相談ください。相談だけでも大歓迎ですよ。
