IBM Cloud Docs
Sobre as ACLs de rede

Sobre as ACLs de rede

É possível usar uma lista de controle de acesso (ACL) para controlar todo o tráfego de entrada e saída no IBM Cloud® Virtual Private Cloud. Uma ACL é um firewall virtual, integrado, semelhante a um grupo de segurança. Em contraste com grupos de segurança, as regras de ACL controlam o tráfego para e a partir das sub-redes, em vez de para e a partir das instâncias.

Para obter uma comparação das características dos grupos de segurança e de ACLs, consulte a tabela de comparação.

O exemplo apresentado neste documento mostra como criar ACLs de rede no VPC usando a CLI. Para obter mais informações sobre como configurar ACLs no console IBM Cloud, consulte Configuração de ACLs no console.

Trabalhando com ACLs e regras de ACL

Para efetivar suas ACLs, crie regras que determinem como manipular seu tráfego de rede de entrada e de saída. É possível criar múltiplas regras de entrada e de saída. Para obter mais informações sobre cotas de regras, consulte Cotas.

  • Com regras de entrada, é possível permitir ou negar o tráfego de um intervalo de IP de origem, com protocolos e portas especificados.
  • Com as regras de saída, é possível permitir ou negar o tráfego para um intervalo de IP de destino, com protocolos e portas especificados.
  • As regras de ACL são priorizadas e consideradas em sequência. As regras de prioridade mais alta são avaliadas primeiro e substituem as regras de prioridade mais baixa.
  • As regras de entrada são separadas das regras de saída.
  • Se nenhuma regra for especificada, negação implícita será o comportamento padrão.

Para obter mais informações sobre como usar os protocolos ICMP, TCP e UDP em suas regras de ACL, consulte Entendendo protocolos de comunicação da Internet.

Atualização das regras de ACL padrão de uma VPC

A ACL padrão é semelhante a qualquer outra ACL, com a exceção de que não pode ser excluída.

Quando você cria uma VPC, o sistema cria uma ACL padrão para a VPC com duas regras:

  • Uma regra chamada allow-inbound para permitir o tráfego de entrada ICMP, TCP e UDP de qualquer origem
  • Uma regra chamada allow-outbound para permitir o tráfego ICMP, TCP e UDP de saída para qualquer destino

É possível modificar as regras da ACL padrão usando o console, a CLI ou a API.

Se você editar as regras da ACL padrão, essas regras editadas serão aplicadas a todas as sub-redes atuais e futuras anexadas à ACL.

Anexando uma ACL a uma sub-rede

Quando você cria uma nova sub-rede, é possível especificar uma ACL a ser anexada. Se você não especificar uma ACL, a ACL de rede padrão da VPC será anexada.

Cada sub-rede tem exatamente uma ACL anexada. Você pode substituir a ACL de uma sub-rede por uma ACL diferente.

Exemplo de ACL

No exemplo a seguir, você cria duas ACLs e associa-as a duas sub-redes usando a interface da linha de comandos (CLI). A Figura 1 mostra como é o cenário.

Figura mostrando um exemplo de cenário de
com duas

Como a Figura 1 ilustra, você tem dois servidores da web que lidam com solicitações da Internet e dois servidores de back-end que você deseja ocultar do público. Neste exemplo, você coloca os servidores em duas sub-redes separadas, 10.10.10.0/24 e 10.10.20.0/24, e precisa permitir que os servidores da web troquem dados com os servidores de back-end. Além disso, você deseja permitir tráfego de saída limitado dos servidores de back-end.

Regras de exemplo

As regras de exemplo a seguir mostram como configurar as regras de ACL para o cenário básico.

Como uma melhor prática, dê às regras de baixa granularidade uma prioridade mais alta do que às regras de alta granularidade. Por exemplo, você tem uma regra que bloqueia todo o tráfego da sub-rede 10.10.30.0/24. Se uma prioridade superior for designada a ela, as regras de baixa granularidade com prioridade inferior que permitem o tráfego de 10.10.30.5 nunca serão aplicadas.

Regras de exemplo de ACL-1

Exemplo de regras para ACL-1
Entrada/Saída Permitir/negar IP de origem IP de destino Protocolo Porta Descrição
Entrada Permitir 0.0.0.0/0 0.0.0.0/0 TCP 130 Permitir tráfego HTTP da Internet
Entrada Permitir 0.0.0.0/0 0.0.0.0/0 TCP 443 Permitir tráfego HTTPS por meio da internet
Entrada Permitir 10.10.20.0/24 0.0.0.0/0 Todos Todos Permitir todo o tráfego de entrada a partir da sub-rede 10.10.20.0/24 em que os servidores de back-end são colocados
Entrada Negar 0.0.0.0/0 0.0.0.0/0 Todos Todos Negar todas as outras entradas de tráfego
Saída Permitir 0.0.0.0/0 0.0.0.0/0 TCP 130 Permitir tráfego HTTP para a Internet
Saída Permitir 0.0.0.0/0 0.0.0.0/0 TCP 443 Permitir tráfego HTTPS para a Internet
Saída Permitir 0.0.0.0/0 10.10.20.0/24 Todos Todos Permitir todo o tráfego de saída para a sub-rede 10.10.20.0/24 em que os servidores de back-end são colocados
Saída Negar 0.0.0.0/0 0.0.0.0/0 Todos Todos Negar todas as outras saídas de tráfego

Regras de exemplo de ACL-2

Exemplo de regras para ACL-2
Entrada/Saída Permitir/negar IP de origem IP de destino Protocolo Porta Descrição
Entrada Permitir 10.10.10.0/24 0.0.0.0/0 Todos Todos Permitir todo o tráfego de entrada a partir da sub-rede 10.10.10.0/24 em que os servidores da web são colocados
Entrada Negar 0.0.0.0/0 0.0.0.0/0 Todos Todos Negar todas as outras entradas de tráfego
Saída Permitir 0.0.0.0/0 0.0.0.0/0 TCP 130 Permitir tráfego HTTP para a Internet
Saída Permitir 0.0.0.0/0 0.0.0.0/0 TCP 443 Permitir tráfego HTTPS para a Internet
Saída Permitir 0.0.0.0/0 10.10.10.0/24 Todos Todos Permitir todo o tráfego de saída para a sub-rede 10.10.10.0/24 em que os servidores da web são colocados
Saída Negar 0.0.0.0/0 0.0.0.0/0 Todos Todos Negar todas as outras saídas de tráfego

Esse exemplo ilustra somente os casos gerais. Em seus cenários, talvez você queira ter mais controle granular sobre o tráfego:

  • Você pode ter um administrador de rede que precisa de acesso à sub-rede 10.10.10.0/24 por meio de uma rede remota para propósitos de operação. Nesse caso, é necessário permitir tráfego SSH da Internet para essa sub-rede.
  • Talvez você queira limitar o escopo do protocolo permitido entre suas duas sub-redes.

Etapas de exemplo

As etapas de exemplo a seguir ignoram as etapas de pré-requisito de uso da CLI para criar uma VPC, que deve ser feito primeiro. Para obter mais informações, consulte Usando a CLI para criar recursos de VPC.

Etapa 1. Criar as ACLs

Use os comandos da CLI a seguir para criar duas ACLs, denominadas my_web_subnet_acl e my_backend_subnet_acl:

ibmcloud is network-acl-create my-web-subnet-acl $vpc_id --source-acl-id $old_acl_id
ibmcloud is network-acl-create my-backend-subnet-acl $vpc_id --source-acl-id $old_acl_id

A resposta inclui os IDs de ACL recém-criados. Salve os IDs de ambas as ACLs para serem usados em comandos posteriores. É possível usar variáveis denominadas webacl e bkacl, como esta:

webacl="0738-ba9e785a-3e10-418a-811c-56cfe5669676"
bkacl="0738-a4e28308-8ee7-46ab-8108-9f881f22bdbf"

Etapa 2. Recuperar as regras de ACL padrão

Antes de incluir regras, recupere as regras de ACL de entrada e de saída padrão para que seja possível inserir novas regras antes delas.

ibmcloud is network-acl-rules $webacl
ibmcloud is network-acl-rules $bkacl

A resposta mostra as regras de entrada e saída padrão que permitem todo o tráfego IPv4 em todos os protocolos.

Getting rules of network acl ba9e785a-3e10-418a-811c-56cfe5669676 under account Demo Account as user demouser...

inbound
ID                                     Name                                                          Action   IPv*   Protocol   Source      Destination   Created
0738-e2b30627-1a1d-447b-859f-ac9431986b6f   allow-all-inbound-rule-2d86bc3f-58e4-436a-8c1a-9b0a710556d6   allow    ipv4   all        0.0.0.0/0   0.0.0.0/0     2 months ago

outbound
ID                                     Name                                                         Action   IPv*   Protocol   Source      Destination   Created
0738-173a3492-0544-472e-91c0-7828cbcb62d4   allow-all-outbound-rule-2d86bc3f-58e4-436a-8c1a-9b0a710556d6   allow    ipv4   all        0.0.0.0/0   0.0.0.0/0     2 months ago

Salve os IDs de ambas as regras de ACL como variáveis para que você possa usar os valores em comandos posteriores. Por exemplo, é possível salvar os IDs em variáveis inrule e outrule:

inrule="0738-e2b30627-1a1d-447b-859f-ac9431986b6f"
outrule="0738-173a3492-0544-472e-91c0-7828cbcb62d4"

Etapa 3. Incluir novas regras de ACL conforme descrito

Neste exemplo, inclua primeiro regras de entrada e, em seguida, regras de saída.

Insira novas regras de entrada antes da regra de entrada padrão.

ibmcloud is network-acl-rule-add my_web_acl_rule200 $webacl deny inbound all 0.0.0.0/0 0.0.0.0/0 \
--before-rule-id $in-rule

Em cada etapa, salve o ID da regra de ACL em uma variável para que o ID possa ser usado em comandos posteriores. Por exemplo, é possível usar a variável acl200:

acl200="0738-90930627-1a1d-447b-859f-ac9431986b6f"

Agora inclua a regra em acl200:

ibmcloud is network-acl-rule-add my_web_acl_rule100 $webacl allow inbound all 10.10.20.0/24 0.0.0.0/0 \
--before-rule-id $acl200

Inclua mais regras até que a configuração da ACL seja concluída, salvando cada ID como uma variável.

acl100="0738-78340627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule20 $webacl allow inbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-min 443 --source-port-max 443 --before-rule-id $acl100
acl20="32450627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule10 $webacl allow inbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 80 --source-port-min 80 --before-rule-id $acl20

Insira novas regras de saída antes da regra de saída padrão.

ibmcloud is network-acl-rule-add my_web_acl_rule200e $webacl deny outbound all 0.0.0.0/0 0.0.0.0/0 \
--before-rule-id $outrule
acl200e="11110627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule100e $webacl allow outbound all 0.0.0.0/0 10.10.20.0/24 \
--before-rule-id $acl200e
acl100e="22220627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule20e $webacl allow outbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 443 --source-port-min 443 --before-rule-id $acl100e
acl20e="33330627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule10e $webacl allow outbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 80 --source-port-min 80 --before-rule-id $acl20e

Etapa 4. Criar as duas sub-redes com a ACL recém-criada

Crie duas sub-redes para que cada uma de suas ACLs seja associada a uma das novas sub-redes.

ibmcloud is subnet-create my-web-subnet $vpc_id $zone --ipv4_cidr_block 10.10.10.0/24 \
 --network-acl-id $webacl
ibmcloud is subnet-create my-backend-subnet$vpc_id $zone --ipv4_cidr_block 10.10.20.0/24 \
--network-acl-id $bkacl

Folha de dicas da lista de comandos

Para mostrar uma lista completa dos comandos da CLI da VPC disponíveis para ACLs:

ibmcloud is network-acls

Para ver a sua ACL e seus metadados, incluindo regras:

ibmcloud is network-acl $webacl

Para listar todas as regras de ACL:

ibmcloud is network-acl-rules $webacl

Exemplo de regra de entrada ping

Para incluir uma regra de ACL, aqui está um exemplo de comando para incluir uma regra de entrada ping antes da regra de entrada padrão:

Sintaxe:

ibmcloud is network-acl-rule-add ACL ACTION DIRECTION PROTOCOL SOURCE DESTINATION [--name NAME] [--icmp-type ICMP_TYPE] [--icmp-code ICMP_CODE] [--source-port-min PORT_MIN] [--source-port-max PORT_MAX] [--destination-port-min PORT_MIN] [--destination-port-max PORT_MAX] [--before-rule-id RULE_ID] [--output JSON] [-q, --quiet]

Exemplo:

ibmcloud is network-acl-rule-add 72b27b5c-f4b0-48bb-b954-5becc7c1dcb3 allow inbound icmp 10.2.2.2 10.2.2.3 --icmp-type 8 --icmp-code 0