web-dev-qa-db-ja.com

iptablesを使用したMACベースのフィルタリングによるSSH-推奨?

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は潜在的な解決策として不可能です。)

ありがとう。

4
Ferit

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

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
_
  • または、代わりに、SSHデーモンを構成して、_/etc/hosts_ファイルまたはネットワークのDNSサーバーのPTRレコードに格納された情報を使用して、クライアントのIPアドレスを解決することでホスト名を識別できます。
_# /etc/ssh/sshd_config

HostbasedUsesNameFromPacketOnly no
UseDNS yes
_
_# /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

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
_