ウェブサイト検索

OpenSSHサーバーの最も一般的なカスタムSSH設定


Opensshユーティリティのセットを使用すると、マシン間に安全で暗号化された接続を作成できます。このチュートリアルでは、sshdの動作を変更するために使用できる最も便利なオプションのいくつかを見て、Linuxシステム管理の作業をより簡単にする方法を見ていきます。

この記事では、すでに稼働しておりアクセス可能なサーバーの存在を仮定しています。OpenSSHのインストールについてもっと知りたい場合は、Ubuntu LinuxにSSHサーバーをインストールする方法に関するこの記事をご覧ください。

このチュートリアルでは、あなたは学びます:

  • sshdデーモンの動作をカスタマイズする方法は、主なssh設定ファイル/etc/ssh/sshd_configのオプションを操作することです。
  • サーバーが使用するデフォルトポートを変更する方法
  • サーバーがリッスンするアドレスを変更する方法
  • 最大SSHログイン時間を変更する方法
  • ルートとしてのログインを許可または拒否する方法
  • 最大ログイン試行回数と最大セッション数を変更する方法
  • ユーザーがサーバーに認証しようとしたときにメッセージを表示する方法
  • パスワードと公開鍵認証を有効/無効にする方法
  • ホストベース認証を有効/無効にする方法
  • X11転送の有効化/無効化
sudo systemctl restart sshd

サーバーが使用するポートを変更すること

これは「セキュリティは曖昧さによって維持される」という対策と呼ばれるものです:デフォルトでは、sshdデーモンは22ポートでリッスンします。使用するポートを変更しても、実際にはセキュリティが向上するわけではありません。なぜなら、ポートスキャンを実行して、どのポートがマシンで使用されているかを確認することは簡単だからです。しかし、ほとんどの場合、ブルートフォースでのログイン試行はデフォルトポートをターゲットにするため、使用するポートを変更することが助けになります。デーモンに特定のポートでリッスンするよう指示するには、Portオプションを使用してポート番号を指定します:

Port 1024

オプションの複数の発生を指定できます: サーバーは指定されたすべてのポートでリッスンします。変更を有効にするためにsshサーバーを再起動する前に、変更に応じてファイアウォールルールを適切に修正することが非常に重要です。クライアント側では、特定のポートを使用して接続するために、-pオプション(–portの短縮形)を使用してポート番号を指定する必要があります。たとえば、ポート1024を使用してログインするには、以下のように記述します:

ssh -p 1024 egdoc@feanor

サーバーに接続するたびにポートを指定しなくて済むように、~/.ssh/configファイルにエントリを設定できます(デフォルトでは存在しないため、作成する必要があります。また、ユーザーのみがアクセスできるようにする必要があります)。以下の例のように:

Host feanor
    HostName 192.168.0.39
    Port 1024

このようにして、毎回一致するHost(この場合はfeanor)にssh接続を試みると、ssh設定ファイルの関連スタンザに指定されたパラメータが自動的に適用されます。

サーバーがリッスンするアドレスを変更する

ポートに加えて、sshd デーモンがリッスンする listen address を変更することもできます。デフォルトでは、サーバーはすべてのローカルアドレスでリッスンします。このオプションで使用する構文の例は、ssh 設定ファイルに既に存在しています。

#ListenAddress 0.0.0.0
#ListenAddress ::

次のいずれかの方法で住所を指定できます:

  • ホスト|IPv4アドレス|IPv6アドレス
  • ホスト|IPv4アドレス:ポート
  • ホスト|IPv6アドレス:ポート

ListenAddressと呼ばれるオプションを使用することができます。このオプションは複数回指定可能で、複数のアドレスを指定することができます。IPv4またはIPv6アドレスを使用でき、必要に応じて使用するポートを指定できます。ポートを指定しない場合、sshdデーモンは上記で見たPortオプションで指定されたポートでリッスンします。

最大ログイン時間の変更

ユーザーが正常にログインしなかった場合、指定された時間後に切断するようにOpensshデーモンを設定できます。この場合、変更したいオプションはLoginGracetimeと呼ばれています。私たちがする必要があるのは、例えば次のように時間制限の値を指定することです:

LoginGracetime 2m

このオプションのデフォルト値は120s(秒)です。

ルートとしてのログインを許可または拒否する

PermitRootLoginオプションを使用することで、sshdデーモンがルートユーザーの直接ログインを許可するかどうかを設定できます。このオプションは、次のいずれかの値を受け入れます:

  • はい
  • いいえ
  • パスワードを禁止する
  • 強制コマンドのみ

最初の2つの値は自己説明的です。yesを使用すると、ルートユーザーはssh経由でログインすることが許可され、noを使用するとこの可能性は拒否されます。prohibit-passwordとforced-commands-onlyの値は、より興味深いものです。

以前のものをPermitRootLoginオプションの値として使用すると、パスワードおよびキーボードインタラクティブログインは無効になり、rootユーザーは公開鍵を使用してログインできます。一方、forced-commands-onlyが使用されると、公開鍵認証によるrootログインは、承認された鍵にcommandオプションが指定されている場合にのみ許可されます。例えば:

command="ls -a" ssh-rsa [...]

上記では、ルートが使用するSSHキーのコマンドとしてls -aを指定しました。これにより、キーを使用して接続すると、このコマンドが実行され、その後サーバーへの接続が切断されます。それを確認してみましょう(ここでは、キーがすでにクライアントにあり、サーバーで承認されていると仮定しています):

ssh root@feanor
Enter passphrase for key '/home/egdoc/.ssh/id_rsa':
.  ..  .bash_history  .bashrc  .profile  .ssh  .vim  .viminfo
Connection to feanor closed.

最大ログイン試行回数と最大セッション数の変更

変更したい別の2つのパラメータは、接続ごとの試行ログインの回数と、許可されるオープンシェル、ログイン、またはサブシステムセッションの数です。前者のパラメータは、MaxAuthTriesオプションを使用して変更でき、許可される試行回数を設定します(デフォルト値は6です)。後者は、MaxSessionsオプションを使用して変更できます。このオプションも整数値を受け取り、デフォルトは10です。

ユーザーがサーバーに認証しようとしたときにメッセージを表示する

私たちはBannerオプションを使用して、ユーザーがサーバーに認証する前に送信したいテキストを含むファイルを指定できます。このオプションのデフォルト値はnoneであるため、バナーは表示されません。以下に例を示します。私たちが作成した/etc/ssh/bannerファイルには、メッセージとして使用するテキストが含まれています。このオプションを以下のように設定した場合:

Banner /etc/ssh/banner.txt

ログインしようとすると、以下の結果が得られます:

ssh egdoc@feanor
###############################
        Test Banner         #
###############################
egdoc@feanor's password:

パスワードおよび公開鍵認証の有効化/無効化。

sshdデーモンは、ユーザーを認証するための複数の方法を提供します。私たちは、それぞれPasswordAuthenticationおよびPubkeyAuthenticationオプションを使用して、パスワードまたは公開鍵による認証を有効または無効にすることを選択できます。デフォルトでは、通常、両方のオプションはyesに設定されています:これは、ユーザーが自分のパスワードを提供することによってサーバーに接続でき、また自分が所有する公開鍵を使用して接続できることを意味します(その鍵はパスワードで保護されることもあります)。2つのオプションのいずれかを無効にするには、単にnoを値として使用します。たとえば、公開鍵によるログインのみを許可したい場合は、次のように設定できます:

PasswordAuthentication no

この方法では、認証鍵ファイルに含まれる公開鍵を持つユーザーのみがサーバーにログインできるようになります。認証鍵ファイルは、許可された公開鍵を含むファイルです。デフォルトでは、このファイルはサーバー上のユーザーのホームディレクトリにある.ssh/authorized_keysですが、AuthorizedKeysFileオプションを使用して、代替ファイルを指定することによって変更できます。この場合、絶対パスまたは相対パスを提供できます。相対パスが使用されると、ユーザーのホームディレクトリに対して相対的と見なされます。このオプションはnoneに設定することもできます。この場合、サーバーはファイル内の公開鍵を検索しなくなります。

ホストベース認証の有効化/無効化

OpenSSHサーバーはホストベースの認証を受け入れるように設定できます。この種の認証を使用すると、ホストはそのすべてまたは一部のユーザーの代わりに認証を行います。オプションはデフォルトでいいえに設定されています。オプションをはいに設定するだけでは、ホストベースの認証を機能させるには不十分です。

X11転送の有効化/無効化

X11ウィンドウシステムはクライアント-サーバーアーキテクチャを持っています。クライアントは、ディスプレイを管理するサーバーへの接続を要求する多くのグラフィカルアプリケーションです。X11サーバーとそのクライアントは同じマシン上で動作することが多いですが、必ずしもそうではありません。専用で安全でないプロトコルを通じてリモートX11サーバーにアクセスすることも可能です。Opensshを使用すると、暗号化されたトンネルを作成して接続を安全に実行できます。この動作を制御するオプションはX11Forwardingです。この機能は通常デフォルトで無効になっているため、noに設定されています。

それを利用したい場合、オプションをyesに設定する必要があります。クライアント側では、コマンドラインから-Xオプションを使用することで機能を有効にするか、クライアントの設定ファイルでForwardX11をyesに設定します。例えば、リモートマシンでX11が実行されているとしましょう。ssh接続を使用して「pluma」アプリケーション(軽量テキストエディタ)を起動し、X11Forwardingを使用して制御したいとします。以下のように実行します:

ssh egdoc@feanor -X pluma

プログラムが起動されます。タイトルバーには、「feanor」というリモートマシンの名前で実行されていることが明確に表示されています。

X11フォワーディングの実行中

結論

このチュートリアルでは、デフォルトのsshdデーモン設定ファイルが何であるかを見て、サービスを開始するときに-fオプションを指定して代替の設定ファイルを使用する方法を学びました。また、sshdの動作を変更するために、上記のファイルで使用できる最も便利なオプションのいくつかを見ていきました。パスワードベースと公開鍵ベースの認証を許可または拒否する方法、ルートログインを有効または無効にする方法、X11転送機能を有効または無効にする方法、およびユーザーがサーバーに認証しようとしたときにメッセージを表示する方法を見ました。

私たちは、接続ごとに許可される最大ログイン試行回数を指定する方法や、サーバーがリッスンするアドレスとポートを変更する方法を見ました。サーバーの可能な構成についてもっと知りたい場合は、sshdのマニュアルページおよびsshd_config設定ファイルのマニュアルページを参照してください。

関連記事: