踏み台サーバをやめて直結にし、ボットを入口で弾いた話

個人ブログの裏側を少し整理した。サーバに入るための踏み台を1台やめて直結にし、ついでにアクセスログを眺めて、ボットやスキャナを入口で弾くようにした。どちらも派手ではないが、個人規模の運用ではこのくらいがちょうどいい、という話。

踏み台を1台、思い切って減らす

これまでサーバへは、踏み台(bastion)を経由して入る構成だった。本番サーバに直接SSHを開けず、間に1台はさんで守る、というよくあるやり方だ。

ただ、踏み台は常時起動していると、その分だけ料金がかかる。個人ブログにとっては、守りの厚さよりも維持費のほうが気になってくる。そこで踏み台をやめて、本番サーバに直接つなぐことにした。

直結といっても、誰でも入れるようにするわけではない。SSHの口は開けるが、つなげる元を自分のIPアドレス1つだけに絞る。これでファイアウォール側で十分に守れる。踏み台というもう1台のサーバを「常時起動して維持する」かわりに、「ルールを1行絞る」で同じ目的を果たす、という置き換えだ。

個人規模だと、台数を増やして守るより、設定をきちんと絞るほうが、安くて見通しもいい。

アクセスログを見たら、ほとんどが人間じゃなかった

直結に切り替えたついでに、アクセスログをまとめて集計してみた。結果は、わかってはいたが、なかなかのものだった。

  • リクエストの大半が、検索エンジンですらないボットとスキャナ
  • /.env/wp-login のような、設定ファイルや管理画面を探りにくる定番の不正アクセス
  • 中身を見ない自動巡回ツールが、ひたすら同じ入口を叩いている

公開しているサーバなら、これはどこでも起きている日常の風景だ。実際に記事を読んでいる人のアクセスは、その山の下にうっすら埋もれている程度だった。

守りは「入口」で済ませる

そこで、入口で弾く設定を2段構えで入れた。

1段目は robots.txt。これは「行儀のいいボット」へのお願い書きだ。検索エンジンは歓迎しつつ、流入には寄与しないのに負荷だけ高い巡回ツールには、来ないでくださいと伝える。ただしお願いなので、行儀の悪いスキャナは平気で無視してくる。

そこで2段目として、サーバ側で実際に遮断する。中身は単純で、あやしいツール名や、攻撃でよく狙われるパスにマッチしたら、そのまま門前払いする。

入口で弾く考え方
あやしい名前のツール → 403で門前払い
設定ファイル/管理画面を探る経路 → 403で門前払い
ふつうの読者・検索エンジン → そのまま通す

ポイントは、このブログが静的なページの集まりで、動的な管理画面やデータベースを一切持っていないことだ。だから .php で終わる経路や /wp-login のような入口は、そもそも存在しない。存在しないものを叩いてくる相手は、見た瞬間に弾いてよい。守るべき面が小さいほど、入口のルールはシンプルになる。

確かめてから終える

設定を入れたら、必ず外から動作を確認する。あやしいツール名でアクセスして弾かれること、ふつうのブラウザや検索エンジンでは今までどおり表示されること、その両方を見て初めて完了とする。片方だけだと、悪いボットは弾けても本物の読者まで締め出していた、という事故が起きうる。

やってみて思うこと

今回やったことは、新機能でもなんでもない。サーバを1台減らし、入口のルールを少し足しただけだ。それでも、維持費は下がり、ノイズは減り、構成は見通しがよくなった。

個人で運用していると、つい「ちゃんとした構成」を真似して台数や設定を増やしたくなる。でも自分のサイトに必要な守りは、たいてい想像よりずっと小さい。小さく持って、入口で守る。今のところ、このくらいがちょうどいいと思っている。

この整理も、隣でAIエージェントと相談しながら進めた。ログの集計も、設定の文面も、動作確認の手順も、対話しながら詰めていけるのは、やはり速い。