Linux 向け OpenSSH セキュリティ強化ガイド
このページでは
- SSH はどのように機能しますか?
- ベスト プラクティスを使用した SSH の構成
- 1.デフォルト ポートの変更
- 2. root ユーザーとしてのログインを無効にする
- 3.プロトコル バージョンの設定
- 4.パスワードの複雑さ
SSH は、Linux プラットフォームでのシステム管理に最も広く使用されているプロトコルの 1 つです。 Unix、Linux、および MacOS に基づく多くのオペレーティング システムで使用できます。これは、1 台のマシンがサーバー コンポーネントを実行し、もう 1 台のマシンがクライアント ツールを使用してアクセスするクライアント サーバー モデルに基づいています。
SSH はどのように機能しますか?
クライアント (ssh) は、サーバーに要求を送信して接続を開始します。サーバーは、サーバー デーモン (sshd) を使用して着信要求をリッスンします。公開鍵を使用して、接続しようとしているクライアントに対して自身を認証します。
このようにして、クライアントは正しい SSH サーバーに接続していることを確認できます。これが完了すると、クライアントはサーバーにアクセスできます。 Windows クライアントを使用している場合は、パテなどのツールを使用してサーバーに接続する必要があります。クライアントとサーバーの両方を同じシステムにインストールできます。つまり、クライアント ツールを使用して他のマシンにアクセスしたり、システム自体を他のマシンからアクセスできるサーバーにすることができます。このような場合、構成ファイルは同じディレクトリに配置されますが、名前が少し異なります。ディレクトリの場所は「/etc/ssh」で、ssh クライアント構成ファイルの名前は「ssh_config」、サーバーの構成ファイルの名前は「sshd_config」です。
システムに両方のファイルがある場合は、どちらのファイルを構成する必要があるかを賢く選択する必要があります。ほとんどの場合、システムへの潜在的なアクセスへの扉を開くため、セキュリティのために構成する必要があるのはサーバーです。まず、サーバー上の SSH デーモンまたは sshd のステータスを確認することから始めます。このようにして、それが実行中であり、起動時に自動的に起動するように有効化されているかどうかを確認できます。以下のコマンドは、sshd のステータスを確認します。
$systemctl status ssh.service
または、以下のものを使用します。
$systemctl status sshd.service
スクリーンショットから、サービスがアクティブで有効になっていることがわかります。過去 6 時間実行されています。右矢印を押してターミナル ビューを展開すると、デフォルト ポート 22 でリッスンしていることがわかります。
SSH 自体を使用してリモート システムに接続しているときに、リモート システムの SSH 構成ファイルを変更することがあります。このような場合、restart コマンドの代わりに reload コマンドを使用する必要があります。このようにして、切断される可能性は低くなります。
ベスト プラクティスを使用した SSH の構成
SSHサーバー構成の構成を開始するのは今だと思います。 SSH 構成ファイルに手を染める前に、デフォルト設定でファイルのバックアップを作成する必要があります。
$sudo cp /etc/ssh/sshd_config ~/sshd_config.bkp
バックアップを実行した後、メイン ファイルを台無しにして SSH を壊した場合でも、バックアップ ファイルを使用して正常に戻すことができると確信しています。1.デフォルトポートの変更
デフォルトでは、sshd デーモンはサーバーのポート 22 で listen します。スクリプトを使用した自動攻撃の範囲を縮小するために、この値を別の数値に変更することをお勧めします。このアプローチは、あいまいさによるセキュリティと呼ばれます。これを行うには、以下のファイルを開き、「#Port 22」というテキストを含む行を探します。
$sudo nano /etc/ssh/sshd_config
「#Port 22」行のコメントを外し、「22」をシステムで使用されていない別のポート番号に変更します。 222 に変更し、サービスを再起動する必要があります。オプション p を指定して ssh コマンドを使用し、新しいポートを指定します。
$ssh [メール保護]_ip -p 222
2. root ユーザーとしてのログインを無効にする
ルートは、システム上のすべてのリソースにアクセスできる、あらゆる Linux システムの最終ユーザーです。厳密なルート アクセスが必要ない場合は、サーバーでルート ログイン機能を無効にする必要があります。このために、上記と同じファイルを開きます。
$sudo nano /etc/ssh/sshd_config
「PermitRootLogin」パラメーターを「no」に設定します。これにより、root アカウントを狙ったランダムな攻撃からサーバーが確実に保護されます。デフォルトのオプションは「prohibit-password」で、公開鍵認証に基づくログインは許可しますが、パスワードに基づくログインは拒否します。
3. プロトコル バージョンの設定
SSH の古いプロトコル バージョンは 1 で、SSH2 に比べて安全性が低く、ネットワークの実装が異なり、相互に互換性もありません。サーバーでアクティブなプロトコル バージョンを確認するには、sshd_config ファイルを再度開き、プロトコルの行を探します。
$猫 /etc/ssh/sshd_config | grep プロトコル
空の出力がある場合、OpenSSH はおそらくバージョン 2 を使用している可能性があります。もう 1 つの方法は、netcat コマンド ユーティリティを使用することです。
$nc ローカルホスト 22
サンプル出力:
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.4
出力から、システムで SSH2 がアクティブになっていることがわかります。
リモート サーバーが実行しているプロトコルのバージョンを確認するには、-Q (クエリ) オプションを指定して ssh クライアントを使用して接続を試みます。$ssh -Q protocol-version [メール保護]_name
上の画像は、Kali Linux から Ubuntu ssh サーバーにアクセスする際の SSH バージョン 2 を示しています。
4. パスワードの複雑さ
弱いパスワードは常に悪用されやすいため、空のパスワードは悪用される可能性が高くなります。したがって、PermitEmptyPasswords オプションは、sshd_config ファイルで「no」に設定する必要があります。同様に、ブルート フォース攻撃の可能性を減らすために、間違ったパスワードでのログイン試行回数を制限する必要があります。これは、「MaxAuthTries」オプションを 3 などの小さい値に設定することで実現できます。
上の図から、「MaxAuthTries」の値を 3 に設定すると、パスワードを 3 回間違えると SSH が拒否されることがわかります。もう 1 つの主要なセキュリティ面は、ログインに公開鍵認証を使用することです。キーベースの認証モデルは、ブルート フォース攻撃に対して脆弱ではありません。同様に、PAM 認証モジュールを使用して、SSH サーバーをさらに強化することもできます。結論
このガイドでは、SSH サーバーを保護するための最も重要なポイントを取り上げ、それらを 4 つの主要なポイントにまとめようとしました。このガイドは完全なものではありませんが、SSH サーバーをさらに強化するための領域をさらに見つけることができます。たとえば、 SSH 経由でシステムを使用していることをユーザーに警告するバナー メッセージを追加してみることができます。パスワードによるログインを拒否し、パスワードなしのログインにキーベースの認証を使用することもできます。もう 1 つの興味深い点は、SSH ユーザーの数とその接続時間を制限できることです。