Sophos XGS HA (Active / Passive) – ArubaOS-CX OSPF Routing – ACL

Hello there,

Today, I want to take a look at how to set up a Sophos HA Cluster connected to a layer 3 core switching. We will leave the local routing to the Aruba Switches and just handle the internet traffic on the Sophos Firewalls.

I have a similar post, but that just touched on the configuration of OSPF between a single Sophos XG and Aruba Switch. In that post, I also show how to set up authentication between the OSPF partners and the CLI-based configuration of the Sophos XG. If that’s something that interests you, check it out.

I struggled with this at first. I just couldn’t wrap my head around this. Since we have a passive firewall that will take over the same IP addresses as the primary system in case of a failure, I won’t be able to use different IP addresses on the uplink ports on the core switches. I also can’t use the same IP on different ports on the Aruba switches.

It took longer than it should have, but I think I figured it out.

Here is the topology.

For this guide, I am assuming that the Sophos cluster is already up and running. I have a guide on this if you want to check that out first. Keep in mind that I am no expert in this, these are just my findings through trial and error. I am certain that there is a more optimal way to do this.

I will start with the core switches. We need to set up VSX and a few other things first before configuring OSPF.

Core1 configuration

First, let’s set the hostname. I will name the switches core1 and core2.

switch# conf
switch(config)# hostname core1
core1(config)# 

VSX

Next, we will configure the VLAN, interfaces for VSX and VSX itself. I have a separate guide on this with a little bit more detail.

# Creating a vrf to keep the keepalive traffic separated
core1(config)#  vrf KEEPALIVE
core1(config-vrf)#  exit

# Create a vlan, attach it to the newly created vrf and assign a IP address
core1(config)# vlan 255
core1(config-vlan-255)# exit 
core1(config)# interface vlan 255
core1(config-if-vlan)# vrf attach KEEPALIVE
core1(config-if-vlan)# ip address 192.168.255.1/30
core1(config-if-vlan)# exit

# Setup a LAG for the VSX ISL
core1(config)#  interface lag 255
core1(config-lag-if)#  no shutdown
core1(config-lag-if)#  no routing
core1(config-lag-if)#  vlan trunk native 1
core1(config-lag-if)#  lacp mode active
core1(config-lag-if)#  exit

core1(config)#  interface 1/1/8-1/1/9
core1(config-if-<1/1/8-1/1/9>)#  no shutdown
core1(config-if-<1/1/8-1/1/9>)#  lag 255
core1(config-if-<1/1/8-1/1/9>)#  exit

# Configure VSX
core1(config)#  vsx
core1(config-vsx)#  inter-switch-link lag 255
core1(config-vsx)#  keepalive peer 192.168.255.2 source 192.168.255.1 vrf KEEPALIVE
core1(config-vsx)#  system-mac e0:00:00:00:00:01
core1(config-vsx)#  role primary
core1(config-vsx)#  vsx-sync vsx-global ospf mclag-interfaces static-routes
core1(config-vsx)#  exit

Interface

Now, we will set up interfaces 1/1/1 and 1/1/2 for the uplink to the Sophos XGS and the loopback interface for OSPF. Take note of the /29 network. This will allow the switches to establish a connection with the passive device in case of a failure.

core1(config)# interface 1/1/1
core1(config-if)# no shutdown
core1(config-if)# ip address 10.0.0.1/29
core1(config-if)# exit

core1(config)# interface 1/1/2
core1(config-if)# no shutdown
core1(config-if)# ip address 10.0.1.1/29
core1(config-if)# exit

core1(config)# interface loopback 0
core1(config-loopback-if)# ip add 10.255.255.1/32
core1(config-loopback-if)# exit
core1(config)#

OSPF

Setting up OSPF. I will set up the bare minimum to get it running.

core1(config)# router ospf 1
core1(config-ospf-1)# area 0.0.0.0
core1(config-ospf-1)# passive-interface default
core1(config-ospf-1)# exit

core1(config)# interface loopback 0
core1(config-loopback-if)# ip ospf 1 area 0
core1(config-loopback-if)# exit

core1(config)# interface 1/1/1-1/1/2
core1(config-if-<1/1/1-1/1/2>)# ip ospf 1 area 0
core1(config-if-<1/1/1-1/1/2>)# no ip ospf passive
core1(config-if-<1/1/1-1/1/2>)# exit

Transit VLAN

Let’s set up a transit VLAN for the OSPF traffic between the VSX switches.

# Creating the transit VLAN
core1(config)# vlan 254
core1(config-vlan-254)# interface vlan 254
core1(config-if-vlan)# ip add 192.168.254.1/30
core1(config-if-vlan)# ip ospf 1 area 0
core1(config-if-vlan)# no ip ospf passive
core1(config-if-vlan)# ip ospf cost 50
core1(config-if-vlan)# ip ospf network point-to-point

This is it for the first switch. At the bottom of this post, I will add the whole running-configuration.

Let’s do the same for core2

Core2 configuration

Again. Setting the hostname.

switch# conf
arubaos-cx(config)# hostname core2
core2(config)# 

VSX

Setting up VSX. We just need to change the IP addresses and the VSX role. The rest is the same.

core2(config)#  vrf KEEPALIVE
core2(config-vrf)#  exit

core2(config)# vlan 255
core2(config-vlan-255)# exit 
core2(config)# interface vlan 255
core2(config-if-vlan)# vrf attach KEEPALIVE
core2(config-if-vlan)# ip address 192.168.255.2/30
core2(config-if-vlan)# exit

core2(config)#  interface lag 255
core2(config-lag-if)#  no shutdown
core2(config-lag-if)#  no routing
core2(config-lag-if)#  vlan trunk native 1
core2(config-lag-if)#  lacp mode active
core2(config-lag-if)#  exit

core2(config)#  interface 1/1/8-1/1/9
core2(config-if-<1/1/8-1/1/9>)#  no shutdown
core2(config-if-<1/1/8-1/1/9>)#  lag 255
core2(config-if-<1/1/8-1/1/9>)#  exit

core2(config)#  vsx
core2(config-vsx)#  inter-switch-link lag 255
core2(config-vsx)#  keepalive peer 192.168.255.1 source 192.168.255.2 vrf KEEPALIVE
core2(config-vsx)#  system-mac e0:00:00:00:00:01
core2(config-vsx)#  role secondary
core2(config-vsx)#  exit

Interfaces

Again. Making sure that we use a /29 network for the uplink interfaces.

core2(config)# interface 1/1/1
core2(config-if)# no shutdown
core2(config-if)# ip address 10.0.0.2/29
core2(config-if)# exit

core2(config)# interface 1/1/2
core2(config-if)# no shutdown
core2(config-if)# ip address 10.0.1.2/29
core2(config-if)# exit

core2(config)# interface loopback 0
core2(config-loopback-if)# ip add 10.255.255.2/32
core2(config-loopback-if)# exit
core2(config)#

OSPF

core2(config)# router ospf 1
core2(config-ospf-1)# area 0.0.0.0
core2(config-ospf-1)# passive-interface default
core2(config-ospf-1)# exit

core2(config)# interface loopback 0
core2(config-loopback-if)# ip ospf 1 area 0
core2(config-loopback-if)# exit

core2(config)# interface 1/1/1-1/1/2
core2(config-if-<1/1/1-1/1/2>)# ip ospf 1 area 0
core2(config-if-<1/1/1-1/1/2>)# no ip ospf passive
core2(config-if-<1/1/1-1/1/2>)# exit

Transit VLAN

core2(config)# vlan 254
core2(config-vlan-254)# interface vlan 254
core2(config-if-vlan)# ip add 192.168.254.2/30
core2(config-if-vlan)# ip ospf 1 area 0
core2(config-if-vlan)# no ip ospf passive
core2(config-if-vlan)# ip ospf cost 50
core2(config-if-vlan)# ip ospf network point-to-point

At this point, our VSX cluster should work. We can check this with the “show vsx status” command.

core1(config)# show vsx status
VSX Operational State
---------------------
  ISL channel             : In-Sync
  ISL mgmt channel        : operational
  Config Sync Status      : In-Sync
  NAE                     : peer_reachable
  HTTPS Server            : peer_reachable

Attribute           Local               Peer
------------        --------            --------
ISL link            lag255              lag255
ISL version         2                   2
System MAC          e0:00:00:00:00:01   e0:00:00:00:00:01
Platform            X86-64              X86-64
Software Version    Virtual.10.11.0001  Virtual.10.11.0001
Device Role         primary             secondary

Everything is reachable and in sync. Looks fine.

The switches are done. Let’s set up the Sophos XGS. Like I said before, I assume that the HA and basic configuration are done.

Sophos XGS Configuration (Network, OSPF)

First, we need to enable “dynamic routing” on the “LAN” zone. For this, navigate to “Administration” -> “Device access” and enable dynamic routing.

After that, we can configure the interfaces. Go to “network” -> “interfaces”. If you follow this guide exactly, then set PortD to “10.0.0.3/29” and PortE to “10.0.1.3/29”. The rest of the interfaces are up to you. I used PortA as a management port and PortB, PortC for the wan network.

The last port, PortH is my heartbeat for the HA cluster.

The last step is the OSPF configuration. Navigate to “Routing” -> “OSPF”. Set the Router-ID. I choose “10.255.255.255”. Within the “Advanced settings” we have the “Default information originate”. I set this to “Always”. This should propagate the default route to the switches.

For the “Networks & areas”, I set the 3 networks I have currently configured. 10.0.0.0/29, 10.0.1.0/29 and 172.16.16.0/24.

That’s it. At this point, we should see the new routes on our core switches and the Sophos Firewall.

Verifying the routes

Let’s check the Sophos XGS first. Navigate to “Routing” -> “Information” and select “Routes” under OSPF.

While we are at it. Let’s also take a look at the OSPF neighbors.

We can see both core switches.

Next, we will check the switches.

core1(config)# show ip route

Displaying ipv4 routes selected for forwarding

Origin Codes: C - connected, S - static, L - local
              R - RIP, B - BGP, O - OSPF
Type Codes:   E - External BGP, I - Internal BGP, V - VPN, EV - EVPN
              IA - OSPF internal area, E1 - OSPF external type 1
              E2 - OSPF external type 2

VRF: default

Prefix              Nexthop          Interface     VRF(egress)       Origin/   Distance/    Age
                                                                     Type      Metric
--------------------------------------------------------------------------------------------------------
0.0.0.0/0           10.0.0.3         1/1/1         -                 O/E2      [110/1]      00h:01m:07s  
10.0.0.0/29         -                1/1/1         -                 C         [0/0]        -            
10.0.0.1/32         -                1/1/1         -                 L         [0/0]        -            
10.0.1.0/29         -                1/1/2         -                 C         [0/0]        -            
10.0.1.1/32         -                1/1/2         -                 L         [0/0]        -            
10.255.255.1/32     -                loopback0     -                 L         [0/0]        -            
10.255.255.2/32     10.0.0.3         1/1/1         -                 O         [110/110]    00h:20m:04s  
172.16.16.0/24      10.0.0.3         1/1/1         -                 O         [110/110]    00h:20m:00s  

Total Route Count : 8                                          

core1(config)# show ip ospf route
Codes: i - Intra-area route, I - Inter-area route
       E1 - External type-1, E2 - External type-2

OSPF Process ID 1 VRF default, Routing Table
---------------------------------------------

Total Number of Routes : 5

0.0.0.0/0          (E2)
     via 10.0.0.3 interface 1/1/1, cost 1 distance 110
10.0.0.0/29        (i) area: 0.0.0.0
     directly attached to interface 1/1/1, cost 100 distance 110
10.0.1.0/29        (i) area: 0.0.0.0
     directly attached to interface 1/1/2, cost 100 distance 110
10.255.255.2/32    (i) area: 0.0.0.0
     via 10.0.0.3 interface 1/1/1, cost 110 distance 110
172.16.16.0/24     (i) area: 0.0.0.0
     via 10.0.0.3 interface 1/1/1, cost 110 distance 110

And on the Core2 switch.

core2(config)# show ip route

Displaying ipv4 routes selected for forwarding

Origin Codes: C - connected, S - static, L - local
              R - RIP, B - BGP, O - OSPF
Type Codes:   E - External BGP, I - Internal BGP, V - VPN, EV - EVPN
              IA - OSPF internal area, E1 - OSPF external type 1
              E2 - OSPF external type 2

VRF: default

Prefix              Nexthop          Interface     VRF(egress)       Origin/   Distance/    Age
                                                                     Type      Metric
--------------------------------------------------------------------------------------------------------
0.0.0.0/0           10.0.1.3         1/1/2         -                 O/E2      [110/1]      00h:02m:16s  
10.0.0.0/29         -                1/1/1         -                 C         [0/0]        -            
10.0.0.2/32         -                1/1/1         -                 L         [0/0]        -            
10.0.1.0/29         -                1/1/2         -                 C         [0/0]        -            
10.0.1.2/32         -                1/1/2         -                 L         [0/0]        -            
10.255.255.1/32     10.0.1.3         1/1/2         -                 O         [110/110]    00h:21m:10s  
10.255.255.2/32     -                loopback0     -                 L         [0/0]        -            
172.16.16.0/24      10.0.1.3         1/1/2         -                 O         [110/110]    00h:21m:10s  

Total Route Count : 8                                          

Testing Failover

Let’s see what happens, when the primary firewall disappears. I will just shut it off. To test the behavior, I will send a (almost) continuous ping to “1.1.1.1” from one of the cores. We will also check the routes afterward.

core2(config)# ping 1.1.1.1 repetitions 1000
...
...
108 bytes from 1.1.1.1: icmp_seq=9 ttl=51 time=27.1 ms
108 bytes from 1.1.1.1: icmp_seq=10 ttl=51 time=23.3 ms
108 bytes from 1.1.1.1: icmp_seq=11 ttl=51 time=27.0 ms
108 bytes from 1.1.1.1: icmp_seq=12 ttl=51 time=24.2 ms
ping4: sendmsg: Network is unreachable
ping4: sendmsg: Network is unreachable
ping4: sendmsg: Network is unreachable
From 10.0.0.3 icmp_seq=47 Destination Net Unreachable
From 10.0.0.3 icmp_seq=48 Destination Net Unreachable
From 10.0.0.3 icmp_seq=49 Destination Net Unreachable
108 bytes from 1.1.1.1: icmp_seq=50 ttl=52 time=27.6 ms
108 bytes from 1.1.1.1: icmp_seq=51 ttl=52 time=26.2 ms
108 bytes from 1.1.1.1: icmp_seq=52 ttl=52 time=25.4 ms

The switchover took around 10-20sec, and we lost around 40 pings.

And here are the new routes on the core2.

core2(config)# show ip route

Displaying ipv4 routes selected for forwarding

Origin Codes: C - connected, S - static, L - local
              R - RIP, B - BGP, O - OSPF
Type Codes:   E - External BGP, I - Internal BGP, V - VPN, EV - EVPN
              IA - OSPF internal area, E1 - OSPF external type 1
              E2 - OSPF external type 2

VRF: default

Prefix              Nexthop          Interface     VRF(egress)       Origin/   Distance/    Age
                                                                     Type      Metric
--------------------------------------------------------------------------------------------------------
0.0.0.0/0           10.0.0.3         1/1/1         -                 O/E2      [110/1]      00h:00m:46s  
10.0.0.0/29         -                1/1/1         -                 C         [0/0]        -            
10.0.0.2/32         -                1/1/1         -                 L         [0/0]        -            
10.0.1.0/29         -                1/1/2         -                 C         [0/0]        -            
10.0.1.2/32         -                1/1/2         -                 L         [0/0]        -            
10.255.255.1/32     10.0.0.3         1/1/1         -                 O         [110/110]    00h:00m:46s  
10.255.255.2/32     -                loopback0     -                 L         [0/0]        -            
172.16.16.0/24      10.0.0.3         1/1/1         -                 O         [110/110]    00h:00m:46s 

We can see that the IP for the “nexthop” changed.

I tried to lower the switchover time. I would like to test BFD, but as far as I am aware, Sophos does not support it.

Trying to adjust the dead-interval and hello-interval didn’t really change anything.

So unfortunately, this whole process does not allow a smooth failover, even when manually switching to the passive device.

Firewall Rules

While we are at it, why not take a look at how to correctly set firewall rules. To test the rules, we will set up a test network on one of the core switches.

I removed every firewall rule on the Sophos Firewalls, so we can start with a clean slate.

Test network configuration

We will create a test network and distribute it with OSPF on core1 first.

core1(config)# interface 1/1/3
core1(config-if)# no shutdown
core1(config-if)# ip address 192.168.20.254/24
core1(config-if)# ip ospf 1 area 0
core1(config-if)# no ip ospf passive 

Testing ping

I gave the client the IP address 192.168.20.2/24. First, we should check if we can reach our default gateway.

fedora-kde :: ~ » ifconfig eth0 192.168.20.2/24
fedora-kde :: ~ » ping 192.168.20.254
PING 192.168.20.254 (192.168.20.254) 56(84) bytes of data.
64 bytes from 192.168.20.254: icmp_seq=1 ttl=64 time=2.01 ms
64 bytes from 192.168.20.254: icmp_seq=2 ttl=64 time=1.83 ms
64 bytes from 192.168.20.254: icmp_seq=3 ttl=64 time=1.70 ms

Creating default route

Great. Next, we should set the default route.

fedora-kde :: ~ » ip route add default via 192.168.20.254
fedora-kde :: ~ » route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.20.254  0.0.0.0         UG    0      0        0 eth0
192.168.20.0    *               255.255.255.0   U     0      0        0 eth0

Second test ping

Let’s ping the Sophos Firewall.

fedora-kde :: ~ » ping 10.0.0.3 -c3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=63 time=2.29 ms
64 bytes from 10.0.0.3: icmp_seq=2 ttl=63 time=1.83 ms
64 bytes from 10.0.0.3: icmp_seq=3 ttl=63 time=2.27 ms

--- 10.0.0.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.835/2.132/2.290/0.210 ms
fedora-kde :: ~ » ping 10.0.1.3 -c3
PING 10.0.1.3 (10.0.1.3) 56(84) bytes of data.
From 192.168.20.254 icmp_seq=1 Destination Host Unreachable
From 192.168.20.254 icmp_seq=2 Destination Host Unreachable
From 192.168.20.254 icmp_seq=3 Destination Host Unreachable

--- 10.0.1.3 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2024ms
pipe 3

The ping to the second IP failed. This is most likely caused by the simulation in GNS3. Since the Aruba switches have no way of verifying if a physical link is active or not. Disabling the interface 1/1/2 on the first and 1/1/1 on the second switch respectively corrects the routes and traffic flow.

core1(config)# interface 1/1/2
core1(config-if)# shutdown
core1(config-if)# show ip route
Displaying ipv4 routes selected for forwarding

Origin Codes: C - connected, S - static, L - local
              R - RIP, B - BGP, O - OSPF
Type Codes:   E - External BGP, I - Internal BGP, V - VPN, EV - EVPN
              IA - OSPF internal area, E1 - OSPF external type 1
              E2 - OSPF external type 2

VRF: default

Prefix              Nexthop          Interface     VRF(egress)       Origin/   Distance/    Age
                                                                     Type      Metric
--------------------------------------------------------------------------------------------------------
0.0.0.0/0           10.0.0.3         1/1/1         -                 O/E2      [110/1]      01h:10m:24s  
10.0.0.0/29         -                1/1/1         -                 C         [0/0]        -            
10.0.0.1/32         -                1/1/1         -                 L         [0/0]        -            
10.0.1.0/29         10.0.0.3         1/1/1         -                 O         [110/110]    00h:00m:41s  
10.255.255.1/32     -                loopback0     -                 L         [0/0]        -            
10.255.255.2/32     192.168.254.2    vlan254       -                 O         [110/50]     00h:46m:15s  
172.16.16.0/24      10.0.0.3         1/1/1         -                 O         [110/110]    01h:10m:24s  
192.168.20.0/24     -                1/1/3         -                 C         [0/0]        -            
192.168.20.254/32   -                1/1/3         -                 L         [0/0]        -            
192.168.254.0/30    -                vlan254       -                 C         [0/0]        -            
192.168.254.1/32    -                vlan254       -                 L         [0/0]        -            

Total Route Count : 11

Testing the ping again.

fedora-kde :: ~ » ping 10.0.1.3 -c3
PING 10.0.1.3 (10.0.1.3) 56(84) bytes of data.
64 bytes from 10.0.1.3: icmp_seq=1 ttl=63 time=2.13 ms
64 bytes from 10.0.1.3: icmp_seq=2 ttl=63 time=1.19 ms
64 bytes from 10.0.1.3: icmp_seq=3 ttl=63 time=1.45 ms

--- 10.0.1.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 1.199/1.594/2.132/0.395 ms

Testing ping to WAN

Great. Now let’s ping 1.1.1.1

fedora-kde :: ~ » ping 1.1.1.1 -c2
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.

--- 1.1.1.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1009ms

As expected, it does not work. Let’s create a firewall rule.

Creating the first Rule

Navigate to “Rules and policies” and click on “Add firewall rule” -> “New firewall rule”. Select the source zone and add a new network in “source networks and devices”.

Type in the test network we created earlier and save it.

Select “WAN” for the “destination zone” and “ICMP” for the “Services”. Save the new rule.

Now we can test the ping again.

fedora-kde :: ~ » ping 1.1.1.1 -c2
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=50 time=36.4 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=50 time=23.3 ms

--- 1.1.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 23.314/29.861/36.409/6.549 ms

Let’s create one more rule for web browsing. It’s the same rule for the most part. Just add HTTP and HTTPs to the Services and make sure that DNS is allowed for the WAN zone (this is the default behavior). If you want to use an external DNS server, you need to add DNS to the firewall rule.

I go into a bit more detail on how to set up the firewall rules in this post.

That’s it. Now web browsing should also work. Make sure that the DNS settings on your client are correct.

ArubaOS-CX ACL configuration

The last thing I want to test is ACL to control traffic on the core switches. For this, I created another network on the core2 switch.

core2(config)# interface 1/1/3
core2(config-if)# no shutdown
core2(config-if)# ip address 192.168.30.254/24
core2(config-if)# ip ospf 1 area 0
core2(config-if)# no ip ospf passive

The first client has the IP address 192.168.20.2/24, and the second one 192.168.30.2/24. Let’s test the reachability between the clients.

client1 :: ~ » ping 192.168.30.2 -c2
PING 192.168.30.2 (192.168.30.2) 56(84) bytes of data.
64 bytes from 192.168.30.2: icmp_seq=1 ttl=62 time=3.66 ms
64 bytes from 192.168.30.2: icmp_seq=2 ttl=62 time=4.29 ms

--- 192.168.30.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.662/3.977/4.293/0.321 ms

It should also work in the other direction, but let’s verify.

client2 :: ~ » ping 192.168.20.2 -c2
PING 192.168.20.2 (192.168.20.2) 56(84) bytes of data.
64 bytes from 192.168.20.2: icmp_seq=1 ttl=62 time=3.71 ms
64 bytes from 192.168.20.2: icmp_seq=2 ttl=62 time=4.59 ms

--- 192.168.20.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.719/4.155/4.592/0.441 ms

Alright. Next, we want to create an ACL to control the traffic. I don’t want the two networks to be able to communicate with each other but still allow traffic to different networks.

core1(config)# access-list ip FILTER_TEST_NETWORK_A
core1(config-acl-ip)# deny any 192.168.30.0/24 192.168.20.0/24
core1(config-acl-ip)# deny any 192.168.20.0/24 192.168.30.0/24
core1(config-acl-ip)# permit any any any
# This syncs the ACL to the secondary switch
core1(config-acl-ip)# vsx-sync

Next, we need to apply the settings to an interface, in our case the interface with the test network.

core1(config)# interface 1/1/3
core1(config-if)# apply access-list ip FILTER_TEST_NETWORK_A in

It should be enough to set this on either switch, but I will apply it to both to be consistent.

core2(config)# interface 1/1/3
core2(config-if)# apply access-list ip FILTER_TEST_NETWORK_A in

Testing connectivity again.

client2 :: ~ » ping 192.168.20.2 -c2
PING 192.168.20.2 (192.168.20.2) 56(84) bytes of data.

--- 192.168.20.2 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1020ms

client2 :: ~ » ping 1.1.1.1 -c2
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=51 time=25.1 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=51 time=30.6 ms

--- 1.1.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 25.161/27.901/30.642/2.745 ms

We cannot reach the other test network, but internet traffic still works. Great.

If we want to deny HTTPs (443/TCP) on the switch level, we can add it to the ACL.

core1(config)# access-list ip FILTER_TEST_NETWORK_A
core1(config-acl-ip)# no 20 permit any any any
core1(config-acl-ip)# deny tcp 192.168.20.0/24 0.0.0.0/0 eq 443
core1(config-acl-ip)# permit any any any

Let’s take a look at the access-list

core1(config)# show access-list
Type       Name                                              
  Sequence Comment                                           
           Action                          L3 Protocol       
           Source IP Address               Source L4 Port(s) 
           Destination IP Address          Destination L4 Port(s)
           Additional Parameters                             
-------------------------------------------------------------------------------
IPv4       FILTER_TEST_NETWORK_A
           VSX synchronization: Enabled   
        10 
           deny                            any  
           192.168.30.0/255.255.255.0      
           192.168.20.0/255.255.255.0      
        30 
           deny                            any  
           192.168.20.0/255.255.255.0      
           192.168.30.0/255.255.255.0      
        50 
           deny                            tcp 
           192.168.20.0/255.255.255.0      
           0.0.0.0/0.0.0.0                  = https
        60 
           permit                          any  
           any                                                 
           any                             
core1(config)# show running-config
...
access-list ip FILTER_NETWORK_A
    vsx-sync
    !
    10 deny any 192.168.30.0/255.255.255.0 192.168.20.0/255.255.255.0
    30 deny any 192.168.20.0/255.255.255.0 192.168.30.0/255.255.255.0
    50 deny tcp 192.168.20.0/255.255.255.0 0.0.0.0/0.0.0.0 eq https
    60 permit any any any
...

That’s about it. Below is the whole switch running configuration.

Till next time.

core1

core2

Leave a Reply