В Linux я могу использовать такие инструменты, как tc
, iptables
или другие для управления / формирования сетевого трафика на сетевом интерфейсе для следующих целей:
Если да, то как это сделать?
У меня нет ответа на № 2 (см. Ниже). Для 1. и 3. вы можете использовать предел модуль:
Управление скоростью нумерации сетевых пакетов:
iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
Контролировать общее количество открытых TCP-соединений (в секунду):
iptables -A INPUT -m state -m tcp -p tcp --dport 80 --state RELATED,ESTABLISHED -m limit --limit 10/second -j ACCEPT
Альтернативно вы можете использовать предел хеширования модуль:
Управление скоростью нумерации сетевых пакетов:
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
Контролировать общее количество открытых 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.).