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.
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
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
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