Назад | Перейти на главную страницу

SSH и SFTP: следует ли назначать по одному порту каждому пользователю для облегчения мониторинга пропускной способности?

Нет простого способа отслеживать использование полосы пропускания для каждого пользователя в реальном времени для SSH и SFTP. Я думаю, что назначение одного порта каждому пользователю может помочь, но мне интересно, работает ли мой подход.

Пример использования

(Я не хочу запускать несколько экземпляров sshd, как предлагается в вопрос 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, на этом порту будет много трафика, хотя и не от Боба. Но для меня это не проблема: мне нужен не точный расчет использования полосы пропускания для каждого пользователя, а индикатор, который примерно верен в стандартных ситуациях.

Вопросы

  1. Является ли идея назначать один порт для каждого пользователя хорошей? Или это нарушает лучшие практики?
  2. Если мне нужно открыть десятки портов для многих пользователей, следует ли ожидать снижения производительности?

Я думаю, что лучшим решением будет мониторинг использования полосы пропускания для каждого номера порта клиента. Затем вы можете объединить этот мониторинг с номерами портов из auth.log для вычисления суммы всех подключений пользователя.