セキュアVPS構築(第1回)初期設定とセキュリティ強化

この記事では、VPSを安全に運用するために
「さくらのVPSを立ち上げた状態から、WordPressを公開するまで」
に実施すべきステップの全体像をガイドします。

第1回(この記事)では、VPSにおける基本的なセキュリティ強化設定
第2回では、WordPressを導入しnginxを介して公開する方法

について紹介します。

個々の細かな手順(コマンドや設定ファイルの詳細)は割愛していますが、流れを理解することで「何をやればよいか」が一望できる構成になっています。
実際の構築時には公式ドキュメントや各サービスのリファレンスも併せてご参照ください。

なお、ご紹介する手順は筆者の環境をベースに作成しています。
参考にされる場合は自己責任でお願いします。
また、必ずしも全ての環境において最適、最高水準という訳ではありませんので、その点はご了承ください。

今回は 初期構築と基本的なセキュリティ強化 がテーマです。


前提条件

  • さくらのVPS/1Gプラン
  • OS: Rocky Linux 9
  • 初期状態ではSELinuxは無効
  • SSHはパスワードログイン有効

SSHは契約時点で公開鍵を登録することも可能です。
当記事ではパスワードログイン有効な状態でスタートすることを前提としています。

契約完了後、管理コンソールからVPSを起動すると直ぐにインターネット経由でSSHアクセス可能になります。
このまま運用を続けるのは非常に心許ないのでセキュリティ設定を底上げしていきます。


1. システム更新

まずはパッケージを最新化(dnf update)します。


2. SSHの強化

SSHのセキュリティ設定を強化します。

  • 公開鍵認証を有効化
  • パスワードログインを無効化
  • rootのssh経由ログインを禁止

3. Firewalld 設定

コマンドfirewall-cmd --list-allでFirewalldの状況を確認し、最低限のポートだけ許可します。

  • 許可: ssh, http, https
  • その他はすべて削除

4. fail2ban 導入

fail2banを導入するとSSHログイン失敗を監視し、一定回数超過したIPを自動で遮断することができます。
ブルートフォース攻撃対策に効果がありますので是非導入を検討してください。

VPSの利用が初めての方は少々驚かれるかも知れませんが/var/log/secureを見てみてください。
VPSを立ち上げた直後から、SSHログインを試行してくるような不正なアタックを受けていることが分かると思います。


5. 自動更新 (dnf-automatic)

セキュリティ重視の環境においてはセキュリティパッチは自動適用することが望ましいと考えます。
dnf-automaticを導入すると、セキュリティアップデートの自動更新を実装できます。
dnf-automaticの最新版(RHEL 9系)ではrebootオプションが追加され、再起動も自動化できるようになりました。

再起動は手動で実行したいという場合は
dnf needs-restartingを実行すると再起動の要否が分かります。


6. 不要サービスの停止

OSデフォルトで自動起動するサービスの中には、利用者の環境によっては不要なものもあります。
使わないサービスを起動させておくのはリスクになるのて停止しましょう。
コマンドsystemctl list-unit-files --state=enabledで現在有効になっているサービスを確認できます。

例えば筆者の環境では以下のサービスを停止しました。

  • nis: NIS関連(古い認証方式)
  • sssd: LDAPやActive Directory連携が不要なら停止

7. ポートスキャンで確認

外部から見えるポートをチェックし、意図しないサービスが公開されていないか確認します。
nmapなどを使うと分かりやすいです。
なお、チェックするサーバは必ず自分が管理している(明示的な許可を得ている)サーバに限定してください。
許可なくポートスキャンした場合は不正アクセス行為と見なされる場合があります。


8. SELinuxの有効化

SELinuxとは”Security-Enhanced Linux”の略で、Linuxシステムに強制アクセス制御(MAC)機能を追加し、セキュリティを強化する仕組みです。
米国国家安全保障局(NSA)によって開発され、ファイルやプロセスに「ラベル(セキュリティコンテキスト)」を付与し、設定された「ポリシー」に基づき、システム管理者が定義したアクセス規則に従ってアクセス制御を行います。

SELinuxにより、rootを含むすべてのアクセスが制限され、万が一システムに侵入されても被害範囲を抑えることができます。

LAN内のLinuxサーバは利便性重視でSELinuxを無効にされている場合もあるかと思いますが、インターネット上に公開するLinuxサーバはSELinuxを有効にして運用することをご検討ください。

さくらのVPSは、初期状態ではSELinuxが無効化されています。(2025年8月現在)
以下の手順でSELinuxを有効化します。

  1. SELinux設定をpermissiveに変更
  2. grubのカーネル起動オプションからselinux=0を削除
  3. /.autorelabel を作成して再起動
  4. 問題なければ、SELinux設定をenforcingに変更

SELinuxのブロック確認はausearchコマンドで行います。
SELinuxの状態判断は色々な考え方があると思いますが、筆者は、直近のブロック記録を確認し、想定外のログがなければSELinuxは期待通り通り動作してると判断しています。


9. トラブルシューティング

  • SELinuxに締め出された場合
    SSHやSELinuxの設定を誤るとSSHだけでなくコンソールログインからも弾かれてしまうことがあります。
    そんな時はVPSの管理画面コンソールからレスキューモードで起動し、SELinux設定をpermissiveに戻してみてください。
    再びコンソールからログインできるようになると思います。
  • メモリ不足で dnf update が失敗する場合
    1Gプラン以下では、dnf update中にOOM(Out Of Memory)が発生する可能性が高いと思います。
    物理メモリより速度は落ちますがスワップ領域を用意(拡張)することでOOMを回避できます。

まとめ

筆者においては、ここまでの作業を行うことで、セキュアなVPSサーバの初期構築のゴールとしています。

  • SSHは公開鍵認証のみ許可
  • セキュリティパッチの自動更新
  • SSH不正アクセス元の遮断
  • 不要ポート・サービスの閉鎖
  • SELinuxの有効化

次回は Web公開環境の構築 に進みます。