F5 Filtragem de pacotes ou iRules ou ambos?

1

Eu preciso configurar um filtro personalizado para um host virtual que requer verificações de endereço IP e verificação de URL. Assim:

_if_  _(_ http-request matches url _and_ ip is from certain host/net range _)_  
      _or_ ip is     from a certain VIP range _then_ let the request through  

Eu gostaria de tentar mover as verificações de IP para os filtros de pacotes e fazer a verificação de IP duas vezes (para ignorar as verificações de URL para o intervalo VIP) ou está tudo bem deixá-lo dentro do desempenho do íleo?

    
por iddqd 03.04.2013 / 06:22

2 respostas

1

Isso é muito comum em um iRule e, a menos que você tenha um BIG-IP muito carregado, você não deve ter um problema.

Se estiver preocupado, você pode ativar os horários do iRule para ver quantos ciclos de CPU estão sendo usados pela regra. O DevCentral tem um artigo antigo, mas bom, sobre como fazer isso . A única parte desatualizada é na v11 que você vai querer tmsh em vez de bigpipe (por exemplo, "regra de show / ltm").

Se você realmente quiser evitar iRules, um método alternativo é a Classe HTTP (Tráfego Local > Perfis > Protocolo > Classe HTTP), porém isso é classificado por URI e não por IP de origem. Ele permite que você envie URIs correspondentes a um pool diferente ou retorne um redirecionamento. Você pode combinar isso com o novo atributo Source em Virtual Servers na versão 11.3 para criar vários Virtual Servers, cada um manipulando somente o tráfego de uma rede específica.

No entanto, se você tiver muitos intervalos de fonte para cobrir, eu usaria apenas um iRule e um tipo de endereço Data Group (use o comando "match class .. equal" para procurar o IP do cliente no Data Group um pouco como você faria com uma tabela de roteamento).

Os Filtros de Pacotes são brutais e causam timeouts para o cliente, enquanto as opções de Classe HTTP ou iRule permitem que você escolha se deseja descartar a solicitação, escolher um pool diferente, retornar um redirecionamento ou retornar uma página de erro.

    
por 16.05.2013 / 12:31
2

Eu faria tudo em um iRule.

Veja um exemplo que executa as ACLs da camada 4 por servidor virtual:

link

Você pode verificar o IP do cliente em relação a um grupo de dados em CLIENT_ACCEPTED e, em seguida, verificar o URI em HTTP_REQUEST usando [HTTP :: uri].

Veja um exemplo usando o comando class:

link

when CLIENT_ACCEPTED {
    # Check if the client IP is in the allowed_hosts_dg data group
    if {[class match [IP::client_addr] equals allowed_hosts_dg]}{
        set allowed_ip 1
    } else {
        set allowed_ip 0
    }
}
when HTTP_REQUEST {
    # If the client is a legal source IP check if the HTTP path is in the allowed_paths_dg data group
    if {$allowed_ip == 1 && [class search allowed_paths_dg contain [string tolower [HTTP::path]]]}{
        # allow the request
    } else {
        # Send a 403 blocking response
        HTTP::respond 403 content {Illegal request!}
    }
}

Aaron

    
por 31.05.2013 / 02:52