SSH を使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにアクセスしたいと考えています。SSH を使用するときにインスタンスを安全に保ち、不正アクセスを回避するためのベストプラクティスを教えてください。
解決方法
SSH を使用する際は、以下のベストプラクティスを使用してインスタンスを保護してください。コマンドを含む手順では、root 権限でコマンドを実行してください。sudo -i コマンドを実行して、root ユーザーになります。
EC2 インスタンスへのシェルアクセスに AWS System Manager Session Manager を使用する
Session Manager を使用すると、AWS Identity and Access Management (IAM) ユーザーは、暗号化およびロギング機能を使用してインスタンスにログインできます。Systems Manager のトラフィックは Systems Manager エンドポイントを通過するため、インバウンドポートを開くことなく、専用インスタンスへの簡単かつ安全なアクセスを可能にします。Session Manager の詳細については、「最新 – AWS Systems Manager セッションマネージャーで EC2 インスタンスへのシェルアクセスを実現」を参照してください。
EC2 インスタンスへのシェルアクセスに EC2 Instance Connect を使用する
Amazon EC2 Instance Connect では、IAM ロールとポリシーを使用して、セキュアシェル (SSH) を使用して Linux インスタンスに接続できます。EC2 インスタンス接続の詳細については、「EC2 Instance Connect を使用した Linux インスタンスへの接続」を参照してください。
注意: EC2 Instance Connect は、次のディストリビューションでサポートされています。
- Amazon Linux 2 (すべてのバージョン)
- Ubuntu 16.04 以降
root ユーザーに SSH ターミナルの使用を許可しない
デフォルトでは、Amazon が提供する AMI、および AWS Marketplace のほとんどのベンダーは、root ユーザーが SSH ターミナルからログインすることを許可していません。インスタンスが root ユーザーにログインを許可している場合は、以下の手順に従ってアクセスを拒否します。
1. /etc/shadow ファイルのパスワードフィールドに * (アスタリスク) を追加して、root ユーザーのパスワードを無効にします。
vipw -s でファイルを編集します。
最初の行は、通常、root ユーザーの行です。root ユーザーの行を次のように変更します。
root:*LOCK*:14600::::::
2. vi エディタなどのエディタを使用して、SSH デーモンの設定ファイルを編集します。
vi /etc/ssh/sshd_config
次の行が存在し、コメントが解除されていることを確認します。この行は、root ユーザーに対するログインアクセス許可を拒否します。
PermitRootLogin no
3. SSH デーモンを再起動します。
systemctl restart sshd
PermitRootLogin オプションのその他のパラメータの詳細については、OpenBSD の「sshd_config」を参照してください。
すべてのユーザーが SSH キーペアを使用してログインすることを確認し、パスワード認証を無効にする
Amazon が提供する AMI のデフォルト設定では、パスワード認証が無効になっている SSH キーペアを使用してログインが行われます。これは、パスワードを使用すると、インスタンスが総当たり攻撃などのセキュリティリスクにさらされるためです。脆弱なパスワードは、アクセスするために解読される可能性があります。
パスワードを仕様するようにインスタンスを変更した場合は、次のコマンドを使用してデフォルト設定に戻します。
1. sshd_config ファイルにアクセスするには、vi エディタまたは任意のエディタを使用します。
vi /etc/ssh/sshd_config
2. 次の行が存在し、コメントが解除されていることを確認します。
PasswordAuthentication no
3. SSH デーモンを再起動します。
systemctl restart sshd
注意: パスワード認証を無効にする前に、キーペアがインストールされていることを確認してください。これにより、EC2 インスタンスへの SSH アクセスが失われることを防止します。各ユーザーは、パス ~/.ssh/authorized_keys に自分のパブリックキーを挿入する必要があります。キーベースのログインの詳細については、「Amazon EC2 のキーペアと Linux インスタンス」を参照してください。
不明なソースからのアクセスを制限する
パブリックインスタンスの場合、設定ミスが存在する場合や予期しないソフトウェア脆弱性がある場合、SSH ポートを開いたままにして制限を設定しないでおくと外部から侵入される可能性があります。侵入を防ぐには、次のベストプラクティスに従ってください。
1. SSH デーモンは、Linux ディストリビューションの保守管理者から提供された最新バージョンに更新します。多くの場合、SSH デーモンは、アップストリームプロバイダーから以降のリリースのバックポート更新を受信します。バックポートの詳細については、Red Hat Customer Portal のウェブサイトの Backporting security fixes を参照してください。
yum -y install openssh-server # for Amazon Linux, RHEL, Centos
apt update && apt install openssh-server # For Ubuntu, Debian
2. セキュリティグループを制限して、企業ネットワーク IP などの信頼された IP からのポート 22 への着信接続のみを許可します。詳細については、「Linux インスタンス用のインバウンドトラフィックの承認」を参照してください。
3. 侵入者の中には、ユーザー名とパスワードの推測を試みる者や、ポート 22 が開かれている場合に SSH デーモンをオーバーフローさせようとする者がいます。ユーティリティ fail2ban は、ログファイルをチェックして継続的に行われているインスタンスへのログイン試行をモニタリングし、ログイン嗜好が数回失敗した後にログイン試行をブロックします。fail2ban をインストールするには**:**
Ubuntu の場合:
apt -y install fail2ban
Amazon Linux、CentOS、RHEL の場合:
EPEL リポジトリをインストールします。
次のコマンドを実行します。
yum -y install fail2ban
systemctl enable fail2ban
systemctl start fail2ban
fail2ban の設定方法の詳細については、Red Hat ウェブサイトの「Linux security: Protect your systems with fail2ban」を参照してください。