第23章 ネットワークのセキュリティー保護
23.1. 2 台のシステム間で OpenSSH を使用した安全な通信の使用 リンクのコピーリンクがクリップボードにコピーされました!
SSH (Secure Shell) は、クライアント/サーバーアーキテクチャーを使用する 2 つのシステム間で安全な通信を提供し、ユーザーがリモートでサーバーホストシステムにログインできるようにするプロトコルです。FTP や Telnet などの他のリモート通信プロトコルとは異なり、SSH はログインセッションを暗号化します。これにより、侵入者が接続から暗号化されていないパスワードを収集するのを防ぎます。
23.1.1. SSH 鍵ペアの生成 リンクのコピーリンクがクリップボードにコピーされました!
ローカルシステムで SSH 鍵ペアを生成し、生成された公開鍵を OpenSSH サーバーにコピーすることで、パスワードを入力せずに OpenSSH サーバーにログインできます。鍵を作成する各ユーザーは、この手順を実行する必要があります。
						システムを再インストールした後も以前に生成した鍵ペアを保持するには、新しい鍵を作成する前に ~/.ssh/ ディレクトリーをバックアップします。再インストール後に、このディレクトリーをホームディレクトリーにコピーします。これは、(root を含む) システムの全ユーザーで実行できます。
					
前提条件
- OpenSSH サーバーに鍵を使用して接続するユーザーとしてログインしている。
 - OpenSSH サーバーが鍵ベースの認証を許可するように設定されている。
 
手順
ECDSA 鍵ペアを生成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow パラメーターなしで
ssh-keygenコマンドを使用して RSA 鍵ペアを生成することも、ssh-keygen -t ed25519コマンドを入力して Ed25519 鍵ペアを生成することもできます。Ed25519 アルゴリズムは FIPS-140 に準拠しておらず、FIPS モードでは OpenSSH は Ed25519 鍵で機能しないことに注意してください。公開鍵をリモートマシンにコピーします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <username>@<ssh-server-example.com>は、認証情報に置き換えます。セッションで
ssh-agentプログラムを使用しない場合は、上記のコマンドで、最後に変更した~/.ssh/id*.pub公開鍵をコピーします (インストールされていない場合)。別の公開キーファイルを指定したり、ssh-agentにより、メモリーにキャッシュされた鍵よりもファイル内の鍵の方が優先順位を高くするには、-iオプションを指定してssh-copy-idコマンドを使用します。
検証
鍵ファイルを使用して OpenSSH サーバーにログインします。
ssh -o PreferredAuthentications=publickey <username>@<ssh-server-example.com>
$ ssh -o PreferredAuthentications=publickey <username>@<ssh-server-example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
23.1.2. OpenSSH サーバーで鍵ベースの認証を唯一の方法として設定する リンクのコピーリンクがクリップボードにコピーされました!
システムのセキュリティーを強化するには、OpenSSH サーバーでパスワード認証を無効にして鍵ベースの認証を有効にします。
前提条件
- 
								
openssh-serverパッケージがインストールされている。 - 
								サーバーで 
sshdデーモンが実行している。 鍵を使用して OpenSSH サーバーに接続できる。
詳細は、SSH 鍵ペアの生成 セクションを参照してください。
手順
テキストエディターで
/etc/ssh/sshd_config設定を開きます。以下に例を示します。vi /etc/ssh/sshd_config
# vi /etc/ssh/sshd_configCopy to Clipboard Copied! Toggle word wrap Toggle overflow PasswordAuthenticationオプションをnoに変更します。PasswordAuthentication no
PasswordAuthentication noCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 
								新しいデフォルトインストール以外のシステムでは、
PubkeyAuthenticationパラメーターが設定されていないか、yesに設定されていることを確認します。 ChallengeResponseAuthenticationディレクティブをnoに設定します。設定ファイル内では対応するエントリーがコメントアウトされていること、およびデフォルト値が
yesであることに注意してください。NFS がマウントされたホームディレクトリーで鍵ベースの認証を使用するには、SELinux ブール値
use_nfs_home_dirsを有効にします。setsebool -P use_nfs_home_dirs 1
# setsebool -P use_nfs_home_dirs 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - リモートで接続している場合は、コンソールもしくは帯域外アクセスを使用せず、パスワード認証を無効にする前に、鍵ベースのログインプロセスをテストします。
 sshdデーモンを再読み込みし、変更を適用します。systemctl reload sshd
# systemctl reload sshdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
23.1.3. ssh-agent を使用した SSH 認証情報のキャッシュ リンクのコピーリンクがクリップボードにコピーされました!
						SSH 接続を開始するたびにパスフレーズを入力しなくても済むように、ssh-agent ユーティリティーを使用して、ログインセッションの SSH 秘密鍵をキャッシュできます。エージェントが実行中で、鍵のロックが解除されている場合、鍵のパスワードを再入力することなく、この鍵を使用して SSH サーバーにログインできます。秘密鍵とパスフレーズのセキュリティーが確保されます。
					
前提条件
- SSH デーモンが実行されており、ネットワーク経由でアクセスできるリモートホストがある。
 - リモートホストにログインするための IP アドレスまたはホスト名および認証情報を把握している。
 パスフレーズで SSH キーペアを生成し、公開鍵をリモートマシンに転送している。
詳細は、SSH 鍵ペアの生成 セクションを参照してください。
手順
セッションで
ssh-agentを自動的に起動するためのコマンドを~/.bashrcファイルに追加します。任意のテキストエディターで
~/.bashrcを開きます。次に例を示します。vi ~/.bashrc
$ vi ~/.bashrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の行をファイルに追加します。
eval $(ssh-agent)
eval $(ssh-agent)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を保存し、エディターを終了します。
 
~/.ssh/configファイルに次の行を追加します。AddKeysToAgent yes
AddKeysToAgent yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow セッションでこのオプションを使用して
ssh-agentが起動されると、エージェントはホストに初めて接続するときにのみパスワードを要求します。
検証
エージェントにキャッシュされた秘密鍵に対応する公開鍵を使用するホストにログインします。次に例を示します。
ssh <example.user>@<ssh-server@example.com>
$ ssh <example.user>@<ssh-server@example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow パスフレーズを入力する必要がないことに注意してください。
23.1.4. スマートカードに保存した SSH 鍵による認証 リンクのコピーリンクがクリップボードにコピーされました!
スマートカードに ECDSA 鍵と RSA 鍵を作成して保存し、そのスマートカードを使用して OpenSSH クライアントで認証することができます。スマートカード認証は、デフォルトのパスワード認証に代わるものです。
前提条件
- 
								クライアントで、
openscパッケージをインストールして、pcscdサービスを実行している。 
手順
PKCS #11 の URI を含む OpenSC PKCS #11 モジュールが提供する鍵のリストを表示し、その出力を
keys.pubファイルに保存します。ssh-keygen -D pkcs11: > keys.pub
$ ssh-keygen -D pkcs11: > keys.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 公開鍵をリモートサーバーに転送します。
ssh-copy-idコマンドを使用し、前の手順で作成したkeys.pubファイルを指定します。ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>
$ ssh-copy-id -f -i keys.pub <username@ssh-server-example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ECDSA 鍵を使用して <ssh-server-example.com> に接続します。鍵を一意に参照する URI のサブセットのみを使用することもできます。次に例を示します。
ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com>
$ ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenSSH は
p11-kit-proxyラッパーを使用し、OpenSC PKCS #11 モジュールがp11-kitツールに登録されているため、前のコマンドを簡略化できます。ssh -i "pkcs11:id=%01" <ssh-server-example.com>
$ ssh -i "pkcs11:id=%01" <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow PKCS #11 の URI の
id=の部分を飛ばすと、OpenSSH が、プロキシーモジュールで利用可能な鍵をすべて読み込みます。これにより、必要な入力の量を減らすことができます。ssh -i pkcs11: <ssh-server-example.com>
$ ssh -i pkcs11: <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
~/.ssh/configファイルで同じ URI 文字列を使用して、設定を永続化できます。cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $
$ cat ~/.ssh/config IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" $ ssh <ssh-server-example.com> Enter PIN for 'SSH key': [ssh-server-example.com] $Copy to Clipboard Copied! Toggle word wrap Toggle overflow sshクライアントユーティリティーが、この URI とスマートカードの鍵を自動的に使用するようになります。