Ubuntu 26.04 サーバー初期設定10項目|SSH・UFW・自動更新・タイムゾーンまで

HOMEリナックスマスター.JP 公式ブログLinux学習ガイド, Ubuntu > Ubuntu 26.04 サーバー初期設定10項目|SSH・UFW・自動更新・タイムゾーンまで
宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「Ubuntu 26.04 LTSをサーバーとしてインストールしたものの、最初に何を設定すれば本番運用に耐えるのか、どこから手を付ければいいのか分からない」
そう感じている方に向けて、今回は1ページで全工程をなぞれる初期設定の決定版をまとめます。

インストール直後のサーバーは、言わば「素のままのスーツ」です。仕立て直してから現場に出さないと、ちょっとした風で着崩れます。私自身、検証用のVPSや社内サーバーで26.04を何度も初期設定してきましたが、毎回同じ10項目を同じ順序でこなしています。順番を間違えると、SSHから締め出されたりufwで自分のセッションを切ったりと、笑えない事故が起きます。

この記事では、Ubuntu 26.04 LTSサーバーで最初にやるべき初期設定10項目を、コマンド例と実出力を交えて順番通りに解説します。Ubuntu 26.04 LTSの変更点を先に把握したい方は「Ubuntu 26.04 LTS 変更点まとめ」を、まだインストールが済んでいない方は「Ubuntu 26.04 LTS インストール手順|USBメモリ作成からデスクトップ起動まで全工程」を先に読んでおくと、本記事の内容がそのまま手を動かす流れにつながります。

この記事のポイント

・初期設定はSSH鍵→UFW→自動更新の順で進めるのが事故が少ない
・apt updateより先にミラーをjp.archive/jaistへ切り替えると速い
・sshd_configはPasswordAuthentication noの前に必ず鍵で疎通確認
・unattended-upgradesでセキュリティ更新だけ自動化するのが現実解


Ubuntu 26.04 サーバー初期設定10項目|SSH・UFW・自動更新・タイムゾーンまで
「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

1. apt updateとミラー設定の見直し

最初にやるのはパッケージリストの更新ですが、その前にミラー(パッケージの取得元サーバー)を日本のものに切り替えておくと、後の作業全部が速くなります。

デフォルトのミラーは `archive.ubuntu.com` で、海外経由になることが多いです。jaistまたはjp.archiveに変更します。

jp.archive.ubuntu.com:Ubuntu公式の日本ミラー、安定性重視
ftp.jaist.ac.jp:北陸先端科学技術大学院大学のミラー、国内最速クラス

私は普段jaistを使っています。回線が太い検証環境ならjp.archiveでも体感差は小さいです。

# 既存のsources.listをバックアップする $ sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak # sedでミラーを一括置換する(jaistの場合) $ sudo sed -i 's|http://archive.ubuntu.com/ubuntu|https://ftp.jaist.ac.jp/pub/Linux/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources $ sudo sed -i 's|http://security.ubuntu.com/ubuntu|https://ftp.jaist.ac.jp/pub/Linux/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources # パッケージリストを更新する $ sudo apt update ヒット:1 https://ftp.jaist.ac.jp/pub/Linux/ubuntu plucky InRelease 取得:2 https://ftp.jaist.ac.jp/pub/Linux/ubuntu plucky-updates InRelease [110 kB] 取得:3 https://ftp.jaist.ac.jp/pub/Linux/ubuntu plucky-security InRelease [110 kB] パッケージリストを読み込んでいます... 完了 # 既存パッケージをアップグレードする $ sudo apt upgrade -y

26.04では従来の `/etc/apt/sources.list` ではなく、deb822形式の `/etc/apt/sources.list.d/ubuntu.sources` が標準です。古い記事の手順をそのまま流用するとファイルが見つからなくて焦ります。私も最初の検証時に「ファイルがない、壊れたか」と一瞬疑いました。ファイル形式が変わっただけで、書き換える内容自体は同じです。

ミラー切替後はリポジトリのURLが正しく反映されているか、`apt update` 実行時の取得元行を必ず目視確認してください。「ヒット:1 https://ftp.jaist.ac.jp/...」のように出ていればOKです。海外ミラーのままだと、後続のapt installが体感で2倍3倍遅くなります。

2. タイムゾーンとロケール設定

サーバーの時刻がUTCのままだと、ログを読む時に毎回9時間引き算する羽目になります。最初にAsia/Tokyoに変更しておきます。

# 現在のタイムゾーンを確認する $ timedatectl Local time: Fri 2026-04-24 10:23:45 UTC Universal time: Fri 2026-04-24 10:23:45 UTC Time zone: Etc/UTC (UTC, +0000) System clock synchronized: yes NTP service: active # Asia/Tokyoに変更する $ sudo timedatectl set-timezone Asia/Tokyo # 変更を確認する $ timedatectl | grep "Time zone" Time zone: Asia/Tokyo (JST, +0900)

NTP同期が `active` になっていることも確認してください。`inactive` の場合は `sudo systemctl enable --now systemd-timesyncd` で有効化します。

ロケール(言語環境)はサーバー用途では `en_US.UTF-8` のままでも問題ありませんが、日本語のメッセージが欲しい場合は `ja_JP.UTF-8` を追加します。

# 現在のロケールを確認する $ locale LANG=C.UTF-8 LANGUAGE= LC_CTYPE="C.UTF-8" ... # 日本語ロケールを生成する $ sudo locale-gen ja_JP.UTF-8 $ sudo update-locale LANG=ja_JP.UTF-8 # 再ログイン後に反映を確認する $ locale | grep LANG LANG=ja_JP.UTF-8

サーバー用途なら `LANG=C.UTF-8` のまま、日本語ファイル名を扱う必要があれば `ja_JP.UTF-8` という使い分けで十分です。ロケールを日本語にすると、`man` コマンドのページや一部ツールのエラーメッセージも日本語になりますが、英語のままのほうがWebで検索しやすいというメリットもあります。チームで運用するならどちらに揃えるか最初に決めておくほうが、トラブル時の情報共有がスムーズです。

3. ホスト名とhostsファイルの設定

ホスト名は後から変えるとログ集約や監視ツールの設定がズレるので、最初に確定させます。

# 現在のホスト名を確認する $ hostnamectl Static hostname: ubuntu Icon name: computer-vm Chassis: vm Machine ID: 9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d Boot ID: 1234567890abcdef1234567890abcdef Virtualization: kvm Operating System: Ubuntu 26.04 LTS Kernel: Linux 6.14.0-15-generic Architecture: x86-64 # ホスト名を変更する $ sudo hostnamectl set-hostname web01.example.local # hostsファイルにエントリを追加する $ sudo vi /etc/hosts

`/etc/hosts` には自分自身のFQDNを必ず追加します。

# /etc/hostsの編集例 127.0.0.1 localhost 127.0.1.1 web01.example.local web01 ::1 localhost ip6-localhost ip6-loopback

ここを設定しておかないと、後でPostfixやApacheを入れた時に「sudo時にunable to resolve hostと出る」「メールが localhost.localdomain から送信される」といった地味なトラブルで時間を溶かします。クラウドのインスタンスを大量に立てる場合、ホスト名にプロジェクト名や役割を含めておくと、sshで複数サーバーを行き来する時にプロンプトを見るだけで「今どこに入っているか」が一目で分かります。`web01`、`db-stg-01`、`bastion-prd` のように、役割と環境とインデックスを組み合わせる命名が運用しやすいです。

4. SSH鍵認証の設定とパスワード認証OFF

ここからが本題です。SSH鍵を設定し、パスワード認証を無効化します。順序を間違えるとSSHから自分が締め出されます。

手順は必ず以下の順で進めてください。

手順A:クライアント側で鍵ペアを生成する
手順B:公開鍵をサーバーへ転送する
手順C:鍵だけで接続できることを確認する
手順D:確認できてからパスワード認証をOFFにする

クライアント(手元のPC)側で鍵ペアを作ります。

# クライアント側で鍵ペアを生成する(Ed25519推奨) $ ssh-keygen -t ed25519 -C "your_email@example.com" Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): ******** Enter same passphrase again: ******** Your identification has been saved in /home/user/.ssh/id_ed25519 Your public key has been saved in /home/user/.ssh/id_ed25519.pub # 公開鍵をサーバーへコピーする $ ssh-copy-id user@192.168.1.45

`ssh-copy-id` が使えない環境(Windowsの素のOpenSSH等)では、公開鍵を手動で貼り付けます。

# サーバー側で.sshディレクトリを作成する $ mkdir -p ~/.ssh $ chmod 700 ~/.ssh # authorized_keysに公開鍵を追記する $ vi ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys

別ターミナルから鍵で接続できることを確認します。`Permission denied` が出るうちはまだパスワード認証を切ってはいけません。

鍵で入れることが確認できたら、`/etc/ssh/sshd_config` を編集します。

# sshd_configを編集する $ sudo vi /etc/ssh/sshd_config # 該当行を以下のように変更する PasswordAuthentication no PubkeyAuthentication yes PermitRootLogin no PermitEmptyPasswords no # 設定の構文チェック $ sudo sshd -t # サービスを再起動する $ sudo systemctl restart ssh

26.04ではサービス名が `ssh` です。`sshd` で叩くと `Unit sshd.service not found` と出るので注意してください。

再起動後、必ず別ターミナルからもう一度接続テストをします。今のセッションは生かしたまま、新しい窓でログインできれば成功です。失敗してもセッションが残っていればやり直せます。

SSHのポート番号も変更したい場合は、後述のUFWルールも合わせて変更する必要があります。先にUFWを設定する流れの方が安全です。22番のままでもfail2banやIP制限を併用すれば実用上の問題はありません。「ポート変更すれば安全」という古い考え方は今では通用しないので、ポート変更にこだわるよりは鍵認証のみ・root禁止・接続元IP制限の3点をしっかり固めるほうが効きます。

5. UFWで22/80/443だけ開ける手順

UFW(Uncomplicated Firewall)はiptablesのフロントエンドで、Ubuntuが標準で持っているファイアウォールツールです。シンプルなコマンドで必要なポートだけ開けます。

ここでも順序が大事です。**SSHを開ける前に `enable` してはいけません**。SSHから締め出されます。

# 現在のUFWの状態を確認する $ sudo ufw status 状態: 非アクティブ # デフォルトポリシーを設定する $ sudo ufw default deny incoming $ sudo ufw default allow outgoing # SSH(22)・HTTP(80)・HTTPS(443)を許可する $ sudo ufw allow 22/tcp comment 'SSH' $ sudo ufw allow 80/tcp comment 'HTTP' $ sudo ufw allow 443/tcp comment 'HTTPS' # UFWを有効化する $ sudo ufw enable コマンドは既存のssh接続を中断する可能性があります。続行しますか (y|n)? y ファイアウォールはアクティブかつシステム起動時に有効化されます。 # ルールを確認する $ sudo ufw status verbose 状態: アクティブ ロギング: on (low) デフォルト: deny (incoming), allow (outgoing), disabled (routed) 新しいプロファイル: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 80/tcp ALLOW IN Anywhere 443/tcp ALLOW IN Anywhere

特定のIPからのみSSHを許可したい場合は以下のように書きます。

# オフィスIPからのみSSH許可 $ sudo ufw allow from 203.0.113.10 to any port 22 proto tcp # 既存の22/tcpルールを削除する $ sudo ufw status numbered $ sudo ufw delete 1

ポートが本当に開いているか確認したい場合は、別記事の「Linuxでポートの使用状況を確認するコマンド|ss・lsof・netstatの使い分け」でss・lsof・netstatによるLISTEN確認の手順をまとめています。UFW設定後はサーバー内側からの確認とクライアント側からのncによる疎通確認の両方をやっておくと安心です。
Ubuntu 26.04 サーバー初期設定10項目|SSH・UFW・自動更新・タイムゾーンまで - 解説1

6. unattended-upgradesで自動セキュリティ更新を有効化

セキュリティ更新を手動でやるのは現実的ではありません。unattended-upgradesでセキュリティパッチだけ自動適用する設定を入れます。

# unattended-upgradesをインストールする(多くの場合プリインストール済み) $ sudo apt install -y unattended-upgrades apt-listchanges # 設定ファイルを生成する(対話モードでEnableを選択) $ sudo dpkg-reconfigure --priority=low unattended-upgrades # 設定内容を確認する $ cat /etc/apt/apt.conf.d/50unattended-upgrades | grep -E '^[^/]' | head -20 Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}"; "${distro_id}:${distro_codename}-security"; "${distro_id}ESMApps:${distro_codename}-apps-security"; "${distro_id}ESM:${distro_codename}-infra-security"; };

デフォルトではセキュリティ更新だけが対象です。アプリケーションの通常更新まで自動にすると、深夜に勝手にバージョンが上がって朝起きたら動かないということが起きるので、セキュリティのみが現実解です。

# テスト実行(実際には適用しない、ログに何が更新されるか出力) $ sudo unattended-upgrades --dry-run --debug # 実行ログを確認する $ sudo tail -30 /var/log/unattended-upgrades/unattended-upgrades.log

再起動が必要な更新が来た時の挙動も設定できます。`/etc/apt/apt.conf.d/50unattended-upgrades` の `Unattended-Upgrade::Automatic-Reboot` を `"true"` にし、`Automatic-Reboot-Time "03:00"` を設定すれば、深夜3時に自動再起動します。本番Webサーバーでは慎重に判断してください。

7. 一般ユーザー作成とsudo権限付与

rootで日常作業をするのは事故のもとです。作業用の一般ユーザーを作り、sudo経由で特権操作する形に統一します。

# 一般ユーザーを作成する $ sudo adduser deploy ユーザー `deploy' を追加しています... 新しいユーザー `deploy' (1001) をグループ `deploy' (1001) で追加しています... ホームディレクトリ `/home/deploy' を作成しています... 新しい UNIX パスワードを入力してください: ******** 新しい UNIX パスワードを再入力してください: ******** passwd: パスワードは正しく更新されました # sudoグループに追加する $ sudo usermod -aG sudo deploy # 確認 $ id deploy uid=1001(deploy) gid=1001(deploy) groups=1001(deploy),27(sudo)

新しいユーザーにもSSH鍵を設定します。手順は項目4と同じです。

sudo時にパスワードを毎回求められるのが煩わしい場合は、`visudo` で以下を追加します。

# 専用ファイルで管理する(推奨) $ sudo visudo -f /etc/sudoers.d/deploy # 以下を記述 deploy ALL=(ALL) NOPASSWD:ALL

NOPASSWDは便利な反面、SSH鍵が漏れると即root権限を取られるリスクと裏表です。本番環境ではパスワードを求める運用にしておくほうが私はおすすめです。20年以上現場でサーバーを触ってきた経験から言うと、便利さと安全のトレードオフは「ちょっとだけ不便な方」を選んだほうが、長い目で見て事故が少ないです。

8. DNSとhostsの動作確認

サーバーが外部の名前解決を正しくできるか確認します。`resolvectl` でsystemd-resolvedが管理するDNSの状態を見ます。

# 現在のDNS設定を確認する $ resolvectl status Global Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported resolv.conf mode: stub Link 2 (enp0s3) Current Scopes: DNS Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 192.168.1.1 DNS Servers: 192.168.1.1 # 名前解決のテスト $ resolvectl query www.google.com www.google.com: 142.250.207.36 -- link: enp0s3 2404:6800:4004:818::2004 -- link: enp0s3

DNSサーバーを固定したい場合は、netplanの設定ファイルを編集します。

# netplan設定ファイルを確認する $ ls /etc/netplan/ 01-network-manager-all.yaml # DNSを固定する設定例 $ sudo vi /etc/netplan/01-netcfg.yaml network: version: 2 ethernets: enp0s3: dhcp4: true nameservers: addresses: [1.1.1.1, 8.8.8.8] # 設定を反映する $ sudo netplan apply

DNS関連のトラブルシュート全般は「LinuxのDNS設定方法|resolv.confが元に戻る原因とnmcliの手順」に詳しくまとめています。`/etc/resolv.conf` を直接編集すると上書きされる現象や、searchドメインの扱いなど、はまりどころを一通り解説しているので、設定後に挙動が怪しい時は併せてご覧ください。

9. ログローテーションと監視の基本確認

Ubuntu 26.04では `journalctl` がメインのログ閲覧コマンドです。systemd-journaldのログサイズ制限を確認しておきます。

# 現在のジャーナルサイズを確認する $ journalctl --disk-usage Archived and active journals take up 168.0M in the file system. # 最大サイズを設定する(/etc/systemd/journald.confを編集) $ sudo vi /etc/systemd/journald.conf # 該当行のコメントを外して値を設定 SystemMaxUse=500M SystemKeepFree=1G # 設定を反映する $ sudo systemctl restart systemd-journald # 古いジャーナルを掃除する $ sudo journalctl --vacuum-time=30d $ sudo journalctl --vacuum-size=200M

伝統的な `/var/log/` 配下のテキストログは `logrotate` が管理しています。デフォルト設定でだいたい問題ありませんが、独自アプリのログを置くなら `/etc/logrotate.d/` に設定ファイルを追加します。

ディスク容量の枯渇はサーバー停止の典型的な原因です。`/var/log` が肥大化してルートパーティションを食いつぶすと、SSHログインすらできなくなることがあります。最初のうちに `df -h` をcronで毎日メールする仕組みを入れておくか、PrometheusやMackerelのような監視ツールでアラートを設定しておくと、慌てなくて済みます。

10. 設定後の動作確認コマンド集

ここまでの設定が正しく入ったかを確認するコマンドをまとめます。1セットでチェックすれば見落としがありません。

# 1. OSバージョン $ lsb_release -a Distributor ID: Ubuntu Description: Ubuntu 26.04 LTS Release: 26.04 # 2. タイムゾーンとNTP $ timedatectl | grep -E 'Time zone|synchronized' Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes # 3. ホスト名 $ hostnamectl --static web01.example.local # 4. SSHのリッスン状態 $ sudo ss -tlnp | grep ssh LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3)) # 5. SSH設定の確認 $ sudo sshd -T | grep -E 'passwordauthentication|permitrootlogin|pubkeyauthentication' permitrootlogin no pubkeyauthentication yes passwordauthentication no # 6. UFWの状態 $ sudo ufw status verbose # 7. unattended-upgradesの動作 $ systemctl is-active unattended-upgrades active # 8. DNS解決 $ resolvectl query www.google.com # 9. 起動済みサービス一覧 $ systemctl list-units --type=service --state=running --no-pager | head # 10. 直近のエラーログ $ sudo journalctl -p err -n 20 --no-pager

10項目全てが想定通りの結果を返せば、サーバーは本番投入できる状態です。私のセミナーでも、初期設定の最後にこの10コマンドを順に叩いて、受講生に「自分の手で設定が入ったことを目で確認する」体験をしてもらっています。チェックリスト化しておくと、次のサーバーを立てる時にコピペで使えます。
Ubuntu 26.04 サーバー初期設定10項目|SSH・UFW・自動更新・タイムゾーンまで - まとめ

本記事のまとめ

項目 要点
1. apt updateとミラー jp.archiveまたはjaistへ切替、26.04はdeb822形式
2. タイムゾーン・ロケール timedatectl set-timezone Asia/Tokyoを最初に
3. ホスト名・hosts FQDNを/etc/hostsに必ず登録
4. SSH鍵認証 鍵で疎通確認してからPasswordAuthentication no
5. UFW 22/80/443を開けてからenable、デフォルトdeny
6. unattended-upgrades セキュリティ更新のみ自動、通常更新は手動
7. 一般ユーザー adduser→sudoグループ、SSH鍵も設定
8. DNS確認 resolvectlで状態確認、固定はnetplanで
9. ログローテーション journaldのサイズ制限とlogrotate確認
10. 動作確認 10コマンドのチェックリストで全項目検証
ここまでの10項目をなぞれば、Ubuntu 26.04 LTSサーバーの初期設定はひと通り完了です。所要時間は手順に慣れていれば30分から1時間ほどです。

本記事ではUbuntuのカーネル管理(HWEとGAの違い、apt-mark holdでのバージョン固定など)には触れていません。本番運用でカーネル更新を意図的に制御したい方は「Ubuntu 26.04 カーネル管理の基本|HWE・GAの違いとアップデート制御コマンド」の記事は近日公開予定です。

また、初期設定後に起こりがちなトラブル(起動しない、ネット繋がらない、GUI落ちる等)への対処法は「Ubuntu 26.04でよくあるトラブル12選|起動しない・ネット繋がらない・GUI落ちる時の対処」の記事も近日公開予定です。事前に目を通しておくと、いざという時の復旧が早くなります。

20年以上Linuxサーバーの構築・運用を続けてきた中で、初期設定の手抜きが後々のトラブルにつながるケースを何度も見てきました。「とりあえず動いたから本番投入」ではなく、本記事の10項目を通して「自分の手で固めた」状態にしてから運用に入るほうが、結果的に楽です。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Linux Master Pro Seminarでは少人数ハンズオン形式で実践的なスキルをお伝えしています。詳しくはセミナー案内ページをご確認ください。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。


Linux無料マニュアル(図解60P) 名前とメールで30秒登録