![Как объединить connlimit с наборами IP-адресов?](https://rvso.com/image/36037/%D0%9A%D0%B0%D0%BA%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%82%D1%8C%20connlimit%20%D1%81%20%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D0%BC%D0%B8%20IP-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2%3F.png)
connlimit
позволяет мне ограничить количество подключений на клиента/службу. Как бы мне объединить такое правило с наборами IP, доступными в более поздних версиях ядра Linux и netfilter?
решение1
Допустим, у нас есть ipset с именем MYTESTSET
, и этот ipset имеет тип hash:ip
. Он будет хранить только ip-адреса.
Затем сопоставьте его с вашим IPset и после сопоставления connlimit
с расширением с нужными вам параметрами.
iptables -A INPUT -p tcp -m set --match-set MYTESTSET src -m connlimit --connlimit-above 1 --connlimit-saddr --connlimit-mask 32 -j DROP
Это приведет к следующему: для каждого источника внутри набора IP-адресов будут подсчитаны соединения, и если их больше одного (--connlimit-above 1), они будут сброшены, тем самым ограничивая количество соединений.на источник в ipsetдо 1. (Можно также выполнить сопоставление другим способом, используя --connlimit-upto xxx
и -j ACCEPT
вместо DROP
)
Если вы хотите рассмотреть весь набор и разрешить 1 подключениедля всех источников в ipsetзатем установите --connlimit-mask
переключатель в положение 0.