🎃

Ubuntu の初期設定

2021/06/06に公開

はじめに

こんにちは。
ConoHa で Ubuntu の VPS 借りた時に諸々初期設定をする必要があったので、その時に行ったことを記載します。

環境

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

各種設定

root 以外のユーザー作成

# "-m" でホームディレクトリも作成する
useradd -m sample-user
# password を2回入力する
passwd sample-user
# ユーザーのシェルの設定が /bin/sh になってた
usermod -s /bin/bash sample-user
# sudo も使えるようにする
gpasswd -a sample-user sudo
# 以降は作成したユーザーで作業するようにしましょう
su sample-user

アップデート

最初は以下のコマンドを必ず実行しましょう。

$ sudo apt update && sudo apt upgrade

また、(少なくともこのバージョンの Ubuntu は)自動アップデートがデフォルトで有効になっていました。
自動アップデートの有効性の確認は以下コマンドです

$ sudo cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

1になっていれば自動アップデートが有効です。
そもそもこのファイルがない方はDebian 系で unattended-upgrades を有効にする場合の追加設定 (メール通知, autoremove, autoclean, 再起動)を参考にしてください。
設定内容は必要に応じて。
僕は今回は autoremove の設定を追加で有効にしました。

$ sudo vi /etc/apt/apt.conf.d/50unattended-upgrades
/etc/apt/apt.conf.d/20auto-upgrades
+   Unattended-Upgrade::Remove-Unused-Dependencies "true";
-   //Unattended-Upgrade::Remove-Unused-Dependencies "false";

これで、初回のアップデートと定期的なアップデートの設定は完了です。

sshd の設定

$ sudo vi /etc/ssh/sshd_config

config の変更内容

/etc/ssh/sshd_config
# ポート変更(実際に指定したポートはこれじゃないです。念の為。)
+   Port 22222
-   Port 22

# ルートログイン禁止
+   PermitRootLogin no
-   PermitRootLogin yes

# パスワードログイン禁止
+   PasswordAuthentication no
-   PasswordAuthentication yes

# PAM ログイン禁止
+   UsePAM no
-   UsePAM yes

config のシンタックスチェック

$ sudo sshd -t

reload の前に設定内容のシンタックスが間違っていないかチェックする
シンタックスが間違っていると restart の時にデーモンが落ちる
シンタックスが間違った状態で reload だと落ちずに reload 失敗しただけになる

# 例
# config の内容が間違ってると start の時に失敗してデーモンが立ち上がらなくなる
$ sudo systemctl restat sshd

# config の内容が間違ってても reload に失敗するだけでデーモンは落ちない
$ sudo systemctl reload sshd

いずれにせよ config を編集した後は常にシンタックスチェックする癖をつけましょう。
sshd以外の設定ファイルにも大抵シンタックスチェックのコマンドがあります。

設定の再読み込み

$ sudo systemctl reload sshd
$ sudo systemctl status sshd

Firewall の設定

ufw はデフォルトで入ってた
IPv6を無効化してssh, http, https以外のポートは通せないようにする

$ sudo vi /etc/default/ufw
etc/default/ufw
-   IPV6=yes
+   IPV6=no
# IPv6の設定を適用
$ sudo ufw reload
# 有効になっているリストを番号付きで表示
$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] Anywhere                   ALLOW IN    Anywhere

# numbered の番号指定で設定を削除する
$ sudo ufw delete 1
$ sudo ufw allow 22222
$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw reload
$ sudo ufw restart

ちなみに地味にハマったところとして、
ConoHa のコンソールでは ssh(22) と http(80), https(443) 以外は全てシャットしてたけど、
そのことを忘れて上記設定をしたので今回設定した ssh の 22222 が繋がらなくなってしまいました。
ConoHa の方の設定は無効化しました。( ssh のポートとして 22 しか設定できなかったので)

fail2ban の設定

今回は ConoHa のサーバーを契約したのですが、
その時に fail2ban テンプレートというものがあったのでそれを使いました。
fail2ban の設定ざっと見てみましたが、どの設定が ConoHa によるものか分からなかったので、詳細は省きます。
fail2ban は詳しくないので許してくれ。
一応、sshd だけ有効になっているらしい。

$ sudo fail2ban-client status
Status
|- Number of jail:	1
`- Jail list:	sshd

Timezone の設定

今回のサーバーではデフォルトで日本になってました。( ConoHa がやってくれてた?)
一応、そうじゃなかった場合の手順を記載します。

$ sudo apt install tzdata
$ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

まとめ

最低限の設定としてはだいたいこんな感じでいいんじゃないでしょうか。
もっとこれはやっておくべきとかあったら教えていただけると幸いです。

GitHubで編集を提案

Discussion