Как должен работать connlimit в iptables?

Как должен работать connlimit в iptables?

Я хотел установить ограничение на количество одновременных подключений, разрешенных на моем веб-сервере. Я попробовал следующие правила на ядре iptables (v1.4.19.1) 3.14.4-200.fc20.x86_64 с политикой DROP по умолчанию для цепочки INPUT в filterтаблице:

-A INPUT -p tcp --dport 80 -m connlimit --connlimit-upto 10 -j WEB
-A WEB -j ACCEPT

Затем я запустил сервер с 50 одновременными подключениями, используя Apache Benchmark:

$ ab -kc 50 -t 10 http://mysite.com/

Но когда я смотрю на журнал доступа к моему серверу, я все еще вижу несколько сотен строк успешных запросов. Я ожидаю, что правило connlimitсработает и сбросит все соединения. Что-то не так с моими правилами или моей интерпретацией одновременных соединений?

решение1

После долгих испытаний я пришел к выводу, что политики сброса по умолчанию недостаточно,

*filter
-F
-X
:INPUT DROP [0:0]

Очень важно не предполагать, что это будет выполнено. Правило connlimitвступит в силу только если выявнодобавьте правило удаления в конец цепочки:

-A INPUT -j DROP

Теперь это работает даже при более низком уровне параллелизма, чем указанный лимит:

$ ab -kc 7 -t 6 http://mysite.com/
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking mysite.com (be patient)
apr_pollset_poll: The timeout specified has expired (70007)

Главное — тестировать. Не уверен, что это можно классифицировать как ошибку.

Связанный контент