没有简单的方法来跟踪 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
我认为更好的解决方案是监控每个客户端端口号的带宽使用情况。然后,您可以将此监控与端口号结合起来,auth.log
计算来自用户的所有连接总数。