Ubuntu初期設定
ヒント
この手順は、エアギャップのUbuntuでは実施する必要はございません。
AWSをご利用の方
AWS EC2 / Lightsail では SSH 鍵認証やユーザー構成が異なるため、本マニュアル通りに動作しない場合があります。
1. サーバーログイン(初回のみ / root)
重要
この手順は 初回ログイン時のみ 使用します。
以降の設定で、rootログインおよびパスワード認証は無効化します。
| 項目 | 設定値 |
|---|---|
| ホスト | サーバーIP |
| ポート | SSH(22) |
| ユーザー | root |
| パスワード | 契約時に送付される初期 root パスワード |
2. ユーザーアカウント作成
ヒント
日常運用ではrootアカウントを使用せず、sudo権限を付与した一般ユーザーで操作します。
新しいユーザーを作成します。
任意のアルファベット文字を入力してください。
この例ではcardanoユーザーとして以降進めます。
adduser cardanoNew password: # パスワードを設定
Retype new password: # 確認のため再入力
Enter the new value, or press ENTER for the default
Full Name []: # フルネーム等の情報を設定(不要であればブランクでも問題ありません)
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] : ycardanoにsudo権限を付与します。
usermod -aG sudo cardanorootからログアウトします。
exitヒント
ターミナルソフトの接続ユーザーを、上記で作成したユーザー名(cardano)およびパスワードに変更して再接続してください。
ブラケットペースト機能を無効化します。
grep -qxF 'set enable-bracketed-paste off' ~/.inputrc 2>/dev/null || echo 'set enable-bracketed-paste off' >> ~/.inputrc設定反映のため、ターミナルから一度ログアウトして再ログインしてください。
デーモン再起動を自動化します。
echo "\$nrconf{restart} = 'a';" | sudo tee /etc/needrestart/conf.d/50local.confecho "\$nrconf{blacklist_rc} = [qr(^cardano-node\\.service$) => 0, qr(^cnode-blocknotify\\.service$) => 0, qr(^cnode-cncli-sync\\.service$) => 0,];" | sudo tee -a /etc/needrestart/conf.d/50local.conf3. SSH設定変更
SSH強化設定ルール
- SSHログイン時パスワード無効化(秘密鍵を使用)
- SSHデフォルトポート(22)の変更
- rootアカウントでのSSHログイン無効化(root権限が必要な操作は
sudoを使用します。) - 許可されていないアカウントからのログイン試行をログに記録(fail2ban 等で対策)
- SSHログイン元のIPアドレス範囲のみに限定(希望する場合のみ)※利用プロバイダーによっては、定期的にグローバルIPが変更されるので注意が必要
SSHポートのヒント
SSHポートは世界標準で22番が割り当てられています。
しかし、ポートスキャンやブルートフォース攻撃の標的となりやすいため、本マニュアルでは任意のポート番号への変更を推奨します。
ポート番号は、IANAが定義する動的/プライベートポート範囲である49513~65535の中から指定してください。
SSHディレクトリを作成します。
mkdir -p ~/.sshファイル転送
SSH鍵作成で生成したauthorized_keysを対象サーバーの$HOME/.sshディレクトリにコピーします。
パーミッションを設定します。
chown -R "$USER:$USER" ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys49513~65535の範囲内でSSHポート番号を""内に指定してください。
PORT_NUM=""sudo tee /etc/ssh/sshd_config.d/01-custom-ssh.conf > /dev/null << EOF
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
Port ${PORT_NUM}
EOF構文をチェックします。
sudo sshd -t有効設定を確認します。
sudo sshd -T | grep -iE 'passwordauthentication|kbdinteractiveauthentication|permitrootlogin|port'port xxxxx
permitrootlogin no
passwordauthentication no
kbdinteractiveauthentication no
gatewayports nossh.socketの設定
sudo systemctl status ssh.socket● ssh.socket - OpenBSD Secure Shell server socket
~~~
Active: active (running) 問題がなければ、SSHサービスを再起動します。
sudo systemctl daemon-reloadsudo systemctl restart ssh.socket確認
sudo ss -tlnp | grep sshLISTEN 0 4096 0.0.0.0:<設定したSSH Port>
LISTEN 0 4096 [::]:<設定したSSH Port> ターミナルソフト設定について
- 現在起動中のターミナルは接続したままにしてもう一つ起動してください。
- 接続設定のSSHポート番号を変更し秘密鍵を設定しサーバーへログインできるか確認して下さい。
- 接続できない場合は、接続されてるターミナル画面でサーバー設定を確認して下さい。
4. ファイアウォール有効化
標準のファイアウォール(UFW)を使用して、インバウンドのアクセス可能なポートを限定します。
注意事項
- 設定前の注意事項
ご利用のVPSによっては管理画面からファイアウォールを設定する必要があります。(例:AWS系など)
その場合は以下の設定を行わず、VPSマイページ管理画面などから個別に設定してください。
- さくらVPSをご利用の場合
管理画面からパケットフィルターを、利用しないに設定してください。
SSHポートを許可します。
SSH_PORT=$(sudo sshd -T | awk '$1=="port"{print $2}')echo "有効なSSHポート: ${SSH_PORT}"sudo ufw allow ${SSH_PORT}/tcpファイアウォールを有効化します。
sudo ufw --force enableステータスを確認します。
sudo ufw statusStatus: active5. システム更新
重要
不正アクセスを予防するには、システムに最新のパッチを適用することが重要です。
パッケージリストを更新し、依存関係を含めた包括的なアップグレードを実行します。
sudo apt update && sudo apt full-upgrade -y不要なパッケージを削除します。
sudo apt autoremove -yパッケージキャッシュを整理します。
sudo apt autoclean -yセキュリティ更新の自動適用を有効にします。
sudo apt install unattended-upgrades -ysudo dpkg-reconfigure --priority=low unattended-upgrades
YESを選択し、Enterを押下
6. rootアカウントの無効化設定
rootアカウントを無効化します。
サーバーのセキュリティ維持のため、頻繁に root アカウントでログインしないでください。
rootアカウント無効
sudo passwd -l root7. 共有メモリのセキュリティ強化
システムで共有されるメモリを保護します。
以下の設定を/etc/fstabの最終行に追記します。
echo 'tmpfs /run/shm tmpfs ro,noexec,nosuid 0 0' | sudo tee -a /etc/fstab追記の確認をします。
tail -n 1 /etc/fstabtmpfs /dev/shm tmpfs ro,noexec,nosuid 0 08. Fail2banのインストール
Fail2banは、ログファイルを監視し、ログイン試行に失敗した特定のパターンを監視する侵入防止システムです。
特定のIPアドレスから、指定された時間内に一定数のログイン失敗が検知された場合、Fail2banはそのIPアドレスからのアクセスをブロックします。
インストールを行います。
sudo apt install nano fail2ban -ySSHログインを監視する設定ファイルを開きます。
sudo nano /etc/fail2ban/jail.localファイルの最後に次の行を追加し保存します。
コマンド中の (SSHポートを入力してください) については3. SSH設定変更で設定したSSHポートを入力してください。
(**)は不要です。
[sshd]
enabled = true
port = (SSHポートを入力してください)
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 24h
findtime = 10m
backend = systemd自動起動を有効化し、即時起動します。
sudo systemctl enable --now fail2ban有効化されているかを確認します。
sudo systemctl status fail2ban --no-pager● fail2ban.service - Fail2Ban Service
~~~
Active: active (running)9. Chronyの設定
chronyをインストールします。
sudo apt install chrony -yバックアップします。
sudo mv /etc/chrony/chrony.conf /etc/chrony/chrony-bk.conf/etc/chrony/chrony.confを更新します。
cat > $HOME/chrony.conf << EOF
pool time.google.com iburst minpoll 2 maxpoll 2 maxsources 3 maxdelay 0.3
pool time.facebook.com iburst minpoll 2 maxpoll 2 maxsources 3 maxdelay 0.3
pool time.euro.apple.com iburst minpoll 2 maxpoll 2 maxsources 3 maxdelay 0.3
pool time.apple.com iburst minpoll 2 maxpoll 2 maxsources 3 maxdelay 0.3
pool ntp.ubuntu.com iburst minpoll 2 maxpoll 2 maxsources 3 maxdelay 0.3
# This directive specify the location of the file containing ID/key pairs for
# NTP authentication.
keyfile /etc/chrony/chrony.keys
# This directive specify the file into which chronyd will store the rate
# information.
driftfile /var/lib/chrony/chrony.drift
# Uncomment the following line to turn logging on.
#log tracking measurements statistics
# Log files location.
logdir /var/log/chrony
# Stop bad estimates upsetting machine clock.
maxupdateskew 5.0
# This directive enables kernel synchronisation (every 11 minutes) of the
# real-time clock. Note that it can’t be used along with the 'rtcfile' directive.
rtcsync
# Step the system clock instead of slewing it if the adjustment is larger than
# one second, but only in the first three clock updates.
makestep 0.1 -1
# Get TAI-UTC offset and leap seconds from the system tz database
leapsectz right/UTC
# Serve time even if not synchronized to a time source.
local stratum 10
EOF作成したchrony.confを/etc/chrony/chrony.confに移動します。
sudo mv $HOME/chrony.conf /etc/chrony/chrony.confUFWで以下を設定します。
sudo ufw allow 123/udp設定を有効にするには、Chronyを再起動します。
sudo systemctl reload-or-restart chrony.serviceヘルプコマンド
同期データのソース確認
chronyc sources現在のステータス表示
chronyc tracking10. sysctlの設定
バックアップを取得しておきます。
sysctl \
net.ipv4.conf.all.rp_filter \
net.ipv4.conf.default.rp_filter \
net.ipv4.icmp_echo_ignore_broadcasts \
net.ipv4.conf.all.accept_source_route \
net.ipv4.conf.default.accept_source_route \
net.ipv4.conf.all.accept_redirects \
net.ipv4.conf.default.accept_redirects \
net.ipv4.conf.all.secure_redirects \
net.ipv4.conf.default.secure_redirects \
net.ipv4.conf.all.log_martians \
net.ipv4.tcp_syncookies \
net.core.somaxconn \
net.ipv4.tcp_max_syn_backlog \
net.core.netdev_max_backlog \
net.ipv4.ip_local_port_range \
> "$HOME/sysctl-before-cardano-relay-$(date +%F).txt"sudo tee /etc/sysctl.d/99-cardano-relay.conf > /dev/null << 'EOF'
# ------------------------------
# Security hardening
# ------------------------------
# Ignore ICMP broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Disable source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Disable ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# Log suspicious packets
net.ipv4.conf.all.log_martians = 1
# SYN flood protection
net.ipv4.tcp_syncookies = 1
# ------------------------------
# Relay network performance
# ------------------------------
# Increase TCP listen queue
net.core.somaxconn = 4096
# Increase SYN backlog
net.ipv4.tcp_max_syn_backlog = 4096
# Improve network buffer
net.core.netdev_max_backlog = 5000
# Increase ephemeral port range
net.ipv4.ip_local_port_range = 10000 65535
EOFバックアップを取得しておきます。
sysctl \
net.ipv4.conf.all.rp_filter \
net.ipv4.conf.default.rp_filter \
net.ipv4.icmp_echo_ignore_broadcasts \
net.ipv4.conf.all.accept_source_route \
net.ipv4.conf.default.accept_source_route \
net.ipv4.conf.all.accept_redirects \
net.ipv4.conf.default.accept_redirects \
net.ipv4.conf.all.secure_redirects \
net.ipv4.conf.default.secure_redirects \
net.ipv4.conf.all.log_martians \
net.ipv4.tcp_syncookies \
> "$HOME/sysctl-before-cardano-bp-$(date +%F).txt"sudo tee /etc/sysctl.d/99-cardano-bp.conf > /dev/null << 'EOF'
# ------------------------------
# Security hardening
# ------------------------------
# Ignore ICMP broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Disable source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Disable ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# Log suspicious packets
net.ipv4.conf.all.log_martians = 1
# SYN flood protection
net.ipv4.tcp_syncookies = 1
EOF設定反映
sudo sysctl --system既存設定の確認
cat $HOME/sysctl-before-cardano-*.txt補足:SSH2段階認証(任意作業・上級者向け)
注意
本設定は必須ではありません。
本手順を実施したサーバーでは、SSHログインに2FAを要求します(= Google Authenticator 未設定ユーザーはログインできません)。
本番サーバー(VPS 等)で適用する場合は、必ず復旧手段(クラウドコンソール等)と予備セッションを確保してから実施してください。
Last updated on