最大の懸念は、SSH 経由でコンピュータの管理者としてログインする人々です。推測しやすいパスワードを使用している場合、これは力ずくで実行できます。
いくつかの安全対策があります。以下は、SSH サーバーをセットアップするときに私がいつも行っている対策の一部と、追加の対策です。
<オール>少なくとも (たとえば) 10 文字の大文字と小文字、数字、その他の文字で構成された強力なパスワードを使用してください。
ユーザーをホームディレクトリに投獄します。投獄されたユーザーは、ホーム ディレクトリの外にあるファイルにアクセス/編集できなくなります。そのため、ユーザーは主要なシステム ファイルにアクセス/編集できなくなります。ユーザーを投獄する方法については、オンラインで多くのチュートリアルを見つけることができます。それらのほとんどは JailKit を使用しています。このようなチュートリアルの例は、ここにあります。または、OpenSSH サーバーのネイティブ ChrootDirectory
を使用することもできます。 指令。これに関するチュートリアルの例は、ここにあります。
Fail2Ban をインストールします。 Fail2Ban は、認証ログに間違ったエントリがないかチェックするプログラムです。特定の制限に達すると、事前設定された時間、その特定の IP に対してファイアウォール ブロックが追加されます。また、SSH を使用して Fail2Ban をセットアップする方法について、オンラインでいくつかのオンライン チュートリアルが見つかりました。 Fail2Ban ホームページには、優れた完全な HOWTO もあります。
SSH による root ログインを無効にします。これは、システム上のほぼすべてのファイルにアクセスできるユーザーであるため、シェル ログインを無効にすることをお勧めします。 Ubuntu の最新バージョンでは、root ユーザーは自動的に無効になりますが、SSH アクセスを無効にしても問題はありません。これは、ファイル /etc/ssh/sshd_config
を編集することによって行われます .次の行を探して、その前に # がないことを確認してください。
#PermitRootLogin no
非標準ポートを使用する (例:22 以外) これは、ルーターのポート転送 (例:22 -> 22 の代わりに 16121 -> 22) を使用するか、SSH デーモンを別のポートでリッスンすることによって行われます。これにより、悪意のあるユーザーが SSH サービスを検出しにくくなります。これは、ファイル /etc/ssh/sshd_config
を編集することによって行われます .次の行を探して、22 を任意のポートに変更します。後でルーターの正しいポートを転送することを忘れないでください。
Port 22
ログインにパスワードを使用しないでください。パスワードのほかに、SSH では秘密鍵を使用してログインすることもできます。これは、SSH マシンの SSH にアクセスするコンピューターにキーが保存されていることを意味します。接続が試行されると、SSH クライアントは、パスワード認証ではなくキーを使用してサーバーにログインします。認証キーは、パスワードよりもはるかに強力な暗号であるため、解読するのはそれほど簡単ではありません。また、SSH を使用してキー ベースの認証を設定する方法についてオンラインで見つかったオンライン チュートリアルもいくつかあります。 (Windows から PuTTY で SSH 接続する場合は、このリンクで PuTTY のハウツーを確認してください。) キーベースの認証を設定した後、ファイル /etc/ssh/sshd_config
を編集してパスワード認証を無効にすることができます。 .次の行を探して、その前に # がないことを確認してください。
#PasswordAuthentication no
オプションで、@ Linker3000 が彼のコメントで述べたように、SSH 経由でアクセスする PC への VPN トンネルを設定し、SSH サーバーでの非ローカル ネットワーク アクセスを禁止することができます。そうすれば、VPN 接続のない外部デバイスは SSH サーバーにアクセスできなくなります。これは、すべてのホストを拒否してから、ローカル ネットワーク IP のみのログインを許可することで実行できます。これは、 /etc/hosts.deny
を編集することによって行われます 以下を追加します:
sshd: ALL
そして /etc/hosts.allow
へ 以下を追加してください:
sshd: 192.168.1.*
ここで、IP はローカル ネットワークのものと一致します。 *
はワイルドカードなので、192.168.1.
で始まるすべての IP アドレス 受け入れられます。これが機能しない場合、ディストリビューションで ssh
が使用されている可能性があります sshd
の代わりに .その場合は、ssh: 192.168.1.*
を試してください。 と ssh: ALL
特定のホストのみを許可できます。 /etc/hosts.allow
で同じことを行います と /etc/hosts.deny
6で説明されているように、しかし/etc/hosts.allow
で 次の行と、許可するすべてのホストをスペースで区切って追加します:
sshd: {IP OF HOST TO ALLOW 1} {IP OF HOST TO ALLOW 2} {IP OF HOST TO ALLOW 3} {ETC.}
特定のユーザーのみが SSH サーバーにアクセスできるようにします。これは、ファイル /etc/ssh/sshd_config
を編集することによって行われます .次の行を探して、その前に # がないことを確認してください。存在しない場合は、作成します。たとえば、ジョン、トム、メアリーのみを許可する場合は、次の行を追加/編集します:
AllowUsers john tom mary
特定のユーザーを拒否することもできます。たとえば、john、tom、mary へのアクセスを拒否する場合は、次の行を追加/編集します:
DenyUsers john tom mary
着信接続に対してプロトコル SSH2 のみを許可します。 SSH プロトコルには 2 つのバージョンがあります。 SSH1 はセキュリティ上の問題があるため、SSH 2 を使用することをお勧めします。これは、ファイル /etc/ssh/sshd_config
を編集することで強制できます。 .次の行を探して、その前に # がないことを確認してください。存在しない場合は、作成します。
Protocol 2,1
,1 を削除すると、行は次のようになります
Protocol 2
パスワードが設定されていないユーザーのログインを許可しないでください。これは、ファイル /etc/ssh/sshd_config
を編集することで強制できます。 .次の行を探して、その前に # がないことを確認してください。存在しない場合は、作成してください。
PermitEmptyPasswords no
シンプルで言うまでもありませんが、複数のケースで重要であることが証明されていますが、ソフトウェアを最新の状態に保ちます。インストール済みのパッケージ/ソフトウェアを定期的に更新してください。
=SSH 設定ファイルを編集したら、デーモンを再起動して変更を適用することを忘れないでください。以下を実行してデーモンを再起動します:
sudo /etc/init.d/ssh restart
または
sudo /etc/init.d/sshd restart
使用している Linux のディストリビューションによって異なります。
いくつかのヒント:
<オール>
主なリスクは、ssh サーバーを実行していることを忘れて、アカウントに脆弱なパスワードを設定することです。一般的なアカウント名 (webmaster
など) を体系的に試す攻撃者がいます。 と bob
) と脆弱なパスワード。パスワードによるログインを禁止することで、このリスクを排除できます (put PasswordAuthentication no
sshd_config
で 、および UsePAM No
も入れます または ssh の PAM 設定でパスワード認証を無効にします)。中間的な手段は、ssh ログインを AllowUsers
を持つユーザーのホワイトリストに制限することです または AllowGroups
sshd_config
で .
パスワード ログインを許可すること自体はセキュリティ上の問題ではないことに注意してください。脆弱なパスワードとスヌープされたパスワードが問題であり、ssh サーバーでパスワード認証を許可することが有効な手段です。パスワードの詮索を防ぐために、完全に信頼できないマシンでは決してパスワードを入力しないでください (ただし、マシンを信頼できる場合は、そのマシンに秘密鍵をインストールすることをお勧めします。そうすれば、パスワード認証は必要ありません)。
マシンで ssh クライアントを使用するための最小要件は、ssh 通信のアクティブなハイジャックが発生しないことを信頼することです (クライアント マシンで実行されている場合、中間者攻撃が可能です。元の ssh クライアントにコマンドを入力していますが、クライアントは実際には認証データを忠実に送信していますが、後でトロイの木馬を通信に挿入しています)。これは、パスワードのスヌーパーが存在しないことを信頼するよりも弱い要件です (通常はキーロガーを介して実行されますが、ショルダー サーフィンなどの自動化されていない方法もあります)。最低限の信頼があっても詮索を恐れる場合は、ワンタイム パスワードを使用できます (OpenSSH は PAM サポートを通じてワンタイム パスワードをサポートしています)。
もちろん、制御外のマシン (ネットワーク サーバーだけでなくクライアントも含む) と対話する他のプログラムと同様に、セキュリティ アップデートについていく必要があります。