OpenSSH オプションは、/etc/ssh/sshd_config ファイルによって制御されます。この記事では、変更する必要がある sshd_config ファイルの 7 つのデフォルト オプションについて説明します。
sshd_config の # で始まる行はコメントです。デフォルト値を使用するオプションの場合、sshd_config ファイルには、オプションとそのデフォルト値を含むコメント行が含まれています。
これにより、OpenSSH オプション名とデフォルト値を別の場所で検索しなくても確認できるため、作業が簡単になります。
たとえば、sshd_config ファイルには、次のコメント行が含まれています。これは、PubkeyAuthentication オプションにデフォルト値として「yes」が含まれていることを示しています。
$ grep -i pubkey /etc/ssh/sshd_config #PubkeyAuthentication yes
これを変更したい場合は、コメントを削除して、以下に示すように値を (yes から no に) 変更する必要があります。
$ vi /etc/ssh/sshd_config PubkeyAuthentication no
上記はあくまで一例として示しました。公開鍵認証を許可することは良いことなので、PubkeyAuthentication オプションのデフォルト値を変更する必要はありません。
この記事で説明した 7 つのオプションを除いて、sshd_config ファイルのデフォルト値を変更する必要はありません。
1.ルート ログインを無効にする (PermitRootLogin)
デフォルトでは、root としてサーバーに ssh できます。 root がサーバーに直接ログインできないようにすることをお勧めします。代わりに、自分のアカウントでシステムにログインしてから、「su -」を実行して root としてログインする必要があります。
組織内に複数のシステム管理者がいて、全員が root としてサーバーに直接ログインしている場合、どのシステム管理者が root としてログインしたかがわからない場合があります。代わりに、root としてのログインを無効にすると、システム管理者は、「su -」を実行する前に、まず自分のアカウントとしてログインすることを強制されます。これにより、監査が容易になります。
次のエントリを sshd_config に追加して、root によるサーバーへの直接ログインを無効にします。
$ vi /etc/ssh/sshd_config PermitRootLogin no
2.特定のユーザーまたはグループのみを許可 (AllowUsers AllowGroups)
デフォルトでは、認証に成功した人は誰でもログインできます。代わりに、システムへのログインを許可するユーザー (またはグループ) を制限できます。
これは、システム上に複数のユーザー アカウントを作成しているが、そのうちの少数のみをログインさせたい場合に役立ちます。
これは、認証に NIS、openLDAP (またはその他の外部システム) を使用している場合にも役立ちます。社内のすべてのユーザーが NIS や OpenLDAP などのアカウントを持っているかもしれません。しかし、特定のサーバーでは、少数のユーザーのみがログインするようにしたい場合があります。たとえば、実稼働システムでは、システム管理者のみがログインできるようにする必要があります。
次のエントリを sshd_config ファイルに追加して、特定のユーザーのみがシステムにログインできるようにします。以下の例では、ramesh、john、および jason のみがこのシステムにログインできます。ユーザー名はスペースで区切る必要があります。
$ vi /etc/ssh/sshd_config AllowUsers ramesh john jason
sshd_config ファイルに次のエントリを追加して、特定のグループに属するユーザーのみがログインできるようにします。以下の例では、sysadmin および dba グループに属するユーザーのみがシステムにログインできます。
$ vi /etc/ssh/sshd_config AllowGroups sysadmin dba
3.特定のユーザーまたはグループを拒否する (DenyUsers DenyGroups)
特定のユーザー (またはグループ) を許可する代わりに、特定のユーザーまたはグループを拒否することもできます。
次のエントリを sshd_config ファイルに追加して、特定のユーザーのシステムへのログインを拒否します。以下の例では、cvs、apache、jane はこのシステムにログインできません。ユーザー名はスペースで区切る必要があります。
$ vi /etc/ssh/sshd_config DenyUsers cvs apache jane
特定のグループに属するユーザーのログインを拒否するには、sshd_config ファイルに次のエントリを追加します。以下の例では、developers および qa グループに所属するユーザーはシステムにログインできません。
$ vi /etc/ssh/sshd_config DenyGroups developers qa
注:すべての Allow および Deny ディレクティブを組み合わせて使用できます。この順序で処理されます:DenyUsers、AllowUsers、DenyGroups、最後に AllowGroups
4. SSHD ポート番号の変更 (ポート)
デフォルトでは、ssh はポート 22 で実行されます。ほとんどの攻撃者は、サーバーがポート 22 で開いているかどうかをチェックし、無作為にブルート フォースを使用して、いくつかのユーザー名とパスワードの組み合わせを使用してサーバーにログインします。
ポート番号を別のものに変更した場合、他のユーザーは、ssh を使用してサーバーにログインするために使用するポートを正確に知る必要があります。以下の例では、ssh にポート 222 を使用しています。
$ vi /etc/ssh/sshd_config Port 222
ログ (/var/log/secure) から、システムに存在しないアカウントに対して ssh を使用した無効なログインが多数見られる場合は、
認識できない IP アドレスからログインしている可能性があります。ブルートフォース攻撃になります。ポート番号を変更すると、この種の ssh 無効ログインは停止します。
システムにログインするチームは、IP アドレスとポート番号の両方を知る必要があるため、これはほとんど不便ではないことに注意してください。
5.ログイン猶予時間を変更する (LoginGraceTime)
サーバーに SSH で接続する場合、ログインに 2 分かかります。 2 分以内にログインに失敗すると、ssh が切断されます。
ログインに 2 分かかるのは長すぎます。 30 秒、または 1 分に変更することを検討してください。
次のエントリを sshd_config ファイルに追加して、ログイン猶予時間を 2 分から 1 分に変更します。
$ vi /etc/ssh/sshd_config LoginGraceTime 1m
6.インターフェイス (IP アドレス) をログイン (ListenAddress) に制限
サーバー上に異なる IP アドレスに設定された複数のインターフェースがある場合、それらすべての IP アドレスを使用して全員がサーバーにログインすることを望まない場合があります。
サーバー上に次の 4 つのインターフェースがあると仮定します:
- eth0 – 192.168.10.200
- eth1 – 192.168.10.201
- eth2 – 192.168.10.202
- eth3 – 192.168.10.203
デフォルトでは、ssh は上記のすべての IP アドレスをリッスンします。ユーザーに ip-address 200 と 202 のみを使用してログインさせたい場合は、sshd_config で次のようにします
$ vi /etc/ssh/sshd_config ListenAddress 192.168.10.200 ListenAddress 192.168.10.202
7.アクティビティがない場合は SSH を切断します (ClientAliveInterval)
システムへのログインに成功したら、x 分経過してもアクティビティがない場合は、切断することをお勧めします。これは基本的にアイドル タイムアウトです。
Bash では、TMOUT 変数を使用してこれを実現できます。
OpenSSH では、これは sshd_config ファイルで ClientAliveCountMax と ClientAliveInterval オプションを組み合わせることで実現できます。
- ClientAliveCountMax – これは、ssh クライアントからの応答を取得せずに ssh サーバーによって送信されたチェックアライブ メッセージの総数を示します。デフォルトは 3 です。
- ClientAliveInterval – タイムアウトを秒単位で示します。 x秒後、sshサーバーはクライアントに応答を求めるメッセージを送信します。デフォルトは 0 です (サーバーは確認のためにクライアントにメッセージを送信しません)。
10 分 (600 秒) 後に ssh クライアントを自動的に終了 (タイムアウト) させたい場合は、sshd_config ファイルを変更し、以下に示すように次の 2 つのパラメーターを設定します。
$ vi /etc/ssh/sshd_config ClientAliveInterval 600 ClientAliveCountMax 0