iptables connlimit: исключить несколько IP-адресов
В настоящее время у меня есть команда IPTABLES:
iptables -A INPUT -s ! 192.168.0.2 -p tcp --syn -m connlimit [...] -j DROP
Насколько я знаю, такое правило ограничивает некоторое количество соединений, следуя различным параметрам, за исключением 192.168.0.2, который может открывать неограниченное количество соединений TCP.
Моя задача - исключить больше /32 IP-адресов (без определенного шаблона диапазона), таких как:
iptables -A INPUT -s ! IP1 IP2 ... IPN -p tcp --syn -m connlimit [...] -j DROP
Как это возможно с iptables?
1 ответ
Не делай так. Люди связывают себя всеми видами узлов, пытаясь настроить iptables
исключения, но это не правильный способ справиться с проблемой.
Вместо этого используйте логику first-dispositive-match-wins iptables
работать на тебя. Сначала перечислите исключения:
iptables -A INPUT -s 192.168.1.1 -p tcp [...] -j ACCEPT
iptables -A INPUT -s 192.168.2.2 -p tcp [...] -j ACCEPT
iptables -A INPUT -s 192.168.3.3 -p tcp [...] -j ACCEPT
а потом правило:
iptables -A INPUT -p tcp --syn -m connlimit [...] -j DROP
Если вы не хотите слепо ACCEPT
пакеты от этих привилегированных исходных IP-адресов, но просто освобождая их от дальнейших ограничений скорости, вы можете переместить логику ограничения скорости в цепочку самостоятельно, и RETURN
На главную INPUT
цепочка (для дальнейшей обработки) пакетов из источников, которые вы хотите освободить от контроля ограничения скорости:
iptables -N ratelimiter
iptables -A ratelimiter -s 192.168.1.1 -j RETURN
iptables -A ratelimiter -s 192.168.2.2 -j RETURN
iptables -A ratelimiter -s 192.168.3.3 -j RETURN
iptables -A ratelimiter --syn -m connlimit [...] -j DROP
#
iptables -A INPUT -p tcp [...] -j ratelimiter
iptables -A INPUT [ further business-appropriate checks ]