LINUX.ORG.RU
решено ФорумAdmin

аналог ipset для iptables -m limit

 ,


0

1

Добрый день.

Нужно сократить количество однотипных правил в iptables. Обычно это делаю через ipset но в этот раз не помогает.

в ipset создана таблица, допустим TABLE с типом hash:ip через ipset в нее заносятся ip ipset -A TABLE ip-адрес

список правил

iptables -A FORWARD –protocol all –destination ip-адрес -m limit –limit 1/s –limit-burst 1 -j ACCEPT iptables -A FORWARD –destination ip-адрес -j DROP

работает нормально, но их нужно очень много

Пробую ограничить прохождение трафика по одному пакету в секунду двумя правилами:

iptables -A FORWARD -m set –match-set TABLE dst -m limit –limit 1/s –limit-burst 1 -j ACCEPT iptables -A FORWARD -m set –match-set TABLE dst -j DROP

но вместо того что бы эти два правила работали параллельно они работают как одно, просто учитывают перечисленные в TABLE ip

Возможно это надо делать как-то иначе так что бы не было много правил?


https://making.pusher.com/per-ip-rate-limiting-with-iptables/

TL;DR - используй hashlimit вместо limit. В комбинации с ipset это даст то что ты хочешь(если я правильно тебя понял) - отдельный лимит на каждый ip из ipset, а не на всю группу ip сразу

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)

но вместо того что бы эти два правила работали параллельно они работают как одно, просто учитывают перечисленные в TABLE ip

Ты уверен, что правильно правильно понимаешь работу limit?

«limit» не смотрит на адреса пакета, т.ч. в варианте с ipset у тебя ограничиваются все адреса из набора до 1pps.

Про hashlimit тебе уже подсказали.

vel ★★★★★
()
Ответ на: комментарий от Pinkbyte

Не получается прикрутить ipset к hashlimit

Если прописывать построчно то многопоточность работает только если для каждого ip ставить разное имя

-m hashlimit –hashlimit 1/s –hashlimit-burst 1 –hashlimit-name NAME1

-m hashlimit –hashlimit 1/s –hashlimit-burst 1 –hashlimit-name NAME2

если же задавать

-m hashlimit –hashlimit 1/s –hashlimit-burst 1 –hashlimit-name NAME

-m hashlimit –hashlimit 1/s –hashlimit-burst 1 –hashlimit-name NAME

то работает для какого-то одного ip а другие блокируются

и с ipset

-m set –match-set TABLE dst -m hashlimit –hashlimit 1/s –hashlimit-burst 1 –hashlimit-name NAME

работает так же для какого-то одного ip а другие блокируются

–hashlimit-htable-size и –hashlimit-htable-expire непонятно на что влияют но изменение их значений не исправляет ситуацию

Izolda
() автор топика
Ответ на: комментарий от Izolda

Прочитай внимательно в man iptables-extensions hashlimit про --hashlimit-mode, --hashlimit-srcmask и --hashlimit-dstmask

Состояние хеша видно в /proc/net/ipt_hashlimit/NAME

vel ★★★★★
()
Ответ на: комментарий от sparks

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

Izolda
() автор топика
Ответ на: комментарий от vel

Так:

-m set –match-set TABLE dst -m hashlimit –hashlimit 1/s –hashlimit-burst 1 –hashlimit-name NAME –hashlimit-mode dstip –hashlimit-dstmask 32

заработало.

Огомное спасибо.

Izolda
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.