特定のプライベート 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 を復元するための何らかのメカニズムを構成する必要があります。
iptables
IPv4 トラフィックにのみ適用されます。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
これにより、ジョン・ドウそして管理者2
192.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
詳細を知りたい場合は、このドキュメントが参考になります。