Ubuntuサーバ初期設定(+セキュリティ設定)
ノード保護のためのセキュリティ強化方法です。
AWS EC2及びlightsailは特殊環境なため、このマニュアル通りに動かない場合がございます。 不明な点はGuildコミュニティで質問してみてください。
この手順はエアギャップオフラインマシン(VirtualBox上のUbuntu)では実施する必要はありません

Ubuntuサーバーを強化する手順(初期設定)

オススメのターミナルソフト

🧙♂ ルート権限を付与したユーザーアカウントの作成

サーバを操作する場合はrootアカウントを使用せず、root権限を付与したユーザーアカウントで操作するようにしましょう。 rootアカウントで誤ってrmコマンドを使用すると、サーバ全体が完全消去されます。
新しいユーザーの追加 (例:cardano)
1.上記ターミナルソフトを使用し、サーバーに割り当てられた初期アカウント(rootなど)でログインする。
2.新しいユーザーアカウントを作る(任意のアルファベット文字)
1
adduser cardano
Copied!
1
New password: # ユーザーのパスワードを設定
2
Retype new password: # 確認再入力
3
4
Enter the new value, or press ENTER for the default
5
Full Name []: # フルネーム等の情報を設定 (不要であればブランクでも OK)
6
Room Number []:
7
Work Phone []:
8
Home Phone []:
9
Other []:
10
Is the information correct? [Y/n]:y
Copied!
cardanoをsudoグループに追加する
1
usermod -G sudo cardano
Copied!
rootユーザーからログアウトする
1
exit
Copied!
3.ターミナルソフトのユーザーをパスワードを上記で作成したユーザーとパスワードに書き換えて再接続。

****🔏 SSHパスワード認証を無効化し、SSH鍵認証方式のみを使用する

SSHを強化する基本的なルールは次の通りです。
    SSHログイン時パスワード無効化 (秘密鍵を使用)
    rootアカウントでのSSHログイン無効化 (root権限が必要なコマンドはsu or sudoコマンドを使う)
    許可されていないアカウントからのログイン試行をログに記録する (fail2banなどの、不正アクセスをブロックまたは禁止するソフトウェアの導入を検討する)
    SSHログイン元のIPアドレス範囲のみに限定する (希望する場合のみ)※利用プロバイダーによっては、定期的にグローバルIPが変更されるので注意が必要

鍵ペアーの作成

1
ssh-keygen -t rsa
Copied!
次のような返り値があります。 それぞれ何も入力せずにEnterを押してください
1
Enter file in which to save the key (/home/cardano/.ssh/id_rsa): #このままEnter
2
lsEnter passphrase (empty for no passphrase): #このままEnter
3
Enter same passphrase again: #このままEnter
Copied!
パスワードは設定しなくてもOK
1
cd ~/.ssh
2
ls
Copied!
id_rsa(秘密鍵)とid_rsa.pub(公開鍵)というファイルが作成されているか確認する。
1
cd ~/.ssh/
2
cat id_rsa.pub >> authorized_keys
3
chmod 600 authorized_keys
4
chmod 700 ~/.ssh
5
rm id_rsa.pub
Copied!

id_rsaファイルをローカルパソコンへダウンロードする

1.R-loginの場合はファイル転送ウィンドウを開く 2.左側ウィンドウ(ローカル側)は任意の階層にフォルダを作成する。 3.右側ウィンドウ(サーバ側)は「.ssh」フォルダを選択する 4.右側ウィンドウから、id_rsaファイルの上で右クリックして「ファイルのダウンロード」を選択する 5.一旦サーバからログアウトする 6.R-Loginのサーバ接続編集画面を開き、「SSH認証鍵」をクリックし4でダウンロードしたファイルを選ぶ 7.サーバへ接続する

SSHの設定変更

/etc/ssh/sshd_configファイルを開く
1
sudo nano /etc/ssh/sshd_config
Copied!
ChallengeResponseAuthenticationの項目を「no」にする
1
ChallengeResponseAuthentication no
Copied!
PasswordAuthenticationの項目を「no」にする
1
PasswordAuthentication no
Copied!
PermitRootLoginの項目を「no」にする
1
PermitRootLogin no
Copied!
PermitEmptyPasswordsの項目を「no」にする
1
PermitEmptyPasswords no
Copied!
ポート番号をランダムな数値へ変更する (49513~65535までの番号)
1
Port xxxxx 先頭の#を外してランダムな数値へ変更してください
Copied!
ローカルマシンからSSHログインする際、ポート番号を以下で設定した番号に合わせてください。
Ctrl+O で保存し、Ctrl+Xで閉じる
SSH構文にエラーがないかチェックします。
1
sudo sshd -t
Copied!
SSH構文エラーがない場合、SSHプロセスを再起動します。
1
sudo service sshd reload
Copied!
一旦、ログオフし、ログイン出来るか確認します。
1
exit
Copied!
上記でログイン出来ない場合は、SSHキーを指定してログインします。

****🤖 システムを更新する

不正アクセスを予防するには、システムに最新のパッチを適用することが重要です。
1
sudo apt-get update -y && sudo apt-get upgrade -y
2
sudo apt-get autoremove
3
sudo apt-get autoclean
Copied!
自動更新を有効にすると、手動でインストールする手間を省けます。
1
sudo apt-get install unattended-upgrades
2
sudo dpkg-reconfigure -plow unattended-upgrades
Copied!

🧸 rootアカウントを無効にする

サーバーのセキュリティを維持するために、頻繁にrootアカウントでログインしないでください。
1
# rootアカウントを無効にするには、-lオプションを使用します。
2
sudo passwd -l root
Copied!
1
# 何らかの理由でrootアカウントを有効にする必要がある場合は、-uオプションを使用します。
2
sudo passwd -u root
Copied!

🧩 安全な共有メモリー

システムで共有されるメモリを保護します。
/etc/fstabを開きます
1
sudo nano /etc/fstab
Copied!
次の行をファイルの最後に追記して保存します。
1
tmpfs /run/shm tmpfs ro,noexec,nosuid 0 0
Copied!
変更を有効にするには、システムを再起動します。
1
sudo reboot
Copied!

****⛓ Fail2banのインストール

Fail2banは、ログファイルを監視し、ログイン試行に失敗した特定のパターンを監視する侵入防止システムです。特定のIPアドレスから(指定された時間内に)一定数のログイン失敗が検知された場合、Fail2banはそのIPアドレスからのアクセスをブロックします。
1
sudo apt-get install fail2ban -y
Copied!
SSHログインを監視する設定ファイルを開きます。
1
sudo nano /etc/fail2ban/jail.local
Copied!
ファイルの最後に次の行を追加し保存します。
1
[sshd]
2
enabled = true
3
port = <22 or your random port number>
4
filter = sshd
5
logpath = /var/log/auth.log
6
maxretry = 3
Copied!
fail2banを再起動して設定を有効にします。
1
sudo systemctl restart fail2ban
Copied!

****🧱 ファイアウォールを構成する

標準のUFWファイアウォールを使用して、ノードへのネットワークアクセスを制限できます。
新規インストール時点では、デフォルトでufwが無効になっているため、以下のコマンドで有効にしてください。
    SSH接続用のポート22番(または設定したランダムなポート番号 #)
    ノード用のポート6000番または6001番
    ノード監視Grafana用3000番ポート
    Prometheus-node-exporter用のポート12798・9100をリレーノードのIPのみ受け付ける用に設定してください。
    ブロックプロデューサーノードおよびリレーノード用に設定を変更して下さい。
    ブロックプロデューサーノードでは、リレーノードのIPのみ受け付ける用に設定してください。
ブロックプロデューサーノード
リレーノード1
1
sudo ufw allow <22またはランダムなポート番号>/tcp
2
sudo ufw allow from <リレーノードIP> to any port <BP用のポート番号(6000)>
3
sudo ufw allow from <リレーノードIP> to any port 12798
4
sudo ufw allow from <リレーノードIP> to any port 9100
5
sudo ufw enable
6
sudo ufw status numbered
Copied!
1
sudo ufw allow <22またはランダムなポート番号>/tcp
2
sudo ufw allow 6000/tcp
3
sudo ufw allow 3000/tcp
4
sudo ufw enable
5
sudo ufw status numbered
Copied!
設定が有効であることを確認します。
1
To Action From
2
-- ------ ----
3
[ 1] 22/tcp ALLOW IN Anywhere
4
[ 2] 3000/tcp ALLOW IN Anywhere
5
[ 3] 6000/tcp ALLOW IN Anywhere
6
[ 4] 22/tcp (v6) ALLOW IN Anywhere (v6)
7
[ 5] 3000/tcp (v6) ALLOW IN Anywhere (v6)
8
[ 6] 6000/tcp (v6) ALLOW IN Anywhere (v6)
Copied!

🔭 リスニングポートの確認

安全なサーバーを維持するには、時々リスニングネットワークポートを検証する必要があります。これにより、ネットワークに関する重要な情報を得られます。
1
netstat -tulpn
2
ss -tulpn
Copied!

🛠 SSHの2段階認証を設定する

設定に失敗するとログインできなくなる場合があるので、設定前に2つのウィンドウでログインしておいてください。 万が一ログインできなくなった場合、復旧できます。
SSHはリモートアクセスに使用されますが、重要なデータを含むコンピュータとの接続としても使われるため、別のセキュリティーレイヤーの導入をお勧めします。2段階認証(2FA) 事前にお手元のスマートフォンに「Google認証システムアプリ」のインストールが必要です
1
sudo apt update
2
sudo apt upgrade
3
sudo apt install libpam-google-authenticator -y
Copied!
SSHがGoogle Authenticator PAM モジュールを使用するために、/etc/pam.d/sshdファイルを編集します。
1
sudo nano /etc/pam.d/sshd
Copied!
先頭の @include common-authを#を付与してコメントアウトする
1
#@include common-auth
Copied!
以下の行を追加します。
1
auth required pam_google_authenticator.so
Copied!
以下を使用してsshdデーモンを再起動します。
1
sudo systemctl restart sshd.service
Copied!
/etc/ssh/sshd_config ファイルを開きます。
1
sudo nano /etc/ssh/sshd_config
Copied!
ChallengeResponseAuthenticationの項目を「yes」にします。
1
ChallengeResponseAuthentication yes
Copied!
UsePAMの項目を「yes」にします。
1
UsePAM yes
Copied!
最後の行に1行追加します。(SSH公開鍵秘密鍵ログインを利用の場合)
1
AuthenticationMethods publickey,keyboard-interactive
Copied!
ファイルを保存して閉じます。
以下を使用してsshdデーモンを再起動します。
1
sudo systemctl restart sshd.service
Copied!
google-authenticator コマンドを実行します。
1
google-authenticator
Copied!
いくつか質問事項が表示されます。推奨項目は以下のとおりです。
    Make tokens “time-base”": yes
    Update the .google_authenticator file: yes
    Disallow multiple uses: yes
    Increase the original generation time limit: no
    Enable rate-limiting: yes
プロセス中に大きなQRコードが表示されますが、その下には緊急時のスクラッチコードがひょうじされますので、忘れずに書き留めておいて下さい。
スマートフォンでGoogle認証システムアプリを開き、QRコードを読み取り2段階認証を機能させます。

🚀 参考文献

How to Harden your Ubuntu 18.04 Server
Medium
Ubuntu system hardening guide for desktops and servers
Linux Audit
How To Harden OpenSSH on Ubuntu 18.04 | DigitalOcean
DigitalOcean
Configure SSH to use two-factor authentication | Ubuntu
Ubuntu
How to Harden Ubuntu Server 18.04 in 5 Easy Steps
Lifewire
The 50 Best Linux Hardening Security Tips: A Comprehensive Checklist
UbuntuPIT
最終更新 5mo ago