Ajuste fino do Wallarm Ingress Controller baseado em NGINX¶
Aprenda as opções de ajuste fino disponíveis para o Wallarm Ingress controller para obter o máximo da solução Wallarm.
Documentação oficial para NGINX Ingress Controller
O ajuste fino do Wallarm Ingress Controller é bastante semelhante ao do NGINX Ingress Controller descrito na documentação oficial. Ao trabalhar com Wallarm, todas as opções para configurar o NGINX Ingress Controller original estão disponíveis.
Configurações adicionais para Helm Chart¶
As configurações são definidas no arquivo values.yaml
. Por padrão, o arquivo é assim:
controller:
wallarm:
enabled: false
apiHost: api.wallarm.com
apiPort: 443
apiSSL: true
token: ""
nodeGroup: defaultIngressGroup
existingSecret:
enabled: false
secretKey: token
secretName: wallarm-api-token
tarantool:
kind: Deployment
service:
annotations: {}
replicaCount: 1
arena: "1.0"
livenessProbe:
failureThreshold: 3
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources: {}
metrics:
enabled: false
service:
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: /wallarm-metrics
prometheus.io/port: "18080"
## Lista de endereços IP onde o serviço stats-exporter está disponível
## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
##
externalIPs: []
loadBalancerIP: ""
loadBalancerSourceRanges: []
servicePort: 18080
type: ClusterIP
synccloud:
resources: {}
collectd:
resources: {}
Para alterar essa configuração, recomendamos o uso da opção --set
de helm install
(ao instalar o controlador de Ingress) ou helm upgrade
(ao atualizar os parâmetros do controlador de Ingress instalado). Por exemplo:
Uma descrição dos principais parâmetros que você pode configurar é fornecida abaixo. Outros parâmetros vêm com valores padrão e raramente precisam ser alterados.
controller.wallarm.enabled¶
Permite habilitar ou desabilitar as funções Wallarm.
Valor padrão: false
controller.wallarm.apiHost¶
Ponto de extremidade API Wallarm. Pode ser:
-
us1.api.wallarm.com
para a nuvem dos EUA. -
api.wallarm.com
para a nuvem da UE,
Valor padrão: api.wallarm.com
controller.wallarm.token¶
Um valor de token de nó de filtragem. É necessário para acessar a API de Wallarm.
O token pode ser um desses tipos:
-
Token de API (recomendado) - Ideal se você precisar adicionar/remover dinamicamente grupos de nó para organização de UI ou se quiser controlar o ciclo de vida do token para segurança adicional. Para gerar um token de API:
Para gerar um token de API:
- Vá para Wallarm Console → Configurações → Tokens de API em Nuvem de EUA ou Nuvem da UE.
- Crie um token de API com a função Deploy.
- Durante a implantação do nó, use o token gerado e especifique o nome do grupo usando o parâmetro
controller.wallarm.nodeGroup
. Você pode adicionar vários nós a um grupo usando diferentes tokens de API.
-
Token de nó - Adequado quando você já sabe os grupos de nó que serão utilizados.
Para gerar um token de nó:
- Vá para Wallarm Console → Nós em Nuvem de EUA ou Nuvem da UE.
- Crie um nó e nomeie o grupo de nó.
- Durante a implantação do nó, use o token do grupo para cada nó que você deseja incluir no grupo.
O parâmetro é ignorado se controller.wallarm.existingSecret.enabled: true
.
Valor padrão: não especificado
controller.wallarm.nodeGroup¶
A partir da versão 4.6.8 do Helm chart, isso especifica o nome do grupo de nós de filtragem que você deseja adicionar aos nós recentemente implantados. O agrupamento de nós desta maneira está disponível apenas quando você cria e conecta nós à Cloud usando um token de API com o papel Deploy (seu valor é passado no parâmetro controller.wallarm.token
).
Valor default: defaultIngressGroup
controller.wallarm.existingSecret¶
A partir da versão 4.4.1 do Helm chart, você pode usar este bloco de configuração para buscar um valor de token de nó Wallarm dos segredos do Kubernetes. Isso é útil para ambientes com gerenciamento de segredo separado (por exemplo, você usa um operador de segredos externos).
Para armazenar o token de nó no K8s secrets e puxá-lo para o Helm chart:
-
Crie um segredo Kubernetes com o token de nó Wallarm:
kubectl -n <KUBERNETES_NAMESPACE> create secret generic wallarm-api-token --from-literal=token=<WALLARM_NODE_TOKEN>
<KUBERNETES_NAMESPACE>
é o namespace Kubernetes que você criou para o lançamento do Helm com o controlador Wallarm Ingress.wallarm-api-token
é o nome do segredo Kubernetes<WALLARM_NODE_TOKEN>
é o valor do token de nó Wallarm copiado da interface de usuário do Console Wallarm.
Se estiver usando algum operador de segredos externos, siga a documentação apropriada para criar um segredo.
-
Defina a seguinte configuração em
values.yaml
:
Valor padrão: existingSecret.enabled: false
que aponta para o Helm chart obter o token de nó Wallarm de controller.wallarm.token
.
controller.wallarm.tarantool.replicaCount¶
O número de pods em execução para postanalyics. Postanalytics é utilizado para a detecção de ataque baseada em comportamento.
Valor padrão: 1
controller.wallarm.tarantool.arena¶
Especifica a quantidade de memória alocada para o serviço postanalyics. Recomenda-se configurar um valor suficiente para armazenar dados de solicitação dos últimos 5 a 15 minutos.
Valor padrão: 0.2
controller.wallarm.metrics.enabled¶
Este interruptor alterna a coleta de informações e métricas. Se Prometheus estiver instalado no cluster Kubernetes, nenhuma configuração adicional será necessária.
Valor padrão: false
Configurações Globais do Controlador¶
Implementado via ConfigMap.
Além dos padrão, os seguintes parâmetros adicionais são suportados:
Anotações de Ingressos¶
Essas anotações são usadas para configurar os parâmetros de processamento para instâncias individuais do Ingress.
Além das padrão, as seguintes anotações adicionais são suportadas:
-
nginx.ingress.kubernetes.io/wallarm-mode, padrão: off
Aplicando anotação ao recurso Ingress¶
Para aplicar as configurações ao seu Ingress, por favor use o seguinte comando:
kubectl annotate --overwrite ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> <ANNOTATION_NAME>=<VALUE>
-
<YOUR_INGRESS_NAME>
é o nome do seu Ingress -
<YOUR_INGRESS_NAMESPACE>
é o namespace do seu Ingress -
<ANNOTATION_NAME>
é o nome da anotação da lista acima -
<VALUE>
é o valor da anotação da lista acima
Exemplos de anotação¶
Configurando a página de bloqueio e o código de erro¶
A anotação nginx.ingress.kubernetes.io/wallarm-block-page
é usada para configurar a página de bloqueio e o código de erro retornado na resposta à solicitação bloqueada pelos seguintes motivos:
-
A solicitação contém cargas úteis maliciosas dos seguintes tipos: ataques de validação de entrada, ataques de vpatch ou ataques detectados com base em expressões regulares.
-
A solicitação contendo cargas úteis maliciosas da lista acima se origina do endereço IP na lista cinza e o nó filtra as solicitações no modo seguro de bloqueio.
-
A solicitação se origina do endereço IP na lista de negação.
Por exemplo, para retornar a página padrão de bloqueio do Wallarm e o código de erro 445 na resposta a qualquer solicitação bloqueada:
kubectl annotate ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> nginx.ingress.kubernetes.io/wallarm-block-page="&/usr/share/nginx/html/wallarm_blocked.html response_code=445 type=attack,acl_ip,acl_source"
Mais detalhes sobre os métodos de configuração da página de bloqueio e do código de erro →
Gerenciando o modo libdetection¶
Modo padrão libdetection
O modo padrão da biblioteca libdetection é on
(habilitado).
Você pode controlar o modo libdetection usando uma das opções:
-
Aplicando a seguinte anotação
nginx.ingress.kubernetes.io/server-snippet
ao recurso Ingress: -
Passe o parâmetro
controller.config.server-snippet
para o Helm chart:helm install --set controller.config.server-snippet='wallarm_enable_libdetection off;' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>
Existem também outros parâmetros necessários para a instalação correta do controlador de Ingress. Por favor, passe-os na opção
--set
também.