Secure Shell の略である SSH は、デフォルトではあまり安全ではなく、他の制限のない基本的なパスワード認証を選択します。本当にサーバーをロックダウンしたい場合は、さらに構成を行う必要があります。
パスワードによるログインを許可しない — SSH キーを使用する
最初に行うことは、パスワード認証を完全に削除し、SSH キーの使用に切り替えることです。 SSH キーは公開キー暗号化の形式です。ユーザー名のように機能する公開キーと、パスワードのように機能する秘密キーがあります (ただし、このパスワードの長さは 2,048 文字です)。秘密キーはディスクに保存されますが、パスフレーズと ssh-agent で暗号化されます。サーバーに SSH で接続すると、パスワードを要求する代わりに、ssh-agent はキーを使用してサーバーに接続します。
すでに SSH キーを使用している場合でも、この 2 つは相互に排他的ではないため、パスワード ログインがオフになっていることを確認する必要があります。
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パスワードログインを無効にする
キーを使用してサーバーにアクセスできるようになったので、パスワード認証を完全にオフにすることができます。キーベースの認証が機能していることを確認してください。機能していないと、サーバーからロックアウトされます。
サーバー上で、お気に入りのテキスト エディターで
/etc/ssh/sshd_config
を開き、次で始まる行を検索します。
#パスワード認証
これのコメントを外して (ハッシュタグを削除し)、「はい」を「いいえ」に変更します。
パスワード認証番号
次に、次のようにして
sshd
再起動します。
systemctl sshd を再起動します
強制的に再接続する必要があります。キー ファイルが間違っている場合は、パスワードの入力を求められません。
必要に応じて、他のすべての認証方法をブロックする公開キーベースの認証を強制することもできます。次の行を
/etc/ssh/sshd_config
に追加します。
認証方法の公開鍵
公開鍵認証はい
sshd
再起動します。
拒否ホストで攻撃者をロックアウト
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 キーを
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 サーバーの唯一のアクセス ポイントになるため、プロキシがダウンすると、バックアップ アドレスがない限りロックアウトされることに注意してください。
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
としてログオンするすべての要求をブロックするはずです。
2 要素認証のセットアップ
これは確かにやりすぎですが、誰かがあなたの秘密 SSH キーを盗むことに不安を感じている場合は、2FA を使用するように SSH サーバーを設定できます。
これを行う最も簡単な方法は、Android または iOS デバイスで Google Authenticator を使用することです。ただし、SSH は多くの 2 要素方式をサポートしています。 Google Authenticator を使用すると、Google Authenticator モバイル アプリからスキャンして携帯電話をサーバーにリンクできる QR コードが提供されます。また、携帯電話を紛失した場合に復元するためのバックアップ コードもいくつか提供されます。 。これらのコードをメイン マシンに保存しないでください。保存しないと、実際には 2 要素ではありません。





