---
name: azion-execute-uma-funcao-em-um-firewall
description: >-
  Crie uma função que é executada em um firewall, instancie-a e adicione a regra do Rules Engine que a aciona.
---

# Execute uma função em um firewall

Você pode criar uma função, instanciá-la em um firewall e acioná-la com uma regra do Rules Engine. Todos os passos são executados em Azion Console. Para instanciar uma função em um firewall pela Azion API, consulte [Instancie uma função em um firewall](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/instanciar-functions/). Para executar uma função em uma aplicação, consulte [Execute uma função em uma aplicação](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/functions-e-runtime/funcoes-serverless/).

---

## Pré-requisitos

- Uma conta Azion. Para criar uma, consulte [Como criar uma conta na Azion](/pt-br/documentacao/fundamentos/criar-uma-conta/).
- A permissão **Edit Functions** na conta. Ela concede permissão para criar, editar e remover funções, e também requer a permissão **View Functions**.
- A permissão **Edit Firewall** na conta. Ela concede permissão para visualizar, criar, editar e remover um firewall, e também requer a permissão **View Firewall**. Consulte [Teams Permissions](/pt-br/documentacao/fundamentos/teams-permissions/).

---

## Crie a função

Uma função é executada em um firewall quando ela exporta um handler `firewall`. Para criar a função:

1. **Abra a página Functions**

   Acesse [Azion Console](https://console.azion.com/) > **Products Menu** > **Libraries** > **Functions**.

2. **Selecione + Function**

3. **Nomeie a função**

   Digite um nome para a função. Por exemplo: `deny-request`.

4. **Cole o código na aba Code**

   Na aba **Code**, cole o código a seguir:

   ```javascript
   export default {
     firewall: (request, env, ctx) => {
       ctx.deny();
     }
   };
   ```

5. **Selecione Save**

A função é salva e fica disponível para ser instanciada em um firewall.

O handler `firewall` define o desfecho da requisição. `ctx.deny()` encerra a requisição com uma resposta HTTP `403 Forbidden`. Quando o handler não chama `ctx.deny()`, a requisição segue para o handler `fetch`. Para os outros desfechos que uma função de firewall retorna, consulte [Functions no Firewall](/pt-br/documentacao/plataforma/firewall/functions/).

> **dica**
>
> O exemplo usa o padrão ES Modules. Para migrar uma função do padrão Service Worker para esse padrão, consulte [Migre padrões de handler em Functions](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/functions-e-runtime/migrar-padroes-de-handler/).

---

## Crie o firewall

Um firewall executa uma função apenas com o módulo **Functions** ativado. Para criar o firewall:

1. **Abra a página Firewall**

   Em Azion Console, vá para **Products Menu** > **Firewall**.

2. **Selecione + Firewall**

3. **Nomeie o firewall**

   Digite um nome para o firewall. Por exemplo: `deny-request firewall`.

4. **Selecione os domínios que o firewall protege**

   No campo **Domains**, selecione os domínios a associar ao firewall.

5. **Ative o módulo Functions**

6. **Ative o switch Active**

7. **Selecione Save**

O firewall é salvo, e as abas **Functions Instances** e **Rules Engine** ficam disponíveis na mesma página.

> **nota**
>
> Para usar um firewall que já existe, abra-o e ative o módulo **Functions** na aba **Main Settings**.

---

## Instancie a função no firewall

Uma instância de função vincula a função a um firewall. Para criar a instância:

1. **Vá para a aba Functions Instances**

   No firewall que você criou, vá para a aba **Functions Instances**.

2. **Selecione + Function Instance**

3. **Nomeie a instância**

   Digite um nome para a instância. Por exemplo: `deny-request instance`.

4. **Selecione a função**

   Selecione a função `deny-request`. Apenas as funções com **Initiator Type** definido como *Firewall* aparecem na lista.

5. **Selecione Save**

A instância aparece na aba **Functions Instances**. Ela não é executada até que uma regra do Rules Engine a selecione.

---

## Adicione a regra que executa a função

Uma regra do Rules Engine define os critérios que acionam a instância. Para executar a instância em requisições cuja URI começa com `/admin`:

1. **Vá para a aba Rules Engine**

   No mesmo firewall, vá para a aba **Rules Engine**.

2. **Selecione + Rule**

3. **Nomeie a regra**

   Digite um nome para a regra. Por exemplo: `Run deny-request`.

4. **Selecione a variável na seção Criteria**

   Na seção **Criteria**, selecione a variável `Request URI`.

5. **Selecione starts with como operador de comparação**

6. **Digite o argumento**

   Digite `/admin` como argumento.

7. **Na seção Behaviors, selecione Run Function**

8. **Selecione a instância que você criou**

9. **Selecione Save**

A regra executa a instância em toda requisição cuja URI começa com `/admin`, e a função responde a essas requisições com uma resposta HTTP `403 Forbidden`. As mudanças podem levar alguns minutos para propagar. Aguarde antes de enviar uma requisição que corresponde aos critérios.

> **Atenção**
>
> A função de exemplo nega toda requisição que a regra corresponde. Defina critérios que selecionam apenas as requisições que você quer bloquear.

---

## Próximos passos

- [Instancie uma função em um firewall](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/instanciar-functions.md): Crie a mesma instância pela Azion API e passe Args para ela em JSON.
- [Functions no Firewall](/pt-br/documentacao/plataforma/firewall/functions.md): Os desfechos que uma função de firewall retorna e os headers de requisição e resposta que ela adiciona.
- [Rules Engine para Firewall](/pt-br/documentacao/plataforma/firewall/rules-engine.md): Todas as variáveis de critério, operadores de comparação e comportamentos que uma regra de firewall aceita.
- [Execute uma função em uma aplicação](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/functions-e-runtime/funcoes-serverless.md): O mesmo caminho em uma aplicação, onde a regra também define a fase de execução.
