web-dev-qa-db-ja.com

SSHデーモンで考えられるセキュリティの問題は何ですか?

外部からUbuntu10.04オフィスPCにSSHで接続できるようにしたいと思います。そのため、PC上でSSHデーモンを起動することを考えています。セキュリティの問題、考えられる不具合、特定の構成設定などは何ですか。注意する必要がありますか?

重要な場合:これは基本的に私自身の使用のみを目的としており、他の人が使用することはないと思います。これは、ほとんどがWindows 7/Vista/XP環境にあるUbuntu10.04PCです。

15
ev-br

最大の懸念は、SSH経由でコンピューターの管理者としてログインする人々です。パスワードを推測しやすい場合、これはブルートフォースで行うことができます。

あなたが取ることができるいくつかの安全対策があります、以下はSSHサーバーをセットアップするときに私がいつも取るもののいくつかといくつかの追加です。

  1. 少なくとも(たとえば)10個の大文字と小文字、数字、その他の文字で構成される強力なパスワードを使用してください。

  2. ユーザーをホームディレクトリに投獄します。投獄されたユーザーは、ホームディレクトリの外にあるファイルにアクセス/編集できなくなります。そのため、ユーザーは主要なシステムファイルにアクセス/編集できなくなります。ユーザーを投獄する方法については、オンラインで多くのチュートリアルを見つけることができます。それらのほとんどは JailKit を使用します。このようなチュートリアルの例は、 ここ にあります。または、OpenSSHサーバーのネイティブChrootDirectoryディレクティブを使用することもできます。これに関するチュートリアルの例は ここ にあります。

  3. インストール Fail2Ban 。 Fail2Banは、認証ログに間違ったエントリがないかチェックするプログラムです。特定の制限に達すると、事前に設定された時間、その特定のIPのファイアウォールブロックが追加されます。 SSHを使用してFail2Banを設定する方法については、オンラインでいくつかのオンラインチュートリアルもあります。例は、 これ です。 Fail2Banのホームページには、いくつかの優れた完全なHOWTOもあります。

  4. SSHを介したrootログインを無効にします。これは、システム上のほぼすべてのファイルにアクセスできるユーザーであるため、シェルログインを無効にすることをお勧めします。 Ubuntuの最新バージョンでは、rootユーザーは自動的に無効になりますが、SSHアクセスを無効にしても問題はありません。これは、ファイル/etc/ssh/sshd_configを編集することによって行われます。 次の行を探し、その前に#がないことを確認します。

    #PermitRootLogin no
    
  5. 非標準ポートを使用する(例:22ではない)これは、ルーターのポート転送(例:22-> 22ではなく16121-> 22)を介して、またはSSHデーモンを別のポートでリッスンさせることによって行われます。これにより、悪意のあるユーザーがSSHサービスを簡単に検出できなくなります。これは、ファイル/etc/ssh/sshd_configを編集することによって行われます。 次の行を探して、22を任意のポートに変更します。その後、ルーターの正しいポートを転送することを忘れないでください。

    Port 22
    
  6. ログインにパスワードを使用しないでください。SSHでは、パスワードの他に、秘密鍵を使用したログインも許可されています。これは、SSHマシンのSSHにアクセスするコンピューターにキーが保存されていることを意味します。接続が試行されると、SSHクライアントはパスワード認証ではなく、キーを使用してサーバーにログインします。認証キーは、パスワードよりも暗号的にはるかに強力であるため、解読するのはそれほど簡単ではありません。 SSHを使用してキーベースの認証を設定する方法についてオンラインで見つかったオンラインチュートリアルもいくつかあります。例は これ です。 (PuTTYを使用してWindowsからSSH接続する場合は、PuTTYのハウツーについて このリンク を確認してください。)キーベース認証を設定した後、ファイル/etc/ssh/sshd_configを編集してパスワード認証を無効にできます。 次の行を探し、その前に#がないことを確認します。

    #PasswordAuthentication no
    
  7. オプションで、@ Linker3000が彼のコメントで述べたように、SSH経由でアクセスするPCに VPNトンネル を設定し、SSHサーバーでの非ローカルネットワークアクセスを禁止することができます。そうすれば、VPN接続のない外部デバイスはSSHサーバーにアクセスできなくなります。これは、すべてのホストを拒否し、ローカルネットワークIPのみにログインを許可することで実行できます。これは、/etc/hosts.denyを編集し、以下を追加することによって行われます。

    sshd: ALL
    

    /etc/hosts.allowに以下を追加します。

    sshd: 192.168.1.*
    

    ここで、IPはローカルネットワークの1つと一致します。 *はワイルドカードであるため、192.168.1.で始まるすべてのIPアドレスが受け入れられます。これが機能しない場合、ディストリビューションはsshの代わりにsshdを使用する可能性があります。その場合は、代わりにssh: 192.168.1.*ssh: ALLを試してください。

  8. 特定のホストのみを許可できます。6で説明したように/etc/hosts.allow/etc/hosts.denyでも同じことを行いますが、/etc/hosts.allowに次の行とすべてのホストを追加して、スペースで区切って許可します。

    sshd: {IP OF Host TO ALLOW 1} {IP OF Host TO ALLOW 2} {IP OF Host TO ALLOW 3} {ETC.}
    
  9. 特定のユーザーのみにSSHサーバーへのアクセスを許可します。これは、ファイル/etc/ssh/sshd_configを編集することによって行われます。 次の行を探し、その前に#がないことを確認します。存在しない場合は作成してください。たとえば、john、tom、maryのみを許可する場合は、次の行を追加/編集します。

    AllowUsers john tom mary
    

    たとえば、特定のユーザーを拒否することもできます。たとえば、john、tom、maryへのアクセスを拒否する場合は、次の行を追加/編集します。

    DenyUsers john tom mary
    
  10. 着信接続にはプロトコルSSH2のみを許可します。 SSHプロトコルには2つのバージョンがあります。 SSH1はセキュリティの問題が発生する可能性があるため、SSH2の使用をお勧めします。これは、ファイル/etc/ssh/sshd_configを編集することで強制できます。 次の行を探し、その前に#がないことを確認します。存在しない場合は作成してください。

    Protocol 2,1
    

    、1を削除して、行が

    Protocol 2
    
  11. パスワードが設定されていないユーザーのログインを許可しないでください。これは、ファイル/etc/ssh/sshd_configを編集することで強制できます。 次の行を探し、その前に#がないことを確認します。存在しない場合は作成してください。

    PermitEmptyPasswords no
    
  12. そして、単純でおそらく言うまでもありませんが、複数のケースで重要であることが証明されていますが、ソフトウェアを最新の状態に保ちます。インストールされているパッケージ/ソフトウェアを定期的に更新してください。


= SSH構成ファイルを編集した後、変更を適用するためにデーモンを再起動することを忘れないでください。以下を実行してデーモンを再起動します。

Sudo /etc/init.d/ssh restart

または

Sudo /etc/init.d/sshd restart

使用しているLinuxのディストリビューションによって異なります。

21
BloodPhilia

いくつかのヒント:

  1. パスワードよりもはるかに安全なキーベースの認証を使用する
  2. SSH2のみ
  3. ルートログインを無効にする
  4. パラノイドの場合は、ポートを標準ポート22から変更します。
  5. 便宜上、ツールを使用してIPをDyndnsやその同類のようなDNS名にマップします。同じIPで長時間行くことができますが、一度旅行してそれが必要になると、新しいIPが発行されていることがわかります。
  6. もちろん、ファイアウォールを通過できるのは、SSHに必要なポート(ポート22、または選択した場合は非標準)のみです。
7
Brian

3つのことが私の頭に浮かびました:

  1. デフォルトのポート22を開くと、すぐに検出され、ブルートフォース攻撃によってPCが攻撃されます。他のポートをリッスンするか、ファイアウォールでポートマッピングを行うようにsshdを設定することをお勧めします。これは特効薬ではありませんが、少なくとも同じCPUサイクルを節約できます。

    ポート12345

  2. パスワード認証を明示的に無効にし、キーのみを使用します。どのキーも、覚えている最も複雑なパスワードよりも優れています。

    PasswordAuthenticationいいえ

  3. Ubuntuではデフォルトでrootユーザーが無効になっていますが、rootログインを明示的に無効にしてください

    PermitRootLoginいいえ

2
shpokas

主なリスクは、sshサーバーを実行していることを忘れ、アカウントに弱いパスワードを設定することです。一般的なアカウント名(webmasterbobなど)と脆弱なパスワードを体系的に試す攻撃者がいます。パスワードログインを禁止することで、このリスクを排除できます(PasswordAuthentication nosshd_configに入れ、UsePAM Noを入れるか、sshのPAM設定でパスワード認証を無効にします)。中間的な対策は、sshログインをsshd_configAllowUsersまたはAllowGroupsを持つユーザーのホワイトリストに制限することです。

パスワードログインを許可すること自体はセキュリティの問題ではないことに注意してください。弱いパスワードとスヌープされたパスワードが問題であり、sshサーバーでパスワード認証を許可することはイネーブラーです。パスワードスヌーピングから保護するために、完全に信頼していないマシンにパスワードを入力しないでください(ただし、マシンを信頼している場合は、そのマシンに秘密鍵をインストールすることをお勧めします。その場合、パスワード認証は必要ありません)。

マシンでsshクライアントを使用するための最小要件は、ssh通信のアクティブなハイジャックが発生しないことを信頼することです(クライアントマシンで実行されている場合、man-in-the-middle攻撃が可能です。元のsshクライアントにコマンドを入力していますが、クライアントは実際には認証データを忠実に送信しているだけでなく、後で通信にトロイの木馬を挿入しています)。これは、パスワードスヌーパーが存在しないことを信頼するよりも弱い要件です(通常はキーロガーを介して実行されますが、ショルダーサーフィンなどの自動化されていない方法もあります)。最小限の信頼を持っていてもスヌーパーを恐れている場合は、ワンタイムパスワードを使用できます(OpenSSHはPAMサポートを通じてパスワードをサポートしています)。

もちろん、制御外のマシン(ネットワークサーバーだけでなくクライアント)と対話する他のプログラムと同様に、セキュリティの更新についていく必要があります。