web-dev-qa-db-ja.com

SSHとSFTP:帯域幅の監視を容易にするために各ユーザーに1つのポートを割り当てる必要がありますか?

SSHおよびSFTPのユーザーごとの帯域幅使用量をリアルタイムで追跡する簡単な方法はありません。各ユーザーに1つのポートを割り当てると役立つと思いますが、私のアプローチが機能するかどうか疑問に思っています。

使用事例

  • ボブは、UID 1001を使用して、ポート31001で接続します。
  • アリスは、UID 1002を使用して、ポート31002で接続する必要があります。
  • Johnは、UID 1003を使用して、ポート31003で接続します。

(私は 質問247291 で提案されているようにいくつかのsshdインスタンスを起動したくありません。)

1. SFTPのセットアップ:

/etc/ssh/sshd_config

Port 31001
Port 31002
Port 31003
Subsystem sftp /usr/bin/sftp-wrapper.sh

ファイルsftp-wrapper.shは、ポートが正しい場合にのみsftpサーバーを起動します。

#!/bin/sh
mandatory_port=3`id -u`
current_port=`echo $SSH_CONNECTION | awk '{print $4}'`
if [ $mandatory_port -eq $current_port ]
then
  exec /usr/lib/openssh/sftp-server
fi

2. SSHの追加セットアップ:

/etc/profileの数行は、ユーザーが間違ったポートに接続するのを防ぎます。

if [ -n "$SSH_CONNECTION" ]
then
  mandatory_port=3`id -u`
  current_port=`echo $SSH_CONNECTION | awk '{print $4}'`
  if [ $mandatory_port -ne $current_port ]
  then
    echo "Please connect on port $mandatory_port."
    exit 1
  fi
fi

利点

これで、ユーザーごとの帯域幅の使用状況を簡単に監視できるはずです。 Rrdtoolベースのアプリケーションは、次のようなグラフを作成できます。

example per-user bandwidth graph

これは帯域幅使用量の完全な計算ではないことを私は知っています。たとえば、誰かがポート31001でブルートフォース攻撃を開始した場合、ボブからではなくてもこのポートで大量のトラフィックが発生します。しかし、これは私にとって問題ではありません。ユーザーごとの帯域幅使用量を正確に計算する必要はありませんが、標準的な状況ではほぼ正しいインジケーターが必要です。

質問

  1. ユーザーごとに1つのポートを割り当てるというアイデアは、一般的に良いものですか?それとも、ベストプラクティスに違反していますか?
  2. 多くのユーザーのために数十のポートを開く必要がある場合、パフォーマンスの欠点を予期する必要がありますか?
5
BertS

より良い解決策は、クライアントのポート番号ごとに帯域幅の使用状況を監視することだと思います。次に、この監視をauth.logのポート番号と組み合わせて、ユーザーからのすべての接続の合計を計算できます。

3
kasperd