Вопрос или проблема
У меня есть сервер Ubuntu с примерно 20 пользователями, которые в основном используют его для SSH туннелирования.
Мне хотелось бы узнать, есть ли способ определить объем данных, переданных каждым пользователем за определенный период времени, например, за последнюю неделю или месяц.
Хороший вопрос, я нашел несколько ответов:
-
Как измерить пропускную способность SSH-соединения
iftop -i "$iface" -nPf "tcp and port $sport and port $dport"
Где
$iface
— это интерфейс, через который пакеты для ssh-соединения будут отправляться/приниматься, а$sport/$dport
— исходные и целевые TCP-порты. Вы можете уточнить фильтр, добавив указание исходных и целевых IP-адресов. -
Сколько данных обычно использует SSH?
Вы должны запустить
tcpdump -ni eth0 -w dump port 22
чтобы захватить все ваши пакеты, затемtcpdump -nX -r dump
для их просмотра. -
Я бы использовал модуль iptables owner (возможно, вместе с другими модулями квотирования/отчетности).
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid someuser -j ACCEPT
А затем смотрел бы вывод
iptables -vL
, чтобы увидеть количество пакетов/байтов, прошедших через это правило, или проанализировал статистику iptables с помощью какого-либо аналитического инструмента.
Чтобы отслеживать данные за определенный период времени, вам может потребоваться периодически сбрасывать статистику и собирать данные с регулярными интервалами, например, еженедельно или ежемесячно.
Переадресуйте вывод iptables -vL
в файл для анализа.
iptables -vL > ssh_traffic.txt
Сбросьте статистику:
iptables -Z
сбрасывает статистику для правила iptables
, которое отслеживает SSH-трафик.
Вы также можете написать bash-скрипт
и запускать его с помощью cron
или anacron
, чтобы выполнять его автоматически через желаемые интервалы и собирать данные о трафике.
Есть еще один вариант использования iptables
, conntrack
и connmark
вместе, но вам придется разобраться в этом самостоятельно.
.
Ответ или решение
Чтобы определить объем данных, переданных каждым пользователем через SSH за определенный период времени, требуется более детальный подход, учитывающий несколько аспектов администрирования системы и сетевой безопасности. Перейдем к рассмотрению возможных решений.
Теория
SSH-туннелирование — это метод обеспечения безопасности передачи данных через незащищенные сети. В случае, когда несколько пользователей используют общий сервер через SSH, возникает необходимость в мониторинге их активности для распределения ресурсов и обеспечения безопасности. Одной из задач может стать учет объема данных, переданного каждым пользователем за определенный период времени.
Для решения этой задачи можно использовать несколько инструментов и методов. Основные инструменты для этого:
- iftop — утилита для мониторинга сетевой активности в реальном времени, которая может отслеживать использование полосы пропускания.
- tcpdump — мощный инструмент для захвата и анализа сетевого трафика.
- iptables вместе с модулем owner — позволяет контролировать и фиксировать количество переданных данных на основе пользователя, который инициировал соединение.
Пример
- Использование iftop: Это удобно для мониторинга трафика в реальном времени, однако этот инструмент не сохраняет данные для последующего анализа, и его нужно применять вместе с другими инструментами для сбора и хранения данных. Настраивается на конкретный интерфейс и порты.
iftop -i eth0 -nPF "tcp and port 22"
- Использование tcpdump: Можно захватывать весь трафик через определенный порт, например, порт 22 (SSH-трафик), и тщательно анализировать его для вычисления объема переданных данных.
tcpdump -ni eth0 -w ssh_traffic.pcap port 22
После захвата можно использовать фильтры для дальнейшего анализа.
- Использование iptables: Более функциональный способ, который может быть автоматизирован. С его помощью можно отслеживать трафик каждого пользователя, указывая UID и настраивая правила для сбором статистики:
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner <user> -j ACCEPT
iptables -vL > ssh_traffic.txt
Эти данные периодически записываются, например, с помощью cron
или anacron
, для автоматического сбора данных:
iptables -Z # Сброс статистики после сбора данных
Применение
Чтобы эффективно применять эти методы, рекомендуется автоматизировать процесс с помощью скриптов. Bash-скрипт, выполняющийся регулярно через cron или anacron, сможет собирать и систематизировать данные трафика:
#!/bin/bash
DATE=$(date +%Y-%m-%d)
iptables -vL > /path/to/directory/ssh_traffic_$DATE.txt
iptables -Z
Задать задачу можно в crontab, указав интервал сбора данных, например, раз в неделю:
0 0 * * 0 /path/to/script.sh
Для автоматизации выполнения и удобства анализа можно применить более сложные инструменты, такие как Elasticsearch для хранения и анализа логов, Grafana для визуализации.
Таким образом, решение задачи учета данных переданных через SSH каждым пользователем за указанный период времени требует комплексного подхода. Существует множество инструментов, каждый из которых имеет свои сильные и слабые стороны. Выбор методов зависит от специфики инфраструктуры и административных требований. Интеграция этих данных в системы мониторинга и визуализации будет способствовать более эффективному управлению серверной инфраструктурой и позволит администратору принимать более обоснованные решения по управлению ресурсоемкими задачами.