Linuxサーバーの初期設定——SSH鍵認証からfirewalld設定まで

VPSや物理サーバーを借りたときに最初にやるべき初期設定を、SSH鍵認証・sudoユーザー作成・ファイアウォール設定の順に解説します。

はじめに

クラウドやVPSでLinuxサーバーを立ち上げた直後は、セキュリティ的にほぼ無防備な状態です。rootのパスワードログインが有効だったり、すべてのポートが開放されていたりすることも珍しくありません。本記事ではUbuntu 22.04 LTSを前提に、最初にやるべき初期設定をまとめます。


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

rootのまま作業するのはリスクが高いため、まず一般ユーザーを作成します。

1
2
3
4
5
6
7
8
9
# ユーザー作成
adduser yoneyan

# sudo グループに追加
usermod -aG sudo yoneyan

# 切り替えて動作確認
su - yoneyan
sudo whoami   # root と表示されれば OK

2. SSH鍵認証の設定

パスワード認証はブルートフォース攻撃の標的になるため、鍵認証に切り替えます。

クライアント側:鍵ペアの生成

1
2
ssh-keygen -t ed25519 -C "your_email@example.com"
# デフォルトで ~/.ssh/id_ed25519 と ~/.ssh/id_ed25519.pub が生成される

RSA-4096でも問題ありませんが、Ed25519はよりコンパクトで安全です。

サーバー側:公開鍵の配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 一般ユーザーで作業
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# クライアントから公開鍵をコピー(クライアント側で実行)
ssh-copy-id -i ~/.ssh/id_ed25519.pub yoneyan@your-server-ip

# または手動で追記
cat id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

sshd_config の変更

1
sudo vim /etc/ssh/sshd_config

以下の項目を変更します。

Port 2222                    # デフォルトの22番から変更(任意)
PermitRootLogin no           # rootログインを禁止
PasswordAuthentication no    # パスワード認証を無効化
PubkeyAuthentication yes     # 鍵認証を有効化

設定を反映します。

1
sudo systemctl restart ssh

注意: sshd を再起動する前に、必ず別ターミナルで鍵認証によるログインができることを確認してください。設定ミスで締め出されるとコンソール接続が必要になります。


3. ファイアウォールの設定(ufw)

Ubuntuには ufw(Uncomplicated Firewall)が標準で入っています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 現在の状態確認
sudo ufw status

# デフォルトポリシー:インバウンドを全拒否、アウトバウンドを全許可
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 必要なポートだけ開ける
sudo ufw allow 2222/tcp   # SSH(Port変更した場合)
sudo ufw allow 80/tcp     # HTTP
sudo ufw allow 443/tcp    # HTTPS

# 有効化
sudo ufw enable

# 確認
sudo ufw status verbose

4. 自動アップデートの設定

脆弱性パッチを自動適用するために unattended-upgrades を有効化します。

1
2
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

設定ファイルは /etc/apt/apt.conf.d/50unattended-upgrades で細かく制御できます。再起動が必要なアップデートの自動再起動などはここで設定します。


5. タイムゾーンとNTPの設定

ログのタイムスタンプがUTCのままだと調査時に混乱するため、JST に変更します。

1
2
sudo timedatectl set-timezone Asia/Tokyo
timedatectl status

NTPはUbuntu 22.04では systemd-timesyncd がデフォルトで動いています。

1
timedatectl show-timesync --all

NTPSynchronized: yes になっていれば問題ありません。


まとめ

設定項目コマンド / ファイル
一般ユーザー作成adduser + usermod -aG sudo
SSH鍵認証~/.ssh/authorized_keys + sshd_config
rootログイン禁止PermitRootLogin no
ファイアウォールufw
自動アップデートunattended-upgrades
タイムゾーンtimedatectl set-timezone Asia/Tokyo

これらを最初に済ませておけば、その後のサービスのインストールや設定に安心して進めます。特にSSH鍵認証とrootログイン禁止は必須で、後回しにするほどリスクが高まります。