Inleiding
Dit document beschrijft hoe u een ASA kunt configureren met instellingen om verkeer uit te sluiten dat is bestemd voor Microsoft Office 365 (Microsoft Teams) en Cisco Webex van VPN-verbinding.
Achtergrondinformatie
Het configureren van adaptieve security applicatie (ASA) omvat ook netwerkadresuitsluitingen en dynamische, volledig gekwalificeerde, op FQDN gebaseerde uitsluitingen voor AnyConnect-clients die deze applicatie ondersteunen.
Split-tunneling
ASA moet worden geconfigureerd om de gespecificeerde lijst van IPv4- en IPv6-bestemmingen uit te sluiten van de tunnel. Helaas is de adressenlijst dynamisch en kan deze mogelijk veranderen. Zie het gedeelte Configuration voor een pythonscript en een link naar een online python read-eval-print loop (REPL) die kan worden gebruikt om de lijst op te halen en een voorbeeldconfiguratie te genereren.
Dynamische splitter-tunneling
In aanvulling op de gesplitste lijst van uitsluitingen van netwerkadres, werd dynamische gesplitste tunneling toegevoegd in AnyConnect 4.6 voor Windows en Mac. Dynamische gesplitste tunneling gebruikt de FQDN om te bepalen of de verbinding over de tunnel kan gaan. Het pythonscript bepaalt ook de FQDN’s van de eindpunten die aan de aangepaste AnyConnect-kenmerken moeten worden toegevoegd.
Configuratie
Ofwel dit script uitvoeren in een Python 3 REPL, ofwel het uitvoeren in een openbare REPL omgeving zoals AnyConnectO365DynamicExclude
import urllib.request
import uuid
import json
import re
def print_acl_lines(acl_name, ips, section_comment):
slash_to_mask = (
"0.0.0.0",
"192.0.2.1",
"192.0.2.1",
"10.224.0.0",
"10.240.0.0",
"10.248.0.0",
"10.252.0.0",
"10.254.0.0",
"10.255.0.0",
"10.255.128.0",
"10.255.192.0",
"10.255.224.0",
"10.255.240.0",
"10.255.248.0",
"10.255.252.0",
"10.255.254.0",
"10.255.255.0",
"10.255.255.128",
"10.255.255.192",
"10.255.255.224",
"10.255.255.240",
"10.255.255.248",
"10.255.255.252",
"10.255.255.254",
"10.255.255.255",
"10.255.255.255",
"10.255.255.255",
"10.255.255.255",
"10.255.255.240",
"10.255.255.248",
"10.255.255.252",
"10.255.255.254",
"10.255.255.255",
)
print(
"access-list {acl_name} remark {comment}".format(
acl_name=acl_name, comment=section_comment
)
)
for ip in sorted(ips):
if ":" in ip:
# IPv6 address
print(
"access-list {acl_name} extended permit ip {ip} any6".format(
acl_name=acl_name, ip=ip
)
)
else:
# IPv4 address. Convert to a mask
addr, slash = ip.split("/")
slash_mask = slash_to_mask[int(slash)]
print(
"access-list {acl_name} extended permit ip {addr} {mask} any4".format(
acl_name=acl_name, addr=addr, mask=slash_mask
)
)
# Fetch the current endpoints for O365
http_res = urllib.request.urlopen(
url="https://endpoints.office.com/endpoints/worldwide?clientrequestid={}".format(
uuid.uuid4()
)
)
res = json.loads(http_res.read())
o365_ips = set()
o365_fqdns = set()
for service in res:
if service["category"] == "Optimize":
for ip in service.get("ips", []):
o365_ips.add(ip)
for fqdn in service.get("urls", []):
o365_fqdns.add(fqdn)
# Generate an acl for split excluding For instance
print("##### Step 1: Create an access-list to include the split-exclude networks\n")
acl_name = "ExcludeSass"
# O365 networks
print_acl_lines(
acl_name=acl_name,
ips=o365_ips,
section_comment="v4 and v6 networks for Microsoft Office 365",
)
# Microsoft Teams
# https://docs.microsoft.com/en-us/office365/enterprise/office-365-vpn-implement-split-tunnel#configuring-and-securing-teams-media-traffic
print_acl_lines(
acl_name=acl_name,
ips=["10.107.60.1/32"],
section_comment="v4 address for Microsoft Teams"
)
# Cisco Webex - Per https://help.webex.com/en-us/WBX000028782/Network-Requirements-for-Webex-Teams-Services
webex_ips = [
"10.68.96.1/19",
"10.114.160.1/20",
"10.163.32.1/19",
"192.0.2.1/18",
"192.0.2.2/19",
"198.51.100.1/20",
"203.0.113.1/19",
"203.0.113.254/19",
"203.0.113.2/19",
"172.29.192.1/19",
"203.0.113.1/20",
"10.26.176.1/20",
"10.109.192.1/18",
"10.26.160.1/19",
]
print_acl_lines(
acl_name=acl_name,
ips=webex_ips,
section_comment="IPv4 and IPv6 destinations for Cisco Webex",
)
# Edited. April 1st 2020
# Per advice from Microsoft they do NOT advise using dynamic split tunneling for their properties related to Office 365
#
print(
"\n\n##### Step 2: Create an Anyconnect custom attribute for dynamic split excludes\n"
)
print("SKIP. Per Microsoft as of April 2020 they advise not to dynamically split fqdn related to Office365")
#print(
# """
#webvpn
# anyconnect-custom-attr dynamic-split-exclude-domains description dynamic-split-exclude-domains
#
#anyconnect-custom-data dynamic-split-exclude-domains saas {}
#""".format(
# ",".join([re.sub(r"^\*\.", "", f) for f in o365_fqdns])
# )
#)
#
print("\n##### Step 3: Configure the split exclude in the group-policy\n")
print(
"""
group-policy GP1 attributes
split-tunnel-policy excludespecified
ipv6-split-tunnel-policy excludespecified
split-tunnel-network-list value {acl_name}
""".format(
acl_name=acl_name
)
)
Opmerking: Microsoft raadt aan verkeer dat is bestemd voor de belangrijkste Office 365-services uit te sluiten van het bereik van een VPN-verbinding door gesplitste tunneling te configureren met behulp van gepubliceerde IPv4- en IPv6-adresbereiken. Voor de beste prestaties en het meest efficiënte gebruik van VPN-capaciteit kan verkeer naar deze speciale IP-adresbereiken die gekoppeld zijn aan Office 365 Exchange Online, SharePoint Online en Microsoft Teams (in Microsoft-documentatie de categorie Optimaliseren genoemd) direct worden gerouteerd, buiten de VPN-tunnel. Raadpleeg Office 365-connectiviteit optimaliseren voor externe gebruikers met VPN-gesplitste tunneling voor meer informatie over deze aanbeveling.
Opmerking: Vanaf begin april 2020 is Microsoft Teams afhankelijk van het feit dat IP-bereik 10.107.60.1/32 moet worden uitgesloten van de tunnel. Zie Mediaverkeer van Teams configureren en beveiligen voor meer informatie.
Verificatie
Zodra een gebruiker is verbonden, ziet u de niet-beveiligde routers gevuld met de adressen in de ACL en in de lijst met uitsluitingen van Dynamische tunnels.