はじめに
Linux 環境のセキュリティを確保するには、Secure Shell (SSH) プロトコルの脆弱性を最小限に抑えることが重要です。
この記事では、最も一般的な Linux SSH セキュリティについて説明します サーバーをより安全にするために実行できる対策。デフォルトの SSH ポートを変更し、キー ペアを使用し、その他の推奨されるベスト プラクティスに従うことで、システムの全体的なセキュリティを大幅に向上させることができます。

SSHとは?
セキュア シェル (SSH) プロトコル 暗号で保護されたリモート システム管理と、安全でないネットワーク上でのファイル転送を可能にします。複数の暗号化方式を使用して、SSH はクライアントとサーバー間の接続を保護し、ユーザーのコマンド、認証、および出力を不正なアクセスや攻撃から保護します。
SSH プロトコルは現在、データ センターで広く使用されており、UNIX バリアントを実行しているほぼすべての主要企業で使用されています。
セキュリティ対策に関しては、1 つだけを選択してそのソリューションだけに依存するのではなく、それらを組み合わせて、層状に適用することが不可欠です。
SSH 接続の詳細については、SSH の仕組みに関する記事をご覧ください。
1.デフォルトの SSH ポートを変更する
SSH 接続に非標準ポートを使用すると、サーバーへの自動攻撃を回避できます。また、ハッカーのレーダーに現れる可能性を減らし、目立たないターゲットにするのにも役立ちます.
注意 :OpenSSH サーバーを探しているハッカーの大半は、デフォルトの SSH ポート 22 を狙っています。 .
その場合、彼らが使用しているスクリプトは、ポート 22 でのみ IP アドレスを検索します。サーバーがそのグループに分類される場合、そのような自動化されたすべての攻撃がログ ファイルに影響を与えます。その結果、多くの SSH サーバー エクスプロイトが 24 時間体制で実行され、すべてのサーバーのドアをノックしているため、サーバーの負荷が大幅に増加する可能性があります。
デフォルトの SSH ポートを変更しても、サーバーのセキュリティは向上しないことに注意してください。ただし、自動化された攻撃を防ぐのには役立ちます。
ポート番号の変更方法
開始する前に、デフォルトのポート 22 の代わりに使用するポートを決定する必要があります。決定する前に、いくつかのことを考慮する必要があります。

Linux サーバーのポートを変更するには 、次の手順に従ってください:
<オール>etc/ssh/
にある sshd 構成ファイルを編集します。 ディレクトリ。端末内でテキスト エディタを使用したことがない場合は、Nano を使用することをお勧めします。それ以外の場合は、現在最も一般的に使用されているエディターである vi または vim を使用してください。変更を加える前に、元のファイルをバックアップすることをお勧めします。nano /etc/ssh/sshd_config
- sshd_config の出力 ファイルで、「
Port 22
」という行を見つけます。 .」

- ポート番号を任意の値に変更します。 「
#
」がないことを確認してください 」を行頭に追加します。 - エディタを終了し、変更を保存することを確認します。
- 変更を有効にするために、sshd サービスを再起動します このコマンドで:
service sshd restart
- 指定したポートに接続して、SSH がそのポートでリッスンしていることを確認します。
特に指示がない限り、クライアントは常にデフォルトの SSH ポートを使用するため、接続時にポートを指定する必要があることに注意してください。
メリット
デフォルトの SSH ポートを変更する手順自体がセキュリティ レベルを向上させるわけではありませんが、最も一般的なスキャンのレーダーから逃れることができます。これをテストする簡単な方法の 1 つは、sshd が既定のポートをリッスンする状態でサーバーを数日間実行してから、標準以外のポートに変更することです。サーバーでログインに失敗した回数を比較すると、大幅に減少していることがわかります。
SSH に非標準ポートを使用する:
- ランダム スキャンに見られないようにします。
- サーバーを見つけるのがより難しくなります。ほとんどの攻撃は、デフォルト ポートまたはそのいくつかのバリアントをスキャンしますが、接続が拒否されると次に進みます。
- SSH デーモンは、スクリプト化された攻撃からの接続要求を取得しないため、中断することができます。サーバーの負荷が軽減され、ログ ファイルがクリーンな状態に保たれるため、確認にかかる時間を節約できます。
- 失敗したログインに関するアラートをそれほど多く受け取りません。標準以外のポートを使用していて、誰かがまだサーバーにアクセスしようとしている場合は、サーバーが特に標的にされており、アラームがスクリプト攻撃によるものではないことを意味している可能性があります。
- sshd のバグや脆弱な秘密鍵により、ハッキングされる可能性が低くなります。
- デフォルトのポートを使用していないことがわかった場合、ほとんどのハッカーは撃退されます。これは、サーバーが適切に保護されていること、およびおそらく他のセキュリティ対策も取られていることを示しており、サーバーが望ましくない標的になっていることを示しています.
欠点
SSH のデフォルト ポートの変更を決定する前に、留意すべきいくつかの予防措置があります。非標準のポートを実行することの欠点は、次のことを意味する可能性があります:
- あなたのサーバーに接続できるはずのすべての人に、変更について通知する必要があり、新しいポートの使用を開始する必要があります。
- サーバーの監視を外部委託している場合は、変更についても通知する必要があります。そうしないと、サーバーのダウンタイムにつながる可能性のある潜在的な脅威としてこれを処理する可能性があります。
- SSH サービスに関連するファイアウォール ルールは、変更に応じて検査および修正する必要があります。
これらの欠点のいくつかは、おそらくユース ケースには当てはまりませんが、考慮に入れる必要があります。ポートを変更することの利点は欠点を上回り、サーバーの優れた追加のセキュリティ レイヤーであることが証明されています。
2.キーペアを使用して Linux SSH セキュリティを強化する
サーバーに対してクライアントを認証する最も安全な方法の 1 つは、SSH キー ペアを使用することです。 .サーバーを安全に保つには、強力なパスワードで十分かもしれませんが、継続的なブルート フォース攻撃によって、パスワードが解読される可能性があります。これが、鍵ペアによる追加の SSH 強化が必要な理由です。
SSH 鍵はこのような攻撃に対して回復力があり、事実上復号化することは不可能です。 SSH キー ペアは、2 つの長い一連の文字、秘密鍵で構成されます これは秘密にされ、公開鍵 安全に共有できるもの。その目的はパスワードに似ており、SSH セッションを自動的に確立することができます。 パスワードを入力する必要はありません。
鍵ペアの生成方法
SSH キーをセットアップするには、サーバーへの接続に使用されるクライアント コンピューターでキー ペアを生成する必要があります。そうするには:
<オール>ssh-keygen –t rsa
- 「公開/秘密 RSA キー ペアを生成しています」というメッセージが表示されます。 キーをデフォルトの場所に保存する場合は、
Enter
を押します プロンプトが表示されたら。キーはホーム ユーザーのディレクトリの~/.ssh
に保存されます ディレクトリ。場所を変更するには、新しいパスを入力するだけです。デフォルトの場所をそのまま使用することをお勧めします。そのため、SSH クライアントを変更する必要はありません。秘密鍵または識別鍵はid_rsa
として保存されます 対応する公開鍵はid_rsa.pub
です . - 必要に応じて、パスフレーズを挿入できます .使用したくない場合は、
Enter
を押してください 続ける。パスフレーズは、ローカル マシン上の秘密キーを暗号化することにより、追加のセキュリティ レイヤーを提供します。パスフレーズを解読するには、秘密鍵がネットワーク上に公開されていないため、ハッカーは最初にシステムにアクセスする必要があります。それでも、成功するには時間がかかるため、ハッカーが他のサーバーにアクセスする前に、使用されているキーを変更できます.欠点は、そのキーを使用して接続しようとするたびに入力する必要があることです。
鍵ペアの生成プロセスが完了しました。
最終的な画面は次のようになります:
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
8b:cd:0b:f7:38:4a:3f:ed:24:18:8d:54:34:2c:63:56 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
| ..o. |
| . E.o |
| + . o |
| . = = . |
| ..S |
| = + = + |
| . o + o . |
| . + + o |
| .. |
| |
+-----------------+
注: デフォルトの 2048 ビットではなく、より大きな 4096 ビット キーを作成することで、認証/承認をさらに安全にすることができます。これを行うには、–b 4096
を追加します ssh-keygen
に 指図。次のようになります:
ssh-keygen -t rsa -b 4096
公開鍵のコピー
マシンで作成したキー ペアを SSH 認証に使用するには、目的のサーバーに公開キーを配置する必要があります。これを行う最も簡単な方法は、OpenSSH で利用可能なツールを使用することです:
ssh-copy-id
手順は簡単です:
<オール>ssh-copy-id [email protected]_host_address
と入力します . Yes
と入力します 続行します。~/.ssh/ id_rsa.pub
の内容をコピーします authorized_keys
の鍵 ~/.ssh
の下のファイル サーバー上のホーム ディレクトリ注: セキュリティ上の理由により、パスワードの入力中は文字が表示されません。
- 次のメッセージが表示されます:

公開鍵がリモート サーバーに配置されました。これで、アカウントのパスワードを入力せずにログインできます。
- キーによる認証が機能しているかどうかをテストするには、
ssh [email protected]_host_address
でサーバーに接続します .成功すると、自動的にログインします。以前にパスフレーズを設定したことがある場合は、サーバーへのアクセスを許可する前に、最初にパスフレーズを入力する必要があります。
キーの仕組み
基本的に、公開鍵 キーではありません。別のマシンの SSH アカウントに置くことができる南京錠のように動作します。 「ssh-keygen」ユーティリティを実行すると、南京錠とそれを開く鍵の両方が生成されます id_rsa.pub
そしてid_rsa
南京錠のコピーをいくつでも作成できます 必要に応じて、それらを好きなサーバーに配布してください。すべてのロックを解除するための適切なキーを持っているのはあなただけです。 南京錠のすべてのコピーのロックを解除するため、秘密鍵を安全に保管することが重要なのはこのためです。
マスター キーが危険にさらされない限り、公開キーをどこに置くかは問題ではありません。誰も秘密鍵を所有していないため、承認と認証のためのこの方法はおそらく最も安全であり、強く推奨されます.
3.サーバー SSH ルート ログインを無効にする
Linux サーバー ディストリビューションでは、デフォルトで外部ルート アクセスが有効になっています。ハッカーはブルート フォース攻撃でパスワードを解読しようとする可能性があるため、これは深刻なセキュリティ上の脅威になる可能性があります。 root ログインを無効にして、通常のアカウントと su –
を使用することをお勧めします コマンドを使用して root ユーザーに切り替えます。
root ログインを無効にする前に、root アクセスを取得できるアカウントを追加したことを確認してください。そのためには、以下の手順に従ってください:
<オール>2. テキスト エディターを使用してメイン構成ファイルを開きます。今回は vi を使用します。 編集者。
vi /etc/ssh/sshd_config
3. 「PermitRootLogin_yes
」という行を見つけます 「 PermitRootLogin_no
に変更します .見つけるには、数行下にスクロールする必要がある場合があります。
4. ユーザー アカウントを追加することが重要です ログインに使用します。問題のユーザー名を含む別の行を追加するだけです:AllowUsers your_username_here
5. 変更を保存して、終了します。 テキストエディタ
6. 再起動 SSH サービスですが、しない root セッションを閉じます。 Ubuntu と Debian の場合は sudo service ssh restart
を使用します Fedora/CentOS の場合は service ssh restart
を使用します コマンド。
新しいターミナル ウィンドウを開き、追加したユーザーとしてログインできることを確認します。動作することを確認したら、終了します アクティブなルート セッション。
4.サーバーでパスワードベースのログインを無効にする
SSH 認証に SSH キーを使用している場合は、サーバー パスワード認証を完全に無効にすることができます。これは、ブルート フォース攻撃やパスワードの解読の試みからサーバーを保護するもう 1 つの方法です。続行する前に、サーバーの root アカウントまたは sudo を持つアカウントで SSH キーベースの認証が機能しているかどうかを再確認してください。 アクセス。
準備ができたら、次の手順を完了してください:
<オール>2. テキスト エディタを使用して sshd_config を開きます ファイル。 vi: を使用します。
vi /etc/ssh/sshd_config
3. PasswordAuthentication
という行を探します PasswordAuthentication_no
に変更します . #
の場合は、必ずその行のコメントを外してください。
4. 保存 加えた変更を終了します テキストエディタ
5. 再起動 変更を適用する SSH サービス。 Ubuntu/Debian の場合は sudo service ssh restart
を使用します Fedora/CentOS の場合は service ssh restart
を使用します コマンド。
おめでとうございます。アカウント パスワードを使用して SSH 経由でログインするオプションを無効にしました。 SSH デーモンは、秘密鍵と公開鍵のペアを含まない認証要求を単に無視します。
5. iptables を使用して SSH アクセスを制限する
iptables は、ファイアウォール ルールの構成と監視/フィルタリングに使用される Linux ユーティリティです。 サーバーへの着信および発信トラフィック。ほとんどの Linux ディストリビューションにデフォルトで含まれています。
iptables を使用すると、ルールを定義できます IP アドレス、ポート、またはネットワーク プロトコルによってさまざまな種類のサービスのトラフィックを制限または許可し、サーバーのセキュリティを大幅に向上させます。この例では、ファイアウォール ルールを設定して、1 つの IP アドレスまたはサブネットを除くすべての受信 SSH トラフィックを制限します。
このように、ポート 22 をブロックすると、サーバーへの不正アクセスを停止するだけでなく、DDoS 攻撃を停止または防止することもできます。
この手順を実行している間、SSH トラフィックを完全にブロックして自分自身をロックアウトしないようにする必要があります。受信 SSH 接続に対して特定の IP アドレスまたはサブネットを許可するには、いくつかのコマンドを使用するだけで済みます。
注: コマンドは大文字と小文字が区別されます。
このルールは、入力した IP アドレスをホワイトリストに登録します。コマンドの例の IP を実際の IP に置き換えてください。 10.10.10.0/24 などのサブネットを使用することもできます。
sudo iptables -A INPUT -p tcp -s 123.456.78.90 -dport 22 -j ACCEPT
再起動後に失われないように、ルールを保存する必要があります:
sudo iptables-save
すべての iptables ルールのリストを表示する場合は、iptables
を使用できます –L
指図。パケット、バイト、ターゲット情報などの詳細を含めるには、–v
を追加します 上記のコマンドに。 -n
を追加 すべてに適用され、出力は数値形式で表示されます。
すべてのルールをリセットしてクリーンな状態で開始したい場合は、flush コマンド iptables –F
を使用します . これにより、iptables 構成がクリアされます。これは、すべてが希望どおりに設定されているかどうかわからない場合に役立ちます。
iptables のパラメーターとオプションの定義
上記の例で使用されている iptables のパラメーター、オプション、および値の説明と、これまでに言及されていないいくつかの説明を以下に示します。
値 | 説明 |
受け入れる | パケットの通過を許可する |
ドロップ | パケットをブロックします |
戻る | 現在のチェーンをスキップして、前の (呼び出した) チェーンの次のルールから再開するように指示します |
>パラメータ | 説明 |
-c | カウンター – 特定のルールのパケットおよびバイトカウンターを設定できます |
-d | 目的地 – アドレス、ホスト名またはアドレスなどを指定できます。 |
-f | フラグメント – 2 番目とそれに続くフラグメントにルールを適用します |
-g | goto チェーン – アクションがユーザー指定のチェーンで継続することを示します |
-i | インターフェイス内 – パケットが来るインターフェイスの名前を示します |
-j | ジャンプ – パケットがルールに一致した場合のアクションを指定します |
-o | アウト インターフェイス – 発信パッケージのインターフェースの名前 |
-p | プロトコル – SSH、TCP、UDP、FTP などの利用可能なプロトコル |
-s | ソース – アドレス、ホスト名またはアドレスなどを指定できます。 |
チェーン | 説明 |
入力 | 着信パケットを制御します |
フォワード | あなたのサーバーに到着するが別の場所に向かうパケットを転送します |
出力 | サーバーから送信されるパケットをフィルタリングします |
オプション | 説明 |
-A | 追加 – 選択したチェーンの 1 つ (または複数) のルールを追加します |
-C | チェック – 選択したチェーンの条件に一致するルールをチェックします |
-D | 削除 – 選択したチェーンからルールを 1 つだけ削除します |
-F | フラッシュ – すべてを削除します 定義された iptables ルール |
-私 | 挿入 – 選択したチェーンにルールを挿入 |
-L | リスト – 選択したチェーンのルールを表示します |
-n | 数値 – IP アドレス/ホスト名と戻り値を数値形式で表示 |
-N | 新しいチェーン |
-v | 詳細 – 追加情報を提供するために -L と組み合わせて使用 |
-X | delete-chain |
まとめ、SSH セキュリティ、強化のベスト プラクティス
新しいサーバーを構築する場合でも、仮想マシンを構築する場合でも、環境内に複数のセキュリティ レイヤーを実装することをお勧めします。企業は通常、インフラストラクチャをできるだけ早くセットアップすることに熱心ですが、必要なセキュリティ対策は最初から適用する必要があります。
上記の Linux SSH セキュリティ メソッドを採用すれば、クラウドでの一般的なセキュリティの脅威を回避できるはずです。
ハッカーがサーバーに侵入しにくくし、被害を制限します。サーバーをネットワーク上で利用できるようにする前に、これらのベスト プラクティスをできるだけ多く実装してください。
定期的に更新されるベスト サイバーセキュリティ ブログのリストをチェックして、すべての最新トレンドを把握することを忘れないでください。