こんにちは!インフラやセキュリティの世界へようこそ。これからサーバーを触る新人IT担当者さんや、「セキュリティって何から始めればいいの?」と少しドキドキしている開発者さんのために、今日はとても大切な第一歩をお話ししますね。
サーバーの安全を守るための「要塞化(ハーデニング)」、そしてその中でも一番最初にやるべき「SSHのパスワード認証廃止と公開鍵認証の強制」について、一緒に見ていきましょう。
むずかしい言葉はなるべく使わずに、私たちの身近な「お家の防犯」に例えてお話ししますので、リラックスして読んでくださいね。
—
サーバーの「SSH」って、お家で例えるとどこ?
皆さんがクラウド上に作ったLinuxサーバー(AWSのEC2や、さくらのクラウドなどなど)をリモートから操作するとき、必ず「SSH(Secure Shell)」という仕組みを使いますよね。
これって、お家で例えると「勝手口のドア」のようなものです。
遠く離れた自分のデスクから、インターネットという一本道を通って、サーバーというお家にアクセスするための専用のドアですね。このドアの鍵が甘いと、世界中のどこかにいる悪い人(サイバー攻撃者)に簡単に侵入されてしまいます。
パスワード認証(PasswordAuthentication)の危険性
初心者の方がやりがちなのが、この勝手口の鍵を「普通の鍵(=パスワード)」にしてしまうことです。
しかも、そのパスワードに Password123 や admin なんて簡単なものを設定していようものなら……。
想像してみてください。泥棒が自動で何百万通りもの鍵の形を試す「ピッキングマシーン(ブルートフォース攻撃)」を家の前で24時間動かしている状態です。
どれだけ頑丈なドアを作っても、鍵自体が「1234」のような簡単なものだったら、いつか必ず破られてしまいますよね。現に、クラウド上にサーバーを建ててパスワード認証を有効にしたままにしておくと、数分後には世界中からの不正アクセスの嵐にさらされます。これは本当の話です。
—
救世主は「公開鍵認証」と「Ed25519」
じゃあ、どうすればいいのでしょうか?
ここで登場するのが、今回の主役である「公開鍵認証」です。
公開鍵認証ってなに?
公開鍵認証は、お家の鍵で例えると「超高度なICカードキーと、特殊な読み取り機のペア」のような仕組みです。
1. 秘密鍵(プライベートキー): あなたのパソコンの中にだけこっそり持っておく、絶対に人に見せてはいけない鍵。
2. 公開鍵(パブリックキー): サーバー側に置いておく、「この鍵を持っている人のアクセスを許可しますよ」というリスト。
サーバーのドアは、あなたのパソコンにある「秘密鍵」とペアになっていないと絶対に開きません。これなら、泥棒がいくらパスワードを総当たりで当てようとしても、そもそも「鍵の形(パスワード)」を使うドアではないので、ビクともしないんです。
なぜ「Ed25519」を選ぶべき?
鍵の種類にも色々あるのですが、現在一番オススメしたいのが「Ed25519(エドニーマルイチマルキュウ)」という暗号アルゴリズムです。
昔は RSA という方式がよく使われていましたが、Ed25519は「短い文字数なのに、めちゃくちゃ強力で、しかも計算が速い」という、いいことずずくめの最新鋭の鍵です。迷ったらこれを選んでおけば間違いありません!
—
さあ、実際に設定を変えてみましょう!
それでは、実際にLinuxサーバー(UbuntuやCentOSなど)の設定ファイルを書き換えて、パスワード認証を完全に禁止し、安全な状態を作り上げてみましょう。
一歩ずつ進めれば難しくありませんので、一緒にやってみましょうね。
手順1:手元のパソコンで鍵を作る
まずは、あなたのパソコン(MacやWindowsのWSLなど)の端末(ターミナル)を開いて、以下のコマンドを実行します。
# Ed25519アルゴリズムを使って、自分用の鍵ペアを作成します
# 「-t ed25519」で種類を指定し、「-C」には自分のメールアドレスやメモを残します
ssh-keygen -t ed25519 -C "your_email@example.com"
実行すると、「どこに鍵を保存しますか?」や「パスワード(パスフレーズ)をかけますか?」と聞かれます。基本的にはそのままEnterキーを押して進めて大丈夫です(パスフレーズを設定しておくと、万が一パソコンを盗まれた時でもさらに安全になります!)。
これで、あなたの手元に id_ed25519(秘密鍵)と id_ed25519.pub(公開鍵)というファイルが出来上がります。
手順2:公開鍵をサーバーに登録する
次に、作った公開鍵(id_ed25519.pub の中身)を、サーバーの決まった場所(~/.ssh/authorized_keys)に置いてあげます。
手元のパソコンから、以下の便利なコマンド一発でコピーしちゃいましょう。
# サーバーのIPアドレス(またはドメイン名)とユーザー名を書き換えて実行してください
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@your_server_ip
これで、サーバー側が「あ、この鍵を持っている人は通していいんだな」と認識してくれました。
手順3:サーバー側の設定ファイルを書き換える(ここが本番!)
いよいよ、サーバーの「勝手口のルールブック」である設定ファイルを書き換えます。サーバーにSSHでログインしたら、以下のファイルをテキストエディタで開きます。
# 設定ファイル「sshd_config」を管理者権限(sudo)で開きます
sudo nano /etc/ssh/sshd_config
ファイルが開いたら、以下の設定項目を探して、書き換えて(またはコメントアウトを外して)いきます。
# ==========================================
# SSHセキュリティ要塞化設定
# ==========================================
# 1. パスワード認証を完全に無効化する(これが今回の最大の目的です!)
PasswordAuthentication no
# 2. 空パスワードでのログインを絶対に許さない
PermitEmptyPasswords no
# 3. 公開鍵認証を有効にする(通常はデフォルトでyesですが念のため確認)
PubkeyAuthentication yes
設定ができたら、ファイルを保存してエディタを閉じます(Nanoの場合は Ctrl + O で保存、Ctrl + X で終了です)。
手順4:設定を反映して、絶対に接続テストをする!
設定ファイルを書き換えただけでは、まだ古い記憶のまま動いています。サービスを再起動して新しいルールを適用させましょう。
# UbuntuやDebianの場合
sudo systemctl restart ssh
# CentOSやRHELの場合
sudo systemctl restart sshd
【超重要・ここが一番大事です!】
設定を変更したあと、「今開いている黒い画面(ターミナル)を絶対に閉じないまま」、新しくもう一枚別のターミナルウィンドウを開いて、サーバーに接続できるかテストしてください。
# 新しいウィンドウで、鍵を指定してログインできるか確認
ssh -i ~/.ssh/id_ed25519 username@your_server_ip
もしここで「鍵の読み込みエラー」などでログインできなかった場合、先ほど閉じてしまったウィンドウからもう一度設定を見直すことができます。万が一、テストをせずに今の画面を閉じてしまうと、二度とサーバーに入れなくなって泣くことになります(これを「鍵迷子によるサーバーロスト」と呼んだりします)。必ず接続テストを成功させてから、元の画面を閉じましょう!
—
まとめ:安全なインフラライフの第一歩を踏み出そう!
お疲れ様でした!ここまで設定できれば、あなたのサーバーの勝手口は、世界最高峰のセキュリティで守られた金庫の扉のように頑丈になりました。
パスワード認証を完全に切り捨てることは、インフラエンジニアとしての最初の誇るべき成果であり、大切な一歩です。
「小難しいな」と感じたかもしれませんが、一つひとつの意味を紐解けば、お家の防犯と全く同じシンプルな仕組みです。ぜひ、今日からあなたの開発環境や本番サーバーでも試してみてくださいね。
それでは、また次回のセキュリティ解説でお会いしましょう!安全で快適な開発ライフを!
コメント