Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Ограничение числа коннектов с одного IP  (Прочитано 7435 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kiev

  • Автор темы
  • Активист
  • *
  • Сообщений: 412
    • Просмотр профиля
    • Соционическое типирование и консультирование
Подскажите пожалуйста как в убунте принято ограничивать количество соединений с одного IP?
потому что ничего не работает

iptables -I INPUT -p tcp -m connlimit --connlimit-above 100 -j REJECT
iptables v1.3.8: Couldn't load match `connlimit':/lib/iptables/libipt_connlimit.so: cannot open shared object file: No such file or directory

iptables -A INPUT -p tcp --dport 80 -m iplimit --iplimit-above 100  -j REJECT
iptables v1.3.8: Couldn't load match `iplimit':/lib/iptables/libipt_iplimit.so: cannot open shared object file: No such file or directory

говорят что --hashlimit работает, но как его написать?
« Последнее редактирование: 22 Июня 2008, 09:41:04 от kiev »

Оффлайн Kost

  • Новичок
  • *
  • Сообщений: 29
  • UNIX the power to set your computer free
    • Просмотр профиля
Re: Ограничение числа коннектов с одного IP
« Ответ #1 : 19 Августа 2008, 11:23:52 »
Соответствие hashlimit

Модуль hashlimit является прямым наследником limit и основным (весьма кардинальным) отличием является поддержка хеш-таблиц, которые позволяют поддерживать и проверять условия соответствия не для всех пакетов сразу (независимо от адресов и портов), а с учетом выбранной пользователем комбинации параметров, включающей адреса и номер порта для отправителя и получателя. Это существенно расширяет возможности управления трафиком, поскольку выполнение условий проверяется независимо для каждого набора параметров в соответствии с выбором пользователя.

Основная идея модуля заключается в создании хэш-таблицы для каждого адреса получателя и поддержка отдельных счетчиков пакетов и байтов для каждой записи. Таким способом можно, например, вводить ограничения на скорость и число попыток организации соединения с каждым адресом, как это делает limit для всех адресов сразу.

Модуль поддерживает несколько параметров:

--hashlimit

задает среднее значение потока трафика. Параметр представляет собой целое число, определяющее максимальное количество пакетов, и суффикс, который определяет единицу времени. В качестве суффикса могут использоваться значения /second, /minute, /hour, /day. По умолчанию устанавливается число пакетов в секунду.

--hashlimit-burst

задает порог, идентичный параметру limit-burst для операции limit (По умолчанию значение параметра равно 5.

--hashlimit-mode <режим>

задает режим хеширования – по адресам, портам или их комбинациям. Параметр может содержать разделенный запятыми список значений dstip, dstport, srcip, srcport. Эта опция является обязательной в команде.

--hashlimit-name foo

задает имя для файла /proc/net/ipt_hashlimit/foo. Данная опция является обязательной. Имя файла может выбираться произвольно.

--hashlimit-htable-size

задает число элементов (bucket) в хэш-таблице;

--hashlimit-htable-max

задает максимальное количество записей в хэше;

--hashlimit-htable-expire

задает время (в миллисекундах) жизни записи в хэш-таблице. По умолчанию время жизни составляет 10000 (10 секунд).

--hashlimit-htable-gcinterval

задает интервал “сборки мусора” в хэш-таблице. По умолчанию интервал сборки составляет 1000 мсек (1 секунда).

Например, правило

iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit 1/hour --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name SSH --hashlimit-htable-expire 360000 -j ACCEPT

позволяет ограничить частоту попыток соединения с портом SSH независимо для каждого источника таких пакетов.

При использовании условия hashlimit я дереве каталогов /proc/net/ipt_hashlimit создается файл с именем, заданным параметром –hashlimit-name (в нашем случае /proc/net/ipt_hashlimit/SSH), в котором для каждого отправителя пакетов создается запись вида

50 213.96.92.236:0->0.0.0.0:0 23040000 23040000 11520000

Первый параметр показывает число секунд, в течении которого запись будет оставаться в таблице, если с этого адреса не поступит новых пакетов, соответствующих остальной части правила. При поступлении нового пакета для этого поля устанавливается значение, задаваемое параметром –hashlimit-htable-expire (а приведенном примере 360000=360 сек = 6 мин). Следующий параметр содержит значения адресов и номеров портов для отправителя и получателя с учетом выбранного пользователем режима хеширования. Если какой-либо из перечисленных параметров не используется при хеширование соответствующее поле таблицы имеет значение 0. Третий параметр (23040000 в приведенном примере) содержит текущее значение счетчика пакетов (не удивляйтесь большому значению, счетчик использует коэффициент), четвертый параметр пропорционален значению burst (с тем же коэффициентом), а последний параметр определяет средний интервал “оттока”, т. е. обратно пропорционален значению параметра –hashlimit (в большинстве систем он будет равен среднему интервалу между пакетами в секундах, умноженному на 32000).

В связи с использованием хеш-таблицы модуль поддерживает еще три дополнительных параметра, управляющих выделением памяти для хеширования. Параметр –hashlimit-htable-size определяет размер памяти, выделяемой при создании хеш-таблицы (число записей), а –hashlimit-htable-max задает максимальное число записей в таблице. Эти параметры являются необязательными и при их отсутствии соответствующие значения вычисляются с учетом параметров системы. Третий параметр –hashlimit-htable-gcinterval определяет период “сборки мусора”, т. е. Удаления из таблицы записей, для которых истекло время жизни.

Условие hashlimit существенно расширяет возможности фильтрации пакетов с использованием пороговых значений, но обладает тем же недостатком, что и limit – отсутствием возможности инверсии правила в целом.

Кроме того, исходные коды hashlimit в составе ядра 2.6.10 и iptables 1.3.0.r1 содержат ряд ошибок, которые просто не позволяют использовать модуль. Файлы с корректными исходными кодами можно загрузить с сайтов, используя приведенные ниже ссылки:

http://bugme.osdl.org/show_bug.cgi?id=4105 (модуль для ядра)

https://bugzilla.netfilter.org/bugzilla/show_bug.cgi?id=280 (модуль iptables)
« Последнее редактирование: 19 Августа 2008, 11:31:46 от Kost »
Бесполезно рассказывать о высоком моральном облике коллектива человеку, имеющему доступ к логу прокси....

Оффлайн ADL

  • Активист
  • *
  • Сообщений: 447
    • Просмотр профиля
Re: Ограничение числа коннектов с одного IP
« Ответ #2 : 19 Августа 2008, 13:19:05 »
iptables -A INPUT -p tcp --dport 80 -m iplimit --iplimit-above 100  -j REJECT
iptables v1.3.8: Couldn't load match `iplimit':/lib/iptables/libipt_iplimit.so: cannot open shared object file: No such file or directory

POM то установлен?

http://netfilter.org/documentation/HOWTO//netfilter-extensions-HOWTO.html#toc3.5

Оффлайн Kost

  • Новичок
  • *
  • Сообщений: 29
  • UNIX the power to set your computer free
    • Просмотр профиля
Re: Ограничение числа коннектов с одного IP
« Ответ #3 : 19 Августа 2008, 15:17:05 »
filename:       /lib/modules/2.6.24-19-server/kernel/net/netfilter/xt_limit.ko
alias:          ip6t_limit
alias:          ipt_limit
description:    iptables rate limit match
author:         Herve Eychenne <rv@wallfire.org>
license:        GPL
srcversion:     B8085FDB2E134975FE644A6
depends:        x_tables
vermagic:       2.6.24-19-server SMP mod_unload 686

Возможно с этим модулем работать будет
« Последнее редактирование: 19 Августа 2008, 15:22:19 от Kost »
Бесполезно рассказывать о высоком моральном облике коллектива человеку, имеющему доступ к логу прокси....

Оффлайн kiev

  • Автор темы
  • Активист
  • *
  • Сообщений: 412
    • Просмотр профиля
    • Соционическое типирование и консультирование
Re: Ограничение числа коннектов с одного IP
« Ответ #4 : 21 Августа 2008, 00:00:30 »
спасибо, ничего не установлено, но хотелось бы стандартными средствами что бы не изобретать велосипед если он уже есть

Оффлайн m.osipov

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Ограничение числа коннектов с одного IP
« Ответ #5 : 30 Марта 2009, 20:26:25 »
Соответствие hashlimit

Модуль hashlimit является прямым наследником limit  <...>

А Вы реально с ним работали? У меня стоит задача: ограничить исходящую полосу сервера для любого ip. То есть любой посетитель сайта, скачивающий с него файл, должен получить не более 1мбит/с, например.

По идее с помощью hashlimit это сделать элементарно.

-А OUTPUT -m hashlimit --hashlimit 20/second --hashlimit-burst 20 --hashlimit-mode dstip --hashlimit-name wwwhash --hashlimit-htable-expire 100000 -j ACCEPT
-A OUTPUT -j DROP

Это довольно общее правило, которое по идее должно давать каждому ip 20пакетов/c, то есть не более 30Кбайт/с при размере пакета 1,5Кб.
В реальности у меня скорость скачет по синусоиде от 50 до 1000Кбайт/с. Может кто-нибудь объяснить, что я не так сделал?

 

Страница сгенерирована за 0.024 секунд. Запросов: 20.