Network Lists
Consulte campos, tipos, anotações de item e erros de uma network list, além do critério de regra, das chamadas de API e dos comandos de CLI que a usam.
Uma network list é um conjunto nomeado de endereços IP e intervalos CIDR, de Autonomous System Numbers (ASNs) ou de países. Uma regra de firewall compara o endereço do cliente de uma requisição com a lista por meio do critério Network, que Network Shield disponibiliza no firewall. Criar uma lista não exige um firewall, e uma lista não corresponde a nenhuma requisição até que uma regra em um firewall vinculado a um workload a referencie.
Campos da network list
Uma network list carrega quatro campos que uma requisição define e quatro que a plataforma define e retorna. Uma criação e um PUT precisam enviar name, type e items, enquanto um PATCH envia apenas os campos que altera.
| Campo | Rótulo no Console | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|---|
name | Name | string, de 1 a 250 caracteres | Sim | — | O nome da lista. É a opção que o dropdown Select a Network de uma regra mostra, e pode mudar a qualquer momento. |
type | ASN, IP/CIDR ou Countries | string: ip_cidr, asn ou countries | Sim | — | Define o que são os itens. Tipos de lista traz o formato de item de cada tipo. Azion Console pré-seleciona ASN. |
items | List, ou Countries em uma lista de países | array de 1 a 20.000 strings, cada uma com 1 a 250 caracteres | Sim | — | As entradas que uma regra verifica. Duplicatas exatas são removidas, e o restante é armazenado na ordem de envio. |
active | Nenhum | boolean | Não | true | Se uma regra pode referenciar a lista. Azion Console não tem controle para esse campo. |
id | Nenhum | integer | Somente leitura | — | O identificador que uma regra carrega como argumento de ${network}. |
last_editor | Last Editor | string | Somente leitura | — | O e-mail da conta que alterou a lista pela última vez, ou Azion em uma lista mantida pela Azion. |
last_modified | Last Modified | date-time | Somente leitura | — | Quando a lista foi alterada pela última vez. |
created_at | Nenhum | date-time | Somente leitura | — | Quando a lista foi criada. É null em uma lista mantida pela Azion. |
O type nunca muda depois da criação. Uma atualização que envia outro tipo é recusada com 22002, mesmo quando os itens são válidos para o novo tipo, e Azion Console bloqueia o tipo com a tag The type cannot be changed after the network list is created. Para comparar outro tipo de entrada, crie uma lista desse tipo.
Definir active como false nunca pausa uma regra que usa a lista. Uma lista que uma regra referencia não pode receber false (22003), e uma regra não pode referenciar uma lista com false (25031). Para que uma lista deixe de corresponder a requisições, altere ou exclua as regras que a referenciam.
Uma resposta também carrega version_id, version_state, is_versioned e version, que uma requisição não define.
Uma lista pode ser referenciada por várias regras em vários firewalls. Alterar os itens muda o resultado da comparação em cada uma dessas regras, sem novo deploy. A API grava a mudança na hora, e ela chega ao tráfego à medida que se propaga. Para saber quanto tempo isso leva, consulte Correspondência de listas.
Tipos de lista
O type de uma lista define o formato de cada item nela. Cada tipo tem um valor na API e um rótulo no Console.
| Tipo | Rótulo no Console | Formato do item | Exemplo | Anotações |
|---|---|---|---|---|
ip_cidr | IP/CIDR | Um endereço IPv4 ou IPv6, com ou sem comprimento de prefixo. | 192.0.2.10, 198.51.100.0/24, 2001:db8::/32 | Uma data de expiração e um comentário, conforme Anotações de item. |
asn | ASN | Um Autonomous System Number, apenas dígitos. AS64496 é recusado com 22011. | 64496, do intervalo reservado para documentação. O ASN da própria Azion é 52580. | Nenhuma. Um item com anotação é recusado com 22011. |
countries | Countries | Um código de país ISO 3166-1 alpha-2 com duas letras maiúsculas. br, Brazil e XX são recusados com 22015. | BR | Nenhuma. Um item com anotação é recusado com 22015. |
No Azion Console, o campo List recebe uma entrada por linha para IP/CIDR e ASN. Ele aceita prefixos IPv4 de /0 a /32 e prefixos IPv6 até /128 e, segundo o texto de ajuda, também aceita um ASN escrito como AS13335. O campo verifica cada linha antes de salvar e nomeia cada uma que recusa, com mensagens como --LT must be a valid UTC date and time in the format YYYY-MM-DDTHH:MM:SSZ, add a space before --LT e the --LT date must be in the future. O campo Countries é uma seleção múltipla por nome de país, e Azion Console envia o código de duas letras de cada país selecionado.
Anotações de item
Um item ip_cidr pode carregar uma data de expiração, um comentário ou os dois, depois do endereço. Itens asn e countries não aceitam nenhum deles. Um item com anotação segue esta sintaxe:
A plataforma aceita estes itens e os armazena exatamente como foram enviados:
| Parte | Sintaxe | Restrições |
|---|---|---|
| Data de expiração | --LT e uma data e hora em UTC, YYYY-MM-DDTHH:MM:SSZ | Um espaço antes de --LT, o marcador em maiúsculas, segundos inteiros e um Z no final. Uma data sem hora ou com frações de segundo é recusada com 22007, e um --lt em minúsculas torna o item inválido (22005). |
| Comentário | # e qualquer texto | Por último na linha, depois da data de expiração quando o item carrega os dois. --LT não pode aparecer dentro de um comentário. Uma linha que começa com # é um item inválido (22005), e não uma linha desativada. |
As anotações contam para os 250 caracteres que um item comporta. Sempre que uma requisição grava items, em uma criação ou em uma atualização, a plataforma processa os itens antes de armazená-los:
- Duplicatas exatas são removidas sem aviso. Notações equivalentes não são duplicatas, então
192.0.2.80e192.0.2.80/32são mantidos. - Um item cuja data de expiração já passou é descartado sem aviso. Quando todos os itens estão expirados, a gravação é recusada com
22019. - Os itens restantes são armazenados como foram enviados, com as anotações, na ordem de envio.
A plataforma não remove um item quando a data de expiração dele passa depois da gravação. O item continua armazenado e continua correspondendo a requisições até que uma gravação posterior de items, ou azion update network-list --remove-item, o remova. Para saber como uma data de expiração chega ao tráfego, consulte Correspondência de listas.
Listas mantidas pela Azion
A Azion mantém listas que uma regra de qualquer conta pode referenciar e que nenhuma conta pode alterar. A página Network Lists no Azion Console e GET /v4/workspace/network_lists retornam essas listas ao lado das listas que você cria.
| ID | Nome | Tipo | Mantida por |
|---|---|---|---|
2 | Azion IP Tor Exit Nodes | ip_cidr | Azion |
A lista 2 contém os endereços IP de exit nodes do Tor, e a Azion a fornece a todas as contas. O last_editor dela mostra Azion, e o last_modified muda quando a Azion atualiza os itens. Uma regra a referencia como qualquer lista que você cria, com 2 como argumento de ${network}. Para ver uma regra que a usa, consulte Bloqueie exit nodes do Tor.
Qualquer gravação em uma lista mantida pela Azion é recusada com 22004, mesmo uma gravação que não altera nada.
Contas com Origin Shield também recebem a lista Azion Origin Shield, que contém os prefixos IPv4 e IPv6 que a infraestrutura da Azion usa para se conectar às origens. A página do Origin Shield documenta essa lista e como a Azion anuncia as atualizações dela.
O critério Network
Uma regra de firewall referencia uma network list por meio do critério ${network}. A tabela lista a variável, os dois operadores, o argumento e a configuração de firewall que o critério exige:
| Parte | API | Azion Console | O que faz |
|---|---|---|---|
| Variável | ${network} | Network | Compara o endereço do cliente que enviou a requisição, ou o ASN ou o país desse endereço, com a lista. |
| Operador | is_in_list | matches | É verdadeiro quando o cliente está na lista. |
| Operador | is_not_in_list | does not match | É verdadeiro quando o cliente não está na lista. |
| Argumento | O id da lista, como inteiro JSON | O nome da lista, escolhido em Select a Network | Identifica a lista. Um id enviado como string é recusado com 25042. |
| Requisito | modules.network_protection.enabled definido como true | Main Settings > Modules > Network Shield | O firewall precisa estar com Network Shield ativado, e um firewall novo vem com ele ativado por padrão. Caso contrário, a regra é recusada com 25047, e Azion Console mostra a variável como Network - required Network Shield. Apenas a variável exige Network Shield; os comportamentos que uma regra executa não exigem. |
Uma lista funciona como blocklist com matches e Deny (403 Forbidden), e como allowlist com does not match e o mesmo behavior. Em um corpo de requisição para /v4/workspace/firewalls/{firewall_id}/request_rules, o critério é uma entrada de um bloco criteria:
Para conhecer os outros critérios que uma regra pode encadear com ${network} e os comportamentos que uma regra executa quando corresponde, consulte Rules Engine para Firewall. Para conhecer a janela de contagem e a chave de um rate limit, consulte Set Rate Limit.
API
Toda operação fica sob https://api.azion.com/v4 e carrega um token de Personal Tokens em um header Authorization: Token [TOKEN VALUE]. Uma requisição com corpo também envia Content-Type: application/json. Para mais informações, consulte Primeiros passos com a API da Azion.
| Método | Path | O que faz |
|---|---|---|
GET | /v4/workspace/network_lists | Lista as network lists da conta, incluindo as listas mantidas pela Azion, sem os items. Responde 200. |
POST | /v4/workspace/network_lists | Cria uma lista. Responde 201 com um state igual a executed. |
GET | /v4/workspace/network_lists/{network_list_id} | Retorna uma lista com os items. Responde 200 sem a chave state. |
PUT | /v4/workspace/network_lists/{network_list_id} | Substitui uma lista e exige name, type e items. Responde 200. |
PATCH | /v4/workspace/network_lists/{network_list_id} | Altera os campos que envia. Responde 200. |
DELETE | /v4/workspace/network_lists/{network_list_id} | Exclui uma lista. Responde 200 com um state executed, ou 400 com 22018 enquanto uma regra referencia a lista. |
Um PATCH que envia items substitui o array inteiro em vez de acrescentar itens a ele, então uma atualização envia todos os itens que a lista mantém. Para adicionar ou remover itens avulsos sem reenviar a lista, use --add-item e --remove-item na Azion CLI.
GET /v4/workspace/network_lists aceita estes parâmetros de query, e a resposta carrega count, total_pages, page, page_size, next, previous e results:
| Parâmetro | O que faz |
|---|---|
id | Filtra por id. Aceita valores separados por vírgula. |
name | Filtra por nome, com correspondência parcial que não diferencia maiúsculas de minúsculas. |
last_editor | Filtra pelo último editor, com correspondência parcial que não diferencia maiúsculas de minúsculas. |
last_modified__gte, last_modified__lte | Filtra por uma data de última alteração igual ou posterior, ou igual ou anterior, ao valor. |
list_type__in | Filtra por tipo. Aceita valores separados por vírgula. O parâmetro mantém o nome list_type, embora o campo seja type. |
search | Filtra por um termo de busca. |
ordering | Indica o campo que ordena os resultados. |
fields | Indica os campos a retornar, separados por vírgula. |
page | Seleciona uma página de resultados. |
page_size | Define quantas listas vêm por página, de 1 a 100. O padrão é 10. |
GET /v4/workspace/network_lists/{network_list_id} também aceita fields. Em uma lista ip_cidr, ipv4=true retorna apenas os itens IPv4 e ipv6=true, apenas os itens IPv6.
Esta requisição cria uma lista ip_cidr e envia 192.0.2.10 duas vezes:
A resposta carrega 201, e o endereço repetido fica armazenado uma única vez:
Azion CLI
Azion CLI gerencia network lists com o substantivo network-list. A tabela lista as flags da Azion CLI 4.23.0.
| Comando | O que faz | Flags principais |
|---|---|---|
azion create network-list | Cria uma lista. | --name, --type, --items, --active, --file |
azion list network-list | Lista as network lists da conta. | --details, --filter, --order-by, --page (padrão 1), --page-size (padrão 50) |
azion describe network-list | Retorna uma lista. | --network-list-id, --format json |
azion update network-list | Altera uma lista. | --network-list-id, --name, --items, --add-item, --remove-item, --active, --file |
azion delete network-list | Exclui uma lista. | --network-list-id |
--type aceita asn, countries ou ip_cidr, e --items, --add-item e --remove-item aceitam valores separados por vírgula. --items substitui todos os itens, como faz um PATCH, enquanto --add-item e --remove-item leem a lista primeiro e alteram apenas os itens que indicam. --remove-item só encontra um item escrito exatamente como está armazenado, incluindo a data de expiração --LT e o comentário #. Com apenas o endereço de um item com anotação, ele não altera nada e ainda assim imprime Updated Network List with ID <network-list-id>. --file aceita um arquivo JSON com os campos descritos em Campos da network list. azion update network-list também aceita --type, que a API recusa com 22002 porque um tipo nunca muda.
A flag de id é --network-list-id, e --id é recusada como flag desconhecida. Sem --items nem --file, azion create network-list pede os itens e falha quando nenhum terminal responde, então um script sempre passa uma das duas. azion list network-list --format json imprime as colunas da tabela, e não os registros. A ajuda de azion describe network-list lista uma flag --with-code, que o comando recusa como desconhecida.
Uma criação pela linha de comando imprime o id criado:
Adicionar um item a uma lista existente mantém os itens que já estão nela:
Uma exclusão imprime Network List <network-list-id> was successfully deleted. Quando a API recusa um comando, a CLI imprime o detalhe retornado pela API. Excluir uma lista em uso imprime Error: Failed to delete Network List: ["You can not delete the network list in use by Edge Firewall(s)."].
Outras interfaces
Estas interfaces também gerenciam ou leem network lists, e cada uma é documentada na própria página.
| Interface | O que cobre | Referência |
|---|---|---|
| Terraform | O recurso azion_network_list. | Recursos de segurança do Terraform |
| Azion Lib | A entrada networkList de uma configuração. | Configuração da Azion Lib |
| Azion IaC | A entrada networkList de azion.config.js. | Azion IaC |
| Runtime API | Azion.networkList.contains(), que verifica se uma lista contém um endereço, a partir de uma função em um firewall. | Interface Network List |
Uma regra com o critério Network compara uma lista sem código. Uma função em um firewall chama Azion.networkList.contains() quando a comparação alimenta uma lógica própria, e a chamada retorna true quando o endereço está na lista.
Permissões
Duas permissões de equipe controlam as network lists:
| Permissão | Concede |
|---|---|
| View Network Lists | Visualizar network lists, sem criar, alterar ou excluir. |
| Edit Network Lists | Visualizar, criar, alterar e excluir network lists. Também exige View Network Lists. |
O firewall cujas regras referenciam uma lista tem o próprio par, View Firewall e Edit Firewall. Para mais informações, consulte Teams Permissions.
Erros
Uma requisição recusada retorna um array errors. Cada entrada carrega um code, um title, um detail, o status e um ponteiro source que indica o campo. Um erro de item acrescenta meta.index e meta.value, e indica apenas o primeiro item inválido. Este corpo responde a uma criação cujos itens são 192.0.2.1, abc e 198.51.100.300, e aponta apenas abc:
meta.index conta os itens que restam depois que os itens expirados são descartados, então ele pode ser menor que a posição do item na requisição. Todos os erros da tabela a seguir respondem 400, exceto 10004, que responde 404.
| Código | Título | Causa | Correção |
|---|---|---|---|
10004 | Not Found | O id da lista não existe na conta, ou a lista foi excluída. | Leia os ids com GET /v4/workspace/network_lists. |
10039 | Invalid Choice | Um type diferente de ip_cidr, asn ou countries, como geo. Em uma regra, a variável escrita como $(network). | Envie um dos três tipos e escreva a variável como ${network}. |
10046 | Max Length | Um name ou um item com mais de 250 caracteres, incluindo as anotações. | Encurte o valor que o ponteiro source indica. |
10049 | Min Length List Field | Um array items vazio. | Envie pelo menos um item. |
10059 | Required Field | Um campo obrigatório ausente, como type em uma criação ou type e items em um PUT. Um corpo que usa os nomes da v3 list_type e ip_list recebe o erro duas vezes, para type e items. | Envie name, type e items. |
10065 | List Field Max Length | Mais de 20.000 itens. | Envie 20.000 itens ou menos. |
10097 | Invalid Page Size | Um page_size acima de 100, ou 0, na operação de listagem. A mensagem admite 0, e a API o recusa. | Peça de 1 a 100 listas por página. |
22002 | Cannot Change Network List Type | Uma atualização que envia um type diferente do tipo da lista. O detail diz You can not change the network list type. | Crie uma lista do tipo de que você precisa e aponte as regras para ela. |
22003 | Cannot Disable Network List In Use | active: false em uma lista que uma regra referencia. O detail diz You can not disable the network list in use by Edge Firewall(s). | Altere ou exclua as regras que referenciam a lista. |
22004 | Cannot Change Global Network List | Qualquer gravação em uma lista mantida pela Azion, mesmo uma que não altera nada. O detail diz You can not change a global network list. | Referencie a lista como ela está, ou crie uma lista própria. |
22005 | Invalid IP CIDR | Um item ip_cidr que não é um endereço ou intervalo IPv4 ou IPv6, incluindo uma linha que começa com # e um --lt em minúsculas. | Corrija o item que meta.index e meta.value indicam. |
22007 | Due Date Invalid Format | Uma data de expiração sem hora, ou com frações de segundo. O detail diz Due date with invalid format, needs to start with --LT and end with Z. | Escreva a data como --LTYYYY-MM-DDTHH:MM:SSZ. |
22011 | Invalid ASN Number | Um item asn que não tem apenas dígitos, como abc, AS64496 ou um item com comentário. O detail diz This ASN Number is not valid. | Envie apenas o número. |
22015 | Invalid Country | Um item countries que não tem duas letras maiúsculas ISO 3166-1 alpha-2, como br, Brazil ou XX, ou um item com data de expiração. O detail diz This country is not valid. | Envie apenas o código de duas letras. |
22018 | Cannot Delete In Use Network List | Um DELETE em uma lista que uma regra referencia. O detail, You can not delete the network list in use by Edge Firewall(s)., não indica o firewall nem as regras. | Exclua as regras que referenciam a lista, ou aponte-as para outra lista, e depois exclua a lista de novo. A verificação deixa de bloquear assim que a exclusão da regra é aceita: uma exclusão de lista foi aceita 3 segundos depois da última exclusão de regra. |
22019 | All Network Items Are Expired | Todos os itens carregam uma data de expiração que já passou. O detail diz All items in the network items are past their expiration date. | Envie pelo menos um item sem data de expiração ou com uma data futura. |
24005 | Cannot Disable Firewall Network Protection Module | Desativar Network Shield em um firewall que tem regras ${network}. O detail lista os ids das regras. | Exclua ou altere as regras que o detail indica e depois desative Network Shield. |
25030 | Entity Not Found | Um argumento de ${network} que indica uma lista que a conta não tem. | Envie o id de uma lista da conta. |
25031 | Entity Not Active | Um argumento de ${network} que indica uma lista com active: false. | Defina o active da lista como true e depois crie a regra. |
25039 | Invalid Operator | matches, o rótulo do Console, enviado como operador de ${network}. | Envie is_in_list ou is_not_in_list. |
25042 | Invalid Operator Argument Type | Um argumento de ${network} enviado como string JSON. | Envie o id da lista como inteiro JSON. |
25047 | Missing Required Modules | Uma regra ${network} em um firewall com Network Shield desativado. | Ative Network Shield no firewall e depois crie a regra. |
Limites
Uma network list comporta de 1 a 20.000 itens de até 250 caracteres cada, com um nome de 1 a 250 caracteres, e uma requisição de listagem retorna até 100 listas por página. Para conhecer cada limite e o que acontece quando ele é ultrapassado, consulte Limites de Firewall.