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

Разумные настройки ограничения скорости с брандмауэром PF

У меня есть следующие настройки в моем pf.conf, чтобы отговорить оскорбительных клиентов (у меня есть несколько в день, которые, очевидно, просто очищают контент без разбора и все замедляют):

pass in on $ext_if proto tcp to { $loadbalancer1_int } port $web_ports flags S/SA keep state (max-src-conn 80, max-src-conn-rate 200/5, overload <web_flood> flush)
pass in on $ext_if proto tcp to { $loadbalancer2_int } port $web_ports flags S/SA keep state (max-src-conn 80, max-src-conn-rate 200/5, overload <web_flood> flush)

К сожалению, некоторые из моих клиентов блокируются. Я не знаю, что делают эти клиенты, чтобы инициировать такой сетевой ввод-вывод. Я продолжаю повышать ценности, а они продолжают блокироваться. Разве эти значения (80 подключений и 200 подключений в течение 5 секунд) не соответствуют тому, что обычно считается «оскорбительным»?

«оскорбительный» - это относительное понятие, но с точки зрения доступа к сети установка ограничения скорости на количество подключений в секунду почти наверняка уловит законных пользователей.

Помните, что происходит, когда вы посещаете веб-страницу

  1. Открывается HTTP-соединение и главная страница (скажем, index.html) скачивается.
  2. Ваш браузер анализирует index.html и выясняет, какие еще ресурсы ему нужны:
    • CSS
    • Javascript
    • Изображений
    • Поместить в или (больше "главных страниц")
    • Наверное, я еще кое-что забыл
  3. Ваш браузер получает все эти элементы.
    Это можно сделать двумя способами "
    • Последовательно: загрузка каждого элемента по порядку (одно соединение за раз)
    • Параллельно: загрузка нескольких элементов одновременно (несколько открытых подключений).

HTTP keepalive теоретически снижает количество циклов connect (), но некоторые браузеры могут не поддерживать HTTP keepalive (или могут решить не использовать его по какой-либо причине), и в этом случае каждый загружаемый элемент означает, что к серверу открывается другое соединение.

Поэтому одна веб-страница потенциально представляет собой огромное количество подключений - достаточно легко, чтобы отключить ваш брандмауэр, особенно если у вас есть более одного пользователя на IP или ваши пользователи активно просматривают.


У вас есть несколько вариантов вместо того, чтобы блокировать одеяло:

  1. Отметить соответствующие пакеты в pf и ограничьте их пропускную способность с помощью altq.
    Это не совсем идеально - вы все равно поймаете законных пользователей - но, по крайней мере, они задушены (медленно), а не заблокированы (сломаны).

  2. Использовать mod_evasive, mod_security или похожие
    Эти модули больше подходят для Apache, но они более настраиваемы и помогут вам избежать ловли легальных пользователей.