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


22

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


3
ファイアウォールのルールが実行するアクションの通常の過程です
ラマンSailopal

2
sshがTCPラッパーまたは/ etc / ssh / sshd_configファイルルールを使用してコンパイルする場合、ファイアウォールまたは/etc/hosts.allow。
ルイFリベイロ

行うための複数の方法、を参照してくださいlinux.die.net/man/5/sshd_configのすべてを説明/etc/ssh/sshd_config
ロン

回答:


42

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

ドロップルールの前にルールを追加して、より多くのネットワーク/ホストに一致させることができます。多くのネットワークまたはホストアドレスがある場合は、ipsetモジュールを使用する必要があります。任意の範囲のIPアドレスを使用できるiprangeモジュールもあります。

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

iptablesIPv4トラフィックにのみ適用されます。IPv6アドレスをリッスンするsshが必要な設定を行うシステムは、で行うことができます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、ファイルの最後にaの後に目的の認証方法を追加します。Matchファイルの最後に配置することは重要です。なぜなら、それ以降のすべての設定行は、次のMatch行まで条件ブロック内に配置されるからです。例えば:

Match Address 127.0.0.*
    PubkeyAuthentication yes

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

一致する引数と許可される条件付き設定オプションは、sshd_configのマニュアルページに記載されてい ます。一致パターンはssh_configのマニュアルページに記載されています


ListenAddressディレクティブを/ etc / ssh / sshd_configに追加するのはどうですか?
ジェローム

ネットワーク設定や許可するホストに応じて、特定の状況(プライベートネットワークアドレスのリッスンなど)で可能です。
セバスト

2
また、フィルタに「また、sshd_configのはAlowUsersディレクティブでフィルタリングを設定することができ、また、authorized_keysにはIPまたはサブネットから」で設定することができます。
tonioc

@toniocユースケースに最適なソリューション。この提案を回答に展開してください。
simlev

それぞれ異なるネットワークに向かう4つのポートを持つNICがある場合、デフォルト#ListenAddress ::/etc/ssh/sshd_configは、これらのネットワークのいずれかからの着信を受け入れるようにSSHサーバーに指示します。それ以外の場合ListenAddress <ip address><ip address>許可するNICポートの場所を指定します。私はeth0ある192.168.3.4ので、ListenAddress 192.168.3.4唯一のネットワークはeth0上で192.168.3.4に取り組んでSSHでの結果。eth1 eth2 eth3は拒否されます。
ron

5

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

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

    AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
    

    これにより、johndoeadmin2192.168.1.*アドレスからのみ、otherid1otherid2はどこからでも許可されます。

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.