特定のプライベートIPのセットがSSHログイン(RSAキーペア)を介してLinuxサーバーに入るのをどのように許可しますか?
TCP wrappers を設定するか、 iptables を使用してネットワークトラフィックをフィルタリング(ファイアウォール)することで、接続できるホストを制限できます。クライアントのIPアドレスに応じて異なる認証方法を使用する場合は、代わりにSSHデーモンを構成します(オプション3)。
Iptablesルールは、最初に一致するまで順番に評価されます。
たとえば、192.168.0.0/24ネットワークからのトラフィックを許可し、それ以外の場合は(ポート22への)トラフィックをドロップします。 iptablesのデフォルトポリシーがDROP
に設定されている場合、DROP
ルールは不要です。
iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
ドロップルールの前にルールを追加して、より多くのネットワーク/ホストに一致させることができます。多くのネットワークまたはホストアドレスがある場合は、 ipset モジュールを使用する必要があります。 iprange モジュールもあり、任意のIPアドレス範囲を使用できます。
Iptablesは再起動後も保持されません。起動時にiptablesを復元するためのメカニズムを設定する必要があります。
iptables
はIPv4トラフィックにのみ適用されます。 sshがIPv6アドレスをリッスンしているシステムでは、必要な構成をip6tables
で行うことができます。
TCPラッパーを使用して接続できるホストを構成することもできます。TCPラッパーを使用すると、IPアドレスに加えて、ルールでホスト名を使用することもできます。
デフォルトでは、すべてのホストを拒否します。
/etc/hosts.deny
:
sshd : ALL
次に、許可されたホストをhosts.allowにリストします。たとえば、ネットワーク192.168.0.0/24およびlocalhostを許可します。
/etc/hosts.allow
:
sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]
Sshd_configでsshデーモンを構成して、クライアントのアドレス/ホスト名に応じて異なる認証方法を使用できます。他のホストの接続のみをブロックする場合は、代わりにiptablesまたはTCPラッパーを使用する必要があります。
まず、デフォルトの認証方法を削除します。
PasswordAuthentication no
PubkeyAuthentication no
次に、ファイルの最後のMatch Address
の後に目的の認証方法を追加します。 Match
をファイルの最後に配置することは重要です。それ以降のすべての構成行は、次のMatch
行まで条件ブロック内に配置されるためです。例えば:
Match Address 127.0.0.*
PubkeyAuthentication yes
他のクライアントは引き続き接続できますが、利用可能な認証方法がないため、ログインは失敗します。
一致引数と許可される条件付き構成オプションは sshd_config man page に記載されています。一致パターンは ssh_config man page に記載されています。
ここでは、以前の回答を拡張するためのSSHデーモンの追加構成をいくつか示します。
sshd_config
ファイルにAllowUsers
オプションを使用してユーザーフィルタリングを追加します。
AllowUsers [email protected].* [email protected].* otherid1 otherid2
johndoeとadmin2は192.168.1.*
アドレスとotherid1からのみ許可され、どこからでもotherid2が許可されます。
Sshキーまたはcaベースのキーを、特定のユーザーのホームディレクトリの.ssh/authorized_keys
ファイル内の一連のアドレスに制限します。
from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
この例では、useraliasの公開鍵は特定のアドレスからのみ有効です。
クライアント認証にSSH CAを使用している場合は、証明書に署名するときにsource-address
オプションを指定できます。
ssh-keygen -s ca_privkey -O source-address=172.16.0.0/16 id_rsa.pub
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
証明書id_rsa-cert.pub
は、172.16.0.0/16
アドレスからのみホストにログインするために使用できます(指定しない限り、127.0.0.1
も使用できません)。
man 1 ssh-keygen
は、詳細が必要な場合に適したドキュメントです。