Jump to content
Калькуляторы

Ограничить количество UDP сессий от каждого ip на Linux роутере

Существует Linux роутер, хочется ограничить количество одновременных UDP сессий от каждого из ip адресов.

 

Для протокола TCP успешно используется connlimit в iptables.

 

Пока придумал только такой вариант

 

-A FORWARD -p udp -m udp -m state --state NEW -m recent --set --name UDPFLOOD --rsource

-A FORWARD -p udp -m udp -m state --state NEW -m recent --update --seconds 60 --hitcount 100 --rttl --name UDPFLOOD -j DROP

 

но он не полностью решает задачу поставленную в начале поста.

 

мне кажется, что должно быть решение попроще.

 

Заранее огромное спасибо.

Edited by _INF_

Share this post


Link to post
Share on other sites

-A FORWARD -s 192.168.1.0/24 -p udp -m connlimit --connlimit-above 99 --connlimit-mask 32 -j DROP

Share this post


Link to post
Share on other sites
-A FORWARD -s 192.168.1.0/24 -p udp -m connlimit --connlimit-above 99 --connlimit-mask 32 -j DROP
"Не для всех", к сожалению.. :(

iptables v1.3.8: Couldn't load match `connlimit':/lib/iptables/libipt_connlimit.so: cannot open shared object file: No such file or directory

 

To _INF_ - а чем плоха ваша конструкция?

Share this post


Link to post
Share on other sites
"Не для всех", к сожалению.. :(

To _INF_ - а чем плоха ваша конструкция?

С ядром поиграйте..

Изначальный пример хуже тем, что для каждого IP нужно отдельное правило.

Share this post


Link to post
Share on other sites
"Не для всех", к сожалению.. :(

To _INF_ - а чем плоха ваша конструкция?

С ядром поиграйте..
Да знаю.. Пытался уже.. Но в лоб не получилось, ядро старое (2.6.18), плюс ко всему не ванильное, патча не нашел.. Вообщем, все плохо с connlimit..
Изначальный пример хуже тем, что для каждого IP нужно отдельное правило.
А вот это не понял.. Где это там IP вообще??

Share this post


Link to post
Share on other sites
-A FORWARD -s 192.168.1.0/24 -p udp -m connlimit --connlimit-above 99 --connlimit-mask 32 -j DROP

connlimit только с TCP работает.

 

To _INF_ - а чем плоха ваша конструкция?

1. Съедает много ресурсов системы

2. Через seconds можно новые соединения устанавливать, не прибивая старых

Share this post


Link to post
Share on other sites
-A FORWARD -s 192.168.1.0/24 -p udp -m connlimit --connlimit-above 99 --connlimit-mask 32 -j DROP

connlimit только с TCP работает.

Вроде как только TCP было в старых версиях. В новых упоминание TCP из мануала убрали, просто подключения.

Share this post


Link to post
Share on other sites

не силён в линуксе, но "просто подключения" подразумивают именно tcp, т.к. в udp нету понятия полдключение, сессия и т.д.

Share this post


Link to post
Share on other sites
To _INF_ - а чем плоха ваша конструкция?
1. Съедает много ресурсов системы

2. Через seconds можно новые соединения устанавливать, не прибивая старых

Не помню уже где, но видел в Инете мнение, что как раз recent кушает значительно меньше, нежели conntrack. Т.е. вроде как самое "экономичное" решение..

Насчет п.2 понятно, тут прокомментировать не могу, не силен в тонкостях iptables...

Share this post


Link to post
Share on other sites
не силён в линуксе, но "просто подключения" подразумивают именно tcp, т.к. в udp нету понятия полдключение, сессия и т.д.
Просто открытый сокет? у UDP с этим всё сложнее, но тем не менее, отследить можно.

 

Проверил грубо, --connlimit-above 0 с правильным remote-ip ловит одиночные пакеты, --connlimit-above 1 не ловит; --connlimit-above 0 с левым remote-ip не ловит.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this