Считается ли использование iptables для ограничения скорости на порту 80 расточительством?

Считается ли использование iptables для ограничения скорости на порту 80 расточительством?

Я думал добавить следующее правило в свои таблицы IP:

-A INPUT -p tcp -m state --state NEW -m recent --update --dport 80 --seconds 5 --hitcount 10 -j DROP
-A INPUT -p tcp -m state --state NEW -m recent --set --dport 80 -j ACCEPT

чтобы избежать случайного злоупотребления Ajax (слишком много запросов) моим веб-API.

Считается ли этот тип фильтрации с отслеживанием состояния ресурсоемким или иным образом расточительным из-за распространенности запросов порта 80 (по сравнению с чем-то вроде ограничения скорости порта 22, что привело бы к гораздо меньшему количеству состояний)? Я понимаю, что сделать это в выделенном брандмауэре было бы идеально, но я пытаюсь понять, что я могу сделать на своем сервере.

решение1

Я не знаю, какова производительность использования модуля состояния по сравнению с фильтрацией SYN-пакетов (которая, по сути, сделала бы тот же самый трюк).

Возможно, вы можете это проверить... попробуйте добавить свое правило - а затем используйте Apache Bench или что-то подобное, чтобы сгенерировать как можно больше запросов, одновременно отслеживая использование ЦП и памяти вашего сервера. Затем попробуйте добавить следующее правило:

-N tcpsyn
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j tcpsyn

-A tcpsyn -p tcp --dport 80 -m limit --limit 5/second --limit-burst 20 -j RETURN
-A tcpsyn -p tcp --dport 80 -j DROP

... и сравнительный анализ.

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