Параметр source-track
применяется к каждому правилу, поэтому вы не ограничиваете «Google до X запросов в день», вы ограничиваете каждый отдельный адрес этим пределом. .
Я предлагаю вам два решения. Один простой и приблизительный, другой сложнее и острее.
Решение 1
Преобразуйте условие так, чтобы все интересующие серверы соответствовали одному правилу. Самый простой подход - использовать спецификацию CIDR, например:
pass out on vte0 inet proto tcp from any to 173.194.44.80/29 port http keep state (source-track rule, max-src-conn 200, max-src -conn-rate 17500/86400, src.track 86400)
Это соответствует узлам с 173.194.44.80 по 173.194.44.86: на два больше, чем вы хотите. Вы получаете 99% цели при 10% сложности. В большинстве случаев я бы пошел этим путем. Этот конкретный случай особенный, потому что Google - одна из 2-3 организаций в мире, которые владеют множеством сетевых блоков и часто повторно назначают свои адреса. Для работы с google, yahoo и т. Д. Я бы не стал прибегать к этому решению.
Решение 2
Используйте тег
, очень красивое свойство PF. Теги позволяют наклеить заметку на пакет и применить правила позже на его основе. Вот пример для вашего случая:
передать vte0 proto tcp с любого порта http на www.google.com TOGOOGLE
передать быстро на vte0 proto tcp tagged TOGOOGLE сохранить состояние (правило исходной дорожки, max-src-conn 200, max-src-conn-rate 17500/86400, src.track 86400)
Дополнительные примечания
флаги S / SA
: это значение по умолчанию для соединений с отслеживанием состояния