ブログ管理

hosts.denyを自動追記して、不正アクセスをブロック

VPSに不正アクセスを試みてきたウザいIPを、自動でブロックするシェルを作った話です。

はじめに

VPSを借りてブログ運営しています。最初のうちはTeraTermを使ってガシガシ設定していましたが、環境が安定してくるとサーバに直接アクセスする機会が減ってきます。
ブログ管理だけならWeb経由で十分できますからね。

で、数か月ぶりに接続して「lastb」コマンドを叩いてみると…出るわ出るわ不正アクセスの痕跡。

わずか1分間でこれだけのアクセス履歴!
類推されるIDとパスワードの組み合わせを手あたりしだい試みてくるような感じですね。

セキュリティが突破されたり、乗っ取られたりはしていないものの、そういうハッキングチャレンジをされていること自体、あまり気持ちいいものではありません。

そこで、怪しいIPアドレスからの接続を検知し、接続拒否リストに自動登録(hosts.denyに追記)するシェルを作成しました。
実際はもっといい方法があるかもしれませんので、参考までに。
使用される場合は、自己責任のもとお願いいたします。

作成したシェル

以下のようなシェルファイルを作成し、cronで毎分実行するようにしました。

解説します。といってもほとんどコメントに書いていますが…
まずlastbコマンドで、最新のアクセスエラー情報を取得します。
その際の接続元IPアドレスが、すでにhosts.denyに登録されている(アクセス拒否対象になっている)場合は何もせず終了。
未登録の場合は、直近10回のアクセス失敗履歴に3件以上存在するかを確認。
存在する場合は、そのIPアドレスをhosts.denyに追記します。
追記した日付もわかるようにつけておきます。

設定後、1日放置したあとにhosts.denyを開いてみると。
おー、しっかり3件追記されていますね。

lastbコマンドで確認するかぎり、追記時刻以降は当該IPからのアクセスなし。
除外設定も正しく機能しているようです。

注意点

上記シェルですが、3回接続に失敗すると、自分自身が除外対象になってしまうおそれがあります。不安な場合は、あらかじめhosts.allowに自分のIPを入れておくといいかもしれません。

また、最低でも、RootユーザーでのSSH接続は無効にしたうえ、SSHのポート番号は22以外に変えておきましょう。
基本的にはこれでほぼ門前払いできます。面倒でなければ鍵認証も付けておいた方がいいですね。

ポート番号を総当たりされるとどこかで突破されてしまうので、上記シェルはそのときの防御策です。

COMMENT

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください