Как контролировать пропускную способность сети на пользователя на сервере Ubuntu?

12

У меня есть несколько пользователей оболочки на сервере с 300 ГБ ежемесячной передачи данных. Как я могу отслеживать использование полосы пропускания для каждого пользователя?

Pedram
источник
это вообще возможно? Похоже, что теоретически это будет более хлопотно, чем стоит, потому что технически необходимо, чтобы каждый процесс, использующий Интернет, определял, кто его запускал, а затем вычислял комбинированное использование пропускной способности. Есть ли какие-то конкретные причины, по которым вы хотите следить за пользователями отдельно от пользователей вашей оболочки? Поскольку при ежемесячных входных / выходных данных в 300 ГБ, вряд ли вы превысите эту сумму: /
Томас Уорд
Это должно быть возможно, иначе как интернет-провайдеры ограничивают пропускную способность на пользователя?
djikyb
@ EvilPhoenix Я хочу отслеживать использование для каждого пользователя. 300 ГБ не так уж много для сервера с минимум 20 пользователями, которые используют этот сервер в качестве прокси-сервера.
Pedram
1
Похоже, у вас есть отличный практический ответ от Киса Кука, но если вы все еще ищете методы, мне интересно, может ли формулировка вопроса по-другому помочь. Я нашел это руководство, которое гуглится «как ограничить полосу пропускания пользователя в linux»: faqs.org/docs/Linux-HOWTO/Bandwidth-Limiting-HOWTO.html
djeikyb

Ответы:

13

Как пользователь root, вы можете по крайней мере измерить исходящий трафик для каждого пользователя, используя модуль «владельца» iptables. Если все пользователи, которых вы хотите контролировать, находятся в /root/list-of-users.txt:

for login in $(cat /root/list-of-users.txt);
do
    iptables -N out_user_$login
    iptables -A OUTPUT -m owner --uid-owner $(id -u $login) -j out_user_$login
done

И тогда счетчик пакетов и байтов для исходящего трафика каждого пользователя виден:

iptables -L OUTPUT -n -v | grep out_

Это может быть расширено с помощью CONNMARK для отслеживания входящей стороны.

Кис Кук
источник
Спасибо. Это здорово. Я сделал это. Но почему я не могу использовать тот же метод для INPUT?
Pedram
1
Владелец пакета не известен для входящих пакетов, потому что с точки зрения ядра он пришел извне машины. CONNMARK можно использовать для привязки пакетов в потоках TCP к их отправителю и т. Д., Но у меня нет рабочего примера этого.
Кис Кук
7

Я только что наткнулся на NetHogs :

NetHogs - это небольшой инструмент для работы с сеткой. Вместо того, чтобы разбивать трафик по протоколу или подсети, как это делают большинство инструментов, он группирует пропускную способность по процессам.

введите описание изображения здесь

Это должно позволить вам отслеживать пропускную способность по имени пользователя. Может потребоваться еще пара инструментов для регистрации информации и добавления всего этого, но это хорошее начало без непосредственного использования iptables.

djeikyb
источник
Он также может быть запущен в режиме для суммирования трафика: sudo nethogs -v 3 eth0(или нажмите mнесколько раз после начала циклического переключения режимов). Объедините с tmuxдля постоянного запуска (даже если ваша sshсессия терпит крах).
Таниус
6

Вы можете использовать Кактусы

Cacti - это полный интерфейс RRDTool, он хранит всю необходимую информацию для создания графиков и заполнения их данными в базе данных MySQL. Интерфейс полностью основан на PHP. Наряду со способностью сохранять графики, источники данных и циклические робин-архивы в базе данных, cacti обрабатывает сбор данных. Также есть поддержка SNMP для тех, кто используется для создания графиков трафика с помощью MRTG.

Или vnStat

vnStat - это консольный монитор сетевого трафика для Linux и BSD, который ведет журнал сетевого трафика для выбранных интерфейсов. Он использует статистику сетевого интерфейса, предоставленную ядром, в качестве источника информации. Это означает, что vnStat на самом деле не будет анализировать трафик, а также обеспечивает легкое использование системных ресурсов.

Оба они великолепны.

sebikul
источник
2
Спасибо, но я уже видел их обоих, и кажется, что ни один из них не обеспечивает мониторинг на пользователя. Я хочу контролировать использование на пользователя.
Pedram
5

Я посмотрел немного, и я не нашел полный пакет графического интерфейса, который делает то, что вы хотите. Надеюсь, что один существует, и кто-то опубликует об этом здесь в конце концов.

Я на самом деле не сетевой парень, но от того, что я прочитал, среди многих других вещей , netstatи iptablesдолжен сделать для IP / хост -На пользователя учета того , что acctинструменты сделал для учета системных процессов. Эта ссылка на cyberciti.biz может помочь вам в разработке системы с помощью следующих инструментов:

http://www.cyberciti.biz/faq/linux-configuring-ip-traffic-accounting/

djeikyb
источник
Спасибо, но, как вы сказали, они используются для учета пользователей на основе IP. У меня есть пользователь оболочки, который может использовать сервер в разных местах, особенно в университетском отделе с тем же IP-адресом (за NAT). ищу решение для бухгалтерского учета на основе пользователя, если это возможно.
Pedram
netstat -eпоказывает пользователей оболочки, позволяя вам связать ip / host с именем пользователя.
djikyb