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

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

  • Как устройство IMQ расположено в потоке пакетов ядра Linux
  • Почему я не вижу капель с потоками TCP в linux
  • Как пакеты проходят через физические, VLAN и мостовые интерфейсы tc / netfilter?
  • TCP-потоки, сосуществующие с UDP при использовании SFQ (стохастическая честная очередь)
  • Как заблокировать операцию управления трафиком (tc), если он запущен как не-root?
  • Как настроить распределение пропускной способности между группами?
  • удалить tc-фильтр (Traffic Shaping)
  • 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?

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