IP アドレスに特定のクライアントへの SSH アクセスを制限します。

IP アドレスに特定のクライアントへの SSH アクセスを制限します。

特定のプライベートIPがSSH(RSAキーペア)を介してLinuxサーバーにログインできるようにするにはどうすればよいですか?

答え1

構成を介して接続できるホストを制限できます。TCPラッパー またはフィルタリングされたネットワークトラフィックを使用する(ファイアウォール)iptables。クライアントのIPアドレスに基づいてさまざまな認証方法を使用するには、SSHデーモン(オプション3)を設定します。

オプション1:IPTABLESフィルタリングを有効にする

iptablesルールは、最初のルールが一致するまで順次評価されます。

たとえば、192.168.0.0/24ネットワークのトラフィックを許可し、そうでない場合はポート22へのトラフィックを破棄します。DROPiptablesデフォルトポリシーが設定されている場合は、このルールは必要ありません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

ルールを削除する前に、より多くのネットワーク/ホストと一致するようにルールを追加できます。ネットワークまたはホストアドレスが多い場合は、次のものを使用する必要があります。IPセット基準寸法。しかもイープラングあらゆる範囲のIPアドレスを使用できるモジュールです。

Iptableは再起動後も持続しません。起動時にiptablesを復元するには、いくつかのメカニズムを設定する必要があります。

iptablesIPv4 トラフィックにのみ適用されます。 SSH受信IPv6アドレスを持つシステムを使用して、必要な設定を完了できますip6tables

オプション2:TCPラッパーの使用

注:tcpwrappersのサポートが削除されたため、最新のディストリビューションではオプションではない可能性があります。オープンSSH 6.7

TCPラッパーを使用して接続できるホストを構成することもできます。 TCPラッパーを使用すると、IPアドレスに加えて、ルールにホスト名を使用できます。

デフォルトでは、すべてのホストは拒否されます。

/etc/hosts.deny:

sshd : ALL

次に、host.allowで許可されているホストを一覧表示します。たとえば、ネットワークを許可します。192.168.0.0/24そしてローカルホスト

/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次に、ファイルの最後のaの後に必要な認証方法を追加します。Matchファイルの末尾に配置することが重要です。これ以降のすべての構成行は、次の行Matchまで条件ブロック内に配置されるためです。たとえば、

Match Address 127.0.0.*
    PubkeyAuthentication yes

他のクライアントは引き続き接続できますが、使用可能な認証方法がないため、ログインは失敗します。

一致パラメータと許可される条件付き構成オプションについては、以下で説明します。 sshd_config のマニュアルページ。一致するパターンは次のように記録されます。ssh_config マニュアルページ

答え2

以下は、以前の回答を拡張するためのSSHデーモンのいくつかの追加設定です。

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

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

    これを通してジョンドそしてマネージャ2192.168.1.*住所のみ上位1位上位2位どこでも。

  • .ssh/authorized_keysSSHキーまたはCAベースのキーを特定のユーザーのホームディレクトリにあるファイルのアドレスセットに制限します。

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

    この例では、ユーザーエイリアスの公開鍵は、指定されたアドレスに対してのみ有効です。

答え3

UFW(簡単なファイアウォール)をインストールしても大丈夫なら:

sudo ufw allow from 192.168.1.0/24 to any port 22

編集する:前述のように、認証にパスワードの代わりにキーを使用することをお勧めします。これは編集で行うことができます。/etc/ssh/sshd_config:

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

答え4

クライアント認証に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詳細について知りたい場合は、ここに良いドキュメントがあります。

関連情報