A opção source-track
se aplica por regra, portanto, se você não estiver restringindo "Google a X req / day", estará restringindo cada endereço individual a esse limite.
Dou-lhe duas soluções aqui. Uma é simples e aproximada, a outra é mais difícil e mais nítida.
Solução 1
Transforme a condição para corresponder todos os servidores de interesse em uma regra. A abordagem mais simples é usar uma especificação CIDR, por exemplo:
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)
Isso corresponde aos hosts 173.194.44.80 a 173.194.44.86: mais dois do que você deseja. Você obtém 99% do objetivo com 10% da complexidade. Para a maioria dos casos eu iria por este caminho. Esse caso específico é particular porque o Google é uma das organizações de 2 a 3 no mundo que possui um grande número de redes e que frequentemente reafirma seus endereços. Para lidar com o google, yahoo etc eu não iria para esta solução.
Solução 2
Use tag
, uma beleza muito própria do PF. As tags permitem que você insira uma nota em um pacote e aplique regras posteriormente, com base nela. Veja um exemplo para o seu caso:
pass out on vte0 proto tcp from any to 'www.google.com' port http tag TOGOOGLE
pass out quick on vte0 proto tcp tagged TOGOOGLE keep state (source-track rule, max-src-conn 200, max-src-conn-rate 17500/86400, src.track 86400)
Notas laterais
- você não precisa mais de
flags S/SA
: é o padrão para conexões com estado - especificar regras de firewall que correspondam por nome de host é perigoso