Acerca de ACL de red
Puede utilizar una lista de control de accesos (ACL) para controlar todo el tráfico de entrada y de salida de IBM Cloud® Virtual Private Cloud. Una ACL es un cortafuegos virtual incorporado, similar a un grupo de seguridad. Al contrario de lo que ocurre con los grupos de seguridad, las reglas de ACL controlan el tráfico hacia y desde las subredes, en lugar de hacerlo hacia y desde las instancias.
Para obtener una comparación de las características de los grupos de seguridad y las ACL, consulte la tabla de comparación.
En el ejemplo que se presenta en este documento se muestra cómo crear ACL de red en la VPC mediante la CLI. Para obtener más información sobre cómo configurar ACL en la consola IBM Cloud, consulte Configuración de ACL en la consola.
Cómo trabajar con ACL y reglas de ACL
Para que las ACL sean efectivas, cree reglas que determinen cómo manejar el tráfico de red de entrada y de salida. Puede crear varias reglas de entrada y de salida. Para obtener más información sobre las cuotas de reglas, consulte Cuotas.
- Con las reglas de entrada, puede permitir o denegar el tráfico desde un rango de IP de origen, con protocolos y puertos especificados.
- Con las reglas de salida, puede permitir o denegar el tráfico a un rango de IP de destino, con protocolos y puertos especificados.
- Las reglas de ACL tienen prioridades y se evalúan en secuencia. Las reglas de prioridad superior se evalúan antes y prevalecen sobre las de prioridad inferior.
- Las reglas de entrada están separadas de las reglas de salida.
- Si no se especifica ninguna regla, implcit deny es el comportamiento predeterminado.
Para obtener más información sobre cómo utilizar los protocolos ICMP, TCP y UDP en las reglas de ACL, consulte Descripción de los protocolos de comunicación de Internet.
Actualización de las reglas ACL predeterminadas de un VPC
La ACL por defecto es similar a cualquier otra ACL, con la excepción de que no se puede eliminar.
Cuando crea una VPC, el sistema crea una ACL predeterminada para la VPC con dos reglas:
- Una regla llamada "
allow-inbound
" para permitir el tráfico entrante ICMP, TCP y UDP desde cualquier fuente - Una regla llamada "
allow-outbound
" para permitir el tráfico ICMP, TCP y UDP saliente a cualquier destino
Puede modificar las reglas de la ACL predeterminada mediante la consola, la CLI o la API.
Si edita las reglas de la ACL predeterminada, las reglas editadas se aplicarán a todas las subredes actuales y futuras adjuntas a la ACL.
Cómo adjuntar una lista de control de acceso (ACL) a una subred
Cuando cree una nueva subred, puede especificar la ACL que desee adjuntar. Si no especifica una ACL, se adjunta la ACL de red predeterminada de la VPC.
Cada subred tiene exactamente una ACL adjunta. Puede reemplazar la ACL de una subred por otra diferente.
Ejemplo de ACL
En el ejemplo siguiente, creará dos ACL y las asociará a dos subredes mediante la interfaz de línea de mandatos (CLI). En la figura 1 se muestra el aspecto de este escenario.
Como ilustra la figura 1, hay dos servidores web que reciben las peticiones procedentes de Internet y dos servidores de fondo que se desea ocultar al público. En este ejemplo, los servidores se colocan en dos subredes distintas, 10.10.10.0/24
y 10.10.20.0/24
, y hay que permitir que los servidores web intercambien datos con los servidores de fondo. Además, hay que permitir un tráfico de salida limitado procedente los servidores de fondo.
Reglas de ejemplo
Las reglas de ejemplo siguientes muestran cómo configurar las reglas de ACL en un caso de ejemplo básico.
Se recomienda otorgar a las reglas precisas una prioridad más alta que a las reglas generales. Por ejemplo, hay una regla que bloquea todo el tráfico procedente de la subred 10.10.30.0/24
. Si se le asigna una prioridad más alta,
las reglas de grano fino con prioridad inferior que permiten el tráfico procedente de 10.10.30.5
nunca se aplicarán.
Reglas de ejemplo de ACL-1
Entrada/Salida | Permitir/Denegar | IP de origen | IP de destino | Protocolo | Puerto | Descripción |
---|---|---|---|---|---|---|
Entrada | Permitir | 0.0.0.0/0 | 0.0.0.0/0 | TCP | 80 | Permitir tráfico HTTP de Internet |
Entrada | Permitir | 0.0.0.0/0 | 0.0.0.0/0 | TCP | 443 | Permitir tráfico HTTPS de Internet |
Entrada | Permitir | 10.10.20.0/24 | 0.0.0.0/0 | Todos | Todos | Permitir todo el tráfico de entrada procedente de la subred 10.10.20.0/24 donde están situados los servidores de fondo |
Entrada | Denegar | 0.0.0.0/0 | 0.0.0.0/0 | Todos | Todos | Denegar toda la entrada de tráfico |
De salida | Permitir | 0.0.0.0/0 | 0.0.0.0/0 | TCP | 80 | Permitir tráfico HTTP a Internet |
De salida | Permitir | 0.0.0.0/0 | 0.0.0.0/0 | TCP | 443 | Permitir tráfico HTTPS destinado a Internet |
De salida | Permitir | 0.0.0.0/0 | 10.10.20.0/24 | Todos | Todos | Permitir todo el tráfico de salida a la subred 10.10.20.0/24 donde están situados los servidores de fondo |
De salida | Denegar | 0.0.0.0/0 | 0.0.0.0/0 | Todos | Todos | Denegar toda la salida de tráfico |
Reglas de ejemplo de ACL-2
Entrada/Salida | Permitir/Denegar | IP de origen | IP de destino | Protocolo | Puerto | Descripción |
---|---|---|---|---|---|---|
Entrada | Permitir | 10.10.10.0/24 |
0.0.0.0/0 | Todos | Todos | Permitir todo el tráfico de entrada procedente de la subred 10.10.10.0/24 donde están situados los servidores web |
Entrada | Denegar | 0.0.0.0/0 | 0.0.0.0/0 | Todos | Todos | Denegar toda la entrada de tráfico |
De salida | Permitir | 0.0.0.0/0 | 0.0.0.0/0 | TCP | 80 | Permitir tráfico HTTP a Internet |
De salida | Permitir | 0.0.0.0/0 | 0.0.0.0/0 | TCP | 443 | Permitir tráfico HTTPS destinado a Internet |
De salida | Permitir | 0.0.0.0/0 | 10.10.10.0/24 |
Todos | Todos | Permitir todo el tráfico de salida a la subred 10.10.10.0/24 donde están situados los servidores web |
De salida | Denegar | 0.0.0.0/0 | 0.0.0.0/0 | Todos | Todos | Denegar toda la salida de tráfico |
En este ejemplo solo se muestran casos generales. Es posible que también desee tener un control más detallado sobre el tráfico en sus casos de ejemplo:
- Puede tener un administrador de red que necesite acceso a la subred 10.10.10.0/24 desde una red remota con fines de funcionamiento. En ese caso, tiene que permitir el tráfico SSH procedente de internet a esta subred.
- Es posible que desee reducir el ámbito de protocolo que permite entre las dos subredes.
Pasos de ejemplo
En los pasos del ejemplo siguiente se omiten los pasos de requisitos previos de utilizar la CLI para crear una VPC, proceso que debe llevarse a cabo en primer lugar. Para obtener más información, consulte Utilización de la CLI para crear recursos de VPC.
Paso 1. Cree las ACL
Utilice los siguientes mandatos de la CLI para crear dos ACL llamadas my_web_subnet_acl
y 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
La respuesta incluye los ID de ACL recién creados. Guarde los ID de ambas ACL para utilizarlos en mandatos posteriores. Puede utilizar variables llamadas webacl
y bkacl
, como en el siguiente ejemplo:
webacl="0738-ba9e785a-3e10-418a-811c-56cfe5669676"
bkacl="0738-a4e28308-8ee7-46ab-8108-9f881f22bdbf"
Paso 2. Recupere las reglas de ACL predeterminadas
Antes de añadir nuevas reglas, recupere las reglas de ACL de entrada y salida predeterminadas para poder insertar nuevas reglas previamente.
ibmcloud is network-acl-rules $webacl
ibmcloud is network-acl-rules $bkacl
La respuesta muestra las reglas de entrada y salida predeterminadas que permiten todo el tráfico de IPv4 en todos los 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
Guarde los ID de ambas reglas de ACL como variables para poder utilizar los valores en mandatos posteriores. Por ejemplo, puede guardar los ID en las variables inrule
y outrule
:
inrule="0738-e2b30627-1a1d-447b-859f-ac9431986b6f"
outrule="0738-173a3492-0544-472e-91c0-7828cbcb62d4"
Paso 3. Añada nuevas reglas de ACL como tal como se ha descrito
En este ejemplo, primero añada reglas de entrada y luego añada reglas de salida.
Inserte nuevas reglas de entrada antes de la regla de entrada predeterminada.
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
En cada paso, guarde el ID de la regla de ACL en una variable para que se pueda utilizar el ID en mandatos posteriores. Por ejemplo, puede utilizar la variable acl200
:
acl200="0738-90930627-1a1d-447b-859f-ac9431986b6f"
Ahora añada la regla a 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
Añada más reglas hasta completar la configuración de la ACL, guardando cada ID como una variable.
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
Inserte nuevas reglas de salida antes de la regla de salida predeterminada.
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
Paso 4. Cree las dos subredes con la ACL recién creada
Cree dos subredes de modo que cada una de las ACL esté asociada a una de las nuevas subredes.
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
Hoja de apuntes de la lista de mandatos
Para ver una lista completa de los mandatos de CLI de VPC disponibles para ACL:
ibmcloud is network-acls
Para ver la ACL y los metadatos, incluidas las reglas:
ibmcloud is network-acl $webacl
Para listar todas las reglas de ACL:
ibmcloud is network-acl-rules $webacl
Regla ping
de entrada de ejemplo
Si desea añadir una regla de ACL, utilice el mandato de ejemplo que se muestra a continuación para añadir una regla de entrada ping
antes de la regla de entrada predeterminada:
Sintaxis:
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]
Ejemplo:
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