Я думал добавить следующее правило в свои таблицы 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
... и сравнительный анализ.