VPSを借りたら最初にやる初期設定|SSH・ufw・自動更新を実機で確認

PRこの記事にはアフィリエイト広告が含まれます。紹介したサービスに申し込まれると、運営者が報酬を受け取ることがあります。評価や順位は報酬で変えていません。広告表記について

VPS は、借りた直後から世界中のどこからでも接続できる状態になります。インターネットには、SSH のパスワードを自動で試して回るプログラムが常に動いています。アプリを入れる前に、まず入口を固めておきましょう。

この記事では、Ubuntu の VPS を借りた直後にやる設定を順に解説します。スワップ以外の手順は、国内の VPS の初期状態(root でパスワードログインできる状態)を手元に再現し、実際に実行して確かめました。

先に結論:やることの一覧

順 やること 必須か
1 パッケージを最新にする 必須
2 作業用のユーザーを作り、鍵でログインできるようにする 必須(初期ユーザーが root の場合)
3 パスワードログインと root ログインを止める 必須
4 ufw で、使うポートだけを開ける 必須
5 自動更新の設定を確かめる 必須
6 fail2ban を入れる 任意
7 スワップを作る メモリ 2GB 以下なら推奨

手元で確かめた落とし穴は、次の3つです。

  • パスワードログインを止める設定は、ファイルの名前によっては効きません。 手元では、99- で始まる名前のファイルに書いても、パスワードログインは有効なままでした。
  • SSH のポートを変えても、SSH を再起動するだけでは変わりません。 Ubuntu 24.04 以降は、別のコマンドが必要です。
  • ufw の limit と fail2ban は、自分も締め出すことがあります。 締め出されたときに備えて、VPS の管理画面のコンソールの場所を確かめておいてください。

始める前に:各社の初期状態を確かめる

VPS の会社によって、最初にログインするユーザーや、管理画面のファイアウォールの初期状態が違います。公式マニュアルで確認できた内容は次のとおりです。

会社 最初のログイン SSH 鍵の登録 管理画面のファイアウォールの初期状態
XServer root とパスワード 作成時に選べる すべて拒否
シンVPS root とパスワード 作成時に選べる 公式ページで確認できず
ConoHa root とパスワード 作成時に選べる(設定するとパスワード認証は無効) 外からの接続は届かない
さくら ユーザー ubuntu とパスワード(root で直接は不可) 作成時に選べる(選ぶと鍵認証のみ) SSH(22番)だけ許可。ただし IPv6 と32768番以上は許可
KAGOYA ユーザー ubuntu(パスワードでの SSH は不可) 必須 適用しなければすべて許可
ABLENET 公式ページで確認できず 公式ページで確認できず 記載なし
Indigo 公開鍵でのログインのみ 必須 公式ページで確認できず
  • 最初のログインが root の会社では、この記事の手順をすべて行います。
  • 最初から ubuntu ユーザーでログインする会社では、手順2のユーザー作成を飛ばせます。ただし、ubuntu ユーザーにパスワードでログインしている場合は、手順3の前に必ず鍵を登録してください。 鍵を登録しないまま手順3でパスワードログインを止めると、入れなくなります。鍵の登録のしかたは手順2で説明します。
  • どちらの場合も、手順3の確認は行ってください。パスワードログインの設定は、会社が用意した OS のイメージによって違うためです。

管理画面のファイアウォールの違いは、セルフホスト用 VPS の選び方で詳しく比べています。

Ubuntu は 26.04 と 24.04 のどちらを選ぶか

2026年10月に新しく作るなら、26.04 LTS をおすすめします。標準のサポート期間が 2031年5月までと、24.04(2029年5月まで)より2年長いためです。XServer VPS、シンVPS、ConoHa VPS、さくらのVPS、KAGOYA CLOUD VPS、ABLENET VPS が、2026年4月から9月にかけて 26.04 の提供を始めました(各社の告知による。WebARENA Indigo は未提供)。さくらの 512MB プランと ABLENET のメモリ 1GB 未満のプランは対象外です。この記事の手順は、26.04 と 24.04 のどちらでも同じ結果でした。

手順1:パッケージを最新にする

最初に、OS のパッケージを最新にします。

sudo apt update
sudo apt full-upgrade -y

root でログインしている場合、sudo は付けなくても動きます。

途中で、SSH などの設定ファイルについて「新しい版に置き換えるか」を聞く画面が出ることがあります。会社が設定ファイルを書き換えている場合に出るものです。既定の「いまの版を残す(keep the local version currently installed)」を選んでください。 新しい版を選ぶと、鍵を登録する前にパスワードログインができなくなることがあります。

終わったら ls /var/run/reboot-required を実行します。ファイルがあれば、カーネルなどの更新が反映されるよう sudo reboot で再起動してください。

手順2:作業用のユーザーを作り、鍵でログインする

最初のログインが root の場合は、普段の作業に使うユーザーを作ります。ここでは名前を deploy にします。

手元のパソコンで鍵がなければ、先に作ります。 Mac と Windows(PowerShell)のどちらでも、次のコマンドで作れます。

ssh-keygen -t ed25519

VPS の作成時に公開鍵を登録していれば、root の ~/.ssh/authorized_keys に入っています。これを新しいユーザーに写します。以下は root で実行します。

adduser deploy
usermod -aG sudo deploy
install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys

adduser で決めるパスワードは、鍵を登録したあとは sudo を使うときにだけ入力します。

作成時に鍵を登録していない場合は、root に鍵がないため、上の install の2行は失敗します。代わりに、手元のパソコン(Mac や Linux)から ssh-copy-id deploy@サーバーのIPアドレス を実行してください。パスワードでログインして、公開鍵を登録できます。最初のユーザーが ubuntu の会社では、ssh-copy-id ubuntu@サーバーのIPアドレス です。Windows には ssh-copy-id がないため、VPS の作成時に鍵を登録するのが確実です。

ここで、いま開いている画面は閉じずに、別の画面から鍵でログインできるか確かめます。

ssh deploy@サーバーのIPアドレス

パスワードを聞かれずにログインでき、sudo whoami が root を返せば成功です。

手順3:パスワードログインと root ログインを止める

設定ファイルの名前に注意

Ubuntu の SSH の設定は、/etc/ssh/sshd_config.d/ に置いたファイルで変えるのが基本です。ここで気をつけたいのは、同じ項目が何度も書かれていると、最初に読み込んだ値が使われる点です。ファイルは名前の順に読み込まれます。

VPS によっては、ここに 50-cloud-init.conf という名前のファイルがあり、PasswordAuthentication yes(パスワードログインを許可)と書かれています。サーバーの初期設定を行う cloud-init という仕組みが作るファイルです。

手元で、パスワードログインを止める設定を2通りの名前で置き、実際に効いている値を確かめました。

置いたファイル root ログイン パスワードログイン
99-hardening.conf 拒否 許可のまま
00-hardening.conf 拒否 拒否

99- の名前では、先に読み込まれる 50-cloud-init.conf の「許可」が使われ、パスワードログインは止まりませんでした。50 より前に読み込まれる名前にしてください。

設定する

次の内容で /etc/ssh/sshd_config.d/00-hardening.conf を作ります。

sudo tee /etc/ssh/sshd_config.d/00-hardening.conf > /dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
EOF

KbdInteractiveAuthentication は、別の方式(キーボード対話式)でのパスワード入力を止める設定です。Ubuntu の初期設定でも無効ですが、会社のイメージで変えられていても止まるよう、明示しておきます。

書き間違いがないか確かめてから、SSH を再起動します。

sudo sshd -t
sudo systemctl restart ssh

sudo sshd -t で Missing privilege separation directory: /run/sshd と表示された場合は、sudo mkdir -p /run/sshd を実行してからやり直します。

手元では、restart を実行するまでは設定を変えてもパスワードログインが有効なままでした。再起動を忘れないでください。

本当に効いているか確かめる

サーバーの上では、実際に使われている値を sshd -T で確かめられます。

sudo sshd -T | grep -E '^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin) '

3つとも no になっていれば成功です。

手元のパソコンからも確かめます。次のコマンドは、鍵を使わずに接続を試し、サーバーが受け付ける方法を表示させます。

ssh -o PubkeyAuthentication=no -o BatchMode=yes deploy@サーバーのIPアドレス true
表示 意味
Permission denied (publickey,password). パスワードログインがまだ有効
Permission denied (publickey,keyboard-interactive). 別の方式でパスワードを入力できる状態(KbdInteractiveAuthentication を確認)
Permission denied (publickey). 鍵でしかログインできない(成功)

手元では、設定後に root は鍵を使っても拒否され、deploy は鍵でログインできました。

SSH のポートは変えなくてもよい

パスワードログインを止めれば、総当たりの試行は成功しません。ポートを 22 番から変えると記録に残る試行は減りますが、守りの強さはほとんど変わりません。

それでも変える場合、Ubuntu 24.04 以降は手順に注意が必要です。SSH が「接続が来たら起動する」仕組み(ソケット起動)になっているためです。

手元で Port 2222 を設定に加えて試した結果は次のとおりです。

実行したコマンド 待ち受けたポート
sudo systemctl restart ssh だけ 22(変わらない)
sudo systemctl daemon-reload と sudo systemctl restart ssh.socket 2222

この2つのコマンドは、Ubuntu が配布する設定ファイルのコメントにも書かれています。ポートを変えるときは、先に ufw と管理画面のファイアウォールで新しいポートを許可してから行ってください(ufw では sudo ufw limit 2222/tcp のように、変えたポートの番号で許可します)。順序を逆にすると、接続できなくなります。

手順4:ufw で使うポートだけを開ける

ufw は Ubuntu に付属するファイアウォールで、初期状態では無効です。入っていない場合は sudo apt install -y ufw で入れます。有効にする前に、必ず SSH を許可してください。 許可せずに有効にすると、いまの接続が切れて入れなくなります。SSH のポートを変えた場合は、下の limit OpenSSH(22番)の代わりに、変えたポートの番号(例:sudo ufw limit 2222/tcp)を許可してください。

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw limit OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

sudo ufw enable で確認を求められたら、y を入力します。80番と443番は、Web サイトやアプリを公開するときに使います。まだ使わないなら、後から追加しても構いません。

手元では、有効にする前は外から接続できたテスト用の8000番が、有効にした後は接続できなくなりました。SSH は引き続き接続できました。

limit で自分が締め出されることがある

limit は、30秒以内に6回以上接続してきた IP アドレスを拒否する設定です。手元で続けて接続すると、6回目から Connection refused で拒否され、30秒ほど待つと元に戻りました。

scp を何度も続けて実行したり、自動化ツールで短い間に何度も接続したりすると、この制限にかかります。困る場合は、limit の代わりに allow にしてください。

Docker で公開したポートは ufw を通りません

Docker の ports: や -p で公開したポートは、ufw で許可していなくても外から届きます。手元でも、ufw で許可していない8080番に、外から接続できました。127.0.0.1:8081:80 のように前に 127.0.0.1: を付けて公開すると、サーバーの中からだけ接続できる状態になりました。詳しくは Docker Compose と Caddy で HTTPS 公開する手順で解説しています。

手順5:自動更新の設定を確かめる

Ubuntu には、セキュリティの更新を自動で入れる unattended-upgrades が、最初から入っていて有効です。手元でも、26.04 と 24.04 の両方で有効になっていました。次のファイルの2行が、どちらも "1" なら有効です。

cat /etc/apt/apt.conf.d/20auto-upgrades

ただし、初期状態では次の2点に注意が必要です。

  • 自動で再起動しません。 カーネルの更新は、再起動するまで反映されません。
  • Docker は更新の対象外です。 自動で入るのは Ubuntu のセキュリティ更新だけで、Docker の公式リポジトリから入れたものは含まれません。Docker は、ときどき sudo apt update && sudo apt upgrade で更新してください。

深夜に自動で再起動させたい場合は、設定ファイルを1つ追加します。

sudo tee /etc/apt/apt.conf.d/52unattended-upgrades-local > /dev/null <<'EOF'
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
EOF

時刻はサーバーのタイムゾーンで決まります。日本時間で指定したいなら、先に sudo timedatectl set-timezone Asia/Tokyo で変えておきます。自動で再起動するなら、Docker のコンテナには restart: unless-stopped を付け、再起動後に自動で立ち上がるようにしておきます。

手順6(任意):fail2ban を入れる

fail2ban は、ログインに何度も失敗した IP アドレスを一定時間拒否するツールです。パスワードログインを止めていれば必須ではありませんが、試行の記録を減らせます。

sudo apt install -y fail2ban

Ubuntu では、入れるだけで SSH の監視が有効になります。手元で確かめた初期設定は、10分以内に5回失敗すると、10分間拒否でした。

BAN されると、正しい鍵でも入れません

手元では、登録していない鍵と存在しないユーザー名で合わせて6回接続したところで、失敗が5回に達して拒否されました。拒否されている間は、正しい鍵を使っても接続できませんでした。その場合は、VPS の管理画面のコンソールからログインし、sudo fail2ban-client set sshd unbanip 自分のIPアドレス で解除できます。

自分の IP アドレスが固定なら、拒否の対象から外しておくと安心です。

sudo tee /etc/fail2ban/jail.d/local.conf > /dev/null <<'EOF'
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 自分のIPアドレス
EOF
sudo systemctl restart fail2ban
  • fail2ban は ufw を通さず、自分で nftables に拒否の規則を入れるため、ufw status には表示されません。状況は sudo fail2ban-client status sshd で確かめます。
  • Ubuntu 24.04 の発売時の fail2ban には、起動しない不具合がありました。修正版がすでに配布されているため、手順1で更新していれば問題ありません。

手順7(推奨):スワップを作る

メモリが 1〜2GB のプランでは、メモリが足りなくなったときの逃げ場として、スワップを作っておくと安心です。cloud-init の公式ドキュメントによると、cloud-init は初期状態ではスワップを作りません(会社のイメージによっては作られていることもあります)。まず、あるかどうかを確かめます。

swapon --show
free -h

swapon --show が何も表示せず、free -h の Swap の行が 0B なら、スワップはありません。次の手順で 2GB のスワップファイルを作ります。

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

ファイルの作り方は、Ubuntu のマニュアル(swapon)が「最も移植性の高い方法」としている dd を使っています。この手順は、検証環境でスワップを作れなかったため、手元では試していません。

スワップは、メモリ不足で落ちるのを防ぐための保険です。動作は遅くなるため、常にスワップを使う状態なら、メモリの大きいプランに変えることを考えてください。

最後に確かめること

  • 別の画面から、作業用のユーザーで鍵でログインできる
  • sudo sshd -T で、パスワードログイン、キーボード対話式、root ログインが no
  • sudo ufw status で、SSH と使うポートだけが許可されている
  • VPS の管理画面のファイアウォールでも、同じポートだけを許可している
  • VPS の管理画面のコンソールから、ログインできることを確かめた

最後の項目は、締め出されたときの命綱です。設定が終わったら、一度コンソールを開いて確かめておいてください。

次にやること

入口を固めたら、アプリを公開する準備に進みます。

これから VPS を選ぶ場合は、管理画面のファイアウォールの違いも含めて セルフホスト用 VPS の選び方で比べています。

料金以外の比較(ファイアウォール、テンプレート、申込状況)
サービス管理画面のファイアウォール公式のテンプレート新規申込
ABLENET VPS大阪記載なし管理画面のファイアウォールは公式の仕様に記載がない。公式は OS のファイアウォールでの制限を案内しているDocker、Dify、n8n受付中脆弱性への対応では「新規申込の停止は予定していない」と案内
ConoHa VPS国内(都市名の記載なし)初期状態で拒否外からの接続は、許可するグループを付けるまで届かない。IPv4・IPv6とも設定できるDocker、Dify、n8n受付中脆弱性への対応で 10月19日に新規申込を停止し、10月23日に再開
KAGOYA CLOUD VPS未確認(公式ページに記載なし)初期状態は全許可適用していないサーバーは全許可。適用すると、許可したもの以外を拒否するDocker、Dify(n8nは確認できず)停止中脆弱性への対応で 10月19日から新規申込を停止。再開時期は未定
さくらのVPS石狩の価格(東京・大阪はこれより高い)一部だけ制限初期状態は SSH(22番)だけ許可。ただし IPv6 は全許可で、32768番以上のポートも常に許可される。スタートアップスクリプトで作成した場合は初期状態でオフDocker、Dify、n8n一部のみ受付脆弱性への対応で 10月16日に全リージョンの新規申込を停止。10月23日に石狩だけ再開し、東京・大阪は再開時期未定。石狩の 4GB〜16GB は 10月2日から在庫切迫の告知あり
シンVPS国内(都市名の記載なし)未確認初期状態は公式ページで確認できなかった。オフにすると全ポートが許可されるDocker、Dify、n8n受付中新規申込の停止の告知は見当たらない
WebARENA Indigo東京未確認初期状態は公式ページで確認できなかったなし(Docker、Dify、n8nは確認できず)停止中脆弱性への対応で 10月21日から新規申込を停止。再開時期は未定。平常時も平日16時〜翌9時と土日祝は申し込めない
XServer VPS国内(都市名の記載なし)初期状態で拒否契約直後はすべての接続を拒否する設定。IPv6 の扱いは未確認Docker、Dify、n8n受付中9月17日から停止していた新規受付を 10月6日に再開。2GB は 7月14日に受付停止が告知され、再開の告知は見当たらない。10月21〜22日は脆弱性への対応で公式サイトと管理画面を停止し、10月23日に新規申込を再開

に各社の公式ページとお知らせで確認しました。テンプレートは、Docker・Dify・n8n をまとめて入れられる公式の仕組み(アプリイメージ、スタートアップスクリプトなど)の有無です。

各社の出典(公式ページ)を見る

出典

  1. sshd_config(Ubuntu 24.04 の配布版、Launchpad)(に確認)
  2. sshd_config(5)(Ubuntu Manpage)(に確認)
  3. cloud-init の ssh_util.py(50-cloud-init.conf を書き込む処理)(に確認)
  4. Automatic updates(Ubuntu Server 公式ドキュメント)(に確認)
  5. ufw(8)(Ubuntu Manpage)(に確認)
  6. Packet filtering and firewalls(Docker 公式)(に確認)
  7. fail2ban is broken in 24.04 Noble(Launchpad Bug(に確認)
  8. swapon(8)(Ubuntu Manpage)(に確認)
  9. Ubuntu release cycle(Ubuntu 公式)(に確認)
  10. OS再インストール(XServer VPS マニュアル)(に確認)
  11. 公開鍵認証を設定する(ConoHa VPS サポート)(に確認)
  12. 管理ユーザーログイン(さくらのVPS マニュアル)(に確認)
  13. SSH接続の設定(KAGOYA CLOUD VPS マニュアル)(に確認)
  14. WebARENA Indigo のセキュリティ(WebARENA 公式)(に確認)
  15. Ubuntu 26.04(さくらのVPS マニュアル)(に確認)
  16. サーバー作成直後に設定しておくべき初期セキュリティ設定(さくらのVPS マニュアル)(に確認)
  17. XServer VPSの契約直後に対応すべきセキュリティ対策(XServer VPS 運用ガイド)(に確認)
  18. OSイメージ「Ubuntu 26.04」の提供を開始(XServer VPS)(に確認)
  19. リリースノート(ConoHa VPS)(に確認)
  20. 「Ubuntu Server 26.04」OSテンプレートを新たに追加(KAGOYA)(に確認)
  21. Mounts(cloud-init 公式ドキュメント)(に確認)