Table des matières

Introduction

Informations générales

transmission tunnel partagée

Fractionnement dynamique de tunnel

Configuration

Vérification

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.