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

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

  • Фильтровать пакет UDP в tc-фильтре
  • Как пакеты проходят через физические, VLAN и мостовые интерфейсы tc / netfilter?
  • Разрешение пользователя управления трафиком
  • Ограничить скорость интернета без tc
  • О параметрах hfsc
  • Очередь дисциплины для каждого интерфейса, что происходит с интерфейсами с использованием того же устройства?
  • Отложить некоторый трафик localhost
  • Альтернатива Iptables для фильтрации пакетов в интерфейсах OVS
  • 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

    Новый debian 8 install … не может попасть на терминал без GUI

    Безопасно ли создать регрессионный тест, основанный на исчерпании лимита дескриптора файла?

    Fedora 16 странных / tmp-разрешений: mysqld не запускается

    Преобразовать таблицу шестнадцатеричных констант с sed?

    Не удалось запустить Fedora 18 LiveCD с помощью USB-устройства

    Невозможно добавить раскладку клавиатуры на Cinnamon

    Как обновить кэш Linux «локализовать»

    Вывод журнала из нескольких сценариев

    подтверждение до sudo su

    Существуют ли консервированные решения для запуска sshd в initrd?

    Что означает этот синтаксис "$ {i% .avi} .mp4"

    Как связать номер строки с файлом в файл результатов выходного файла diff?

    Вы сохранили бы Makefile для последующей деинсталляции?

    Изменить имя пользователя без доступа root?

    Невозможно использовать максимальное разрешение, режим xrandr не отображается (адаптер Intel GPU, от DP до DVI)

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