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

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

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

答え1

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

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

Iptables ルールは、最初に一致するまで順番に評価されます。

たとえば、192.168.0.0/24 ネットワークからのトラフィックを許可し、それ以外の場合はトラフィックをドロップします (ポート 22 へ)。iptablesDROPのデフォルト ポリシーが に設定されている場合、このルールは必要ありません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 を復元するための何らかのメカニズムを構成する必要があります。

iptablesIPv4 トラフィックにのみ適用されます。IPv6 アドレスをリッスンする ssh を持つシステムでは、必要な構成は で実行できますip6tables

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

注: tcpwrappersのサポートが削除されたため、最近のディストリビューションではこのオプションは利用できない可能性があります。オープンSSH6.7

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

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

/etc/hosts.deny:

sshd : ALL

次に、hosts.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次に、ファイルの末尾の の後に必要な認証方法を追加します。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その他id2どこからでも。

  • .ssh/authorized_keys指定されたユーザーのホーム ディレクトリのファイル内のアドレス セットに SSH キーまたは CA ベースのキーを制限します。

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

    この例では、useralias の公開キーは指定されたアドレスからのみ有効になります。

答え3

UFW (Uncomplicated FireWall) をインストールしても構わない場合:

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詳細を知りたい場合は、このドキュメントが参考になります。

関連情報