iptables を使用した MAC ベースのフィルタリングを備えた SSH - 推奨されますか?

iptables を使用した MAC ベースのフィルタリングを備えた SSH - 推奨されますか?

内部ネットワークにサーバーがあり (VPN 経由でログイン)、そこから OpenSSH 公開/秘密キー認証を使用して SSH 経由でサーバーにログインします。セキュリティの観点から、使用している 3 つのクライアントの MAC アドレスをiptablesサーバーに関連付けて、これらのクライアントだけがログインできるようにしたいと考えています。

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 は潜在的な解決策として利用できません。)

ありがとう。

答え1

信頼できないホストが有効なユーザー資格情報を提供している場合でも、SSH サーバーがそれらのホストからの接続を受け入れないようにしたいとお考えですか。これは正しいですか?

ユーザーの公開鍵認証を選択したクライアント ホストに結び付けるための可能なソリューションは、ホスト ベース認証を使用することです。ホスト ベース認証を設定し、次のいずれかのAuthenticationMethodsパラメータを定義します/etc/ssh/sshd_config

AuthenticationMethods hostbased,publickey hostbased,keyboard-interactive hostbased,password

または:

AuthenticationMethods hostbased,publickey

これにより、SSH デーモンは、ユーザーのキーまたはパスワードを確認する前に、クライアントが接続しているホストを認証するように要求します。前者の選択肢はパスワードベースの認証を許可しますが、後者は公開キーのみに制限します。ホストベースの認証はキーペアに基づいているため、SSH サーバーは動的 IP アドレスを持つクライアントを認証できます。


完全な手順は次のとおりです。SSHがホストベースの認証を実行する方法についてのドキュメントは、ssh(1)マニュアルページSSH がユーザーを識別する方法に注意し、それが自分のケースに当てはまるかどうかを確認してください。

ホストベースの認証は次のように機能します。ユーザーがログインするマシンがリモートマシンに/etc/hosts.equivリストされている場合、/etc/ssh/shosts.equivユーザー名は両側で同じです、またはファイル~/.rhostsまたはが~/.shostsリモートマシン上のユーザーのホームディレクトリに存在し、クライアントマシンの名前とそのマシン上のユーザー名を含む行を含む、ユーザーはログイン対象とみなされます。さらに、ログインを許可するには、サーバーがクライアントのホスト キーを検証できる必要があります。この認証方法は、IP スプーフィング、DNS スプーフィング、ルーティング スプーフィングによるセキュリティ ホールを塞ぎます。[管理者への注意: 、、/etc/hosts.equivおよび~/.rhostsrlogin/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
  • または、/etc/hostsネットワークの DNS サーバーのファイルまたは PTR レコードに保存されている情報を使用して、クライアントの IP アドレスを解決し、ホスト名を識別するように SSH デーモンを構成することもできます。
# /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
  • SUID/SGIDビットがssh-keysign実行可能ファイルにホストの秘密鍵ファイルへの読み取り権限を付与します。
[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

関連情報