SSHおよびSFTPのユーザーごとの帯域幅使用量をリアルタイムで追跡する簡単な方法はありません。各ユーザーに1つのポートを割り当てると役立つと思いますが、私のアプローチが機能するかどうか疑問に思っています。
(私は 質問247291 で提案されているようにいくつかのsshdインスタンスを起動したくありません。)
/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
/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ベースのアプリケーションは、次のようなグラフを作成できます。
これは帯域幅使用量の完全な計算ではないことを私は知っています。たとえば、誰かがポート31001でブルートフォース攻撃を開始した場合、ボブからではなくてもこのポートで大量のトラフィックが発生します。しかし、これは私にとって問題ではありません。ユーザーごとの帯域幅使用量を正確に計算する必要はありませんが、標準的な状況ではほぼ正しいインジケーターが必要です。
より良い解決策は、クライアントのポート番号ごとに帯域幅の使用状況を監視することだと思います。次に、この監視をauth.log
のポート番号と組み合わせて、ユーザーからのすべての接続の合計を計算できます。