SSHは、リモートサーバーにアクセスするための最も一般的な方法の1つです。 SSHは、侵害されたLinuxサーバーの背後にある最も一般的な理由の1つでもあります。
誤解しないでください。 SSH(Secure Shell)は設計上かなり安全なプロトコルですが、これはデフォルト構成のままにしておく必要があるという意味ではありません。
この記事では、SSHセキュリティを改善してLinuxサーバーを保護するための実用的な方法をいくつか紹介します。
LinuxサーバーでSSHを保護するためのヒント

たとえば、パスワードベースのSSHログインを無効にした場合、Fail2Banのようなソリューションを使用する必要はありません。
SSHの基本を知っている場合は、SSH構成ファイルが / etc / ssh / sshd_configにあることを知っています。 。
ここで説明するSSH強化のヒントのほとんどは、この構成ファイルを編集する必要があります。これが、元のファイルをバックアップすることをお勧めする理由です。 SSH構成ファイルに変更を加えた場合も、SSHサービスを再起動する必要があります。
SSHサーバーを保護するために実行できる手順を見てみましょう。
1。空のパスワードを無効にする
はい。 Linuxではパスワードなしでユーザーアカウントを持つことができます。これらのユーザーがSSHを使用しようとすると、SSH経由でサーバーにアクセスするためのパスワードも必要ありません。
これはセキュリティ上のリスクです。空のパスワードの使用を禁止する必要があります。 / etc / ssh / sshd_configファイルで、必ずPermitEmptyPasswordsオプションをnoに設定してください。
PermitEmptyPasswords no
2。デフォルトのSSHポートを変更する
デフォルトのSSHポートは22であり、ほとんどの攻撃スクリプトチェックはこのポートのみを中心に記述されています。デフォルトのSSHポートを変更すると、(ポート22に到達する)攻撃の数が減る可能性があるため、セキュリティレイヤーが追加されます。
構成ファイルでポート情報を検索し、別の情報に変更します。
Port 2345
ポート番号を覚えておくか書き留めておく必要があります。そうしないと、SSHでサーバーにアクセスできない可能性があります。
3。 SSH経由のルートログインを無効にする
正直なところ、root自体としてサーバーを使用することは禁止されるべきです。それは危険であり、監査の痕跡を残しません。 sudoのようなメカニズムは、この理由でのみ存在します。
システムにsudoユーザーを追加している場合は、そのsudoユーザーを使用して、rootではなくSSH経由でサーバーにアクセスする必要があります。
PermitRootLoginオプションを変更し、noに設定することで、ルートログインを無効にできます。
PermitRootLogin no
4。 sshプロトコル1を無効にする
これは、古いLinuxディストリビューションを使用している場合です。一部の古いSSHバージョンでは、SSHプロトコル1がまだ使用可能である可能性があります。このプロトコルには既知の脆弱性があるため、使用しないでください。
新しいバージョンのSSHでは、SSHプロトコル2が自動的に有効になりますが、再確認しても問題はありません。
Protocol 2
5。アイドルタイムアウト間隔を設定する
アイドルタイムアウト間隔は、SSH接続がアクティビティなしでアクティブなままでいることができる時間です。このようなアイドルセッションもセキュリティリスクです。アイドルタイムアウト間隔を設定することをお勧めします。
タイムアウト間隔は秒単位でカウントされ、デフォルトでは0です。5分のタイムアウト間隔を維持するために300に変更できます。
ClientAliveInterval 300
この間隔の後、SSHサーバーは生きているメッセージをクライアントに送信します。応答がない場合、接続は閉じられ、エンドユーザーはログアウトされます。
切断する前にアライブメッセージを送信する回数を制御することもできます:
ClientAliveCountMax 2
6。選択したユーザーにのみSSHアクセスを許可する
セキュリティに関しては、最小特権の原則に従う必要があります。必要のないときは権利を与えないでください。
Linuxシステムにはおそらく複数のユーザーがいます。それらすべてへのSSHアクセスを許可する必要がありますか?おそらくそうではありません。
ここでのアプローチは、選択した少数のユーザーにSSHアクセスを許可し、他のすべてのユーザーを制限することです。
AllowUsers User1 User2
選択したユーザーを新しいグループに追加して、このグループのみにSSHへのアクセスを許可することもできます。
AllowGroups ssh_group
DenyUsersとDenyGroupsを使用して、特定のユーザーとグループへのSSHアクセスを拒否することもできます。
7。 X11転送を無効にする
X11またはXディスプレイサーバーは、グラフィカル環境の基本的なフレームワークです。 X11転送を使用すると、SSH経由でGUIアプリケーションを使用できます。
基本的に、クライアントはサーバー上でGUIアプリケーションを実行しますが、X11転送のおかげで、マシン間でチャネルが開かれ、GUIアプリケーションがクライアントマシンに表示されます。
X11プロトコルはセキュリティ指向ではありません。不要な場合は、SSHでのX11転送を無効にする必要があります。
X11Forwarding no
8。ブルートフォース攻撃を自動的に軽減します
SSHブルートフォース攻撃を阻止するには、Fail2Banなどのセキュリティツールを使用できます。
Fail2Banは、異なるIPアドレスからの失敗したログイン試行をチェックします。これらの不正な試行が設定された時間間隔内にしきい値を超えると、IPは特定の期間SSHにアクセスできなくなります。
好みや要件に応じて、これらすべてのパラメーターを構成できます。 Fail2Banの使用に関する詳細な入門ガイドを作成しました。これをお読みください。
9。パスワードベースのSSHログインを無効にする
どれだけ試しても、LinuxサーバーでSSH経由の不正なログイン試行が常に表示されます。攻撃者は賢く、彼らが使用するスクリプトは、Fail2Banのようなツールのデフォルト設定を処理することがよくあります。
絶え間ないブルートフォース攻撃を取り除くために、キーベースのSSHログインのみを選択できます。
このアプローチでは、リモートクライアントシステムの公開鍵をSSHサーバーの既知の鍵リストに追加します。このようにして、これらのクライアントマシンはユーザーアカウントのパスワードを入力せずにSSHにアクセスできます。
この設定を行うと、パスワードベースのSSHログインを無効にできます。これで、指定されたSSHキーを持つクライアントマシンのみがSSH経由でサーバーにアクセスできます。
このアプローチを実行する前に、サーバーに独自の公開鍵を追加し、それが機能することを確認してください。そうしないと、サーバーに物理的にアクセスできないLinodeのようなクラウドサーバーを使用している場合は特に、自分自身をロックアウトしてリモートサーバーにアクセスできなくなる可能性があります。
パスワードベースのSSH認証を無効にする方法については、この詳細なチュートリアルをお読みください。
10。 SSHによる2要素認証
SSHセキュリティを次のレベルに引き上げるために、2要素認証を有効にすることもできます。このアプローチでは、携帯電話、電子メール、またはサードパーティの認証アプリを介してワンタイムパスワードを受け取ります。
SSHを使用した2要素認証の設定についてはこちらをご覧ください。
次のコマンドを使用して、SSHサーバーのすべてのパラメーターを確認できます。
sshd -T
このようにして、SSHサーバーのセキュリティを強化するためにパラメータを変更する必要があるかどうかを簡単に確認できます。
また、SSHのインストールとシステムを最新の状態に保つ必要があります。
SSH強化の実用的な方法をいくつか挙げました。もちろん、SSHとLinuxサーバーを保護する方法は他にもいくつかあります。それらすべてを1つの記事にリストすることはできません。
これらのヒントがお役に立てば幸いです。どのヒントが役立つか教えてください。
SSHセキュリティに関する追加のヒントを知っていますか?コメント欄でシェアしてみませんか?