контролировать пропускную способность интерфейса с помощью tc или iptables

Я хотел бы записать предупреждающее сообщение в файл /var/log/messages если входная или выходная полоса пропускания на интерфейсе eth0 превышает определенный порог. Я мог бы сделать это с помощью скрипта, который считывает значение файла /sys/devices/virtual/net/eth0/statistics/[rt]x_bytes , сохраняет значение, засыпает секунду, снова считывает те же самые значения, вычисляет количество бит в секунду, сравнивает результат с определенным порогом и, если выше, записывает сообщение в файл /var/log/messages . Однако есть ли более разумный метод? Я имею в виду, например, с iptables или tc которые могли бы создать сообщение журнала в случае превышения определенного порога пропускной способности на интерфейсе?

  • Не удается получить tc для ограничения сетевого трафика
  • Отбрасывание пакетов перед изменением POSTROUTING
  • tc показать выходное объяснение
  • Отложить некоторый трафик localhost
  • Как заблокировать операцию управления трафиком (tc), если он запущен как не-root?
  • Отсутствие применения tc фильтра
  • Используя tc, я хочу, чтобы TCP и UDP использовали один и тот же буфер
  • Исключить определенную сеть из правил tc
  • 3 Solutions collect form web for “контролировать пропускную способность интерфейса с помощью tc или iptables”

    Вы можете использовать vnstat с параметром -tr, затем сравнить с порогом и журналом записи, если они превышены.

     -tr time Calculate how much traffic goes through the selected interface during the giventimeseconds. Thetimewill be 5 seconds if a number parameter isn't included. 

    Я наконец нашел решение, которое я искал. rateest имеет модуль rateest который делает именно это. Например:

     # collects all ingress traffic to RATEEST target iptables -A INPUT -j RATEEST --rateest-name RE1 --rateest-interval 500.0ms --rateest-ewmalog 1s # creates a log entry(jumps to LOG target) if rate is greater than 10Mbps iptables -A INPUT -m rateest --rateest RE1 --rateest-gt --rateest-bps 10Mbps -j LOG --log-prefix "Ingress bandwidth >10Mbps " 
     netstat -i 

    Просто для начала. Посмотрите на заголовки для RX-OK и TX-OK. Задайте это с помощью cron, и все.

     #!/bin/bash # Mar 2015 # Get bytes transmitted and received on eth0 and log msg. echo " " bytein=`netstat -i | grep eth0 | awk '{print $4 }'` byteout=`netstat -i | grep eth0 | awk '{print $8 }'` total=$((${bytein} + ${byteout})) # echo "IN=$bytein, OUT=$byteout, TOTAL=$total" max=1000000 outfile=/var/log/messages msg="Bandwidth has exceeded $max bytes" if [ $total -gt $max ]; then echo "$msg" >> $outfile echo $msg fi 

    Какая большая картина ОП? Я мог бы сделать это для разных пользователей, чтобы ограничить их пропускную способность, почему это для интерфейса eth0?

    Interesting Posts

    Как написать в каталоге вне дома?

    CentOS Запуск процесса не реагирует на сигналы kill, а не переключается по контексту

    (virt-manager: 4796): клиент не смог подключиться к демону D-BUS / Не удалось подключиться к libvirt

    Может перезагрузить систему, перезагружая службу, как это делает systemctl?

    Как я могу сделать полноэкранный режим Flash на внешнем дисплее?

    операция оболочки внутри makefile

    Поиск большого количества расширений с помощью find

    Как читать строку с трубкой

    Получить файлы с именем, содержащим значение даты, меньшее или равное заданной дате ввода

    tmux – Catch 22 с «неизвестным ключом: WheelUpPane» для osx и Ubuntu

    Сообщение Rsyslog `logger` дублируется

    Система зависает при просмотре интернета

    Наборы данных ZFS наследуют наследование

    Как обновить даты (на 30 дней) в файлах, идущих в это конкретное место в unix?

    Есть ли команда под названием «on» для выполнения команд на удаленных компьютерах?

    Linux и Unix - лучшая ОС в мире.