OpenSSH公開鍵/秘密鍵認証を使用してSSH経由でサーバーにログインするところから、VPN経由でログインする内部ネットワークにサーバーがあります。セキュリティの観点から、これらのクライアントだけがログインできるように、サーバー上のiptables
を介して、使用している3つのクライアントのMACアドレスを関連付けたいと思います。
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j DROP
ただし、この方法で行うことをお勧めしますか? SSHログインを使用済みクライアントに関連付けるために使用できる他の(より良い)方法は何ですか?
(誰かが2FAを要求したい場合、残念ながら2FAは潜在的な解決策として不可能です。)
ありがとう。
SSHサーバーが有効なユーザー資格情報を提供しているにもかかわらず、信頼できないホストからの接続を受け入れないようにしたいと思います。正しいですか?
ユーザーの公開鍵認証を選択したクライアントホストに結び付けるための可能な解決策は、ホストベースの認証を介することです。ホストベースの認証を設定し、_/etc/ssh/sshd_config
_のAuthenticationMethods
パラメータを次のいずれかに定義します。
_AuthenticationMethods hostbased,publickey hostbased,keyboard-interactive hostbased,password
_
または:
_AuthenticationMethods hostbased,publickey
_
これにより、SSHデーモンは、ユーザーのキーまたはパスワードを確認する前に、クライアントに接続元のホストを認証するように要求します。前者はパスワードベースの認証を許可しますが、後者はそれを公開鍵のみに制限します。ホストベースの認証はキーペアに基づいているため、SSHサーバーは動的IPアドレスでクライアントを認証できます。
ここでは完全な指示に従います。 SSHがホストベースの認証を実行する方法のドキュメントは ssh(1)
man-page に記述されています。 SSHがユーザーを識別する方法に注意し、それがケースに該当するかどうかを確認してください。
ホストベースの認証は次のように機能します。ユーザーがログインするマシンがリモートマシンの_
/etc/hosts.equiv
_または_/etc/ssh/shosts.equiv
_にリストされており、ユーザー名が両側で同じ、またはファイル_~/.rhosts
_または_~/.shosts
_がリモートマシンのユーザーのホームディレクトリに存在し、クライアントマシンの名前とそのマシン上のユーザーの名前を含む行。ユーザーはログインと見なされます。さらに、サーバーは、ログインを許可するためにクライアントのホストキーを確認できる必要があります。この認証方法は、IPスプーフィング、DNSスプーフィング、ルーティングスプーフィングによるセキュリティホールを閉じます。 [管理者への注意:_/etc/hosts.equiv
_、_~/.rhosts
_、および一般的なrlogin/rshプロトコルは本質的に安全ではなく、セキュリティが必要な場合は無効にする必要があります。]
OpenSSHでホストベースの認証を有効にするには:
/etc/ssh/sshd_config
_ に次のパラメーター値を設定します。_# /etc/ssh/sshd_config
HostbasedAuthentication yes
IgnoreUserKnownHosts yes
IgnoreRhosts yes
# AuthenticationMethods hostbased,publickey hostbased,keyboard-interactive hostbased,password
AuthenticationMethods hostbased,publickey
_
HostbasedUsesNameFromPacketOnly yes
_ に_/etc/ssh/sshd_config
_を設定して、クライアントから提供されたホスト名情報を信頼できます。_# /etc/ssh/sshd_config
HostbasedUsesNameFromPacketOnly yes
_
/etc/hosts
_ファイルまたはネットワークのDNSサーバーのPTRレコードに格納された情報を使用して、クライアントのIPアドレスを解決することでホスト名を識別できます。_# /etc/ssh/sshd_config
HostbasedUsesNameFromPacketOnly no
UseDNS yes
_
/etc/ssh/shosts.equiv
_ファイルにリストします。存在しない場合は手動で作成してください。ファイルの構文は man Host.equiv(5) に記載されているものとほとんど同じですが、 SSHデーモンは空のホスト名を受け入れません です。_# /etc/ssh/shosts.equiv
ssh-client-alpha
ssh-client-bravo
ssh-client-charlie
_
/etc/ssh/ssh_known_hosts
_ファイルにリストします。そのための便利な方法は _ssh-keyscan
_ を使用することです。_[root@ssh-server ~]# ssh-keyscan ssh-client-alpha >> /etc/ssh/ssh_known_hosts
[root@ssh-server ~]# ssh-keyscan ssh-client-bravo >> /etc/ssh/ssh_known_hosts
[root@ssh-server ~]# ssh-keyscan ssh-client-charlie >> /etc/ssh/ssh_known_hosts
_
ホストベースの認証要求を受け入れるようにOpenSSHサーバーを構成したら、クライアントもホストベースの認証を要求するように構成する必要があります。
/etc/ssh/ssh_config
_ に次のパラメーター値を設定します。_# /etc/ssh/ssh_config
Host *
HostbasedAuthentication yes
EnableSSHKeySign yes
_
ssh-keysign
_ 実行可能ファイルのSUID/SGIDビットがホストの秘密鍵ファイルへの読み取り権限を付与していることを確認します。_[root@ssh-client-alpha ~]# find /usr -name ssh-keysign -ls
16517300 616 -r-xr-sr-x 1 root ssh_keys 630344 Feb 4 16:01 /usr/libexec/openssh/ssh-keysign
[root@ssh-client-alpha ~]# ls -l /etc/ssh/ssh_Host_*key
-rw-r----- 1 root ssh_keys 480 Apr 13 06:51 /etc/ssh/ssh_Host_ecdsa_key
-rw-r----- 1 root ssh_keys 387 Apr 13 06:51 /etc/ssh/ssh_Host_ed25519_key
-rw-r----- 1 root ssh_keys 2578 Apr 13 06:51 /etc/ssh/ssh_Host_rsa_key
_