特定のプライベートIPがSSH(RSAキーペア)を介してLinuxサーバーにログインできるようにするにはどうすればよいですか?
答え1
構成を介して接続できるホストを制限できます。TCPラッパー またはフィルタリングされたネットワークトラフィックを使用する(ファイアウォール)iptables。クライアントのIPアドレスに基づいてさまざまな認証方法を使用するには、SSHデーモン(オプション3)を設定します。
オプション1:IPTABLESフィルタリングを有効にする
iptablesルールは、最初のルールが一致するまで順次評価されます。
たとえば、192.168.0.0/24ネットワークのトラフィックを許可し、そうでない場合はポート22へのトラフィックを破棄します。DROP
iptablesデフォルトポリシーが設定されている場合は、このルールは必要ありません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を復元するには、いくつかのメカニズムを設定する必要があります。
iptables
IPv4 トラフィックにのみ適用されます。 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
これを通してジョンドそしてマネージャ2
192.168.1.*
住所のみ上位1位、上位2位どこでも。.ssh/authorized_keys
SSHキーまたは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
詳細について知りたい場合は、ここに良いドキュメントがあります。