Linux: IpTables ограничиваем количество соединений с одного ipОчень часто мы сталкиваемся с необходимостью ограничить количество соединений с одного хоста. Эта задача актуальна для администраторов, которые не хотят получить переполнение стека tcp/ip из-за пользователя который решил включить торрент клиент и забыл выключить DHT.

[ad#ad-2]
IpTables синтаксис команды ограничения соединений:

/sbin/iptables -A INPUT -p tcp --syn --dport $port -m connlimit --connlimit-above N -j REJECT --reject-with tcp-reset
# save the changes see iptables-save man page, the following is redhat and friends specific command
service iptables save

Пример ограничения количества соединений на порт ssh с одного ip исспользуя IpTables

/sbin/iptables  -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
# save the changes see iptables-save man page, the following is redhat and friends specific command
service iptables save

Пример ограничения количества соединений на порт http с одного ip исспользуя IpTables

/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset
# save the changes see iptables-save man page, the following is redhat and friends specific command
service iptables save

Пример ограничения количества соединений на порт http с с одной сети исспользуя IpTables

/sbin/iptables  -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT --reject-with tcp-reset
# save the changes see iptables-save man page
service iptables save

Пример ограничения количества соединений на порт http с одного ip если он отсылает более 10 пакетов в 100 секунд исспользуя IpTables

#!/bin/bash
IPT=/sbin/iptables
# Max connection in seconds
SECONDS=100
# Max connections per IP
BLOCKCOUNT=10
# ....
# ..
# default action can be DROP or REJECT
DACTION="DROP"
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION}
# ....
# ..

Пример проверки работоспособности указанных правил IpTables

#!/bin/bash
ip="10.10.10.10"
port="80"
for i in {1..100}
do
  # коннектимся, ничего не делаем  и выходим :) 
  echo "exit" | nc ${ip} ${port};
done
Теги: