SSHは、サーバーへのリモートログイン、ファイル転送、その他のサーバー関連の操作などのネットワークサービスを、安全でないネットワークまたは安全なネットワーク上で安全に操作するのに役立つセキュアシェルを指します。
SSHのデフォルト設定は、SSHチャネルを強化するのに十分ではありません。セキュリティを完全に強化するには、追加の設定を構成する必要があります。この記事では、sshサーバーを保護する11の方法を学習します。
SSHサーバーを介したルートログインの無効化
rootユーザーはサーバー内のサービス全体にアクセスできるため、システムがリモートrootログインを許可するリスクを冒さない方がよいでしょう。ブルートフォース攻撃やその他のハッキングツールを使用しているときにパスワードが公開された場合、脆弱性が非常に高くなる可能性があります。したがって、リモートrootログインを無効にして、通常のユーザーに固執することをお勧めします。
リモートルートログインを無効にするには、sshd_configファイルを開きます。
$ sudo vim /etc/ssh/sshd_config
次に、「PermitRootLogin」をnoに設定します
sshrootユーザーのログインを無効にします。
空のパスワードを無効にする
一部のLinuxディストリビューションでは、パスワードなしでユーザーが作成されるため、リモートアクセス用に空のパスワードでssh接続を許可すると脆弱になる可能性があります。したがって、このサービスを無効にするには、sshd_configファイルで「PermitEmptyPasswords」をnoに設定する必要があります。
PermitEmptyPasswords no
空のパスワードログインを無効にします。
SSHプロトコル全体で公開鍵ベースの認証を使用します。
SSHサーバーはさまざまな認証プロセスをサポートしているため、公開鍵ベースの認証を使用することを強くお勧めします。ハッカーは、ブルートフォース攻撃などのさまざまな方法を使用して、さまざまなハッキングツールを使用してパスワードを取り締まろうとします。これを防ぐために、公開鍵ベースの認証を使用しています。
まず、ssh-keygenコマンドを使用して公開鍵と秘密鍵を生成する必要があります。キーを生成するには、次のコマンドを実行します。このプロセスで、sshキーを生成する場所を尋ねられます。デフォルトで続行する場合は、Enterキーを押してください。次に、sshキーのパスワードを参照し、特殊文字、アルファベット、数字で構成された強力なパスワードを使用するパスフレーズを求められます。パスワードが設定されると、ホームディレクトリの.sshディレクトリにsshキーが生成されます。
$ ssh-keygen -t rsa
sshキーペアの生成。
公開鍵をアップロードする前に、リモートサーバーに.ssh dirがあることを確認してください。そうでない場合は、ホームdirに.ssh dirを作成してから、次のコマンドを使用して公開sshキーをサーバーにアップロードしてください。
$ cat .ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
公開鍵をサーバーにアップロードします。
これで、sshプロトコルを介した公開鍵を使用してユーザーubuntuとしてログインできます。
公開鍵ベースの認証。
パスワードを使用したSSHログイン認証を無効にする
強力なパスワードが使用されていない場合、ブルートフォース攻撃によってパスワードが公開される可能性があるため、サーバーへのリモートアクセスにはssh公開鍵認証を使用することを強くお勧めします。 SSHサーバーからのパスワード認証を無効にするには、「PasswordAuthentication」の値をnoに設定します。
PasswordAuthentication no
SSHデフォルトポート22を変更します。
デフォルトでは、SSHはシステムのポート22で実行されます。 SSH標準ポートを変更すると、開いているポートへの異常なトラフィックを回避することで、セキュリティの層が追加される可能性があります。したがって、ポートを簡単に変更するには、sshd_configファイルを開き、ポートセクションで目的の未使用のポート番号を設定します。次の例では、ポートを454に設定しました。
sshのデフォルトポートを変更します。
SSHを使用してユーザーのログインアクセスを制限します。
SSHサーバーでは、すべてのユーザーがサーバーにリモートでアクセスできますが、デフォルト設定を上書きして、SSHプロトコルを介したリモートアクセスを許可または拒否するように特定のユーザーのみを設定できます。すべてのシステムユーザーにリモートアクセスしてログインする簡単な方法で、ハッカーがシステムにアクセスするための可能な方法を作成します。
特定のユーザーがSSH経由でログインできるようにするには、sshd_configに次の行を追加します。
AllowUsers user1 user2 ubuntu
同様に、次のコード行を追加することで、特定のユーザーを制限し、他のユーザーがSSH経由でアクセスできるようにすることができます。
DenyUsers root user3 user4
SSHユーザー/キーの強力なパスワードの使用を強化します。
通常、ログインには123456、something123などの単純なパスワードを使用することが多いため、パスワードを簡単に覚えることができます。これが、ブルートフォース攻撃が辞書でパスワードチェックを試みるときに完全に機能する理由です。したがって、これを回避するには、特殊文字、大文字と小文字のアルファベット、数字、およびパスワードの最小長が8文字のパスワードを使用する必要があります。
アイドルタイムアウト間隔の構成
ユーザーはSSH接続を長期間アイドル状態に保つことが多いため、誰かがSSHセッションを乗っ取って、ユーザーが現在いないときに好きなように実行しようとすると、リスクが高くなります。そのため、一定期間非アクティブになった後にログインセッションタイムアウトを設定して、セッションタイムアウト時に再ログインする必要があります。アイドルタイムアウトを設定するには、sshd_configファイルで「ClientAliveInterval」値を設定する必要があります。次の例では、タイムアウト値360を6分に設定しました。
ClientAliveInterval 360
SSHプロトコル2を使用
SSHには、プロトコルSSHプロトコル1とSSHプロトコル2の2つのバリエーションがあります。プロトコル1はシステムのデフォルトであり、プロトコル2はバルク暗号化、堅牢なアルゴリズム、および暗号化チェックを適用するため、プロトコル2よりも安全性が低くなります。プロトコル2に切り替えるには、sshd_configファイルに次の行を追加する必要があります。
プロトコル2
sshプロトコル2を使用します。
パスワード試行の制限を設定する
ログインをsshするパスワードの試行回数を制限できるため、試行回数を制限すると接続が切断され、システムがボット攻撃から保護されるセキュリティの層が追加されます。これを実現するには、「MaxAuthTries」ディレクティブ値を設定する必要があります。この例では、4回の試行に制限を設定しています。
MaxAuthTries 3
sshログインの試行を制限します。
トンネリングとポートフォワーディングを無効にする
トンネリングおよびポート転送サービスを使用しない場合は、ハッカーがこれらのサービスを使用してシステムを突破する可能性があるため、無効にしておくことをお勧めします。これを実現するには、次のディレクティブ値をnoに設定します。
AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no
最後に、すべての設定が完了したら、変更を適用するためにsshサーバーを再起動することを忘れないでください
$ sudo systemctl restart ssh
結論
この記事では、さまざまなセキュリティリスクを回避するのに役立つSSHサーバーを強化するいくつかの一般的な方法を学びます。この記事を気に入っていただければ幸いです。