CentOS Stream 9のインストールが完了しました。次はどうしますか?
黒い画面にコマンドプロンプトが表示されています。OSのインストールは道のりの10%に過ぎません。そのままアプリケーションを動かしてしまうと、遅かれ早かれセキュリティ侵害に遭うか、動作が非常に重くなってしまいます。信じてください。デフォルトの22番ポートを15分間開放しているだけで、システムログはボットネットからの総当たり攻撃(ブルートフォース攻撃)で埋め尽くされます。
私たちのチームは、CentOS 7からCentOS Stream 9への移行時に、混乱の対応で徹夜をしたことがあります。その血の滲むような教訓をこのチェックリストにまとめました。これにより、ただインストールしただけの状態から、真の本番環境に耐えうる「要塞」へと変貌させることができます。
どちらの道を選びますか:最小限か、それとも完全か?
システム管理者は通常、次の2つの派閥に分かれます:
- 最小限派 (Minimalist): 必要なものだけをインストールします。メリットは軽量で攻撃対象領域(アタックサーフェス)が狭いこと. デメリットは?サーバーがダウンした際、デバッグツールの不足に困ることです。
- 完全派 (Full-stack): セキュリティからカーネルの最適化まで、徹底的に設定します。これが、私が毎晩安心して眠るために選んでいる方法です。
ニーズとリスクのバランス
デフォルトの状態では、CentOS Stream 9は非常に「クリーン」です。EPELのような重要なリポジトリが不足しているため、使い慣れたツールのインストールで行き詰まることがあります。しかし、不要なものを詰め込みすぎるとサーバーが重くなります。最も合理的な戦略は、次の3つの柱に集中することです:パッケージ管理 – セキュリティ – パフォーマンス。
詳細なチェックリストの実行
1. システムの更新とホスト名の設定
この手順を飛ばしてはいけません。セキュリティパッチは、ISOファイルが作成された直後からリリースされます。すぐにすべてを最新バージョンに更新しましょう。
# システム全体を更新
sudo dnf update -y
# サーバーに明確な名前を設定(例:srv-web-prod-01)
sudo hostnamectl set-hostname srv-web-prod-01
2. EPELとCRBリポジトリの有効化
htopやngit、あるいは補助ライブラリをEPELなしでインストールしようとするのは、まさに苦行です。CentOS 9では、すべてをスムーズに進めるためにCRB (CodeReady Builder) リポジトリも有効にする必要があります。
sudo dnf install epel-release epel-next-release -y
sudo dnf config-manager --set-enabled crb
sudo dnf update -y
3. 管理用ユーザーの作成(Rootは絶対に使わない)
rootで直接ログインするのは、家の玄関にマスターキーを置きっぱなしにするようなものです。専用のユーザーを作成し、sudo権限を付与しましょう。
# 新規ユーザーの作成
useradd itfromzero
passwd itfromzero
# wheelグループを通じてsudo権限を付与
usermod -aG wheel itfromzero
4. SSHのセキュリティ強化
パスワード認証はもう時代遅れです。SSHキー(公開鍵認証)に切り替えましょう。デフォルトの22番ポートをランダムなポート(例:2222)に変更するだけで、自動スキャンツールによる不要なログの90%を削減できます。
/etc/ssh/sshd_config ファイルを開き、以下の行を編集します:
PasswordAuthentication no: パスワード認証を禁止。PermitRootLogin no: リモートからのrootログインを禁止。Port 2222: 接続ポートを変更。
sudo systemctl restart sshd
5. タイムゾーンの設定(日本標準時に同期)
システムログの時刻が間違っていると、トラブルシューティングが悲惨なことになります。タイムゾーンをJST(GMT+9)に設定しましょう。
sudo timedatectl set-timezone Asia/Tokyo
# 設定を確認
timedatectl status
6. SWAPによるメモリ不足の解消
1GBや2GBのメモリしかないVPSを借りている場合、MySQL 8やPHP-FPMなどのプロセスは、簡単にOOM (Out Of Memory) に陥り停止してしまいます。2GBのSwapファイルを作成することは、トラフィックが急増したときにサーバーを維持するための最も安価な方法です。
# 2GBのSwapファイルを作成
sudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 再起動時に自動有効化
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
7. Tunedによるパフォーマンス最適化
CentOS 9には「秘密兵器」である tuned があります。このツールは、特定の用途に合わせてカーネルパラメータを自動的に調整します。
sudo dnf install tuned -y
sudo systemctl enable --now tuned
# WebやDBを運用する場合は、throughput-performanceプロファイルを使用
sudo tuned-adm profile throughput-performance
8. ファイアウォールは絶対に無効にしない
systemctl stop firewalld (致命的なミスです) を行う代わりに、正しくポートを開放する方法を学びましょう。これが素人と本物のシステムエンジニアの境界線です。
# 新しいSSHポートと基本的なWebサービスを開放
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
9. 監視ツールのセットアップ
トラブルが発生した際、何がリソースを消費しているかを確認するツールが必要です。私はすべてのサーバーに、これらの基本的なツールセットをあらかじめインストールしています。
sudo dnf install htop nmap-ncat bmon vim traceroute -y
特に、Cockpitを忘れないでください。これは標準搭載されている非常に強力なWeb管理インターフェースで、コマンドを入力することなくリソースのグラフを監視できます。
sudo systemctl enable --now cockpit.socket
10. パッチの自動更新設定
毎日サーバーをチェックする余裕はないでしょう。あなたが眠っている間に、dnf-automatic に重要なセキュリティアップデートをダウンロードとインストールを自動で行わせましょう。
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer
実戦経験からのまとめ
これらのステップは一見単純に見えますが、非常に強固な基盤となります。私がよく目にする最大のミスは、初心者がSSHのセキュリティやSwapの設定を忘れて、いきなりDockerやNginxのインストールに飛びつくことです。その結果はどうなるでしょうか?わずか1週間後、サーバーがマイニング用のマルウェアに感染したり、ログの時刻が狂っていてデバッグが悪夢になったりするのです。
このチェックリストが、皆さんの試行錯誤の時間を数時間節約するのに役立てば幸いです。もっと良いヒントがあれば、ぜひ共有してください!

