MACフィルタリングでSSHにiptablesを使用する - お勧めですか?

MACフィルタリングでSSHにiptablesを使用する - お勧めですか?

内部ネットワーク(VPN経由でログイン)にサーバーがあり、そこからOpenSSH公開/秘密鍵認証を使用してSSH経由でサーバーにログインします。セキュリティの観点から、私は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は潜在的な解決策として使用できません。)

ありがとうございます。

ベストアンサー1

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

ユーザの公開鍵認証を選択されたクライアントホストに接続する1つの可能な解決策は、ホストベースの認証を利用することである。ホストベースの認証を設定し、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~/.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
  • /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

おすすめ記事