LinuxシステムのSSH接続を保護して、システムとデータを保護します。システム管理者とホームユーザーは同様に、インターネットに接続されたコンピューターを強化および保護する必要がありますが、SSHは複雑になる可能性があります。 SSHサーバーを保護するのに役立つ10の簡単なクイックウィンを次に示します。
SSHセキュリティの基本
SSHの略 セキュアシェル 。 「SSH」という名前は、SSHプロトコル自体、またはシステム管理者とユーザーがそのプロトコルを使用してリモートコンピューターに安全に接続できるようにするソフトウェアツールを意味するために同じ意味で使用されます。
SSHプロトコルは、インターネットなどの安全でないネットワークを介して安全な接続を提供するように設計された暗号化されたプロトコルです。 LinuxのSSHは、ポータブルバージョンの OpenSSH 事業。それはで実装されています 従来のクライアントサーバーモデル 、SSHクライアントからの接続を受け入れるSSHサーバーを使用します。クライアントは、サーバーへの接続と 表示 リモートユーザーへのセッション。サーバーは接続を受け入れ、 実行します セッション。
デフォルトの構成では、SSHサーバーは伝送制御プロトコルで着信接続をリッスンします( TCP )ポート22。これは標準化されているため、 よく知られているポート 、それはのターゲットです 脅威アクター そして 悪意のあるボット 。
攻撃者は、開いているポートを探してさまざまなIPアドレスをスキャンするボットを起動します。次に、ポートが調査され、悪用される可能性のある脆弱性があるかどうかが確認されます。 「私は安全だ。悪者が狙う目標は私よりも大きくて良い」と考えるのは間違った推論です。ボットは、メリットに基づいてターゲットを選択していません。彼らは、侵害できるシステムを系統的に探しています。
システムを保護していない場合は、自分を被害者として指名します。
セキュリティ摩擦
セキュリティの摩擦とは、セキュリティ対策を実施するときにユーザーや他の人が経験する苛立ちです。私たちは長い思い出を持っており、新しいユーザーにコンピューターシステムを紹介し、彼らが恐ろしい声で彼らが 本当に パスワードを入力する必要がありました 毎回 彼らはメインフレームにログインしました。それは、彼らにとってはセキュリティ上の摩擦でした。
(ちなみに、パスワードの発明は フェルナンドJ.コルバト 、コンピュータ科学者のパンテオンの別の人物であり、その共同作業が、の誕生につながった状況に貢献しました。 Unix 。)
セキュリティ対策の導入には、通常、誰かにとって何らかの形の摩擦が伴います。事業主はそれを支払う必要があります。コンピュータユーザーは、慣れ親しんだ方法を変更したり、認証の詳細の別のセットを覚えたり、正常に接続するための手順を追加したりする必要がある場合があります。システム管理者は、新しいセキュリティ対策を実装および維持するために行う追加の作業があります。
LinuxまたはUnixライクなオペレーティングシステムを強化およびロックダウンすると、非常に迅速に関与する可能性があります。ここで紹介するのは、サードパーティのアプリケーションを必要とせず、ファイアウォールを掘り下げることなく、コンピュータのセキュリティを向上させる一連の簡単に実装できる手順です。
これらの手順はSSHセキュリティの最後の言葉ではありませんが、デフォルト設定から大幅に前進し、あまり摩擦を感じることはありません。
SSHプロトコルバージョン2を使用する
2006年に、SSHプロトコルがバージョン1からに更新されました バージョン2 。これは重要なアップグレードでした。特に暗号化とセキュリティに関して多くの変更と改善が行われたため、バージョン2はバージョン1と下位互換性がありません。バージョン1クライアントからの接続を防ぐために、コンピューターがバージョン2クライアントからの接続のみを受け入れるように指定できます。
これを行うには、
/ etc / ssh / sshd_config
ファイル。この記事全体を通して、これを頻繁に行います。このファイルを編集する必要があるときはいつでも、これは使用するコマンドです:
sudo gedit / etc / ssh / sshd_config
次の行を追加します。
プロトコル2
そして、ファイルを保存します。 SSHデーモンプロセスを再起動します。繰り返しになりますが、この記事全体を通してこれを頻繁に行います。これは、それぞれの場合に使用するコマンドです。
sudo systemctl restart sshd
新しい設定が有効になっていることを確認しましょう。別のマシンに移動して、テストマシンにSSHで接続してみます。そして、
ー1
(プロトコル1)強制するオプション
ssh
プロトコルバージョン1を使用するコマンド。
ssh -1 [email protected]
了解しました。接続リクエストは拒否されました。プロトコル2に接続できることを確認しましょう。
ー2
(プロトコル2)事実を証明するオプション。
ssh -2 [email protected]
SSHサーバーがパスワードを要求しているという事実は、接続が確立されており、サーバーと対話していることを示しています。実際、最近のSSHクライアントはデフォルトでプロトコル2を使用するため、クライアントが最新である限り、プロトコル2を指定する必要はありません。
ssh [email protected]
そして、私たちの接続は受け入れられます。したがって、拒否されるのは、より弱く安全性の低いプロトコル1接続のみです。
ポート22を避けてください
ポート22は、SSH接続の標準ポートです。別のポートを使用すると、システムがあいまいになるため、セキュリティが少し強化されます。隠すことによるセキュリティは、真のセキュリティ対策とは見なされません。他の記事では、これに反対しています。実際、一部のよりスマートな攻撃ボットは、ポートの単純なルックアップリストに依存して通常のサービスを提供すると想定するのではなく、開いているすべてのポートをプローブして、実行しているサービスを判別します。ただし、非標準のポートを使用すると、ポート22のノイズとトラフィックの低下を抑えることができます。
非標準ポートを構成するには、SSH構成ファイルを編集します。
sudo gedit / etc / ssh / sshd_config
「ポート」行の先頭からハッシュ#を削除し、「22」を選択したポート番号に置き換えます。構成ファイルを保存し、SSHデーモンを再起動します。
sudo systemctl restart sshd
どのような効果があったか見てみましょう。他のコンピューターでは、
ssh
サーバーに接続するコマンド。ザ・
ssh
コマンドのデフォルトはポート22を使用します。
ssh [email protected]
私たちの接続は拒否されます。もう一度試して、-p(ポート)オプションを使用してポート470を指定してみましょう。
ssh -p 479 [email protected]
私たちの接続は受け入れられます。
TCPラッパーを使用して接続をフィルタリングする
TCPラッパーは理解しやすいです アクセス制御リスト 。 IPアドレスやホスト名など、接続要求の特性に基づいて接続を除外および許可できます。 TCPラッパーは、適切に構成されたファイアウォールの代わりではなく、組み合わせて使用する必要があります。特定のシナリオでは、TCPラッパーを使用することで大幅に強化できます。
TCPラッパーは、この記事の調査に使用したUbuntu 18.04LTSマシンにすでにインストールされています。 Manjaro18.10とFedora30にインストールする必要がありました。
Fedoraにインストールするには、次のコマンドを使用します。
sudo yum install tcp_wrappers
Manjaroにインストールするには、次のコマンドを使用します。
すど ぱcまん ーしゅ tcpーwらっぺrs
関連する2つのファイルがあります。 1つは許可リストを保持し、もう1つは拒否リストを保持します。以下を使用して拒否リストを編集します。
すど げぢt /えtc/ほsts。でny
これにより、
gedit
拒否ファイルがロードされたエディター。
次の行を追加する必要があります。
ALL:ALL
そして、ファイルを保存します。これにより、許可されていないすべてのアクセスがブロックされます。次に、受け入れたい接続を承認する必要があります。これを行うには、許可ファイルを編集する必要があります。
すど げぢt /えtc/ほsts。あっぉw
これにより、
gedit
許可ファイルがロードされたエディター。
SSHデーモン名に追加しました。
SSHD
、および接続を許可するコンピューターのIPアドレス。ファイルを保存して、制限と権限が有効かどうかを確認しましょう。
まず、にないコンピューターから接続してみます
hosts.allow
ファイル:
接続は拒否されます。次に、IPアドレス192.168.4.23のマシンから接続を試みます。
私たちの接続は受け入れられます。
ここでの例は少し残酷です。接続できるのは1台のコンピューターだけです。 TCPラッパーは非常に用途が広く、これよりも柔軟性があります。それはサポートします ホスト名、ワイルドカード、およびサブネットマスク IPアドレスの範囲からの接続を受け入れるため。あなたはすることが奨励されています manページをチェックしてください 。
パスワードなしで接続要求を拒否する
悪い習慣ですが、Linuxシステム管理者はパスワードなしでユーザーアカウントを作成できます。つまり、そのアカウントからのリモート接続要求には、チェックするパスワードがありません。これらの接続は受け入れられますが、認証されません。
SSHのデフォルト設定は、パスワードなしの接続要求を受け入れます。これは非常に簡単に変更でき、すべての接続が認証されていることを確認できます。
SSH構成ファイルを編集する必要があります。
sudo gedit / etc / ssh / sshd_config
「#PermitEmptyPasswordsno。」という行が表示されるまでファイルをスクロールします。ハッシュを削除します
#
行の先頭からファイルを保存します。 SSHデーモンを再起動します。
sudo systemctl restart sshd
パスワードの代わりにSSHキーを使用する
SSHキーは、SSHサーバーにログインするための安全な手段を提供します。パスワードは推測、解読、または ブルートフォース 。 SSHキーは、このようなタイプの攻撃に対して開かれていません。
SSHキーを生成するときは、キーのペアを作成します。 1つは公開鍵で、もう1つは秘密鍵です。公開鍵は、接続するサーバーにインストールされます。秘密鍵は、その名前が示すように、自分のコンピューターで安全に保管されます。
SSHキーを使用すると、パスワードなしで接続を確立できます。これは、パスワード認証を使用する接続よりも、直感に反して安全です。
接続要求を行うと、リモートコンピューターは公開鍵のコピーを使用して暗号化されたメッセージを作成し、コンピューターに送り返します。公開鍵で暗号化されているため、コンピューターは秘密鍵で暗号化を解除できます。
次に、コンピュータはメッセージからいくつかの情報、特にセッションIDを抽出し、それを暗号化してサーバーに送り返します。サーバーが公開鍵のコピーでそれを復号化でき、メッセージ内の情報がサーバーから送信されたものと一致する場合、接続はユーザーからのものであることが確認されます。
ここでは、SSHキーを持つユーザーによって192.168.4.11のサーバーに接続されています。パスワードの入力を求められないことに注意してください。
ssh [email protected]
SSHキーは、それ自体が記事に値します。便利なことに、私たちはあなたのためにそれを持っています。これが SSHキーを作成してインストールする方法 。
関連: LinuxシェルからSSHキーを作成してインストールする方法
パスワード認証を完全に無効にする
もちろん、SSHキーを使用することの論理的な拡張は、すべてのリモートユーザーがSSHキーを採用することを余儀なくされた場合、パスワード認証を完全にオフにできることです。
SSH構成ファイルを編集する必要があります。
sudo gedit / etc / ssh / sshd_config
「#PasswordAuthenticationyes」で始まる行が表示されるまでファイルをスクロールします。ハッシュを削除します
#
行頭から「はい」を「いいえ」に変更し、ファイルを保存します。 SSHデーモンを再起動します。
sudo systemctl restart sshd
X11転送を無効にする
X11転送を使用すると、リモートユーザーはSSHセッションを介してサーバーからグラフィカルアプリケーションを実行できます。脅威アクターまたは悪意のあるユーザーの手に渡ると、GUIインターフェイスによって悪意のある目的が容易になります。
サイバーセキュリティの標準的なマントラは、オンにする正当な理由がない場合はオフにすることです。これを行うには、SSH構成ファイルを編集します。
sudo gedit / etc / ssh / sshd_config
「#X11Forwardingno」で始まる行が表示されるまでファイルをスクロールします。ハッシュを削除します
#
行の先頭からファイルを保存します。 SSHデーモンを再起動します。
sudo systemctl restart sshd
アイドルタイムアウト値を設定する
コンピューターへのSSH接続が確立されていて、一定期間アクティビティがない場合は、セキュリティ上のリスクが発生する可能性があります。ユーザーが自分のデスクを離れ、他の場所で忙しい可能性があります。机のそばを通りかかった人は誰でも座って自分のコンピューターを使い始めることができ、SSH経由であなたのコンピューターを使い始めることができます。
タイムアウト制限を設定する方がはるかに安全です。非アクティブ期間が制限時間に一致すると、SSH接続は切断されます。もう一度、SSH構成ファイルを編集します。
sudo gedit / etc / ssh / sshd_config
「#ClientAliveInterval0」で始まる行が表示されるまでファイルをスクロールしますハッシュを削除します
#
行の先頭から、数字の0を目的の値に変更します。 300秒、つまり5分を使用しました。ファイルを保存し、SSHデーモンを再起動します。
sudo systemctl restart sshd
パスワードの試行に制限を設定する
認証の試行回数に制限を定義すると、パスワードの推測やブルートフォース攻撃を阻止するのに役立ちます。指定された数の認証要求の後、ユーザーはSSHサーバーから切断されます。デフォルトでは、制限はありません。しかし、それはすぐに改善されます。
ここでも、SSH構成ファイルを編集する必要があります。
sudo gedit / etc / ssh / sshd_config
「#MaxAuthTries0」で始まる行が表示されるまでファイルをスクロールします。ハッシュを削除します
#
行の先頭から、数字の0を目的の値に変更します。ここでは3つ使用しました。変更を加えたときにファイルを保存し、SSHデーモンを再起動します。
sudo systemctl restart sshd
接続を試み、意図的に間違ったパスワードを入力することで、これをテストできます。
MaxAuthTriesの数は、ユーザーが許可された試行回数より1つ多いように見えることに注意してください。 2回の不正な試行の後、テストユーザーは切断されます。これは、MaxAuthTriesを3に設定した場合です。
ルートログインを無効にする
Linuxコンピューターにrootとしてログインすることはお勧めできません。通常のユーザーとしてログインし、
スド
root権限を必要とするアクションを実行します。さらに、rootがSSHサーバーにログインすることを許可しないでください。通常のユーザーのみが接続を許可する必要があります。管理タスクを実行する必要がある場合は、
スド
あまりにも。 rootユーザーにログインを許可するように強制された場合は、少なくともSSHキーの使用を強制することができます。
最後に、SSH構成ファイルを編集する必要があります。
sudo gedit / etc / ssh / sshd_config
「#PermitRootLoginprohibit-password」で始まる行が表示されるまでファイルをスクロールしますハッシュを削除します
#
行頭から。
- rootがログインしないようにする場合は、「prohibit-password」を「no」に置き換えます。
- rootにログインを許可するが、SSHキーの使用を強制する場合は、「prohibit-password」をそのままにしておきます。
変更を保存して、SSHデーモンを再起動します。
sudo systemctl restart sshd
究極のステップ
もちろん、コンピュータでSSHを実行する必要がまったくない場合は、SSHが無効になっていることを確認してください。
sudo systemctl stop sshd
sudo systemctl disable sshd
窓を開けないと、誰も登ることができません。