Linux: IpTables ограничиваем количество соединений с одного ip
Очень часто мы сталкиваемся с необходимостью ограничить количество соединений с одного хоста. Эта задача актуальна для администраторов, которые не хотят получить переполнение стека tcp/ip из-за пользователя который решил включить торрент клиент и забыл выключить DHT.
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/iptales
# 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Статьи по теме:
Комментарии
Оставьте свое мнение о статье...

