こんにちは!インフラやセキュリティの世界へようこそ。
新しいサーバーを立てたとき、「よし、動いた!」と感動する瞬間はたまらないですよね。でも、その興奮もつかの間、実はあなたのサーバーはインターネットという名の荒海にポツンと浮かぶ小舟のような状態です。
今日は、新人のIT担当者や開発者の方に向けて、サーバーの安全を守るための第一歩――「SSHのポート変更」と「Fail2Banによる動的IPブロッキング」について、身近な防犯にたとえながら、泥臭くも確実なセキュリティの知見をお伝えしていきたいと思います。
難しい言葉が出てきても大丈夫です。一歩ずつ、一緒に学んでいきましょう!
—
1. 家の鍵にたとえるサーバーのセキュリティ
突然ですが、あなたが新しいアパートに引っ越したと想像してみてください。
玄関のドアには立派な鍵がついていますよね。この鍵が、サーバーでいうところの「パスワード認証」や「秘密鍵認証」です。
しかし、もしそのアパートの玄関ドアが、世界中の誰もが迷わずたどり着ける「大通りに面した1番地」にあって、しかも表札に「ここに現金があります!」とデカデカと書いてあったらどうでしょう? さらに悪いことに、世の中には「世の中にあるすべてのドアノブを片っ端からガチャガチャ回して開けようとする不審な自動人形(ボット)」が昼夜を問わずうろついています。
これが、インターネット上にサーバーを公開するということです。
何もしないでおくと、あなたのサーバーの扉(SSHの標準ポートである 22 番)には、世界中から「お宅の鍵を開けさせてくださーい」という総当たり攻撃(ブルートフォース攻撃)が、1秒間に何十件、何百件と送り込まれ続けます。いつか運悪く錆びた鍵がこじ開けられてしまうかもしれません。
そうならないために、私たちは2つの防衛策を講じる必要があります。
1. 「ここだよ!」と見つかりにくくする(SSHのポート変更)
2. 「怪しい奴は即座に出入禁止にする」(Fail2Banによる動的IPブロッキング)
それでは、それぞれの具体的なやり方を見ていきましょう!
—
2. 隠し扉を作ろう!SSHのポート変更
まずは、不審者が真っ先に狙ってくる「標準の玄関」を引っ越してしまう作戦です。
Linuxサーバーの遠隔操作に使われるSSHは、初期設定では 22 番ポートという世界共通の部屋番号を使っています。世界中の攻撃者は、まずこの 22 番に向かって攻撃ツールを突っ込んできます。
だったら、この番号を別の分かりにくい番号(たとえば 50022 など)に変えてしまえばいいのです。これは例えるなら、「目立たない裏口に、表札の出ていない専用のドアを作る」ようなものです。
設定の手順(Linux / UbuntuやCentOS等の場合)
まずはSSHの設定ファイルをエディタで開きます。
# 設定ファイルを管理者権限で開きます
sudo nano /etc/ssh/sshd_config
ファイルの中身を見ていくと、#Port 22 という行があるはずです(コメントアウトされていることが多いです)。ここを書き換えます。
# 変更前(コメントアウトを外して、ポート番号を書き換えます)
#Port 22
# 変更後(例として 50022 に変更します。1024番〜65535番の間で選びましょう)
Port 50022
ファイルを保存したら、SSHサービスを再起動して設定を反映させます。
※注意:この時、設定を間違えてターミナルを閉じると二度と入れなくなるので、接続したまま別のウィンドウで新しいポートで入れるか必ずテストしてください!
# SSHサービスを再起動して設定を適用
sudo systemctl restart sshd
これで、次回からは接続するときに -p 50022 のように新しいポート番号を指定してあげる必要があります。
# 新しいポートを指定してログインする例
ssh username@your_server_ip -p 50022
これで、自動巡回しているだけの単純なボットは「あれ?22番に誰もいないぞ?」とスルーしていくようになります。大きな第一防衛線の完成です!
—
3. しつこい泥棒を自動で追い出す!Fail2Banの導入
ポートを変更しても、執念深い人間や賢いボットは、サーバーに開いている他のポートをしらみつぶしにスキャンして、新しいSSHのポート(今回の例なら 50022 番)を見つけ出して攻撃してくることがあります。
泥棒が何度も何度もあなたの家の鍵をガチャガチャと力づくで開けようとしていたらどうしますか?
警察を呼ぶか、あるいは自動でガチャンとシャッターを下ろして締め出したいですよね。
これをサーバーの世界で自動化してくれるのが、Fail2Ban(フェイルトゥーバン)という超優秀な番人ツールです。
Fail2Banは、サーバーのログ(誰がいつ侵入を試みたかという記録)を常に監視しています。そして、「このIPアドレス、短時間に何度もパスワード間違えてログイン失敗してるぞ……怪しい!」と検知すると、自動的にファイアウォール(iptablesやufwなど)のルールを書き換え、その攻撃元のIPアドレスからのアクセスを一定時間まるごと遮断(ブロック)してくれます。
Fail2Banのインストールと設定
Ubuntuを例に、サクッとインストールしてみましょう。
# パッケージリストを更新し、fail2banをインストールします
sudo apt update
sudo apt install fail2ban -y
インストールが終わったら、デフォルトの設定ファイルをコピーして、自分用のカスタム設定ファイルを作ります。
# 設定ファイルのテンプレートをコピー
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
次に、カスタム設定ファイルを開いて、SSHに対する防御ルールを調整します。
# 設定ファイルをエディタで開く
sudo nano /etc/fail2ban/jail.local
ファイルの中にある [sshd] のセクションを探し、次のように設定を有効化・調整します。
[sshd]
# 有効化(falseからtrueへ変更)
enabled = true
# 先ほど変更したSSHのポート番号を指定します
port = 50022
# ログを監視するバックエンド(システムに合わせて自動で大丈夫です)
backend = %(sshd_backend)s
# 何回ログインに失敗したらブロックするか(例:3回まで許容)
maxretry = 3
# 失敗をカウントする時間枠(例:10分以内に3回失敗したらアウト)
findtime = 600
# ブロックする時間(例:1時間アクセス禁止にする。(-1にすると永久追放))
bantime = 3600
設定を保存したら、Fail2Banを起動し、システムの起動時に自動で立ち上がるように設定します。
# Fail2Banを起動
sudo systemctl start fail2ban
# 自動起動を有効化
sudo systemctl enable fail2ban
これで、番人がしっかりと門番として立ち上がってくれました!
—
4. 現場のプロが教える「動いていることの確認」と泥臭いコツ
セキュリティ対策で一番怖いのは、「対策したつもりで実は動いていなかった」というパターンです。
ちゃんと番人が働いているか、ステータスを確認してみましょう。
# Fail2BanのSSH監視状況を確認する
sudo fail2ban-client status sshd
このコマンドを実行すると、現在「何個のIPアドレスをブロックしているか」や「どのIPをブラックリストに入れたか」がリスト形式で表示されます。運用を始めると、世界中から想像以上の数の攻撃者がブロックされていることが分かり、少し背筋が凍るかもしれませんが、それだけ Fail2Ban があなたを守ってくれている証拠です。
実務でのワンポイントアドバイス(絶対に忘れないでほしいこと)
- 自分自身のIPをブロックしないように注意!
うっかり自分でパスワードを何回も打ち間違えると、自分自身がFail2Banにブロックされてサーバーから締め出されます。 遠隔サーバーでこれをやると、最悪の場合、現地のデータセンターに走るはめになります(通称:自宅警備員の悲劇)。設定変更時は必ず別のセッションを開いてテストするか、信頼できる自分のIPを ignoreip という項目にホワイトリスト登録しておきましょう。
- セキュリティは「多層防御」が基本
今回紹介した「ポート変更」と「Fail2Ban」は、あくまで泥棒の侵入を難しくする「門番」の役割です。これに加え、パスワード認証を禁止して「SSH公開鍵認証」を必須にする(マスターキーを持つ人しか入れなくする)など、複数の鍵を組み合わせることが、本当の意味での要塞化につながります。
—
おわりに
お疲れ様でした!
「サーバーのセキュリティ」と聞くと、なんだか難解な暗号や、専門家にしか分からない黒い画面の操作を想像して身構えてしまいますよね。
ですが、本質は私たちが日頃行っている「家の戸締まり」や「不審者対策」と何ら変わりません。
「目立たないように工夫し(ポート変更)、怪しい動きをする奴は即座につまみ出す(Fail2Ban)」。この基本をしっかり押さえるだけで、ネット上の自動攻撃の大半は綺麗にいなすことができます。
一歩ずつ、確実に、安全なインフラ環境を作っていきましょう。あなたのエンジニアライフがより安全で快適なものになるよう、応援しています!
コメント