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

Ber*_*rtS 5 ssh port sftp bandwidth-measuring

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

用例

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

(我不想启动问题 247291 中提出的几个 sshd 实例。)

1. SFTP 设置:

/etc/ssh/sshd_config

Port 31001
Port 31002
Port 31003
Subsystem sftp /usr/bin/sftp-wrapper.sh
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

好处

现在应该很容易监控每个用户的带宽使用情况。基于 Rrdtool 的应用程序可以生成如下图表:

每用户带宽图示例

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

问题

  1. 为每个用户分配一个端口的想法通常是好的吗?或者它是否违反了最佳实践?
  2. 如果我必须为许多用户打开几十个端口,我应该期待性能下降吗?

kas*_*erd 3

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

  • 当然,如果您不想要实时图表。:) 而 `auth.log` 是 Debian 主义;日志将位于 Red Hat 类型系统的其他位置 (`/var/log/secure`)。 (3认同)