Нет простого способа отслеживать использование полосы пропускания для каждого пользователя в реальном времени для SSH и SFTP. Я думаю, что назначение одного порта каждому пользователю может помочь, но мне интересно, работает ли мой подход.
(Я не хочу запускать несколько экземпляров sshd, как предлагается в вопрос 247291.)
В /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
для вычисления суммы всех подключений пользователя.