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

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

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

用例

  • Bob 的 UID 为 1001,应连接端口 31001。
  • Alice 的 UID 为 1002,应连接端口 31002。
  • UID 为 1003 的 John 应连接端口 31003。

(我不想像在问题 247291

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 发起暴力攻击,那么这个端口上将有大量流量,尽管不是来自 Bob。但这对我来说不是问题:我不需要精确计算每个用户的带宽使用量,而是一个在标准情况下大致正确的指标。

问题

  1. 为每个用户分配一个端口的想法总体上是好的吗?还是它违反了最佳实践?
  2. 如果我必须为许多用户开放数十个端口,是否应该预料到性能会下降?

答案1

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

相关内容