Introduction
Ce document décrit comment configurer un dispositif de sécurité adaptatif (ASA) avec des paramètres pour exclure du réseau VPN le trafic destiné à Microsoft Office 365 (y compris les équipes Microsoft) et Cisco Webex. Il intègre des exclusions d’adresses réseau et des exclusions dynamiques (basées sur un nom de domaine complet) pour les clients AnyConnect qui le prennent en charge.
transmission tunnel partagée
L'ASA doit être configuré pour « exclure » la liste spécifiée des destinations IPv4 et IPv6 à exclure du tunnel. Malheureusement, la liste des adresses est dynamique et pourrait potentiellement changer. Reportez-vous à la section Configuration pour obtenir un script python et un lien vers une boucle d'impression en lecture-écriture python en ligne (REPL) qui peut être utilisée pour récupérer la liste et générer un exemple de configuration.
Tunnellisation fractionnée dynamique
En plus de la liste d’adresses réseau à exclusion partagée, la transmission tunnel partagée dynamique a été ajoutée dans AnyConnect 4.6 pour Windows et Mac. La transmission tunnel partagée dynamique utilise le nom de domaine complet (FQDN) afin de déterminer si la connexion doit passer par le tunnel. Le script python détermine également les FQDN des points de terminaison à ajouter aux attributs AnyConnect personnalisés.
Configuration
Exécutez ce script dans un REPL Python 3 ou exécutez-le dans un environnement REPL public tel que https://repl.it/@ministryofjay/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",
"128.0.0.0",
"192.0.0.0",
"224.0.0.0",
"240.0.0.0",
"248.0.0.0",
"252.0.0.0",
"254.0.0.0",
"255.0.0.0",
"255.128.0.0",
"255.192.0.0",
"255.224.0.0",
"255.240.0.0",
"255.248.0.0",
"255.252.0.0",
"255.254.0.0",
"255.255.0.0",
"255.255.128.0",
"255.255.192.0",
"255.255.224.0",
"255.255.240.0",
"255.255.248.0",
"255.255.252.0",
"255.255.254.0",
"255.255.255.0",
"255.255.255.128",
"255.255.255.192",
"255.255.255.224",
"255.255.255.240",
"255.255.255.248",
"255.255.255.252",
"255.255.255.254",
"255.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=["13.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 = [
"64.68.96.0/19",
"66.114.160.0/20",
"66.163.32.0/19",
"170.133.128.0/18",
"173.39.224.0/19",
"173.243.0.0/20",
"207.182.160.0/19",
"209.197.192.0/19",
"216.151.128.0/19",
"114.29.192.0/19",
"210.4.192.0/20",
"69.26.176.0/20",
"62.109.192.0/18",
"69.26.160.0/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
)
)
Note: Microsoft recommande d'exclure du champ d'application de la connexion VPN le trafic destiné aux services Office 365 clés en configurant la transmission tunnel partagée à l'aide de plages d'adresses IPv4 et IPv6 publiées. Pour optimiser les performances et l'utilisation la plus efficace de la capacité VPN, le trafic vers ces plages d'adresses IP dédiées associées à Office 365 Exchange Online, SharePoint Online et Microsoft Teams (appelé catégorie Optimisation dans la documentation Microsoft) doit être acheminé directement, en dehors du tunnel VPN. Référez-vous à Optimiser la connectivité Office 365 pour les utilisateurs distants utilisant la tunnellisation partagée VPN pour plus d'informations sur cette recommandation.
Note: Depuis début avril 2020, Microsoft Teams dépend de l'exclusion de la plage IP 13.107.60.1/32 du tunnel. Reportez-vous à Configuration et sécurisation du trafic multimédia des équipes pour plus d'informations.
Vérification
Une fois qu'un utilisateur est connecté, il doit voir les routes non sécurisées renseignées avec les adresses fournies dans la liste de contrôle d'accès ainsi que la liste d'exclusion de tunnel dynamique.

