サーバーからのSSH接続のブロック

サーバーからのSSH接続のブロック

背景

ファイルを抽出するためにサードパーティのSFTPサイトに接続するサービスがあります。サードパーティには、特定のユーザーが接続しようとすると着信IPを自動的にブロックするシステムがあります。誰かが禁止されているユーザーを使用していくつかの接続を試みています。これはレガシーシステムであり、すべてのユーザーがrootとしてシステムにアクセスできるためです。この人がsftp root @ remote-siteを試みるたびに、同じリモートSFTPに依存する複数のアプリケーションがクラッシュします。

質問 SSHを使用して特定のuser@siteへの接続をブロックする方法はありますか?一致ルールは、デフォルトで渡される sshd_config のためのものです。 SSHクライアントに対応するものはありますか?

答え1

たとえば、次のように使用する必要がありますiptable

ssh192.168.1.0/24 サブネットへの接続切断

 iptables -I OUTPUT -d 192.168.1.0/24  -p tcp --dport 22 -j REJECT

その後、確認

ssh -v 192.168.1.6
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 192.168.1.6 [192.168.1.6] port 22.
debug1: connect to address 192.168.1.6 port 22: **Connection refused**
ssh: connect to host 192.168.1.6 port 22: **Connection refused**

答え2

これマッチsshd_configの規則は、ssh_config、特に以下/etc/ssh/ssh_configを含むように編集できるグローバルファイルにも適用されます。

Match host site user root
 Hostname DontDoThat

SSHまたはSFTPを使用すると、ホスト名が置き換えられます。

$ sftp root@site
Couldn't read packet: Connection reset by peer

$ sudo sftp site
ssh: Could not resolve hostname dontdothat: Name or service not known

もちろん、ユーザーの~/.ssh/configファイルはまだこの設定を上書きできます。

一致する行にスクリプト呼び出し(0を終了する必要がある)を追加して、sftpを実行している人に関する情報を記録できます(一重exec "/bin/mylogger somearg..."引用符を使用しないなど)。

答え3

発信SSH接続を許可するには、いつでもiptables "users"モジュールを使用できます。

iptables -A OUTPUT -o eth0  -p tcp --destination-port 22 -m owner --uid-owner {USERNAME} -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --destination-port 22 -j DROP

これにより、すべての発信SSH接続がブロックされますが、{USERNAME}はそれを実行できます。

関連情報