ACL + Zodiac FX + faucet: tráfico intercambiado entre controlador y switch
Escenario 1
Se tiene una configuración como la que se muestra en la figura:
En la máquina 10.0.1.30 se están ejecutando dos servidores TCP, en el puerto 1111 y 2222 respectivamente. Se desea conseguir la siguientes reglas de acceso:
- Permitir que cualquier máquina pueda enviar mensajes ARP y mensajes ICMP.
- Únicamente desde 10.0.1.20 se acceda al servidor 10.0.1.30:1111 y a ningún otro servidor que se pueda estar ejecutando en 10.0.1.30.
- Ninguna otra máquina podrá tener acceso a 10.0.1.30.
Para permitir esta configuración se configura el fichero simple_acl_faucet.yaml
:
version: 2
vlans:
100:
name: "test-ACL-faucet-1"
dps:
zodicac-fx-1:
dp_id: 0x70B3D56CD74C
hardware: "ZodiacFX"
interfaces:
1:
native_vlan: 100
acl_in: 1
2:
native_vlan: 100
acl_in: 1
3:
native_vlan: 100
acl_in: 1
acls:
1:
- rule:
# Permitir tráfico ARP
eth_type: 0x0806 # ARP
actions:
allow: 1
- rule:
# Permitir tráfico ICMPv4
eth_type: 0x0800 # IPc4
ip_proto: 0x01 # ICMPv4
actions:
allow: 1
- rule:
# Permitir tráfico TCP a 10.0.1.30:1111, sólo desde 10.0.1.20
eth_type: 0x0800 # IPv4
ipv4_dst: 10.0.1.30
ipv4_src: 10.0.1.20
ip_proto: 0x06 # TCP
tcp_dst: 1111
actions:
allow: 1
- rule:
# Permitir respuesta al tráfico TCP a 10.0.1.30:1111 que fue enviado sólo desde 10.0.1.20
eth_type: 0x0800 # IPv4
ipv4_src: 10.0.1.30
ipv4_dst: 10.0.1.20
ip_proto: 0x06 # TCP
tcp_src: 1111
actions:
allow: 1
- rule:
# No permitr cualquier tráfico IPv4 a 10.0.1.30
eth_type: 0x0800 # IPv4
ipv4_dst: 10.0.1.30
actions:
allow: 0
- rule:
# Permitir cualquier otro tráfico
eth_type: 0x0800 # IPv4
ipv4_src: 10.0.1.0/24
actions:
allow: 1
Al arrancar el controlador se instalan los siguientes flujos en las tablas faucet como resultado de configurar estas reglas ACL. Véase que como a priori no se puede saber en qué puertos están conectadas las máquinas que se están comunicando, las reglas se escriben igual para cada uno de los puertos del switch, en este caso los puertos 1, 2 y 3. La prioridad viene dada por el orden de escritura de las reglas en ese puerto, comenzando en 9099 y disminuyendo.
Flujos que implementan ACL para in_port=1
Table | Flujo en ZodiacFX | Priority | eth_type | ip_proto | ipv4_src | ipv4_dst | tcp_src | tcp_dst | in_port | actions | paquete openFlow | meaning | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 30 | 9099 | ARP | 1 | GOTO TABLE 1 | Paquete | Todos los paquetes ARP recibidos en puerto 1 pasan a tabla 1 | ||||||
0 | 31 | 9098 | IPv4 | ICMPv4 | 1 | GOTO TABLE 1 | Paquete | Todos los paquetes ICMPv4 recibidos en puerto 1 pasan a tabla 1 | |||||
0 | 32 | 9097 | IPv4 | TCP | 10.0.1.20 | 10.0.1.30 | 1111 | 1 | GOTO TABLE 1 | Paquete | Todos los paquetes TCP recibidos en puerto 1 de 10.0.1.20 hacia 10.0.1.30:1111 pasan a tabla 1 | ||
0 | 33 | 9096 | IPv4 | TCP | 10.0.1.30 | 10.0.1.20 | 1111 | 1 | GOTO TABLE 1 | Paquete | Todos los paquetes TCP recibidos en puerto 1 de 10.0.1.30:1111 hacia 10.0.1.20 pasan a tabla 1 | ||
0 | 34 | 9095 | IPv4 | 10.0.1.30 | 1 | DROP | Paquete | Todos los paquetes TCP recibidos en puerto 1 hacia 10.0.1.30 se descartan | |||||
0 | 35 | 9094 | IPv4 | 10.0.1.0/24 | 1 | GOTO TABLE 1 | Paquete | Todos los paquetes IPv4 con origen en la red 10.0.1.0/24 recibidos en puerto 1 pasan a la tabla 1 |
Flujos que implementan ACL para in_port=2
Table | Flujo en ZodiacFX | Priority | eth_type | ip_proto | ipv4_src | ipv4_dst | tcp_src | tcp_dst | in_port | actions | paquete openFlow | meaning | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 37 | 9099 | ARP | 2 | GOTO TABLE 1 | Paquete | Todos los paquetes ARP recibidos en puerto 2 pasan a tabla 1 | ||||||
0 | 38 | 9098 | IPv4 | ICMPv4 | 2 | GOTO TABLE 1 | Paquete | Todos los paquetes ICMPv4 recibidos en puerto 2 pasan a tabla 1 | |||||
0 | 39 | 9097 | IPv4 | TCP | 10.0.1.20 | 10.0.1.30 | 1111 | 2 | GOTO TABLE 1 | Paquete | Todos los paquetes TCP recibidos en puerto 2 de 10.0.1.20 hacia 10.0.1.30:1111 pasan a tabla 1 | ||
0 | 40 | 9096 | IPv4 | TCP | 10.0.1.30 | 10.0.1.20 | 1111 | 2 | GOTO TABLE 1 | Paquete | Todos los paquetes TCP recibidos en puerto 2 de 10.0.1.30:1111 hacia 10.0.1.20 pasan a tabla 1 | ||
0 | 41 | 9095 | IPv4 | 10.0.1.30 | 2 | DROP | Paquete | Todos los paquetes TCP recibidos en puerto 2 hacia 10.0.1.30 se descartan | |||||
0 | 42 | 9094 | IPv4 | 10.0.1.0/24 | 2 | GOTO TABLE 1 | Paquete | Todos los paquetes IPv4 con origen en la red 10.0.1.0/24 recibidos en puerto 2 pasan a la tabla 1 |
Flujos que implementan ACL para in_port=3
Table | Flujo en ZodiacFX | Priority | eth_type | ip_proto | ipv4_src | ipv4_dst | tcp_src | tcp_dst | in_port | actions | paquete openFlow | meaning | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 44 | 9099 | ARP | 3 | GOTO TABLE 1 | Paquete | Todos los paquetes ARP recibidos en puerto 3 pasan a tabla 1 | ||||||
0 | 45 | 9098 | IPv4 | ICMPv4 | 3 | GOTO TABLE 1 | Paquete | Todos los paquetes ICMPv4 recibidos en puerto 3 pasan a tabla 1 | |||||
0 | 46 | 9097 | IPv4 | TCP | 10.0.1.20 | 10.0.1.30 | 1111 | 3 | GOTO TABLE 1 | Paquete | Todos los paquetes TCP recibidos en puerto 3 de 10.0.1.20 hacia 10.0.1.30:1111 pasan a tabla 1 | ||
0 | 47 | 9096 | IPv4 | TCP | 10.0.1.30 | 10.0.1.20 | 1111 | 3 | GOTO TABLE 1 | Paquete | Todos los paquetes TCP recibidos en puerto 3 de 10.0.1.30:1111 hacia 10.0.1.20 pasan a tabla 1 | ||
0 | 48 | 9095 | IPv4 | 10.0.1.30 | 3 | DROP | Paquete | Todos los paquetes TCP recibidos en puerto 1 hacia 10.0.1.30 se descartan | |||||
0 | 49 | 9094 | IPv4 | 10.0.1.0/24 | 3 | GOTO TABLE 1 | Paquete | Todos los paquetes IPv4 con origen en la red 10.0.1.0/24 recibidos en puerto 3 pasan a la tabla 1 |