web-dev-qa-db-ja.com

SSHアクセスをIPアドレスで特定のクライアントに制限する

特定のプライベートIPのセットがSSHログイン(RSAキーペア)を介してLinuxサーバーに入るのをどのように許可しますか?

26
Ranjan Kumar

TCP wrappers を設定するか、 iptables を使用してネットワークトラフィックをフィルタリング(ファイアウォール)することで、接続できるホストを制限できます。クライアントのIPアドレスに応じて異なる認証方法を使用する場合は、代わりにSSHデーモンを構成します(オプション3)。

オプション1:IPTABLESによるフィルタリング

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で行うことができます。

オプション2:TCPラッパーを使用する

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]

オプション3:SSHデーモン構成

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 に記載されています。

48
sebasth

ここでは、以前の回答を拡張するためのSSHデーモンの追加構成をいくつか示します。

  • sshd_configファイルにAllowUsersオプションを使用してユーザーフィルタリングを追加します。

    AllowUsers [email protected].* [email protected].* otherid1 otherid2
    

    johndoeadmin2192.168.1.*アドレスとotherid1からのみ許可され、どこからでもotherid2が許可されます。

  • Sshキーまたはcaベースのキーを、特定のユーザーのホームディレクトリの.ssh/authorized_keysファイル内の一連のアドレスに制限します。

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    この例では、useraliasの公開鍵は特定のアドレスからのみ有効です。

11
tonioc

クライアント認証に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は、詳細が必要な場合に適したドキュメントです。

1
iBug