SSH和SFTP:我应该为每个用户分配一个端口以方便带宽监控吗?

没有简单的方法来跟踪SSH和SFTP的实时每用户带宽使用情况。 我认为给每个用户分配一个端口可能会有帮助,但是我想知道我的方法是否可行。

用例

  • 带有UID 1001的鲍勃应在端口31001上连接。
  • 具有UID 1002的Alice将在端口31002上连接。
  • 约翰,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的应用程序可以生成如下图表:

示例每用户带宽图

我知道这不是一个完美的带宽使用计算:例如,如果有人对端口31001发起暴力攻击,这个端口上将会有很多stream量,尽pipe不是来自Bob。 但是这对我来说不是问题:我不需要精确计算每个用户的带宽使用情况,但是在标准情况下这个指标是近似正确的。

问题

  1. 为每个用户分配一个端口的想法通常是好的吗? 还是违反最佳做法?
  2. 如果我必须为许多用户打开几十个端口,我应该期望性能缺陷吗?

我认为更好的解决scheme是监视每个客户端端口号的带宽使用情况。 然后,您可以将此监视与来自auth.log端口号结合起来,以计算来自用户的所有连接的总和。