AWS EC2及びlightsailは特殊環境なため、このマニュアル通りに動かない場合がございます。 不明な点はGuildコミュニティで質問してみてください。
この手順はエアギャップオフラインマシン(VirtualBox上のUbuntu)では実施する必要はありません
1.R-Login(Winodws)http://nanno.dip.jp/softlib/man/rlogin/ 2.Terminal(Mac)https://www.webdesignleaves.com/pr/plugins/mac_terminal_basics_01.html
サーバを操作する場合はrootアカウントを使用せず、root権限を付与したユーザーアカウントで操作するようにしましょう。 rootアカウントで誤ってrmコマンドを使用すると、サーバ全体が完全消去されます。
新しいユーザーの追加 (例:cardano)
1.上記ターミナルソフトを使用し、サーバーに割り当てられた初期アカウント(rootなど)でログインする。
2.新しいユーザーアカウントを作る(任意のアルファベット文字)
adduser cardano
New password: # ユーザーのパスワードを設定Retype new password: # 確認再入力Enter the new value, or press ENTER for the defaultFull Name []: # フルネーム等の情報を設定 (不要であればブランクでも OK)Room Number []:Work Phone []:Home Phone []:Other []:Is the information correct? [Y/n]:y
cardanoをsudoグループに追加する
usermod -G sudo cardano
rootユーザーからログアウトする
exit
3.ターミナルソフトのユーザーをパスワードを上記で作成したユーザーとパスワードに書き換えて再接続。
SSHを強化する基本的なルールは次の通りです。
SSHログイン時パスワード無効化 (秘密鍵を使用)
rootアカウントでのSSHログイン無効化 (root権限が必要なコマンドはsu
or sudo
コマンドを使う)
許可されていないアカウントからのログイン試行をログに記録する (fail2banなどの、不正アクセスをブロックまたは禁止するソフトウェアの導入を検討する)
SSHログイン元のIPアドレス範囲のみに限定する (希望する場合のみ)※利用プロバイダーによっては、定期的にグローバルIPが変更されるので注意が必要
ssh-keygen -t rsa
次のような返り値があります。 それぞれ何も入力せずにEnterを押してください
Enter file in which to save the key (/home/cardano/.ssh/id_rsa): #このままEnterlsEnter passphrase (empty for no passphrase): #このままEnterEnter same passphrase again: #このままEnter
パスワードは設定しなくてもOK
cd ~/.sshls
id_rsa(秘密鍵)とid_rsa.pub(公開鍵)というファイルが作成されているか確認する。
cd ~/.ssh/cat id_rsa.pub >> authorized_keyschmod 600 authorized_keyschmod 700 ~/.sshrm id_rsa.pub
1.R-loginの場合はファイル転送ウィンドウを開く 2.左側ウィンドウ(ローカル側)は任意の階層にフォルダを作成する。 3.右側ウィンドウ(サーバ側)は「.ssh」フォルダを選択する 4.右側ウィンドウから、id_rsaファイルの上で右クリックして「ファイルのダウンロード」を選択する 5.一旦サーバからログアウトする 6.R-Loginのサーバ接続編集画面を開き、「SSH認証鍵」をクリックし4でダウンロードしたファイルを選ぶ 7.サーバへ接続する
/etc/ssh/sshd_config
ファイルを開く
sudo nano /etc/ssh/sshd_config
ChallengeResponseAuthenticationの項目を「no」にする
ChallengeResponseAuthentication no
PasswordAuthenticationの項目を「no」にする
PasswordAuthentication no
PermitRootLoginの項目を「no」にする
PermitRootLogin no
PermitEmptyPasswordsの項目を「no」にする
PermitEmptyPasswords no
ポート番号をランダムな数値へ変更する (49513~65535までの番号)
Port xxxxx 先頭の#を外してランダムな数値へ変更してください
ローカルマシンからSSHログインする際、ポート番号を以下で設定した番号に合わせてください。
Ctrl+O で保存し、Ctrl+Xで閉じる
SSH構文にエラーがないかチェックします。
sudo sshd -t
SSH構文エラーがない場合、SSHプロセスを再起動します。
sudo service sshd reload
一旦、ログオフし、ログイン出来るか確認します。
exit
上記でログイン出来ない場合は、SSHキーを指定してログインします。
不正アクセスを予防するには、システムに最新のパッチを適用することが重要です。
sudo apt-get update -y && sudo apt-get upgrade -ysudo apt-get autoremovesudo apt-get autoclean
自動更新を有効にすると、手動でインストールする手間を省けます。
sudo apt-get install unattended-upgradessudo dpkg-reconfigure -plow unattended-upgrades
サーバーのセキュリティを維持するために、頻繁にrootアカウントでログインしないでください。
# rootアカウントを無効にするには、-lオプションを使用します。sudo passwd -l root
# 何らかの理由でrootアカウントを有効にする必要がある場合は、-uオプションを使用します。sudo passwd -u root
システムで共有されるメモリを保護します。
/etc/fstab
を開きます
sudo nano /etc/fstab
次の行をファイルの最後に追記して保存します。
tmpfs /run/shm tmpfs ro,noexec,nosuid 0 0
変更を有効にするには、システムを再起動します。
sudo reboot
Fail2banは、ログファイルを監視し、ログイン試行に失敗した特定のパターンを監視する侵入防止システムです。特定のIPアドレスから(指定された時間内に)一定数のログイン失敗が検知された場合、Fail2banはそのIPアドレスからのアクセスをブロックします。
sudo apt-get install fail2ban -y
SSHログインを監視する設定ファイルを開きます。
sudo nano /etc/fail2ban/jail.local
ファイルの最後に次の行を追加し保存します。
[sshd]enabled = trueport = <22 or your random port number>filter = sshdlogpath = /var/log/auth.logmaxretry = 3
fail2banを再起動して設定を有効にします。
sudo systemctl restart fail2ban
標準のUFWファイアウォールを使用して、ノードへのネットワークアクセスを制限できます。
新規インストール時点では、デフォルトでufwが無効になっているため、以下のコマンドで有効にしてください。
SSH接続用のポート22番(または設定したランダムなポート番号 #)
ノード用のポート6000番または6001番
ノード監視Grafana用3000番ポート (このノードで起動している場合)
ブロックプロデューサーノードおよびリレーノード用に設定を変更して下さい。
ブロックプロデューサーノードでは、リレーノードのIPのみ受け付ける用に設定してください。
sudo ufw allow <22またはランダムなポート番号>/tcp#リレーノードのIPを指定する場合#sudo ufw allow from <リレーノードIP> to any port <BP用のポート番号>sudo ufw allow 6000/tcpsudo ufw allow 3000/tcpsudo ufw enablesudo ufw status numbered
設定が有効であることを確認します。
To Action From-- ------ ----[ 1] 22/tcp ALLOW IN Anywhere[ 2] 3000/tcp ALLOW IN Anywhere[ 3] 6000/tcp ALLOW IN Anywhere[ 4] 22/tcp (v6) ALLOW IN Anywhere (v6)[ 5] 3000/tcp (v6) ALLOW IN Anywhere (v6)[ 6] 6000/tcp (v6) ALLOW IN Anywhere (v6)
安全なサーバーを維持するには、時々リスニングネットワークポートを検証する必要があります。これにより、ネットワークに関する重要な情報を得られます。
netstat -tulpnss -tulpn
設定に失敗するとログインできなくなる場合があるので、設定前に2つのウィンドウでログインしておいてください。 万が一ログインできなくなった場合、復旧できます。
SSHはリモートアクセスに使用されますが、重要なデータを含むコンピュータとの接続としても使われるため、別のセキュリティーレイヤーの導入をお勧めします。2段階認証(2FA) 事前にお手元のスマートフォンに「Google認証システムアプリ」のインストールが必要です
sudo apt updatesudo apt upgradesudo apt install libpam-google-authenticator -y
SSHがGoogle Authenticator PAM モジュールを使用するために、/etc/pam.d/sshd
ファイルを編集します。
sudo nano /etc/pam.d/sshd
先頭の @include common-authを#を付与してコメントアウトする
#@include common-auth
以下の行を追加します。
auth required pam_google_authenticator.so
以下を使用してsshd
デーモンを再起動します。
sudo systemctl restart sshd.service
/etc/ssh/sshd_config
ファイルを開きます。
sudo nano /etc/ssh/sshd_config
ChallengeResponseAuthenticationの項目を「yes」にします。
ChallengeResponseAuthentication yes
UsePAMの項目を「yes」にします。
UsePAM yes
最後の行に1行追加します。(SSH公開鍵秘密鍵ログインを利用の場合)
AuthenticationMethods publickey,keyboard-interactive
ファイルを保存して閉じます。
以下を使用してsshd
デーモンを再起動します。
sudo systemctl restart sshd.service
google-authenticator コマンドを実行します。
google-authenticator
いくつか質問事項が表示されます。推奨項目は以下のとおりです。
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段階認証を機能させます。
https://gist.github.com/lokhman/cc716d2e2d373dd696b2d9264c0287a3#file-ubuntu-hardening-md