Можно ли так создать логику iptables?
Если вы разместите готовый конфиг, я буду счастлив. Теперь я пытаюсь установить connlimit 50conn / 1 секунду, но вижу тысячи подключений.
Я предполагаю, что ограничения (вы упомянули в пунктах 2. и 3.) применяются к разрешенным подключениям к ssh / http / https.
Кроме того, я предполагаю, что вы хотите применить ограничение к исходному IP-адресу независимо от порта назначения (т.е. если мой IP-адрес заблокирован из-за попыток SSH, он также будет заблокирован для трафика HTTP / HTTPS).
В таком случае вам понадобятся:
# flush all rules
iptables -F
# delete all user-defined chains
iptables -X
# set default policies
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# allow packets from already estabilished connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
# limit connection to SSH to 1 per IP
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 1 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
# dtto for http
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 1 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
# dtto for https
iptables -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 1 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
# create new chain called "my-limited-chain"
iptables -N my-limited-chain
# set limits (allow 50 connections, erase failed attempts at a speed 50 attempts per hour), accept satisfactory traffic
iptables -A my-limited-chain -m limit --limit 50/hour --limit-burst 50 -j ACCEPT
# drop traffic over the limits
iptables -A my-limited-chain -j DROP
# redirect new SSH/HTTP/HTTPS connections to my-limited-chain
iptables -A INPUT -p tcp --dport 22,80,443 -m state --state NEW -j my-limited-chain
Платить внимание кому:
--connlimit-mask
, поскольку в IPv6 некоторые машины могут иметь 1 IPv6-адрес (--connlimit-mask 128
), а некоторые машины могут (и должны) иметь даже 2 ^ 64 IPv6-адресов (--connlimit-mask 64
).