技術ノート Linux SSH サーバーをロックダウンする方法

SSH サーバーをロックダウンする方法

Secure Shell の略である SSH は、デフォルトではあまり安全ではなく、他の制限のない基本的なパスワード認証を選択します。本当にサーバーをロックダウンしたい場合は、さらに構成を行う必要があります。

パスワードによるログインを許可しない — SSH キーを使用する

最初に行うことは、パスワード認証を完全に削除し、SSH キーの使用に切り替えることです。 SSH キーは公開キー暗号化の形式です。ユーザー名のように機能する公開キーと、パスワードのように機能する秘密キーがあります (ただし、このパスワードの長さは 2,048 文字です)。秘密キーはディスクに保存されますが、パスフレーズと ssh-agent で暗号化されます。サーバーに SSH で接続すると、パスワードを要求する代わりに、ssh-agent はキーを使用してサーバーに接続します。

すでに SSH キーを使用している場合でも、この 2 つは相互に排他的ではないため、パスワード ログインがオフになっていることを確認する必要があります。

SSH サーバーをロックダウンする方法

SSH キーを生成する

ほとんどの Unix システムにデフォルトでインストールされている ssh-keygen ユーティリティを使用して、新しい SSH キーを生成できます。

 ssh-keygen

これにより、ローカル キー ファイルを暗号化するためのパスフレーズの入力が求められます。これはサーバーとの認証には使用されませんが、それでも秘密にしておく必要があります。

ssh-keygen 秘密鍵を ~/.ssh/id_rsa に保存し、公開鍵も ~/.ssh/id_rsa.pub に保存します。秘密キーはハード ドライブに残りますが、サーバーがユーザーの身元を確認し、そのサーバーにアクセスする権限があることを確認できるように、公開キーをサーバーにアップロードする必要があります。

サーバーは承認されたユーザーのリストを保持しており、通常は ~/.ssh/authorized_keys に保存されます。キー ファイルをこのファイルに手動で追加することも、 ssh-copy-id ユーティリティを使用することもできます。

 ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

user@host 独自のユーザー名とサーバーのホスト名に置き換えます。古いパスワードを使用してもう一度サインインするように求められますが、その後は再度パスワードの入力を求められることはなく、パスワード サインインを無効にすることができます。

SSH サーバーをロックダウンする方法

SSHパスワードログインを無効にする

キーを使用してサーバーにアクセスできるようになったので、パスワード認証を完全にオフにすることができます。キーベースの認証が機能していることを確認してください。機能していないと、サーバーからロックアウトされます。

サーバー上で、お気に入りのテキスト エディターで /etc/ssh/sshd_config を開き、次で始まる行を検索します。

 #パスワード認証

これのコメントを外して (ハッシュタグを削除し)、「はい」を「いいえ」に変更します。

パスワード認証番号

次に、次のようにして sshd 再起動します。

 systemctl sshd を再起動します

強制的に再接続する必要があります。キー ファイルが間違っている場合は、パスワードの入力を求められません。

必要に応じて、他のすべての認証方法をブロックする公開キーベースの認証を強制することもできます。次の行を /etc/ssh/sshd_config に追加します。

認証方法の公開鍵

公開鍵認証はい

sshd 再起動します。

SSH サーバーをロックダウンする方法

拒否ホストで攻撃者をロックアウト

denyhosts 、何度も試行すると携帯電話がロックアウトされるのと同様に、SSH 経由でログイン試行が繰り返し失敗することを防ぐためのユーティリティです。デフォルトではインストールされないため、ディストリビューションのパッケージ マネージャーからインストールする必要があります。 Ubuntu などの Debian ベースのシステムの場合、次のようになります。

 sudo apt-get installdenyhosts -y

インストールしたら、次のようにして有効にします。

 sudo systemctl を有効にして拒否ホストを有効にする

これで、 denyhosts 自動的に実行されるはずですが、ロックアウトされた場合に備えて、IP アドレスをホワイトリストに登録することをお勧めします。別の IP アドレスからいつでも再試行できますが、これにより手間が省けます。

/etc/hosts.allow を開き、ファイルの最後に以下を追加します。

 sshd: あなたのIPアドレス

your-ip-address 自分の IP アドレス に置き換えます。

デフォルトでは、root ユーザーの試行が 1 回失敗し、他のユーザーの試行が 5 回失敗すると、 denyhosts ロックアウトされます。 /etc/denyhosts.conf を編集することで、この動作を変更できます。

誤って自分自身をロックアウトしてしまった場合は、 denyhosts 停止し、いくつかの場所から IP アドレスを削除する必要があります。

  • /etc/hosts.deny
  • /var/lib/denyhosts/hosts
  • /var/lib/denyhosts/hosts-restricted
  • /var/lib/denyhosts/hosts-root
  • /var/lib/denyhosts/hosts-valid
  • /var/lib/denyhosts/users-hosts

denyhosts を再起動すると、再び接続できるようになります。

SSH サーバーをロックダウンする方法

ホワイトリスト SSH アクセス

SSH キーを denyhosts で強制するだけでもおそらく十分なセキュリティですが、特定の IP アドレスをホワイトリストに登録することもできます。ほとんどのサーバー プロバイダーは、Web インターフェイスからこれを行うためのツールを提供します。それがオプションである場合は、ロックアウトされた場合にはいつでもホワイトリストに登録された IP を変更できるため、SSH サーバーからではなくそこからホワイトリストに登録することをお勧めします。

それがオプションではない場合は、 /etc/hosts.deny を手動で構成して、未承認のホストからのすべてのトラフィックをブロックする必要があります。

重要な注意事項 : 自宅をホワイトリストに登録している場合、ISP が静的 IP アドレスを与えない可能性があり、IP アドレスはいつでも変更される可能性があります。他のすべての IP アドレスをブラックリストに登録するか、複数のアドレスをバックアップとして追加するか、この手順を完全にスキップする前に、このようなことが起こらないことを確認する必要があります。

/etc/hosts.allow を開いて、IP アドレスがファイルに含まれていることを確認します。

 sshd: あなたのIPアドレス

そうである場合は、他のすべての接続を拒否できます。

 echo 'sshd: ALL' >> /etc/hosts.deny

sshd を再起動すると、変更が表示されるはずです。

あるいは、SSH サーバーの前にプロキシを設定します

SSH サーバーをインターネットに公開したくないが、複数の IP アドレスからアクセスする必要がある場合は、その前にプロキシを設定して接続を処理できます。これは別のクラウド サーバーである場合もあれば、自宅で実行されているボックスである場合もあります。

SSH サーバーはプロキシ サーバーからの接続のみを受け入れるように構成する必要があり、プロキシ サーバーはどこからでも接続を受け入れる必要があります。プロキシ サーバーは任意に設定できますが、単純な netcat 接続 でも機能します。このプロキシ サーバーが SSH サーバーの唯一のアクセス ポイントになるため、プロキシがダウンすると、バックアップ アドレスがない限りロックアウトされることに注意してください。

SSH サーバーをロックダウンする方法

root ログインを許可しない

代わりに、新しいユーザーを作成し、そのユーザーに sudo 権限を与えます。これは事実上同じことですが、大きな違いが 1 つあります。 root@yourserver ほど単純ではないため、潜在的な攻撃者はサーバーへの攻撃を始めるにもユーザー アカウント名を知る必要があります。

セキュリティは別として、 root ログを作成せず、保護されたリソースにアクセスするときにプロンプ​​トを表示しないため、常に root としてログインしないのが一般的に良い Unix ポリシーです。

SSH サーバー上に新しいユーザーを作成します。

 adduser myfancyusername

そしてそのユーザーのパスワードを設定します。

 passwd 私のファンシーユーザー名

SSH キーを引き続き使用するため、このパスワードでログインすることはありませんが、これは必須です。理想的には、これを root パスワードとは異なるものにします。

このユーザーを /etc/sudoers に追加して、管理者権限を付与します。

 echo 'myfancyusername ALL=(ALL) ALL' >> /etc/sudoers

su myfancyusername でそのユーザーに切り替え、 sudo su (root のパスワードは必要ありません) で root ユーザーに戻れることを確認します。可能であれば、sudo アクセス権を持っています。

次に、root ログインをブロックします。 /etc/ssh/sshd_config で、以下を変更します。

 #PermitRootLogin はい

ハッシュタグを削除し、「はい」を「いいえ」に変更します。

 PermitRootログイン番号

sshd を再起動すると、サーバーは root としてログオンするすべての要求をブロックするはずです。

SSH サーバーをロックダウンする方法

2 要素認証のセットアップ

これは確かにやりすぎですが、誰かがあなたの秘密 SSH キーを盗むことに不安を感じている場合は、2FA を使用するように SSH サーバーを設定できます。

これを行う最も簡単な方法は、Android または iOS デバイスで Google Authenticator を使用することです。ただし、SSH は多くの 2 要素方式をサポートしています。 Google Authenticator を使用すると、Google Authenticator モバイル アプリからスキャンして携帯電話をサーバーにリンクできる QR コードが提供されます。また、携帯電話を紛失した場合に復元するためのバックアップ コードもいくつか提供されます。 。これらのコードをメイン マシンに保存しないでください。保存しないと、実際には 2 要素ではありません。

「 SSH サーバーをロックダウンする方法」に関するベスト動画選定!

【サーバー/ネットワーク構築講座】SSHサーバーの設定について解説【OpenSSH】
公開鍵認証でwindowsからlinuxにSSHしよう!【インフラエンジニア】【セキュリティエンジニア】【ハッカー】