Назад | Перейти на главную страницу

Ограничение скорости передачи пакетов, открытых подключений и IP-адресов

В Linux я могу использовать такие инструменты, как tc, iptables или другие для управления / формирования сетевого трафика на сетевом интерфейсе для следующих целей:

  1. Управляйте скоростью нумерации сетевых пакетов (или общим количеством).
  2. Контролировать количество подключенных (отправленных) IP-адресов.
  3. Контролировать общее количество открытых TCP-соединений (в секунду).

Если да, то как это сделать?

У меня нет ответа на № 2 (см. Ниже). Для 1. и 3. вы можете использовать предел модуль:

  1. Управление скоростью нумерации сетевых пакетов:

    iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
    
  2. Контролировать общее количество открытых TCP-соединений (в секунду):

    iptables -A INPUT -m state -m tcp -p tcp --dport 80 --state RELATED,ESTABLISHED -m limit --limit 10/second -j ACCEPT
    

Альтернативно вы можете использовать предел хеширования модуль:

  1. Управление скоростью нумерации сетевых пакетов:

    iptables -A INPUT -m hashlimit -m tcp -p tcp --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-above 10/sec --hashlimit-burst 2 --hashlimit-htable-expire 30000 --hashlimit-name pktlimit -j DROP
    
  2. Контролировать общее количество открытых TCP-соединений (в секунду):

    iptables -I INPUT -m hashlimit -m tcp -p tcp --dport 80 --hashlimit-above 10/sec --hashlimit-mode srcip --hashlimit-name connlimit -m state --state RELATED,ESTABLISHED -j DROP
    

Вы можете отслеживать, как работает hashlimit, глядя на:

cat /proc/net/ipt_hashlimit/pktlimit
cat /proc/net/ipt_hashlimit/connlimit

РЕДАКТИРОВАТЬ:

В мире, где преобладает NAT, действительно ли имеет смысл ограничивать количество исходных IP-адресов, как вы хотите сделать в nr. 2? Я думаю, имеет смысл ограничить общее количество открытых TCP-соединений, например:

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT --reject-with tcp-reset

По поводу вашего вопроса 1.)

Насколько я понимаю инструмент tc вы можете контролировать скорость / пропускную способность в kbit или mbit. Справочная страница tc упоминает также

b или голое число в байтах.

Поскольку неясно, какова предыстория ваших вопросов, цель, чего вы пытаетесь достичь и решение / тема в целом, я хотел бы сослаться на доступные руководства по управлению трафиком, например Archlinux.

Также доступны потоки на Serverfault, т.е. Как формировать трафик (ограничение скорости) с TC для каждого клиента OpenVPN или Размер управляющего пакета Linux для определенного IP-адреса.

Они также могут дать подсказки по вашим вопросам 2.) и 3.).