こんにちは!インフラの現場を駆け巡るネットワークセキュリティスペシャリストの私です。
日々のサーバー管理、本当にお疲れ様です!クラウド全盛期の現代でも、Linuxサーバーへリモート接続してコマンドを叩くとき、私たちの相棒になってくれるのが「SSH(ポート22番)」ですよね。
「とりあえずサーバーを立てたら、SSHでログインして環境構築!」
これがインフラエンジニアの王道パターンですが、実はこのポート22番、インターネットという広大な荒野にポツンと開けられた「狙われやすい通用口」でもあるんです。
今日は、初心者エンジニアのあなたに向けて、このSSHがなぜ狙われるのか、そしてどうやって鉄壁の守りを築けばいいのかを、身近な例えを交えながらじっくり紐解いていきたいと思います。一歩ずつ、肩の力を抜いて理解していきましょう!
—
1. 郵便受けの鍵と「パスワード認証」の危うい関係
まずは、SSHが普段どのように動いているのかを、私たちの身近な「郵便配達」に例えて考えてみましょう。
あなたが自宅のポストに手紙(コマンド)を届けてもらうとき、ポストには「鍵」がかかっていますよね。SSHも全く同じです。サーバーというおうちにアクセスするために、必ず認証というプロセスを通ります。
ここで問題になるのが、多くの初心者が最初に設定しがちな「パスワード認証」です。
[世界中の怪しいボット] ──(パスワード総当たり攻撃)──> [あなたのサーバー(ポート22)]
└ 「123456」で扉が開いちゃった!
パスワード認証とは、いわば「どこにでもある一般的な4桁の暗証番号」のようなもの。サイバー空間には、世界中のサーバーのポート22番を片っ端からスキャンし、root や admin といったお決まりのユーザー名に対して、「password」「123456」「letmein」といったよくあるパスワードを1秒間に何千回も送りつけてくる「自動ドア破りロボット(ブルートフォースツール)」が昼夜問わずうろついています。
もし、あなたが推測されやすいパスワードを設定していたらどうなるでしょうか?
郵便受けの鍵がペラペラのプラスチックでできていて、誰でも力任せにこじ開けられる状態なのと一緒です。気づいたときには、サーバーが身代金要求マルウェア(ランサムウェア)の踏み台にされていた……なんていう悪夢も、このポート22番の油断から始まります。
—
2. 鋼鉄の合鍵「公開鍵認証」でパスワードを完全追放する
では、どうやってこの泥棒たちを完全にシャットアウトすればいいのでしょうか?
答えはシンプルです。「パスワードという概念そのものを捨てること」です。
代わりに私たちが使うのが、「公開鍵認証(こうかいきんしょうにん)」という仕組みです。難しそうに聞こえますが、これも現実世界の仕組みで例えると非常にスッキリします。
- 秘密鍵(ひみつきぎ): あなたの手元(自分のパソコン)にだけ厳重に保管する「あなた専用の特別なマスターキー」。
- 公開鍵(こうかいきぎん): サーバー側に預けておく「あなたのマスターキーの形を登録した型枠」。
公開鍵認証では、サーバーは「パスワードを知っているか」ではなく、「手元のマスターキー(秘密鍵)とペアになる型枠(公開鍵)を一致させられるか」を確認します。
この鍵は桁数が途方もなく多く、現代のコンピューターの計算能力でも総当たりで解読するには途方もない年月がかかります。つまり、パスワード認証をスパッと無効化し、公開鍵認証だけを許可することが、セキュアなサーバー運用の絶対的な第一歩になるのです。
実践!SSH設定ファイル(sshd_config)の書き換え
それでは、実際のLinuxサーバー(UbuntuやCentOSなど)の設定を変更して、パスワード認証を禁止し、公開鍵認証を強制してみましょう。
SSHの設定ファイルは通常 /etc/ssh/sshd_config にあります。管理者権限(sudo)でエディタを開いて、以下のポイントを確認・修正します。
# 設定ファイルをテキストエディタ(例: nano)で開きます
sudo nano /etc/ssh/sshd_config
ファイルの中にある以下の項目を探し、コメントアウト(#)を外し、値を書き換えて保存してください。
# パスワードを使ったログインを一切禁止する
PasswordAuthentication no
# パスワードが空のユーザーのログインを禁止する
PermitEmptyPasswords no
# rootユーザーによる直接のSSHログインを禁止する(セキュリティの基本!)
PermitRootLogin no
# 公開鍵認証を使用することを許可(有効化)する
PubkeyAuthentication yes
設定を保存したら、SSHサービスを再起動して設定を反映させます。
# Systemdを使ってSSHサービスを再起動する
sudo systemctl restart sshd
これで、どれだけ優秀な自動ドア破りロボットがやってきても、パスワードという共通の合言葉が使えないため、ポート22番の玄関口で完全に門前払いできるようになります!
—
3. 「Fail2ban」で悪意あるアタックを自動ブロックする
パスワード認証を無効化すれば安全性が劇的に跳ね上がりますが、それでも世界中のボットネットは、存在しないユーザーや総当たり攻撃をポート22番めがけて送り込んできます。サーバーのログファイル(/var/log/auth.log や /var/log/secure)には、日々こんなエラーが記録され続けます。
> *Failed password for invalid user admin from 203.0.113.55 port 54321 ssh2*
「あー、またどこかのボットがアタックしてきているな」と放置するのも手ですが、あまりに大量のパケットが送られてくると、サーバーのCPUリソースが無駄に消費されてしまいます。
そこで登場するのが、動的IPブロックツール「Fail2ban(フェイルトゥバン)」です!
Fail2banの働き:お騒がせ人間を出入り禁止にする警備員
Fail2banは、いわば「サーバーの入り口に立つ優秀な警備員」です。
この警備員は、サーバーの出入り口(ログファイル)を常に監視しています。もし、あるIPアドレスからの侵入失敗が「3回」や「5回」を超えたら、そのIPアドレスを危険人物とみなし、ファイアウォール(iptablesやnftables)を使ってそのIPからのアクセスを一定時間(あるいは永久に)完全に遮断(ドロップ)してくれます。
[怪しいIP: 203.0.113.55] ──(連続でログイン失敗)──> [Fail2ban 警備員]
│
▼
[ファイアウォールで即座にブロック!]
Fail2banのインストールと設定の流れ
Ubuntu環境を例に、Fail2banの導入手順を見ていきましょう。
# 1. Fail2banパッケージをインストールする
sudo apt update
sudo apt install fail2ban -y
# 2. デフォルト設定ファイルを上書きしないために、ローカル用設定ファイルを作成する
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 3. 設定ファイルをエディタで開く
sudo nano /etc/fail2ban/jail.local
設定ファイルの中にある [sshd] のセクションを探し、以下のように有効化(enabled = true)します。
[sshd]
# sshdセクションを有効にする
enabled = true
# 監視するポート(デフォルトは22)
port = ssh
# ログファイルのパス(OSによって異なります)
logpath = %(sshd_log)s
# ログイン試行回数の上限(何回間違えたらアウトにするか)
maxretry = 3
# ブロックする時間(秒)。例では1時間(3600秒)アクセス禁止にする
bantime = 3600
# 判定を行う時間枠(秒)。例では10分間(600秒)の間に指定回数失敗したらアウト
findtime = 600
設定を保存したら、Fail2banを起動して常時稼働させましょう。
# Fail2banを有効化して起動する
sudo systemctl enable --now fail2ban
# 現在の稼働状況やブロックされているIPを確認する
sudo fail2ban-client status sshd
このツールが動いていると、サーバーのログが驚くほど静かになります。アタックを試みたボットは、最初の数回失敗した瞬間にファイアウォールによってネットワークの海から消し去られるため、サーバーへの負担がグッと減るんです。
—
4. さらなる高みへ:ポート変更や踏み台対策の小ワザ
ここまでで、「公開鍵認証の強制」と「Fail2banによる動的ブロック」という強力な盾を手に入れました。
さらに実務の現場では、以下のようなプラスアルファの対策を組み合わせることで、セキュリティをより堅牢にすることができます。
- SSHのポート番号を22番から変更する
標準のポート22番は、ネット上のスキャナーに真っ先に狙われます。あえて 2222番 や別の空いているポートに変更するだけで、雑多な自動ボットの標的から外れるため、ログのノイズが激減します(※セキュリティの基本は認証の強さであり、ポート変更は「セキュリティ・バイ・オブスキュリティ(隠蔽によるセキュリティ)」と呼ばれ過信は禁物ですが、ノイズ削減には非常に効果的です)。
- VPNや踏み台サーバー(Jailhost)の利用
そもそもインターネットの荒野にサーバーのSSHポートを直接露出させず、社内ネットワークや信頼できるVPN、あるいはアクセス制限された踏み台サーバー経由でしかSSH接続できない環境を作るのが、ゼロトラスト時代の理想的なアプローチです。
—
まとめ:インフラを守る第一歩は「当たり前」の徹底から
今回は、SSH(ポート22番)を悪用したブルートフォース攻撃の脅威と、その具体的な防御策についてお話ししました。
1. パスワード認証を廃止し、強力な「公開鍵認証」を強制する
2. Fail2banを導入して、怪しい挙動をするIPアドレスを自動的にシャットアウトする
難解な専門用語の裏側にあるのは、「家の鍵を頑丈なものに変え、怪しい訪問者は警備員に追い返してもらう」という現実世界と全く同じシンプルなセオリーです。
インフラやネットワークの世界は、こうした小さな「当たり前」の積み重ねが、組織の大切なデータやシステムを守る巨大な防壁になります。
今日からあなたのサーバーでも、ぜひこの設定を取り入れて、安心・安全なリモート管理ライフを手に入れてくださいね!
それでは、また次回の技術解説でお会いしましょう。現場のエンジニアの皆さんを、いつも応援しています!
コメント