Я пытаюсь понять, что на самом деле делают эти правила iptables, но у меня нет большого опыта.
Вот два правила:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 16 -j REJECT --reject-with tcp-reset
iptables -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 20 --connlimit-mask 16 -j REJECT --reject-with tcp-reset
Я сам пытался погуглить, но не совсем уверен.
Насколько я понимаю, эти правила применяются к входящим подключениям к серверу с использованием TCP протокол на конкретном порту (в данном случае HTTP и HTTPS) и отклонить IP-адреса, которые отправляют более 20 в течение определенного периода времени. Но я не понимаю, что именно делают следующие атрибуты и как на самом деле работает REJECT.
Каковы временные рамки, в течение которых применяется ограничение, когда эти IP-адреса становятся заблокированными, и если да, на какой срок?
Ниже приведены значения этих аргументов в приведенных выше правилах iptables.
--syn
На самом деле это сокращение от --tcp-flags SYN,RST,ACK,FIN SYN
и говорит, что для пакетов, проверяемых этим правилом iptables, необходимо проверять TCP-флаги SYN, RST, ACK и FIN. Сопоставляться должны только пакеты с установленным TCP-флагом SYN.
--connlimit-above 20
На самом деле это часть аргумента -m connlimit --connlimit-above 20
и говорит, что пакеты должны соответствовать пределу соединения. Если пакеты относятся к любому соединению, превышающему первые 20 соединений, отбросьте пакеты.
--connlimit-mask 16
Это позволяет ограничить разрешенные маски подсети, из которых исходят пакеты. Этот аргумент позволяет ограничить количество подключений до 16 для каждой подсети 255.255.0.0. Таким образом, используя их вместе, вы контролируете, сколько подключений может быть выполнено из подсети 255.255.0.0 одновременно.
REJECT --reject-with tcp-reset
Это говорит о том, что любой соответствующий пакет должен быть отброшен. Сообщая iptables сбросить пакет с помощью tcp-reset, вы говорите, что исходный источник должен начать диалог заново (и если они сделают тот же запрос, он также будет деинизирован).
http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-7.html