Introduction
Ce document décrit comment configurer un ASA avec des paramètres pour exclure le trafic destiné à Microsoft Office 365 (Microsoft Teams) et Cisco Webex de la connexion VPN.
Informations générales
La configuration de l'appliance ASA (Adaptive Security Appliance) inclut également des exclusions d'adresses réseau et des exclusions dynamiques basées sur le nom de domaine complet (FQDN) 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 de destinations IPv4 et IPv6 à exclure du tunnel. Malheureusement, la liste des adresses est dynamique et peut éventuellement changer. Reportez-vous à la section Configuration pour un script python, et un lien vers une boucle en ligne python read-eval-print (REPL) qui peut être utilisée pour récupérer la liste et générer un exemple de configuration.
Fractionnement dynamique de tunnel
En plus de la liste d'adresses réseau à exclusion fractionnée, la tunnellisation fractionnée dynamique a été ajoutée à 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 peut passer ou non 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 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
)
)
Remarque : Microsoft recommande d'exclure le trafic destiné aux principaux services Office 365 de l'étendue de la connexion VPN en configurant la transmission tunnel partagée à l'aide des plages d'adresses IPv4 et IPv6 publiées. Pour optimiser les performances et optimiser l'utilisation 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ées catégorie Optimisation dans la documentation Microsoft) peut être acheminé directement, en dehors du tunnel VPN. Référez-vous à Optimiser la connectivité d'Office 365 pour les utilisateurs distants utilisant la tunnellisation partagée VPN pour plus d'informations détaillées sur cette recommandation.
Remarque : début avril 2020, Microsoft Teams dépendait du fait que la plage IP 10.107.60.1/32 devait être exclue du tunnel. Voir Configuration et sécurisation du trafic multimédia Teams pour plus d'informations.
Vérification
Une fois qu'un utilisateur est connecté, vous voyez les routes non sécurisées remplies avec les adresses fournies dans la liste de contrôle d'accès ainsi que la liste d'exclusion de tunnel dynamique.