Хочу отрегулировать количество обращений к серверу в единицу времени. Подумал-подумал, решил сделать силами iptables. Из соображений универсальности..
Знаю, что про это много написано, но хотелось бы поделиться опытом (Чужим :))))
Есть сервер. Интернет снаружи, локалка с внутренними адресами и маскарадингом внутри. Sendmail, vsftpd, pop3d, named, apache/etc/sysconfig/iptables
...маскарадинг..
:INPUT DROP [2039:115993]
:FORWARD DROP [90:30180]
:OUTPUT DROP [1154409:741683096]
#-A INPUT -p tcp -m recent --set
-A INPUT -p tcp -m recent --update --seconds 30 --hitcount 10 -j REJECT
...дальше много правил...
Как видно из текста скрипта, ограничение идет на все скопом, без уточнения порта
Вопросы: Если строка с --set не активизирована, правило вообще не работает? Из прочтения man явно следует, что --update заменяет --set, но еще и обновляет запись. На практике (кажется) получается, что без --set правило не пашет... Все так?
Есть соображения, что использовать для таких целей iptables хуже, чем каждого конкретного сервера своими силами? Ну там падение производительности и тп..
Я не уточнил порт. Мне сложно проверить технически последствия этого для "наружных" пользователей. Есть идеи сколько соединений в минуту может осуществлять "хороший" наружный пользователь? Ну что он может за минуту сделать... Если он с мотором: проверить почту, зайти на ftp, зайти на сайт и побродить там. Вот тут я в муках! Делать учет только новых соединений? А не бывает ли атак/сканирований в ESTABLISHED? Если учитывать все соединения, то не может ли нормальный юзер тыкать мышкой по ссылкам сайта с той же скоростью, что робот подбирает пароли к ftp например.. Понимаю, что последний вопрос несколько странный, но может кто-то думал на эту тему..
Заранее спасибо!