Назад | Перейти на главную страницу

Проблема с модулем ограничения скорости iptables

Я использую модуль ограничения скорости iptables для предотвращения DoS-атак (я знаю, что он не может остановить полномасштабные DDoS-атаки, но, по крайней мере, он может помочь с меньшими атаками).

В моих правилах есть что-то вроде:

/sbin/iptables -A INPUT -p TCP -m state --state NEW -d xx.xxx.xxx.xx --dport 80 -m limit --limit 20/minute --limit-burst 20 -j ACCEPT

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

Я не понимаю, почему так произошло. Я думал, что это не повлияет на других пользователей, кроме того, который наводняет сервер.

Это потому, что iptables перегружен?

Любая обратная связь будет принята с благодарностью.

Спасибо!

Он также отключает трафик для законных пользователей, потому что вы не указали исходный IP-адрес для применения этого правила. Если вы изменили правило, чтобы иметь адрес источника, вы тогда ограничили бы этот конкретный адрес RateLimit. Согласно вашему правилу, RateLimit действует для всех адресов.

У меня есть настройка RateLimit для ограничения всех IP-адресов, кроме тех, которые указаны в определенных правилах. Моя конфигурация следующая:

  • -I ВВОД -m tcp -p tcp --dport 80 -d xx.xxx.xx.xx -j ПРИНЯТЬ

  • -A INPUT -m tcp -p tcp --dport 80 -m hashlimit --hashlimit-upto 400 / min --hashlimit-burst 500 --hashlimit-mode srcip --hashlimit-name ratelimit -j ACCEPT

  • -A ВХОД -p tcp -m tcp --dport 80 -j RateLimit

Затем у меня есть несколько правил, например

  • -A RateLimit -s xx.xxx.xx.x -j ПРИНЯТЬ

Это разрешит обмен данными через порт 80 с настроенным ограничением количества подключений и пакетным сигналом, а также ограничением по IP-адресу источника (параметр --hashlimit-mode srcip). IP-адреса будут проверены на наличие в RateLimit (--hashlimit-name ratelimit).

Возможно, что-то подобное - это то, что вы ищете?

В вашем правиле не указано конкретное происхождение. После принятия 20 НОВЫХ подключений в минуту он перестает принимать НОВЫЕ подключения.

Вам нужно использовать recent модуль, чтобы iptables запоминал, откуда приходят соединения, и блокировал людей, которые слишком быстро подключаются с одного и того же адреса. Для этого нужны два правила: одно для iptables, чтобы «узнать» адрес, а второе для iptables, чтобы узнать, сколько раз этот адрес попадал на сервер за указанное время:

/sbin/iptables -A INPUT -p TCP -m state --state NEW -d xx.xxx.xxx.xx --dport 80 -m recent --set
/sbin/iptables -A INPUT -p TCP -m state --state NEW -d xx.xxx.xxx.xx --dport 80 -m recent --update --seconds 60 --hitcount 20 -j DROP

Эта статья входит в более подробную информацию.