on
27-Aug-2023
18:00
- edited on
28-Aug-2023
12:29
by
LiefZimmerman
I have a customer who uses BIG-IP SSL Orchestrator (SSLo) on premises for inbound traffic, and they wanted to replicate this architecture in several Azure regions. This article explains how to achieve this, and is specifically focused on an Inbound L3 use case in Azure.
An overview of SSL Orchestrator functionality
When I first learned about SSLo, I was struck because the architecture made so much sense. I was a customer at the time. We had two different firewalls that were daisy-chained in the path of all inbound/outbound Internet traffic, performing TLS decryption on each. This caused typical problems and an informal team narrative of "don't fix an issue unless you want to own it forever!" Here's an overview of the problems we had.
Fortunately SSLo offers a great alternative that not only solves these problems but offers more solutions too. Those solutions hit home when I was considering my recent customer who uses SSLo for inbound traffic on-premises and wanted to do the same in Azure. (I will write a future post about outbound TLS decryption in Azure. For now, this article focuses on inbound traffic only).
My customer wanted to replicate their on-premises SSLo architecture with the same in Azure, for good reason. I'll list their requirements:
Here's a lab I put together to show a working SSLo architecture in Azure.
Note: this customer also wants to use the Azure Gateway Load Balancer and have a separate pair of Palo Alto devices doing nothing but Layer 3/4 edge firewalling. So I have built that out for them too.
Now that we've seen an overview of their architecture, I will run through some of the finer points of this lab for anyone considering this architecture.
I've written about Azure Gateway Load Balancer (GWLB) in a previous article. I discussed how to put BIG-IP behind Azure GWLB, but in this scenario the customer wants to use Palo Alto devices as an "edge" firewall. They aren't decrypting traffic here, just performing L3/L4 inspection. Azure's GWLB allows them to run multiple standalone firewalls without worrying about src/dest NAT'ing and other network challenges. I used this guide to set up Palo Alto devices behind Azure's GWLB.
BIG-IP is deployed as Active/Standby pair behind a standard public Azure Load Balancer (LB). This LB has a front end IP config that referenes the GWLB in another VNET, but then passes traffic without performing Destination NAT to BIG-IP. This is done by enabling "floating IP" on the Azure LB rule. The BIG-IP has a VIP that is listening on the same public IP that is configured as the Azure LB front end IP. This way, BIG-IP sees true source and destination IP.
SSLo is licensed and configured on BIG-IP for an Inbound L3 architecture, which is selected in the Guided Configuration wizard. The wizard allows me to apply TLS decryption at the VIP, pass traffic unencrypted to a pool of inspection devices, and to expect that traffic to be returned to the BIG-IP on another interface. After that inspection, traffic is then sent by BIG-IP to pool members. SNAT and reencryption are possible, but in this case I'm only SNAT'ing traffic before sending unencrypted to web servers.
If you're looking at my lab diagram, you should know that 10.0.6.10 and 10.0.7.10 are the floating Self IP's I have on the BIG-IP's, in the subnets "sslo-in" and "sslo-out" respectively. These are referenced in the UDR's required for routing. Upon failover of this Active/Standby pair, the Cloud Failover Extension (CFE) ensures these IP addresses move between the 2 Azure VM's.
Many customers use Palo Alto as a WAF inspection device. This is a different set of devices from the "edge" devices that are behind GWLB. These devices expect to receive traffic unencrypted on HTTP port 80. They are set up in a basic manner: they have 1 NIC and Azure's default GW for the subnet that this NIC is in. However, I have also done 2 interesting things with these Palo Alto devices:
If we reference my lab diagram above, 10.0.7.6 is the IP address of the frontend IP configuration in the Internal Azure Load Balancer. The Palo Alto appliances (I have deployed 2 of them) have a single NIC each, and their IP addresses are 10.0.3.4/24 and 10.0.3.5/24. But, they both have an additional IP address of 10.0.7.6/32 assigned to the same NIC only for the purpose of health checks from F5 BIG-IP.
Why would the PA firewalls need the additional /32 address? Because I have the Internal Azure Load Balancer configured with a single LB rule: allow HA ports (all ports), and enable Floating IP (don't perform Destination NAT). The BIG-IP believes it has a single inspection device at 10.0.7.6, and sends health checks on HTTP to this address. The Azure LB forwards these health checks, without NAT'ing, to their backend pool members.
My main goal for this article is to demonstrate a working architecture of SSLO that allows for High Availability in an inbound, L3 scenario in Azure. Please, message me or leave a comment if you want more info, or reach out to your account team. And thanks for reading!