Керування кінцевими точками Office 365

Мережеве підключення до Office 365

8.3.2018. Підключення до Office 365 складаються з численних довірених мережевих запитів, які найкраще виконувати через близьку до користувача вихідну точку з низькою затримкою. Деякі підключення до Office 365 можна оптимізувати.

  1. Переконайтеся, що ваш брандмауер дозволяє пряме підключення до кінцевих точок Office 365.

  2. Використовуйте інфраструктуру проксі-сервера, щоб дозволити інтернет-підключення до неопублікованих кінцевих вузлів і мереж зі зворотними масками.

  3. Підтримуйте оптимальну конфігурацію периметра мережі.

  4. Забезпечте найвищу якість підключення.

  5. Ознайомтеся зі статтею про підключення до мережі Office 365, щоб дізнатися, які принципи підключення дають змогу безпечно розпоряджатися трафіком Office 365 і забезпечувати найвищу продуктивність.

Підключення до Office 365 через брандмауери та проксі-сервери.

Оновлення вихідних списків довірених брандмауера

Ви можете оптимізувати свою мережу, надсилаючи всі довірені мережеві запити Office 365 безпосередньо через брандмауер і обходячи при цьому всі додаткові перевірки або обробки пакетного рівня. Це зменшить негативний вплив на продуктивність через затримку й вимоги до пропускної спроможності периметра. Найпростіший спосіб вибрати довірені мережеві запити – скористатися готовими PAC-файлами, які можна знайти на вкладці Проксі-сервери вище.

Якщо брандмауер блокує вихідний трафік, переконайтеся, що всі IP-адреси й імена FQDN, наведені в цьому XML-файлі як обов’язкові, додано до списку довірених. Визначте всі служби, для яких потрібно використовувати сторонні служби. Ми не надаємо IP-адреси для сторонніх служб, як-от постачальників сертифікатів, мереж доставки вмісту, постачальників DNS тощо. Щоб забезпечити всі можливості Office 365, потрібно встановити зв’язок зі всіма кінцевими вузлами відповідно до вимог Office 365, незалежно від обсягу опублікованої про них інформації.

Більшість кінцевих вузлів не мають опублікованої IP-адреси, і їх указано як домени із сертифікатом Wildcard без повного доменного імені. Щоб використовувати ці функції, потрібно мати змогу зіставляти такі мережеві запити із запитаною IP-адреси й надсилати їх через Інтернет.

Автоматизуйте процес за допомогою брандмауера, який аналізує файл XML від вашого імені й автоматично оновлює правила на основі даних про служби або функції, які ви плануєте спрямувати безпосередньо через брандмауер. Крім того, ви можете скористатися створеним спільнотою інструментом Azure Range, який аналізує XML і дає змогу експортувати дані у форматі конфігурації списку ACL або Cisco XE Route, звичайного тексту чи CSV.

Розгорнуте пояснення мережевих призначень див. на нашому довідковому сайті, а також у журналі змін на основі RSS, де ви могли підписатися на зміни.

Настроювання вихідних шляхів за допомогою PAC-файлів

Використовуйте файли PAC або WPAD, щоб керувати мережевими запитами, пов’язаними з Office 365, для яких не надано IP-адреси. Зазвичай мережеві запити, надіслані через проксі-сервер або пристрій периметра, спричиняють додаткову затримку. Автентифікація на проксі-сервері зумовлює найбільшу затримку, однак інші служби, як-от пошук репутації та перевірка пакетів, можуть погіршувати умови роботи користувача. Крім того, щоб обробити всі мережеві запити, таким пристроям периметра потрібно достатньо пропускної здатності. Радимо обходити проксі-сервер або інфраструктуру перевірки для прямих мережевих запитів Office 365.

За допомогою одного з наших PAC-файлів визначте, скільки мережевого трафіку надсилається на проксі-сервер, а скільки – до брандмауера. Щоб дізнатися більше про файли PAC або WPAD, прочитайте цей допис одного з консультантів Office 365 про розгортання PAC-файлів. Візьміть ці дані за основу та пристосуйте їх відповідно до власних потреб.

PAC-файли оновлено 5 квітня 2018 р.

У першому прикладі показано рекомендований спосіб керування кінцевими точками лише через Інтернет. Це дає змогу обійти проксі-сервер місць призначення Office 365 з опублікованою IP-адресою й надсилати мережеві запити, що залишилися, через проксі-сервер.

Фрагмент коду:

// JavaScript source code

//April 2018 - Updates go live 1st May2018
//This PAC file contains all FQDNs needed for all services and splits the traffic between those which Microsoft can provide IPs for (so can be sent through a managed firewall with conditional access if desired) and those which IPs cannot be provided for, so need to go to an unrestricted proxy or egress. 
//Due to the use of wildcards, some extra logic is provided to send traffic to the proxy before a 'direct' wildcard is hit.
//Includes Core ProPlus URLs but not Office Mobile/IPAD/IOS/ANDROID fqdns from https://support.office.com/en-gb/article/Network-requests-in-Office-365-ProPlus-eb73fcd1-ca88-4d02-a74b-2dd3a9f3364d
//Every Effort is made to ensure 100% accuracy but this PAC should be used as an example and cross-checked with your needs and the Office 365 URL & IP page
//Intended only for Worldwide Office 365 instances, which the vast majority of customers will be using

function FindProxyForURL(url, host)
{
    // Define proxy server
    var proxyserver = "PROXY 10.10.10.10:8080";
    var proxyserver2 = "PROXY 10.10.10.11:8080";
    // Make host lowercase
    var lhost = host.toLowerCase();
    host = lhost;

    //Catch explicit FQDNs which need the proxy but are covered under wildcarded FQDNs which have IPs. This has to be done first before the wildcard is hit

    if ((shExpMatch(host, "quicktips.skypeforbusiness.com"))    
        || (shExpMatch(host, "*.um.outlook.com"))
        || (shExpMatch(host, "r3.res.office365.com"))
        || (shExpMatch(host, "r3.res.outlook.com"))
        || (shExpMatch(host, "r4.res.office365.com"))
        || (shExpMatch(host, "xsi.outlook.com"))
        || (shExpMatch(host, "r1.res.office365.com")))


    {
        return proxyserver;
    }
        //Send FQDNs which Microsoft provide IPs for direct, so they can be sent via a firewall

    else if ((isPlainHostName(host))
    || (shExpMatch(host, "*.api.skype.com"))
    || (shExpMatch(host, "*.aria.microsoft.com"))
    || (shExpMatch(host, "*.asm.skype.com"))
    || (shExpMatch(host, "*.broadcast.skype.com"))
    || (shExpMatch(host, "*.broker.skype.com"))
    || (shExpMatch(host, "*.cc.skype.com"))
    || (shExpMatch(host, "*.config.skype.com"))
    || (shExpMatch(host, "*.conv.skype.com"))
    || (shExpMatch(host, "*.dc.trouter.io"))
    || (shExpMatch(host, "*.lync.com"))
    || (shExpMatch(host, "*.manage.office.com"))
    || (shExpMatch(host, "*.msg.skype.com"))
    || (shExpMatch(host, "*.office365.com"))
    || (shExpMatch(host, "*.onenote.com"))
    || (shExpMatch(host, "*.outlook.com"))
    || (shExpMatch(host, "*.outlook.office.com"))
    || (shExpMatch(host, "*.pipe.aria.microsoft.com"))
    || (shExpMatch(host, "*.pipe.skype.com"))
    || (shExpMatch(host, "*.portal.cloudappsecurity.com"))
    || (shExpMatch(host, "*.protection.office.com"))
    || (shExpMatch(host, "*.sharepoint.com"))
    || (shExpMatch(host, "*.skypeforbusiness.com"))
    || (shExpMatch(host, "*.svc.ms"))
    || (shExpMatch(host, "*.teams.microsoft.com"))
    || (shExpMatch(host, "*.teams.skype.com"))
    || (shExpMatch(host, "*.yammer.com"))
    || (shExpMatch(host, "*.yammerusercontent.com"))
    || (shExpMatch(host, "*broadcast.officeapps.live.com"))
    || (shExpMatch(host, "*excel.officeapps.live.com"))
    || (shExpMatch(host, "*onenote.officeapps.live.com"))
    || (shExpMatch(host, "*powerpoint.officeapps.live.com"))
    || (shExpMatch(host, "*view.officeapps.live.com"))
    || (shExpMatch(host, "*visio.officeapps.live.com"))
    || (shExpMatch(host, "*word-edit.officeapps.live.com"))
    || (shExpMatch(host, "*word-view.officeapps.live.com"))    
    || (shExpMatch(host, "account.office.net"))
    || (shExpMatch(host, "adminwebservice.microsoftonline.com"))
    || (shExpMatch(host, "agent.office.net"))
    || (shExpMatch(host, "api.login.microsoftonline.com"))
    || (shExpMatch(host, "api.passwordreset.microsoftonline.com"))
    || (shExpMatch(host, "apc.delve.office.com"))
    || (shExpMatch(host, "aus.delve.office.com"))
    || (shExpMatch(host, "becws.microsoftonline.com"))
    || (shExpMatch(host, "broadcast.skype.com "))    
    || (shExpMatch(host, "browser.pipe.aria.microsoft.com"))  
    || (shExpMatch(host, "can.delve.office.com"))
    || (shExpMatch(host, "ccs.login.microsoftonline.com"))
    || (shExpMatch(host, "ccs-sdf.login.microsoftonline.com"))
    || (shExpMatch(host, "clientconfig.microsoftonline-p.net"))
    || (shExpMatch(host, "clientlog.portal.office.com"))
    || (shExpMatch(host, "companymanager.microsoftonline.com"))
    || (shExpMatch(host, "config.edge.skype.com"))
    || (shExpMatch(host, "cus-000.tasks.osi.office.net"))
    || (shExpMatch(host, "delve.office.com"))
    || (shExpMatch(host, "device.login.microsoftonline.com"))    
    || (shExpMatch(host, "ea-000.tasks.osi.office.net"))
    || (shExpMatch(host, "eur.delve.office.com"))
    || (shExpMatch(host, "eus-zzz.tasks.osi.office.net"))
    || (shExpMatch(host, "gbr.delve.office.com"))    
    || (shExpMatch(host, "hip.microsoftonline-p.net"))
    || (shExpMatch(host, "hipservice.microsoftonline.com"))
    || (shExpMatch(host, "home.office.com"))
    || (shExpMatch(host, "ind.delve.office.com"))
    || (shExpMatch(host, "jpn.delve.office.com"))
    || (shExpMatch(host, "kor.delve.office.com"))
    || (shExpMatch(host, "lam.delve.office.com"))
    || (shExpMatch(host, "login.microsoft.com"))
    || (shExpMatch(host, "login.microsoftonline.com"))
    || (shExpMatch(host, "login.microsoftonline-p.com"))
    || (shExpMatch(host, "login.windows.net"))
    || (shExpMatch(host, "logincert.microsoftonline.com"))
    || (shExpMatch(host, "loginex.microsoftonline.com"))
    || (shExpMatch(host, "login-us.microsoftonline.com"))     
    || (shExpMatch(host, "manage.office.com"))
    || (shExpMatch(host, "mobile.pipe.aria.microsoft.com"))
    || (shExpMatch(host, "nam.delve.office.com"))
    || (shExpMatch(host, "neu-000.tasks.osi.office.net"))
    || (shExpMatch(host, "nexus.microsoftonline-p.com"))
    || (shExpMatch(host, "nexus.officeapps.live.com"))
    || (shExpMatch(host, "nexusrules.officeapps.live.com"))
    || (shExpMatch(host, "office.live.com"))
    || (shExpMatch(host, "officeapps.live.com"))
    || (shExpMatch(host, "passwordreset.microsoftonline.com"))
    || (shExpMatch(host, "pipe.skype.com"))
    || (shExpMatch(host, "portal.microsoftonline.com"))
    || (shExpMatch(host, "portal.office.com"))
    || (shExpMatch(host, "prod.registrar.skype.com"))
    || (shExpMatch(host, "prod.tpc.skype.com"))
    || (shExpMatch(host, "protection.office.com"))
    || (shExpMatch(host, "provisioningapi.microsoftonline.com"))
    || (shExpMatch(host, "s-0001.s-msedge.net"))
    || (shExpMatch(host, "s-0004.s-msedge.net"))
    || (shExpMatch(host, "scsinstrument-ss-us.trafficmanager.net"))   
    || (shExpMatch(host, "scsquery-ss-asia.trafficmanager.net")) 
    || (shExpMatch(host, "scsquery-ss-eu.trafficmanager.net")) 
    || (shExpMatch(host, "scsquery-ss-us.trafficmanager.net"))
    || (shExpMatch(host, "sea-000.tasks.osi.office.net"))    
    || (shExpMatch(host, "stamp2.login.microsoftonline.com"))
    || (shExpMatch(host, "suite.office.net"))    
    || (shExpMatch(host, "tasks.office.com"))
    || (shExpMatch(host, "teams.microsoft.com"))
    || (shExpMatch(host, "testconnectivity.microsoft.com"))
    || (shExpMatch(host, "webshell.suite.office.com"))
    || (shExpMatch(host, "weu-000.tasks.osi.office.net"))
    || (shExpMatch(host, "wus-000.tasks.osi.office.net"))
    || (shExpMatch(host, "www.office.com")))

      
    {
        return "DIRECT";
    }
    else

        // Send all unknown IP traffic to Proxy for unrestricted access. This section is not necessary if you have a catchall for all other traffic to go to an unfiltered proxy. 
        //However the fqdns required, but for which we dont have IPs for, are listed here incase you need an explicit list.

   if          ((shExpMatch(host, "*.aadrm.com"))
        || (shExpMatch(host, "*.adhybridhealth.azure.com")) 
        || (shExpMatch(host, "*.adl.windows.com"))   
        || (shExpMatch(host, "*.api.microsoftstream.com"))           
        || (shExpMatch(host, "*.api.skype.com"))
        || (shExpMatch(host, "*.assets-yammer.com"))   
        || (shExpMatch(host, "*.azureedge.net"))            
        || (shExpMatch(host, "*.azurerms.com"))
        || (shExpMatch(host, "*.cloudapp.net"))
        || (shExpMatch(host, "*.entrust.net")) 
        || (shExpMatch(host, "*.geotrust.com"))   
        || (shExpMatch(host, "*.helpshift.com"))   
        || (shExpMatch(host, "*.hockeyapp.net"))    
        || (shExpMatch(host, "*.localytics.com"))    
        || (shExpMatch(host, "*.log.optimizely.com"))    
        || (shExpMatch(host, "*.microsoft.com"))
        || (shExpMatch(host, "*.microsoftonline.com"))
        || (shExpMatch(host, "*.microsoftonline-p.com"))
        || (shExpMatch(host, "*.microsoftonline-p.net"))
        || (shExpMatch(host, "*.msecnd.net"))
        || (shExpMatch(host, "*.msedge.net"))      
        || (shExpMatch(host, "*.msocdn.com")) 
        || (shExpMatch(host, "*.mstea.ms"))    
        || (shExpMatch(host, "*.notification.api.microsoftstream.com")) 
        || (shExpMatch(host, "*.o365weve.com"))     
        || (shExpMatch(host, "*.office.com"))   
        || (shExpMatch(host, "*.office.net"))
        || (shExpMatch(host, "*.omniroot.com"))
        || (shExpMatch(host, "*.onmicrosoft.com"))
        || (shExpMatch(host, "*.phonefactor.net"))
        || (shExpMatch(host, "*.public-trust.com"))
        || (shExpMatch(host, "*.search.production.apac.trafficmanager.net"))
        || (shExpMatch(host, "*.search.production.emea.trafficmanager.net"))
        || (shExpMatch(host, "*.search.production.us.trafficmanager.net"))
        || (shExpMatch(host, "*.secure.skypeassets.com"))  
        || (shExpMatch(host, "*.sfbassets.com"))
        || (shExpMatch(host, "*.sharepointonline.com"))
        || (shExpMatch(host, "*.sway.com"))
        || (shExpMatch(host, "*.symcb.com"))
        || (shExpMatch(host, "*.tenor.com"))  
        || (shExpMatch(host, "*.symcd.com"))     
        || (shExpMatch(host, "*.users.storage.live.com"))
        || (shExpMatch(host, "*.verisign.com"))
        || (shExpMatch(host, "*.verisign.net"))
        || (shExpMatch(host, "*.windows.net"))
        || (shExpMatch(host, "account.activedirectory.windowsazure.com"))
        || (shExpMatch(host, "ad.atdmt.com"))
        || (shExpMatch(host, "admin.onedrive.com"))
        || (shExpMatch(host, "ajax.aspnetcdn.com"))
        || (shExpMatch(host, "aka.ms"))
        || (shExpMatch(host, "amp.azure.net"))
        || (shExpMatch(host, "api.microsoftstream.com"))
        || (shExpMatch(host, "apis.live.net"))  
        || (shExpMatch(host, "apps.identrust.com"))  
        || (shExpMatch(host, "assets.onestore.ms"))
        || (shExpMatch(host, "auth.gfx.ms"))
        || (shExpMatch(host, "cacerts.digicert.com"))        
        || (shExpMatch(host, "cdn.odc.officeapps.live.com"))  
        || (shExpMatch(host, "cdn.onenote.net"))
        || (shExpMatch(host, "cdn.optimizely.com")) 
        || (shExpMatch(host, "cert.int-x3.letsencrypt.org"))
        || (shExpMatch(host, "client.hip.live.com"))
        || (shExpMatch(host, "connect.facebook.net"))        
        || (shExpMatch(host, "crl.globalsign.com"))
        || (shExpMatch(host, "crl.globalsign.net"))
        || (shExpMatch(host, "crl.identrust.com"))    
        || (shExpMatch(host, "crl3.digicert.com"))  
        || (shExpMatch(host, "crl4.digicert.com"))
        || (shExpMatch(host, "cus-odc.officeapps.live.com"))              
        || (shExpMatch(host, "cus-roaming.officeapps.live.com"))
        || (shExpMatch(host, "dc.services.visualstudio.com"))
        || (shExpMatch(host, "domains.live.com"))
        || (shExpMatch(host, "ea-000.ocws.officeapps.live.com"))
        || (shExpMatch(host, "ea-roaming.officeapps.live.com"))          
        || (shExpMatch(host, "ecn.dev.virtualearth.net "))   
        || (shExpMatch(host, "eus2-000.ocws.officeapps.live.com"))
        || (shExpMatch(host, "eus2-roaming.officeapps.live.com"))             
        || (shExpMatch(host, "eus-odc.officeapps.live.com"))         
        || (shExpMatch(host, "eus-www.sway-cdn.com"))
        || (shExpMatch(host, "eus-www.sway-extensions.com"))        
        || (shExpMatch(host, "feedback.skype.com"))
        || (shExpMatch(host, "firstpartyapps.oaspapps.com"))
        || (shExpMatch(host, "g.live.com"))
        || (shExpMatch(host, "groupsapi2-prod.outlookgroups.ms"))  
        || (shExpMatch(host, "groupsapi3-prod.outlookgroups.ms"))  
        || (shExpMatch(host, "groupsapi4-prod.outlookgroups.ms"))  
        || (shExpMatch(host, "groupsapi-prod.outlookgroups.ms"))   
        || (shExpMatch(host, "isrg.trustid.ocsp.identrust.com"))   
        || (shExpMatch(host, "latest-swx.cdn.skype.com"))
        || (shExpMatch(host, "liverdcxstorage.blob.core.windowsazure.com"))
        || (shExpMatch(host, "management.azure.com"))        
        || (shExpMatch(host, "mem.gfx.ms"))
        || (shExpMatch(host, "mrodevicemgr.officeapps.live.com"))      
        || (shExpMatch(host, "ncus-000.ocws.officeapps.live.com"))
        || (shExpMatch(host, "ncus-roaming.officeapps.live.com"))                
        || (shExpMatch(host, "neu-000.ocws.officeapps.live.com")) 
        || (shExpMatch(host, "neu-odc.officeapps.live.com"))         
        || (shExpMatch(host, "neu-roaming.officeapps.live.com"))              
        || (shExpMatch(host, "nexus.officeapps.live.com"))
        || (shExpMatch(host, "nexusrules.officeapps.live.com"))
        || (shExpMatch(host, "nps.onyx.azure.net"))
        || (shExpMatch(host, "ocsa.officeapps.live.com"))
        || (shExpMatch(host, "ocsp.digicert.com"))
        || (shExpMatch(host, "ocspx.digicert.com"))
        || (shExpMatch(host, "ocsp.globalsign.com"))
        || (shExpMatch(host, "ocsp.int-x3.letsencrypt.org"))
        || (shExpMatch(host, "ocsp.msocsp.com"))       
        || (shExpMatch(host, "ocsp2.globalsign.com"))
        || (shExpMatch(host, "ocsredir.officeapps.live.com"))
        || (shExpMatch(host, "ocws.officeapps.live.com"))
        || (shExpMatch(host, "odc.officeapps.live.com"))  
        || (shExpMatch(host, "officecdn.microsoft.com.edgekey.net"))            
        || (shExpMatch(host, "officecdn.microsoft.com.edgesuite.net"))              
        || (shExpMatch(host, "ols.officeapps.live.com"))  
        || (shExpMatch(host, "oneclient.sfx.ms"))
        || (shExpMatch(host, "outlook.uservoice.com"))
        || (shExpMatch(host, "platform.linkedin.com"))
        || (shExpMatch(host, "policykeyservice.dc.ad.msft.net"))
        || (shExpMatch(host, "prod.firstpartyapps.oaspapps.com.akadns.net")) 
        || (shExpMatch(host, "r1.res.office365.com"))
        || (shExpMatch(host, "r3.res.office365.com"))
        || (shExpMatch(host, "r4.res.office365.com"))
        || (shExpMatch(host, "s.ytimg.com"))
        || (shExpMatch(host, "scus-000.ocws.officeapps.live.com"))
        || (shExpMatch(host, "scus-odc.officeapps.live.com"))         
        || (shExpMatch(host, "scus-roaming.officeapps.live.com"))                 
        || (shExpMatch(host, "sea-odc.officeapps.live.com"))         
        || (shExpMatch(host, "sea-roaming.officeapps.live.com"))              
        || (shExpMatch(host, "secure.globalsign.com"))
        || (shExpMatch(host, "site-cdn.onenote.net"))
        || (shExpMatch(host, "skydrive.wns.windows.com"))
        || (shExpMatch(host, "skypegraph.skype.com"))  
        || (shExpMatch(host, "skypemaprdsitus.trafficmanager.net"))   
        || (shExpMatch(host, "spoprod-a.akamaihd.net"))  
        || (shExpMatch(host, "ssw.live.com"))
        || (shExpMatch(host, "staffhub.ms"))
        || (shExpMatch(host, "staffhub.uservoice.com"))
        || (shExpMatch(host, "storage.live.com"))
        || (shExpMatch(host, "sway.com"))              
        || (shExpMatch(host, "swx.cdn.skype.com"))  
        || (shExpMatch(host, "telemetry.remoteapp.windowsazure.com"))         
        || (shExpMatch(host, "telemetryservice.firstpartyapps.oaspapps.com"))    
        || (shExpMatch(host, "web.microsoftstream.com"))         
        || (shExpMatch(host, "weu-000.ocws.officeapps.live.com"))
        || (shExpMatch(host, "weu-odc.officeapps.live.com"))         
        || (shExpMatch(host, "weu-roaming.officeapps.live.com"))
        || (shExpMatch(host, "wu.client.hip.live.com"))
        || (shExpMatch(host, "wus-000.ocws.officeapps.live.com"))
        || (shExpMatch(host, "wus-firstpartyapps.oaspapps.com"))  
        || (shExpMatch(host, "wus-odc.officeapps.live.com"))         
        || (shExpMatch(host, "wus-roaming.officeapps.live.com"))
        || (shExpMatch(host, "wus-www.sway-cdn.com"))
        || (shExpMatch(host, "wus-www.sway-extensions.com"))   
        || (shExpMatch(host, "www.digicert.com"))
        || (shExpMatch(host, "www.google-analytics.com"))
        || (shExpMatch(host, "www.onedrive.com"))
        || (shExpMatch(host, "www.remoteapp.windowsazure.com"))
        || (shExpMatch(host, "www.youtube.com"))
        || (shExpMatch(host, "xsi.outlook.com")))


        

    {
        return proxyserver;
    }

    //Catchall for all other traffic to another proxy 

else return proxyserver;
}

У другому прикладі показано рекомендований спосіб керування підключеннями через доступні канали ExpressRoute та Інтернет. Це дає змогу надсилати мережеві запити до місць призначення, які оголошуються в ExpressRout, через канал ExpressRoute, а до місць призначення, які оголошуються в Інтернеті, – через проксі-сервер.

Фрагмент коду:

// JavaScript source code
//April 2018 Update
// Consolidated FQDNs of URLS which are reachable via Microsoft peering over ExpressRoute. All other traffic sent to a proxy in this example. 
//Every Effort is made to ensure 100% accuracy but this PAC should be used as an example and cross-checked with your traffic flow needs and the Office 365 URL & IP page. 
//Intended only for Worldwide Office 365 instances, which the vast majority of customers will be using
//PAC presumes all Office 365 BGP communities/route filters are allowed.

function FindProxyForURL(url, host)
{
    // Define proxy server
    var proxyserver = "PROXY 10.10.10.10:8080";
    // Make host lowercase
    var lhost = host.toLowerCase();
    host = lhost;
    //SUB-FQDNs of ExpressRoutable wildcards which need to be explicitly sent to the proxy at the top of the PAC because they arent ER routable
    if ((shExpMatch(host, "xsi.outlook.com"))
        || (shExpMatch(host, "r3.res.outlook.com"))
        || (shExpMatch(host, "quicktips.skypeforbusiness.com"))
        || (shExpMatch(host, "*.um.outlook.com")))					
    {
        return proxyserver;
    }
        //EXPRESS ROUTE DIRECT
    else if ((isPlainHostName(host))
  
            || (shExpMatch(host, "*.aria.microsoft.com"))
            || (shExpMatch(host, "*.asm.skype.com"))
            || (shExpMatch(host, "*.broadcast.skype.com"))
            || (shExpMatch(host, "*.cc.skype.com"))
            || (shExpMatch(host, "*.config.skype.com"))    
            || (shExpMatch(host, "*.conv.skype.com"))
            || (shExpMatch(host, "*.dc.trouter.io"))
            || (shExpMatch(host, "*.lync.com"))
            || (shExpMatch(host, "*.manage.office.com"))
            || (shExpMatch(host, "*.msg.skype.com"))
            || (shExpMatch(host, "*.outlook.com"))
            || (shExpMatch(host, "*.outlook.office.com"))
            || (shExpMatch(host, "*.pipe.aria.microsoft.com")) 
            || (shExpMatch(host, "*.pipe.skype.com")) 
            || (shExpMatch(host, "*.portal.cloudappsecurity.com"))
            || (shExpMatch(host, "*.protection.office.com"))
            || (shExpMatch(host, "*.protection.outlook.com"))
            || (shExpMatch(host, "*.sharepoint.com")) 
            || (shExpMatch(host, "*.skypeforbusiness.com")) 
            || (shExpMatch(host, "*.svc.ms"))   
            || (shExpMatch(host, "*.teams.microsoft.com"))  
            || (shExpMatch(host, "*.teams.skype.com"))  
            || (shExpMatch(host, "*broadcast.officeapps.live.com"))
            || (shExpMatch(host, "*excel.officeapps.live.com"))
            || (shExpMatch(host, "*onenote.officeapps.live.com"))
            || (shExpMatch(host, "*powerpoint.officeapps.live.com"))
            || (shExpMatch(host, "*view.officeapps.live.com"))                                 
            || (shExpMatch(host, "*visio.officeapps.live.com"))
            || (shExpMatch(host, "*word-edit.officeapps.live.com"))
            || (shExpMatch(host, "*word-view.officeapps.live.com"))
            || (shExpMatch(host, "account.office.net"))
            || (shExpMatch(host, "adminwebservice.microsoftonline.com"))
            || (shExpMatch(host, "agent.office.net"))  
            || (shExpMatch(host, "apc.delve.office.com"))
            || (shExpMatch(host, "api.login.microsoftonline.com"))
            || (shExpMatch(host, "api.passwordreset.microsoftonline.com"))
            || (shExpMatch(host, "aus.delve.office.com"))
            || (shExpMatch(host, "becws.microsoftonline.com"))
            || (shExpMatch(host, "broadcast.skype.com"))  
            || (shExpMatch(host, "browser.pipe.aria.microsoft.com"))  
            || (shExpMatch(host, "can.delve.office.com")) 
            || (shExpMatch(host, "ccs.login.microsoftonline.com"))  
            || (shExpMatch(host, "ccs-sdf.login.microsoftonline.com"))
            || (shExpMatch(host, "clientconfig.microsoftonline-p.net"))
            || (shExpMatch(host, "companymanager.microsoftonline.com"))
            || (shExpMatch(host, "config.edge.skype.com"))
            || (shExpMatch(host, "delve.office.com"))
            || (shExpMatch(host, "device.login.microsoftonline.com"))
            || (shExpMatch(host, "domains.live.com")) 
            || (shExpMatch(host, "eur.delve.office.com"))
            || (shExpMatch(host, "gbr.delve.office.com"))
            || (shExpMatch(host, "hip.microsoftonline-p.net"))
            || (shExpMatch(host, "hipservice.microsoftonline.com"))
            || (shExpMatch(host, "home.office.com"))
            || (shExpMatch(host, "ind.delve.office.com"))
            || (shExpMatch(host, "jpn.delve.office.com"))
            || (shExpMatch(host, "kor.delve.office.com"))
            || (shExpMatch(host, "lam.delve.office.com"))
            || (shExpMatch(host, "login.microsoft.com"))
            || (shExpMatch(host, "login.microsoftonline.com"))
            || (shExpMatch(host, "login.microsoftonline-p.net"))
            || (shExpMatch(host, "login.windows.net"))
            || (shExpMatch(host, "logincert.microsoftonline.com"))
            || (shExpMatch(host, "loginex.microsoftonline.com"))
            || (shExpMatch(host, "login-us.microsoftonline.com"))
            || (shExpMatch(host, "manage.office.com"))
            || (shExpMatch(host, "mobile.pipe.aria.microsoft.com"))
            || (shExpMatch(host, "nam.delve.office.com"))
            || (shExpMatch(host, "nexus.microsoftonline-p.net"))
            || (shExpMatch(host, "office.live.com")) 
            || (shExpMatch(host, "officeapps.live.com")) 
            || (shExpMatch(host, "outlook.office365.com")) 
            || (shExpMatch(host, "passwordreset.microsoftonline.com"))
            || (shExpMatch(host, "pipe.skype.com"))
            || (shExpMatch(host, "portal.office.com"))
            || (shExpMatch(host, "prod.registrar.skype.com"))
            || (shExpMatch(host, "prod.tpc.skype.com"))
            || (shExpMatch(host, "protection.office.com"))
            || (shExpMatch(host, "provisioningapi.microsoftonline.com"))
            || (shExpMatch(host, "s-0001.s-msedge.net"))
            || (shExpMatch(host, "s-0004.s-msedge.net"))
            || (shExpMatch(host, "scsinstrument-ss-us.trafficmanager.net")) 
            || (shExpMatch(host, "scsquery-ss-asia.trafficmanager.net"))
            || (shExpMatch(host, "scsquery-ss-eu.trafficmanager.net")) 
            || (shExpMatch(host, "scsquery-ss-us.trafficmanager.net"))  
            || (shExpMatch(host, "signup.microsoft.com"))
            || (shExpMatch(host, "smtp.office365.com"))  
            || (shExpMatch(host, "stamp2.login.microsoftonline.com"))
            || (shExpMatch(host, "suite.office.net")) 
            || (shExpMatch(host, "teams.microsoft.com")) 
            || (shExpMatch(host, "webshell.suite.office.com")) 
            || (shExpMatch(host, "www.office.com")))             

       
    {
        return "DIRECT";
    }

        //Catchall for all other traffic to proxy
    else
    {
        return proxyserver;
    }
}

У третьому прикладі показано надсилання всіх мережевих запитів, зв’язаних з Office 365, до одного місця призначення. Це дає змогу обійти всі перевірки мережевих запитів Office 365, а всі опубліковані кінцеві точки додаються до списку у форматі PAC, який можна використовувати в процесі налаштування.

Фрагмент коду:

// JavaScript source code
//April 2018 Update new URLS go live 1st May 2018 -
//Consolidated FQDNs required to access Office 365 - All services including optional components covered and elements covered under wildcards removed. 
//Some repeated domains have been consoliodated into unpublished wildcards in order to keep the file as small as possible.
//Includes Core ProPlus URLs but not Office Mobile/IPAD/IOS/ANDROID fqdns from https://support.office.com/en-gb/article/Network-requests-in-Office-365-ProPlus-eb73fcd1-ca88-4d02-a74b-2dd3a9f3364d
//Every Effort is made to ensure 100% accuracy but this PAC should be used as an example and cross-checked with your needs and the Office 365 URL & IP page
//Intended only for Worldwide Office 365 instances, which the vast majority of customers will be using

function FindProxyForURL(url, host)
{
    // Define proxy server
    var proxyserver = "PROXY 10.10.10.10:8080";
    // Make host lowercase
    var lhost = host.toLowerCase();
    host = lhost;

   if  ((shExpMatch(host, "*.aadrm.com"))

        || (shExpMatch(host, "*.adhybridhealth.azure.com"))
        || (shExpMatch(host, "*.adl.windows.com"))
        || (shExpMatch(host, "*.api.microsoftstream.com"))  
        || (shExpMatch(host, "*.api.skype.com"))  
        || (shExpMatch(host, "*.asm.skype.com"))     
        || (shExpMatch(host, "*.assets-yammer.com"))
        || (shExpMatch(host, "*.azureedge.net"))   
        || (shExpMatch(host, "*.azurerms.com"))
        || (shExpMatch(host, "*.broadcast.skype.com"))
        || (shExpMatch(host, "*.broker.skype.com"))
        || (shExpMatch(host, "*.cc.skype.com"))
        || (shExpMatch(host, "*.cloudapp.net")) 
        || (shExpMatch(host, "*.config.skype.com"))
        || (shExpMatch(host, "*.conv.skype.com"))
        || (shExpMatch(host, "*.dc.trouter.io"))
        || (shExpMatch(host, "*.entrust.net")) 
        || (shExpMatch(host, "*.geotrust.com"))
        || (shExpMatch(host, "*.helpshift.com"))
        || (shExpMatch(host, "*.hockeyapp.net"))       
        || (shExpMatch(host, "*.localytics.com"))
        || (shExpMatch(host, "*.log.optimizely.com"))     
        || (shExpMatch(host, "*.lync.com"))
        || (shExpMatch(host, "*.microsoft.com"))
        || (shExpMatch(host, "*.microsoftonline.com"))
        || (shExpMatch(host, "*.microsoftonline-p.com"))
        || (shExpMatch(host, "*.microsoftonline-p.net"))
        || (shExpMatch(host, "*.msecnd.net"))
        || (shExpMatch(host, "*.msedge.net"))
        || (shExpMatch(host, "*.msg.skype.com")) 
        || (shExpMatch(host, "*.msocdn.com"))
        || (shExpMatch(host, "*.mstea.ms"))
        || (shExpMatch(host, "*.o365weve.com"))
        || (shExpMatch(host, "*.office.com"))
        || (shExpMatch(host, "*.office.net"))
        || (shExpMatch(host, "*.office365.com"))
        || (shExpMatch(host, "*.omniroot.com"))
        || (shExpMatch(host, "*.onenote.com"))
        || (shExpMatch(host, "*.onmicrosoft.com"))
        || (shExpMatch(host, "*.outlook.com"))
        || (shExpMatch(host, "*.pipe.skype.com")) 
        || (shExpMatch(host, "*.phonefactor.net")) 
        || (shExpMatch(host, "*.portal.cloudappsecurity.com"))
        || (shExpMatch(host, "*.public-trust.com"))
        || (shExpMatch(host, "*.search.production.apac.trafficmanager.net"))
        || (shExpMatch(host, "*.search.production.emea.trafficmanager.net"))
        || (shExpMatch(host, "*.search.production.us.trafficmanager.net"))
        || (shExpMatch(host, "*.secure.skypeassets.com"))
        || (shExpMatch(host, "*.sfbassets.com"))  
        || (shExpMatch(host, "*.sharepoint.com"))
        || (shExpMatch(host, "*.sharepointonline.com"))
        || (shExpMatch(host, "*.skypeforbusiness.com"))
        || (shExpMatch(host, "*.svc.ms")) 
        || (shExpMatch(host, "*.sway.com"))
        || (shExpMatch(host, "*.symcb.com"))
        || (shExpMatch(host, "*.symcd.com"))
        || (shExpMatch(host, "*.teams.skype.com"))
        || (shExpMatch(host, "*.tenor.com"))
        || (shExpMatch(host, "*.users.storage.live.com"))
        || (shExpMatch(host, "*.verisign.com"))
        || (shExpMatch(host, "*.verisign.net"))
        || (shExpMatch(host, "*.windows.net"))
        || (shExpMatch(host, "*.yammer.com"))
        || (shExpMatch(host, "*.yammerusercontent.com"))         
        || (shExpMatch(host, "*broadcast.officeapps.live.com"))
        || (shExpMatch(host, "*excel.officeapps.live.com"))
        || (shExpMatch(host, "*onenote.officeapps.live.com"))
        || (shExpMatch(host, "*powerpoint.officeapps.live.com"))
        || (shExpMatch(host, "*view.officeapps.live.com"))
        || (shExpMatch(host, "*visio.officeapps.live.com"))
        || (shExpMatch(host, "*word-edit.officeapps.live.com"))
        || (shExpMatch(host, "*word-view.officeapps.live.com"))    
        || (shExpMatch(host, "account.activedirectory.windowsazure.com"))
        || (shExpMatch(host, "ad.atdmt.com"))
        || (shExpMatch(host, "admin.onedrive.com"))
        || (shExpMatch(host, "ajax.aspnetcdn.com"))
        || (shExpMatch(host, "aka.ms"))
        || (shExpMatch(host, "amp.azure.net"))
        || (shExpMatch(host, "api.microsoftstream.com"))
        || (shExpMatch(host, "apis.live.net"))
        || (shExpMatch(host, "apps.identrust.com")) 
        || (shExpMatch(host, "assets.onestore.ms"))
        || (shExpMatch(host, "auth.gfx.ms"))
        || (shExpMatch(host, "broadcast.skype.com "))
        || (shExpMatch(host, "cacerts.digicert.com"))    
        || (shExpMatch(host, "cdn.odc.officeapps.live.com"))  
        || (shExpMatch(host, "cdn.onenote.net"))
        || (shExpMatch(host, "cdn.optimizely.com"))
        || (shExpMatch(host, "cert.int-x3.letsencrypt.org"))
        || (shExpMatch(host, "client.hip.live.com"))     
        || (shExpMatch(host, "config.edge.skype.com"))
        || (shExpMatch(host, "connect.facebook.net"))
        || (shExpMatch(host, "crl.globalsign.com"))
        || (shExpMatch(host, "crl.globalsign.net"))
        || (shExpMatch(host, "crl.identrust.com"))    
        || (shExpMatch(host, "crl3.digicert.com"))  
        || (shExpMatch(host, "crl4.digicert.com"))
        || (shExpMatch(host, "cus-odc.officeapps.live.com"))              
        || (shExpMatch(host, "cus-roaming.officeapps.live.com"))      
        || (shExpMatch(host, "dc.services.visualstudio.com"))
        || (shExpMatch(host, "domains.live.com"))
        || (shExpMatch(host, "ea-000.ocws.officeapps.live.com")) 
        || (shExpMatch(host, "ea-roaming.officeapps.live.com"))           
        || (shExpMatch(host, "ecn.dev.virtualearth.net"))
        || (shExpMatch(host, "eus2-000.ocws.officeapps.live.com"))
        || (shExpMatch(host, "eus2-roaming.officeapps.live.com"))              
        || (shExpMatch(host, "eus-odc.officeapps.live.com"))              
        || (shExpMatch(host, "eus-www.sway-cdn.com"))
        || (shExpMatch(host, "eus-www.sway-extensions.com"))
        || (shExpMatch(host, "feedback.skype.com"))
        || (shExpMatch(host, "firstpartyapps.oaspapps.com"))
        || (shExpMatch(host, "g.live.com"))
        || (shExpMatch(host, "groupsapi2-prod.outlookgroups.ms"))  
        || (shExpMatch(host, "groupsapi3-prod.outlookgroups.ms"))  
        || (shExpMatch(host, "groupsapi4-prod.outlookgroups.ms"))  
        || (shExpMatch(host, "groupsapi-prod.outlookgroups.ms"))  
        || (shExpMatch(host, "isrg.trustid.ocsp.identrust.com"))
        || (shExpMatch(host, "latest-swx.cdn.skype.com"))
        || (shExpMatch(host, "liverdcxstorage.blob.core.windowsazure.com"))
        || (shExpMatch(host, "management.azure.com"))
        || (shExpMatch(host, "mem.gfx.ms"))
        || (shExpMatch(host, "mrodevicemgr.officeapps.live.com"))               
        || (shExpMatch(host, "ncus-000.ocws.officeapps.live.com"))
        || (shExpMatch(host, "ncus-roaming.officeapps.live.com"))                 
        || (shExpMatch(host, "neu-000.ocws.officeapps.live.com")) 
        || (shExpMatch(host, "neu-odc.officeapps.live.com"))              
        || (shExpMatch(host, "neu-roaming.officeapps.live.com"))              
        || (shExpMatch(host, "nexus.officeapps.live.com"))
        || (shExpMatch(host, "nexusrules.officeapps.live.com"))
        || (shExpMatch(host, "nps.onyx.azure.net"))   
        || (shExpMatch(host, "ocsa.officeapps.live.com"))
        || (shExpMatch(host, "ocsp.digicert.com"))
        || (shExpMatch(host, "ocsp.globalsign.com"))
        || (shExpMatch(host, "ocsp.int-x3.letsencrypt.org"))
        || (shExpMatch(host, "ocsp.msocsp.com"))     
        || (shExpMatch(host, "ocsp2.globalsign.com")) 
        || (shExpMatch(host, "ocspx.digicert.com"))
        || (shExpMatch(host, "ocsredir.officeapps.live.com"))
        || (shExpMatch(host, "ocws.officeapps.live.com"))
        || (shExpMatch(host, "odc.officeapps.live.com"))  
        || (shExpMatch(host, "office.live.com"))
        || (shExpMatch(host, "officeapps.live.com"))
        || (shExpMatch(host, "officecdn.microsoft.com.edgekey.net"))              
        || (shExpMatch(host, "officecdn.microsoft.com.edgesuite.net"))
        || (shExpMatch(host, "ols.officeapps.live.com"))  
        || (shExpMatch(host, "oneclient.sfx.ms"))
        || (shExpMatch(host, "outlook.uservoice.com"))
        || (shExpMatch(host, "pipe.skype.com"))
        || (shExpMatch(host, "platform.linkedin.com"))
        || (shExpMatch(host, "policykeyservice.dc.ad.msft.net"))
        || (shExpMatch(host, "prod.firstpartyapps.oaspapps.com.akadns.net"))
        || (shExpMatch(host, "prod.registrar.skype.com"))
        || (shExpMatch(host, "prod.tpc.skype.com"))
        || (shExpMatch(host, "s.ytimg.com"))
        || (shExpMatch(host, "s0.assets-yammer.com"))  
        || (shExpMatch(host, "s-0001.s-msedge.net")) 
        || (shExpMatch(host, "s-0004.s-msedge.net"))   
        || (shExpMatch(host, "scsinstrument-ss-us.trafficmanager.net")) 
        || (shExpMatch(host, "scsquery-ss-asia.trafficmanager.net"))
        || (shExpMatch(host, "scsquery-ss-eu.trafficmanager.net")) 
        || (shExpMatch(host, "scsquery-ss-us.trafficmanager.net")) 
        || (shExpMatch(host, "scus-000.ocws.officeapps.live.com"))
        || (shExpMatch(host, "scus-odc.officeapps.live.com"))         
        || (shExpMatch(host, "scus-roaming.officeapps.live.com"))                 
        || (shExpMatch(host, "sea-odc.officeapps.live.com"))              
        || (shExpMatch(host, "sea-roaming.officeapps.live.com"))              
        || (shExpMatch(host, "secure.globalsign.com"))
        || (shExpMatch(host, "site-cdn.onenote.net"))
        || (shExpMatch(host, "skydrive.wns.windows.com"))
        || (shExpMatch(host, "skypegraph.skype.com"))
        || (shExpMatch(host, "skypemaprdsitus.trafficmanager.net"))
        || (shExpMatch(host, "spoprod-a.akamaihd.net"))
        || (shExpMatch(host, "ssw.live.com"))
        || (shExpMatch(host, "staffhub.ms"))
        || (shExpMatch(host, "staffhub.uservoice.com"))    
        || (shExpMatch(host, "storage.live.com"))
        || (shExpMatch(host, "swx.cdn.skype.com"))
        || (shExpMatch(host, "telemetry.remoteapp.windowsazure.com"))
        || (shExpMatch(host, "telemetryservice.firstpartyapps.oaspapps.com"))
        || (shExpMatch(host, "web.microsoftstream.com"))   
        || (shExpMatch(host, "weu-000.ocws.officeapps.live.com")) 
        || (shExpMatch(host, "weu-odc.officeapps.live.com"))              
        || (shExpMatch(host, "weu-roaming.officeapps.live.com"))              
        || (shExpMatch(host, "wu.client.hip.live.com"))
        || (shExpMatch(host, "wus-000.ocws.officeapps.live.com"))  
        || (shExpMatch(host, "wus-firstpartyapps.oaspapps.com"))  
        || (shExpMatch(host, "wus-odc.officeapps.live.com"))              
        || (shExpMatch(host, "wus-roaming.officeapps.live.com"))              
        || (shExpMatch(host, "wus-www.sway-cdn.com"))
        || (shExpMatch(host, "wus-www.sway-extensions.com"))        
        || (shExpMatch(host, "www.digicert.com"))
        || (shExpMatch(host, "www.google-analytics.com"))
        || (shExpMatch(host, "www.onedrive.com"))
        || (shExpMatch(host, "www.remoteapp.windowsazure.com"))
        || (shExpMatch(host, "www.youtube.com")))




    {
        return proxyserver;
    }

        //Catchall for all other traffic to another proxy

    else return "PROXY 10.10.10.11:8080";
}

Ось ще кілька інструментів від спільноти. Якщо ви б хотіли поділитись інструментом, який створили, напишіть про це в коментарях. Інструменти спільноти, наведені в цій статті, офіційно не підтримуються та не обслуговуються Майкрософт. Тут їх згадано для вашої зручності.

  • Керувати цим процесом вам допоможе перевірений часом засіб, який створив учасник спільноти Office 365. Ось посилання для завантаження.

  • Доказ правильності концепції з правилами для брандмауера, які можна експортувати: Microsoft Cloud IP API.

  • Від ІТ Praktyk: RSS-перетворення й XML-перетворення.

  • Від Пітера Абеля: завантаження.

  • Скориставшись аналізом мережі, визначте, які мережеві запити мають обходити інфраструктуру проксі-сервера. До найпоширеніших повних доменних імен (FQDN), які обходять проксі-сервери клієнта через обсяг вхідного та вихідного мережевого трафіку в цих кінцевих точках, належать такі:

    outlook.office365.com
    outlook.office.com
    <tenant-name>.sharepoint.com
    <tenant-name>-my.sharepoint.com
    <tenant-name>-<app>.sharepoint.com
    *.Lync.com
    
  • Усі мережеві запити, що надсилаються безпосередньо до брандмауера, повинні мати відповідний запис у списку довірених брандмауера, щоб проходити його.

Інтеграція периметра

Чи знаєте ви, що глобальна мережа Майкрософт – одна з найбільших магістральних мереж у світі?

Ця масштабна мережа забезпечує роботу Office 365 і наших інших хмарних служб незалежно від вашого місцезнаходження. Наша мережа складається зі зв’язків, що характеризуються високою пропускною спроможністю, низькою затримкою та здатністю до відновлення після відмови, протяжністю тисячі кілометрів приватних незайнятих оптоволоконних каналів, а також із багатотерабітних підключень між центрами обробки даних і межовими вузлами, завдяки чому нашими хмарними службами так просто користуватися.

До такої мережі просто не можна не під’єднати пристрої своєї організації якнайшвидше. Завдяки 2500 зв’язків однорангової взаємодії інтернет-провайдерів у глобальному масштабі та 70 точок присутності доступ до нашої мережі має бути бездоганним. Ніколи не буде зайвим усього за кілька хвилин перевірити, чи зв’язок однорангової взаємодії вашого інтернет-провайдера оптимальний. Ось кілька прикладів ефективної й не дуже однорангової взаємодії з нашою мережею.

Ви можете вручну або автоматично налаштувати оптимальну обробку мережевих запитів програми Office 365 на пристроях у своїй мережі залежно від вашого обладнання. Необхідні зміни до конфігурації для оптимальної обробки мережевого трафіку Office 365 залежать від середовища. З мережевими запитами Office 365 доцільно використовувати конфігурації мережі, які мають такі переваги:

  • пріоритет над менш важливим мережевим трафіком;

  • маршрутизація до локальної вихідної точки, щоб уникнути зворотної передачі повільним зв’язком глобальної мережі при низькій затримці, доступній в мережі Microsoft (корисне обговорення на основі відгуків клієнтів);

  • використання служби DNS, близької до локальної вихідної точки, щоб забезпечити надходження мережевих запитів, які покидають локальну вихідну точку, до найближчої точки взаємодії з Microsoft;

  • виключення з поглибленої перевірки пакетів або іншої інтенсивної обробки мережевих пакетів, щоб відповідати вимогам до затримки у великому масштабі.

У сучасних мережевих пристроях передбачено можливість керувати мережевими запитами для надійних програм, як-от Office 365, по-іншому, ніж універсальним ненадійним інтернет-трафіком. З розвитком ландшафту рішень програмно-конфігурованих глобальних мереж такі диференціацію трафіку та вибір шляху також впроваджувати також з урахуванням зміненого стану мережі, як-от доступності моменту часу, затримки або продуктивності різних шляхів підключення між користувачем і хмарою.

Додаткові рекомендації з планування конфігурації мережі див. в статтях Планування мережі та перенесення для Office 365, План виправлення неполадок із продуктивністю Office 365 і Контрольний список планування розгортання Office 365.

Щоб реалізувати цей сценарій:

Перевірте мережеве рішення або дізнайтеся у свого постачальника послуг, чи можете ви використовувати визначення URL- і IP-адрес Office 365 із файлів XML, щоб спростити локальний (до користувача) вихід мережі з низькими накладними витратами для трафіку Office 365, визначати його пріоритетність відносно інших програм і регулювати мережевий шлях для підключень Office 365 до мережі Microsoft залежно від змінення умов мережі. Деякі рішення дають змогу завантажити й автоматизувати визначення URL- і IP-адрес Office 365 у своїх стеках.

Обов’язково переконайтеся, що впроваджене рішення має необхідний рівень стійкості, відповідну географічну резервність мережевого шляху для трафіку Office 365 і застосовує зміни до URL- і IP-адрес Office 365 після їх публікації.

Щоб вам було простіше визначати й розрізняти мережевий трафік Office 365, нова веб-служба публікує кінцеві точки Office 365, що полегшує оцінювання, налаштування та відстеження змін. Ця нова веб-служба (доступна зараз у форматі підготовчої версії) згодом замінить списки кінцевих точок, про які йдеться в статті Діапазони URL- і IP-адрес Office 365, а також RSS і XML-версії цих даних. Підтримку цього формату даних кінцевих точок буде найближчим часом припинено.

Як клієнт або виробник пристрою захисту мережевого периметра ви можете протестувати підготовчу версію нової веб-служби на основі REST для записів IP-адрес і FQDN служби Office 365.

Клієнти можуть використовувати цю веб-службу для таких цілей:

  • оновлення сценаріїв PowerShell із метою отримання даних кінцевих точок Office 365 і змінення форматування для мережевих пристроїв;

  • оновлення PAC-файлів, розгорнутих на клієнтських комп’ютерах.

Виробникам пристроїв захисту мережевого периметра ця веб-служба може знадобитися для таких цілей:

  • створення й тестування програмного забезпечення пристроїв із метою завантаження списку для автоматичного налаштування;

  • перевірка поточної версії;

  • отримання поточних змін.

У наступних розділах описується підготовча версія цієї веб-служби. З часом до неї можуть уноситися зміни.

Відомості про веб-службу актуальні, однак відомо про одну проблему.

Загальні параметри

Наведені нижче параметри є спільними для всіх методів веб-служби.

  • format=CSV | JSON – параметр рядка запиту. За замовчуванням дані повертаються у форматі JSON. Щоб повертати дані у форматі значень із роздільниками-комами (CSV), включіть цей необов’язковий параметр.

  • ClientRequestId – параметр рядка запиту. Обов’язковий ідентифікатор GUID, який ви генеруєте для прив’язування сеансу клієнта. GUID слід створити для кожного клієнтського комп’ютера, який викликає веб-службу. Не використовуйте наведені в прикладах ідентифікатори GUID, оскільки веб-служба може заблокувати їх у майбутньому. Формат GUID – xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, де x позначає шістнадцяткове число. Щоб створити GUID, скористайтеся командою PowerShell New-Guid.

Веб-метод версії

Корпорація Майкрософт оновлює записи IP-адрес і FQDN служби Office 365 наприкінці кожного місяця та інколи частіше у зв’язку з експлуатаційними вимогами. Даним для кожного опублікованого екземпляра призначається номер версії. Веб-метод версії дає змогу запитувати останню версію для кожного екземпляра Office 365. Змінення кінцевих точок передбачається раз на місяць. Ми радимо перевіряти версію щодня, але не частіше ніж щогодини.

Параметри для веб-методу версії:

  • AllVersions=true – параметр рядка запиту. За замовчуванням повертається найновіша версія. Щоб запитувати всі опубліковані версії, включіть цей необов’язковий параметр.

  • Instance – параметр маршруту. Цей необов’язковий параметр визначає екземпляр, для якого потрібно повернути версію. Якщо його не задано, повертаються версії для всіх екземплярів. Припустимі екземпляри: O365Worldwide, O365China, O365Germany, O365USGovDoD, O365USGovGCCHigh.

Результатом веб-методу версії може бути один запис або масив записів. Кожен запис містить такі елементи:

  • instance – коротке ім’я екземпляра Office 365;

  • latest – найновіша версія кінцевих точок указаного екземпляра;

  • versions – додатковий список усіх попередніх версій указаного екземпляра.

Приклади:

Приклад URI запиту 1: https://endpoints.office.com/version?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Цей URI повертає найновішу версію кожного екземпляра Office 365. Приклад результату:

[{"instance":"O365Worldwide","latest":"2018030200"},{"instance":"O365China","latest":"2018020100"},{"instance":"O365Germany","latest":"2018020100"},{"instance":"O365USGovDoD","latest":"2018030200"},{"instance":"O365USGovGCCHigh","latest":"2018030200"}]

Увага!: GUID для параметра ClientRequestID в цих URI наведено лише для прикладу. Щоб протестувати ідентифікатори URI веб-служби, створіть власний GUID. Веб-служба може заблокувати наведені в прикладах ідентифікатори GUID у майбутньому.

Приклад URI запиту 2: https://endpoints.office.com/version/O365Worldwide?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Цей URI повертає найновішу версію вказаного екземпляра Office 365. Приклад результату:

{"instance":"O365Worldwide","latest":"2018031302"}

Приклад URI запиту 3: https://endpoints.office.com/version/O365Worldwide?Format=CSV&ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Цей URI повертає результат у форматі CSV. Приклад результату:

instance,latest
O365Worldwide,2018031302

Приклад URI запиту 4: https://endpoints.office.com/version/O365Worldwide?Format=CSV&AllVersions=true&ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Цей URI відображає всі попередні версії, які було опубліковано для екземпляра глобальної служби Office 365. Приклад результату:

{"instance":"O365Worldwide","latest":"2018031302","versions":["2018031302","2018031301","2018031300","2018030200","2018020701","2018020700","2018020100","2017121200","2017120800"]}

Веб-метод кінцевих точок

Веб-метод кінцевих точок повертає всі записи для діапазонів IP- та URL-адрес, які входять до Office 365. Параметри для веб-методу кінцевих точок:

  • ServiceAreas – параметр рядка запиту. Список областей служби, розділених комами. Припустимі елементи: Common, Exchange, SharePoint, Skype. Оскільки елементи області служби Common є обов’язковими для всіх інших областей служби, веб-служба завжди включатиме їх. Якщо ви не включите цей параметр, повертатимуться всі області служби.

  • TenantName – параметр рядка запиту. Це ваше ім’я клієнта Office 365. Веб-служба вставляє надане вами ім’я у фрагменти URL-адрес, які містять ім’я клієнта. Якщо ви не надасте ім’я клієнта, ці фрагменти URL-адрес міститимуть символ узагальнення (*). Параметр TenantName не входить до підготовчої версії.

  • Instance – параметр маршруту. Цей обов’язковий параметр визначає екземпляр, для якого потрібно повернути кінцеві точки. Припустимі екземпляри: O365Worldwide, O365China, O365Germany, O365USGovDoD, O365USGovGCCHigh.

Результатом веб-методу кінцевих точок є масив записів, кожен із яких представляє набір кінцевих точок. Кожен запис містить такі елементи:

  • id – незмінний ідентифікаційний номер набору кінцевих точок. Це обов’язковий елемент.

  • serviceArea – область служби, до якої входить набір кінцевих точок: Common, Exchange, SharePoint або Skype. Це обов’язковий елемент.

  • defaultUrls – URL-адреси для набору кінцевих точок, які належать до категорії Default. Масив DNS-записів JSON.

  • allowUrls – URL-адреси набору кінцевих точок, які належать до категорії Allow. Масив JSON DNS-записів.

  • optimizeUrls – URL-адреси для набору кінцевих точок, які належать до категорії Optimize. Масив DNS-записів JSON.

  • defaultTcpPorts – TCP-порти для набору кінцевих точок, які належать до категорії Default. Усі елементи портів подано у вигляді списку портів, розділених комами, або діапазонів портів, розділених тире (-). Порти даної категорії стосуються всіх IP-адрес у відповідному наборі кінцевих точок. Крім того, вони стосуються всіх URL-адрес у наборі кінцевих точок відповідної категорії й усіх категорій нижчого рівня. Категорії мають таку ієрархію: Optimize, Allow, Default, де категорія Default – найнижча.

  • allowTcpPorts – TCP-порти для діапазонів IP-адрес у відповідному наборі кінцевих точок, які належать до категорії Allow.

  • optimizeTcpPorts – TCP-порти для діапазонів IP-адрес у відповідному наборі кінцевих точок, які належать до категорії Optimize.

  • defaultUdpPorts – UDP-порти для діапазонів IP-адрес у відповідному наборі кінцевих точок, які належать до категорії Default.

  • allowUdpPorts – UDP-порти для діапазонів IP-адрес у відповідному наборі кінцевих точок, які належать до категорії Allow.

  • optimizeUdpPorts – UDP-порти для діапазонів IP-адрес у відповідному наборі кінцевих точок, які належать до категорії Optimize.

  • ips – діапазони IP-адрес, пов’язані з відповідним набором кінцевих точок через зв’язок із зазначеними портами TCP або UDP.

  • expressRoute – має значення True, якщо відповідний набір кінцевих точок спрямовується через ExpressRoute, і значення False, якщо ні. Це обов’язковий елемент.

  • optionalImpact – якщо відповідний набір кінцевих точок необов’язковий, тут описуються функції Office 365, які не будуть наявні за відсутності доступу до кінцевих точок у цьому наборі. Якщо набір кінцевих точок обов’язковий, цей елемент відсутній.

Усі елементи, не вказані як обов’язкові, є необов’язковими у вихідних даних REST.

Приклади:

Приклад URI запиту 1: https://endpoints.office.com/endpoints/O365Worldwide?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Цей URI отримує всі кінцеві точки для глобального екземпляра Office 365 з урахуванням будь-яких навантажень. Приклад результату (фрагмент):

[
  {
    "id":1,
    "serviceArea":"Exchange",
    "allowUrls":["*.protection.outlook.com"],
    "allowTcpPorts":"443",
    "expressRoute":true
  },
  {"id":2,
    "serviceArea":"Exchange",
    "allowUrls":["*.mail.protection.outlook.com"],
    "allowTcpPorts":"25",
    "expressRoute":true
  }, 
  {
    "id":3,
    "serviceArea":"Exchange",
    "ips":["213.199.154.0/24","213.199.180.128/26","94.245.120.64/26",
    "207.46.163.0/24","216.32.180.0/23","23.103.144.0/20","65.55.88.0/24",
    "65.55.169.0/24","207.46.100.0/24","104.47.0.0/17",
    "2a01:111:f400:fc00::/54","157.55.234.0/24","157.56.112.0/24","157.56.110.0/23",
    "23.103.200.0/22","2a01:111:f400:7c00::/54","23.103.132.0/22","23.103.136.0/21",
    "23.103.198.0/23","23.103.212.0/22","40.92.0.0/14","40.107.0.0/17",
    "40.107.128.0/18","52.100.0.0/14","2a01:111:f403::/48"],
    "allowTcpPorts":"25,443",
    "expressRoute":true
  },
...

До цього прикладу не входять додаткові набори кінцевих точок.

Приклад URI запиту 2: https://endpoints.office.com/endpoints/O365Worldwide?ServiceAreas=Exchange&ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

У цьому прикладі отримуються кінцеві точки для глобального екземпляра Office 365 лише для Exchange Online і залежностей.

Приклад 2 відрізняється від прикладу 1 лише тим, що результати не включають кінцеві точки для SharePoint Online або "Skype для бізнесу – онлайн".

Веб-метод змін

Веб-метод змін повертає останні опубліковані оновлення. Це зазвичай зміни в діапазонах IP- та URL-адрес за попередній місяць.

Параметр для веб-методу змін:

  • Version – обов’язковий параметр URL-маршруту. Поточна версія, починаючи з якої потрібно переглянути зміни. Використовується формат РРРРММДДЧЧ.

Результатом веб-методу змін є масив записів, кожен із яких представляє зміну в певній версії кінцевих точок. Кожен запис містить такі елементи:

  • id – незмінний ідентифікатор запису зміни. Це обов’язковий елемент.

  • endpointSetId – ідентифікатор зміненого запису набору кінцевих точок. Це обов’язковий елемент.

  • changeDescription – текстовий опис зміни. Це обов’язковий елемент.

  • disposition – може стосуватися змінення, додавання або вилучення; описує характер зміни, унесеної до запису набору кінцевих точок. Це обов’язковий елемент.

  • version – версія опублікованого набору кінцевих точок, до якого було внесено зміну. Номери версій мають формат РРРРММДДЧЧ, де ЧЧ – це натуральне число, зазначене з приростом за наявності кількох версій, які потрібно опублікувати в один день.

  • previous – підструктура, у якій указано попередні значення змінених елементів у наборі кінцевих точок. Цей елемент відсутній для нещодавно доданих наборів кінцевих точок. Включає defaultTcpPorts, allowTcpPorts, optimizeTcpPorts, defaultUdpPorts, allowUdpPorts, optimizeUdpPorts, ExpressRoute, optionalImpact.

  • current – підструктура, у якій указано оновлені значення змінених елементів у наборі кінцевих точок. Включає defaultTcpPorts, allowTcpPorts, optimizeTcpPorts, defaultUdpPorts, allowUdpPorts, optimizeUdpPorts, ExpressRoute, optionalImpact.

  • add – підструктура, у якій указано елементи, які додаються до колекцій наборів кінцевих точок:

    • effectiveDate – визначає дату, коли доповнення почнуть діяти в службі;

    • ips – елементи, які додаються до масиву ips;

    • defaultUrls – елементи, які додаються до масиву defaultUrls;

    • allowUrls – елементи, які додаються до масиву allowUrls;

    • optimizeUrls – елементи, які додаються до масиву optimizeUrls.

  • remove – підструктура, у якій указано елементи, які вилучаються з набору кінцевих точок.

    • ips – елементи, які вилучаються з масиву ips;

    • defaultUrls – елементи, які вилучаються з масиву defaultUrls;

    • allowUrls – елементи, які вилучаються з масиву allowUrls;

    • optimizeUrls – елементи, які вилучаються з масиву optimizeUrls.

Приклади:

Приклад URI запиту 1: https://endpoints.office.com/changes/o365worldwide/0000000000?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

У цьому прикладі запитуються всі попередні зміни, унесені до екземпляра глобальної служби Office 365. Приклад результату:

[
  {
    "id":2,
    "endpointSetId":118,
    "changeDescription":"Adding a OneNote endpoint",
    "disposition":"Change",
    "version":"2018030200",
    "add":{
      "effectiveDate":"20180401",
      "allowUrls":["officeapps.live.com"]
    }
  },
  {
    "id":3,
    "endpointSetId":33,
    "changeDescription":"Removing old IP prefixes",
    "disposition":"Change",
    "version":"2018031301",
    "remove":{
      "ips":["65.55.127.0/24","66.119.157.192/26","66.119.158.0/25",
        "111.221.76.128/25","111.221.77.0/26","207.46.5.0/24"]
    }
  },
  {
    "id":4,
    "endpointSetId":45,
    "changeDescription":"Removing old IP prefixes",
    "disposition":"Change",
    "version":"2018031301",
    "remove":{
      "ips":["13.78.93.8/32","40.113.87.220/32","40.114.149.220/32",
      "40.117.100.83/32","40.118.214.164/32","104.208.31.113/32"]
    }
  }
]

Приклад URI запиту 2: https://endpoints.office.com/changes/o365worldwide?version=2018031300&ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

У цьому прикладі запитуються зміни, унесені до глобального екземпляра Office 365, починаючи з указаної версії. Приклад результату:

[
  {
    "id":3,
    "endpointSetId":33,
    "changeDescription":"Removing old IP prefixes",
    "disposition":"Change",
    "version":"2018031301",
    "remove":{
      "ips":["65.55.127.0/24","66.119.157.192/26","66.119.158.0/25",
      "111.221.76.128/25","111.221.77.0/26","207.46.5.0/24"]
    }
  },
  {
    "id":4,
    "endpointSetId":45,
    "changeDescription":"Removing old IP prefixes",
    "disposition":"Change",
    "version":"2018031301",
    "remove":{
      "ips":["13.78.93.8/32","40.113.87.220/32","40.114.149.220/32",
      "40.117.100.83/32","40.118.214.164/32","104.208.31.113/32"]
    }
  }
]

Приклад сценарію PowerShell

Нижче наведено сценарій PowerShell, який можна виконати, щоб перевірити, чи потребують оновлені дані яких-небудь дій. Цей сценарій перевіряє номер версії для кінцевих точок глобального екземпляра Office 365. Якщо виявлено зміну, він завантажує кінцеві точки та фільтрує їх за категорією Allow. Він також використовує унікальний ClientRequestId в кількох викликах і зберігає найновішу версію, знайдену в тимчасовому файлі. Щоб перевіряти наявність оновлень версії, цей сценарій слід викликати раз на годину.

# webservice root URL
$ws = "https://endpoints.office.com"

# path where client ID and latest version number will be stored
$datapath = $Env:TEMP + "\endpoints_clientid_latestversion.txt"

# fetch client ID and version if data file exists; otherwise create new file
if (Test-Path $datapath) {
    $content = Get-Content $datapath
    $clientRequestId = $content[0]
    $lastVersion = $content[1]
}
else {
    $clientRequestId = [GUID]::NewGuid().Guid
    $lastVersion = "0000000000"
    @($clientRequestId, $lastVersion) | Out-File $datapath
}

# call version method to check the latest version, and pull new data if version number is different
$version = Invoke-RestMethod -Uri ($ws + "/version/O365Worldwide?clientRequestId=" + $clientRequestId)
if ($version.latest -gt $lastVersion) {
    Write-Host "New version of Office 365 worldwide commercial service instance endpoints detected"
    
    # write the new version number to the data file
    @($clientRequestId, $version.latest) | Out-File $datapath
    
    # invoke endpoints method to get the new data
    $endpointSets = Invoke-RestMethod -Uri ($ws + "/endpoints/O365Worldwide?clientRequestId=" + $clientRequestId)

    # filter results for Allow and Optimize endpoints, and transform these into custom objects with port and category
    $flatUrls = $endpointSets | ForEach-Object {
        $endpointSet = $_
        $allowUrls = $(if ($endpointSet.allowUrls.Count -gt 0) { $endpointSet.allowUrls } else { @() })
        $optimizeUrls = $(if ($endpointSet.optimizeUrls.Count -gt 0) { $endpointSet.optimizeUrls } else { @() })
        
        $allowUrlCustomObjects = $allowUrls | ForEach-Object {
            [PSCustomObject]@{
                category = "Allow";
                url      = $_;
                # Allow URLs should permit traffic across both Allow and Optimize ports
                tcpPorts = (($endpointSet.allowTcpPorts, $endpointSet.optimizeTcpPorts) | Where-Object { $_ -ne $null }) -join ",";
                udpPorts = (($endpointSet.allowUdpPorts, $endpointSet.optimizeUdpPorts) | Where-Object { $_ -ne $null }) -join ",";
            }
        }
        $optimizeUrlCustomObjects = $optimizeUrls | ForEach-Object {
            [PSCustomObject]@{
                category = "Optimize";
                url      = $_;
                tcpPorts = $endpointSet.optimizeTcpPorts;
                udpPorts = $endpointSet.optimizeUdpPorts;
            }
        }
        $allowUrlCustomObjects, $optimizeUrlCustomObjects
    }

    $flatIps = $endpointSets | ForEach-Object {
        $endpointSet = $_
        $ips = $(if ($endpointSet.ips.Count -gt 0) { $endpointSet.ips } else { @() })
        # IPv4 strings have dots while IPv6 strings have colons
        $ip4s = $ips | Where-Object { $_ -like '*.*' }
        
        $allowIpCustomObjects = @()
        if ($endpointSet.allowTcpPorts -or $endpointSet.allowUdpPorts) {
            $allowIpCustomObjects = $ip4s | ForEach-Object {
                [PSCustomObject]@{
                    category = "Allow";
                    ip = $_;
                    tcpPorts = $endpointSet.allowTcpPorts;
                    udpPorts = $endpointSet.allowUdpPorts;
                }
            }
        }
        $optimizeIpCustomObjects = @()
        if ($endpointSet.optimizeTcpPorts -or $endpointSet.optimizeUdpPorts) {
            $optimizeIpCustomObjects = $ip4s | ForEach-Object {
                [PSCustomObject]@{
                    category = "Optimize";
                    ip       = $_;
                    tcpPorts = $endpointSet.optimizeTcpPorts;
                    udpPorts = $endpointSet.optimizeUdpPorts;
                }                
            }
        }
        $allowIpCustomObjects, $optimizeIpCustomObjects
    }
    
    Write-Output "IPV4 Firewall IP Address Ranges"
    ($flatIps.ip | Sort-Object -Unique) -join "," | Out-String

    Write-Output "URLs for Proxy Server"
    ($flatUrls.url | Sort-Object -Unique) -join "," | Out-String

    # TODO Call Send-MailMessage with new endpoints data
}
else {
    Write-Host "Office 365 worldwide commercial service instance endpoints are up-to-date"
}

Приклад сценарію Python

Нижче наведено сценарій Python, протестований за допомогою Python 3.6.3 у Windows 10, який можна виконати, щоб перевірити, чи потребують оновлені дані яких-небудь дій. Цей сценарій перевіряє номер версії для кінцевих точок глобального екземпляра Office 365. Якщо виявлено зміну, він завантажує кінцеві точки та фільтрує їх за категорією Allow. Він також використовує унікальний ClientRequestId в кількох викликах і зберігає найновішу версію, знайдену в тимчасовому файлі. Щоб перевіряти наявність оновлень версії, цей сценарій слід викликати раз на годину.

import json
import os
import urllib.request
import uuid

# helper to call the webservice and parse the response
def webApiGet(methodName, instanceName, clientRequestId):
    ws = "https://endpoints.office.com"
    requestPath = ws + '/' + methodName + '/' + instanceName + '?clientRequestId=' + clientRequestId
    request = urllib.request.Request(requestPath)
    with urllib.request.urlopen(request) as response:
        return json.loads(response.read().decode())

# path where client ID and latest version number will be stored
datapath = os.environ['TEMP'] + '\endpoints_clientid_latestversion.txt'

# fetch client ID and version if data exists; otherwise create new file
if os.path.exists(datapath):
    with open(datapath, 'r') as fin:
        clientRequestId = fin.readline().strip()
        latestVersion = fin.readline().strip()
else:
    clientRequestId = str(uuid.uuid4())
    latestVersion = '0000000000'
    with open(datapath, 'w') as fout:
        fout.write(clientRequestId + '\n' + latestVersion)

# call version method to check the latest version, and pull new data if version number is different
version = webApiGet('version', 'O365Worldwide', clientRequestId)
if version['latest'] > latestVersion:
    print('New version of Office 365 worldwide commercial service instance endpoints detected')

    # write the new version number to the data file
    with open(datapath, 'w') as fout:
       fout.write(clientRequestId + '\n' + version['latest'])

    # invoke endpoints method to get the new data
    endpointSets = webApiGet('endpoints', 'O365Worldwide', clientRequestId)

    # filter results for Allow and Optimize endpoints, and transform these into tuples with port and category
    flatUrls = []
    for endpointSet in endpointSets:
        allowUrls = endpointSet['allowUrls'] if 'allowUrls' in endpointSet else []
        optimizeUrls = endpointSet['optimizeUrls'] if 'optimizeUrls' in endpointSet else []

        # Allow URLs should permit traffic across both Allow and Optimize ports
        allowTcpPorts = endpointSet['allowTcpPorts'] if 'allowTcpPorts' in endpointSet else ''
        optimizeTcpPorts = endpointSet['optimizeTcpPorts'] if 'optimizeTcpPorts' in endpointSet else ''
        allTcpPorts = ','.join([ports for ports in [allowTcpPorts, optimizeTcpPorts] if ports != ''])

        allowUdpPorts = endpointSet['allowUdpPorts'] if 'allowUdpPorts' in endpointSet else ''
        optimizeUdpPorts = endpointSet['optimizeUdpPorts'] if 'optimizeUdpPorts' in endpointSet else ''
        allUdpPorts = ','.join([ports for ports in [allowUdpPorts, optimizeUdpPorts] if ports != ''])

        flatUrls.extend([('Allow', allowUrl, allTcpPorts, allUdpPorts) for allowUrl in allowUrls])
        flatUrls.extend([('Optimize', optimizeUrl, optimizeTcpPorts, optimizeUdpPorts) for optimizeUrl in optimizeUrls])

    flatIps = []
    for endpointSet in endpointSets:
        ips = endpointSet['ips'] if 'ips' in endpointSet else []
        # IPv4 strings have dots while IPv6 strings have colons
        ip4s = [ip for ip in ips if '.' in ip]
        if 'allowTcpPorts' in endpointSet or 'allowUdpPorts' in endpointSet:
            allowTcpPorts = endpointSet['allowTcpPorts'] if 'allowTcpPorts' in endpointSet else ''
            allowUdpPorts = endpointSet['allowUdpPorts'] if 'allowUdpPorts' in endpointSet else ''
            flatIps.extend([('Allow', ip, allowTcpPorts, allowUdpPorts) for ip in ip4s])
        if 'optimizeTcpPorts' in endpointSet or 'optimizeUdpPorts' in endpointSet:
            optimizeTcpPorts = endpointSet['optimizeTcpPorts'] if 'optimizeTcpPorts' in endpointSet else ''
            optimizeUdpPorts = endpointSet['optimizeUdpPorts'] if 'optimizeUdpPorts' in endpointSet else ''
            flatIps.extend([('Optimize', ip, optimizeTcpPorts, optimizeUdpPorts) for ip in ip4s])

    print('IPv4 Firewall IP Address Ranges')
    print(','.join(sorted(set([ip for (category, ip, tcpPorts, udpPorts) in flatIps]))))

    print('URLs for Proxy Server')
    print(','.join(sorted(set([url for (category, url, tcpPorts, udpPorts) in flatUrls]))))

    # TODO send mail (e.g. with smtplib/email modules) with new endpoints data

else:
    print('Office 365 worldwide commercial service instance endpoints are up-to-date')

Підтримка версій інтерфейсу веб-служби

Оновлення параметрів або результатів для цих методів веб-служби можуть знадобитися в майбутньому. Коли публікуватиметься загальнодоступна версія цих веб-служб, корпорація Майкрософт заздалегідь сповістить про суттєві оновлення, які вони міститимуть. Якщо, на думку корпорації Майкрософт, оновлення вимагатиме внесення змін до клієнтів, які використовують веб-службу, доступ до її попередньої версії (яка передує поточній) надаватиметься ще щонайменше протягом дванадцяти (12) місяців із моменту випуску нової версії. Клієнти, які не оновлять версію протягом цього часу, можуть втратити доступ до веб-служби та її методів. Крім того, вони мають забезпечувати належну роботу клієнтів веб-служби в разі внесення таких змін до підпису її інтерфейсу:

  • Додавання нового необов’язкового параметра до наявного веб-методу, який не потрібно було надавати клієнтам попередніх версій і який не впливає на отримуваний ними результат.

  • Додавання нового іменованого атрибута до одного з елементів відповіді REST або додаткових стовпців до відповіді у форматі CSV.

  • Додавання нового веб-методу з новим іменем, який не викликають клієнти попередніх версій.

Часті запитання від адміністраторів про підключення та відповіді на них:

Клацніть посилання внизу, щоб оцінити корисність статті й надіслати будь-які додаткові запитання. Ми переглянемо ваш відгук і надамо відповідь у цьому розділі поширених запитань.

Оголошені кінцеві точки вступають у силу й починають отримувати мережеві запити через 30 і більше днів. Протягом цього часу клієнти й партнери можуть оновити свої системи. Додані та вилучені повні доменні імена та IP-префікси оброблюються в XML-файлі одночасно з оголошенням. Це означає, що повні доменні імена з’являються в XML-файлі за 30 днів перед використанням. Надсилання мережевих запитів через кінцеві точки, що вилучаються, припиняється перед оголошенням про їхнє вилучення, тому коли ми вилучаємо кінцеву точку з XML-файлу (одночасно з оголошенням), вона вже не використовується.

Кінцеві точки Office 365 публікуються наприкінці кожного місяця зі сповіщенням за 30 днів. Іноді зміни можуть відбуватися частіше ніж раз на місяць або публікуватися з коротшими періодами сповіщення. Коли додається кінцева точка, дата набуття сили, зазначена на RSS-каналі, – це дата, після якої мережеві запити надсилатимуться до кінцевої точки. Якщо ви ще не користувалися RSS-каналами, дізнайтеся, як підписатися на них в Outlook. Крім того, ви можете отримувати новини з RSS-каналу електронною поштою.

Підписавшись на RSS-канал, ви можете аналізувати відомості самостійно або за допомогою сценарію. У наведеній нижче таблиці для зручності описано RSS-канал.

Розділ

Частина 1

Частина 2

Частина 3

Частина 4

Частина 5

Частина 6

Опис

Лічильник

Дата, після якої запити надсилатимуться до кінцевої точки.

Основний опис функції або служби, яка вимагає кінцевої точки.

Чи можна підключитися до цієї кінцевої точки в схемі ExpressRoute і в Інтернеті?

Так – ви можете підключитися до цієї кінцевої точки, як в Інтернеті, так і в ExpressRoute.

Ні – ви можете підключитися до цієї кінцевої точки лише в Інтернеті.

Ім’я FQDN або діапазон IP-адрес, що додається або видаляється.

Приклад

1/

[Початок – xx/xx/xxx.

Обов’язково: <опис>.

ExpressRoute:

<Так/Ні>.

<FQDN/IP>],

Також варто звернути увагу на те, що кожний запис має однаковий набір роздільників:

  • / – після лічильника;

  • [ – на позначення запису для лічильника;

  • . – використовується між кожним окремим розділом запису;

  • ], – на позначення кінця окремого запису;

  • ]. – на позначення кінця всіх записів.

Розташування клієнта найкраще визначати за допомогою карти центрів обробки даних.

Розташування однорангової взаємодії докладніше описано тут.

Завдяки 2500 зв’язків однорангової взаємодії інтернет-провайдерів у глобальному масштабі та 70 точок присутності доступ до нашої мережі має бути бездоганним. Ніколи не буде зайвим усього за кілька хвилин перевірити, чи зв’язок однорангової взаємодії вашого інтернет-провайдера оптимальний. Ось кілька прикладів ефективної й не дуже однорангової взаємодії з нашою мережею.

Прийняті маршрути ExpressRoute визначено IP-діапазонами Майкрософт і певними Office 365спільнотами BGP.

Ми регулярно додаємо нові функції та служби до програмного комплексу Office 365, розширюючи ландшафт підключення. Якщо ви підписані на SKU E3 чи E5, то вам потрібні всі кінцеві точки в списку, щоб забезпечити повну функціональність програмному комплексу. Якщо ви не підписані на жоден із цих SKU, мінімальна відмінність полягає в кількості кінцевих точок.

Ознайомтеся зі статтею про підключення до мережі Office 365, щоб отримати докладні відомості про категорії кінцевих точок Office 365, а також дізнатися, які принципи підключення дають змогу безпечно розпоряджатися трафіком Office 365 і забезпечувати найвищу продуктивність.

Нижче зображено частину таблиці імен FQDN у розділі Office Online. Рядки впорядковано за функціями та відмінностями в можливості підключення. Перші два рядки вказують на те, що Office Online використовує кінцеві точки, позначені як обов’язкові, у розділах автентифікації та ідентичності Office 365, а також портал і спільні служби. Служби в Office 365 зазвичай використовують ці спільні служби. У третьому рядку вказується на те, що клієнтські комп’ютери повинні мати змогу дістатись *.officeapps.live.com, щоб використовувати Office Online, а в четвертому – *.cdn.office.net.

Незважаючи на те, що третій і четвертий рядки необхідні для використання Office Online, їх розділено, щоб підкреслити відмінність їхнього місця призначення.

  1. *.officeapps.live.com не представляє мережі доставки вмісту, тобто запити до цього простору імен надходитимуть безпосередньо до центру обробки даних Microsoft.

  2. *.officeapps.live.com доступно в схемах ExpressRoute за допомогою однорангової мережі Microsoft.

  3. IP-адреси, пов’язані з Office Online і *.officeapps.live.com, можна знайти за цим посиланням.

  4. *.cdn.office.net представляє мережу доставки вмісту, розміщену на Akamai, тобто запити до цього простору імен надходитимуть до центру обробки даних Akamai.

  5. *.cdn.office.net не доступно в схемі ExpressRoute.

  6. IP-адреси, пов’язані з Office Online і *.cdn.office.net, недоступні.

Знімок екрана: сторінка кінцевих точок

Ми надаємо IP-адреси тільки для тих серверів Office 365, до яких вам слід налаштувати пряму маршрутизацію через Інтернет або ExpressRoute. Це не повний список усіх IP-адрес, для яких відображатимуться мережеві запити. Ви отримуватимете мережеві запити до Майкрософт і сторонніх неопублікованих IP-адрес. Ці IP-адреси генеруються динамічно або керуються так, що завчасно повідомляти про їх змінення не вдається. Якщо ваш брандмауер не може дозволити доступ на основі імен FQDN для цих мережевих запитів, використовуйте файл PAC або WPAD, щоб керувати запитами.

Бачите IP-адресу, пов’язану з Office 365, про яку вам потрібні додаткові відомості?

  1. Перевірте, чи ця IP-адреса входить до більшого опублікованого діапазону, використовуючи калькулятор CIDR.

  2. Перевірте, чи партнер володіє IP-адресою із запитом whois. Якщо вона належить Майкрософт, це може бути внутрішній партнер.

  3. Перевірте сертифікат, у браузері підключіться до IP-адреси, указавши її у форматі HTTPS://<IP-АДРЕСА>, перевірте домени, указані в сертифікаті, щоб зрозуміти, які домени зіставлено з IP-адресою. Якщо ця IP-адреса належить корпорації Майкрософт і відсутня в списку IP-адрес Office 365, імовірно, її зіставлено з мережею доставки вмісту (CDN) Microsoft, наприклад MSOCDN.NET, або іншим доменом Microsoft, для якого не опубліковано відомості про IP-адресу. Якщо дійсно виявиться, що IP-адресу домену, указаного в сертифікаті, потрібно додати до списку, повідомте нам про це.

В Office 365 та інших службах Microsoft використовуються деякі сторонні служби, як-от Akamai и MarkMonitor, для покращення роботи Office 365. У майбутньому ми можемо замінити їх, щоб забезпечити стабільно високий рівень обслуговування. При цьому ми часто публікуємо запис CNAME, що вказує на домен, який належить сторонньому постачальнику, запис A або IP-адресу. Домени сторонніх постачальників можуть розміщувати вміст, як-от мережу доставки вмісту, або служби, як-от службу географічного керування трафіком. Підключення до цих сторонніх постачальників відображаються у вигляді переспрямування чи посилання, а не у формі початкового запиту від клієнта. Деяким клієнтам потрібно дозволити пересилання й переспрямування в такому вигляді без явного додавання довгого списку потенційних імен FQDN, які можуть використовувати служби сторонніх постачальників.

Список служб може змінитися в будь-який час. Ось деякі з таких служб, які використовуються зараз:

MarkMonitor використовується, якщо ви бачите запити, що включають повне доменне ім’я *.nsatc.net. Ця служба забезпечує безпеку та моніторинг доменних імен із метою захисту від зловмисників.

ExactTarget використовується, якщо ви бачите запити на повне доменне ім’я *.exacttarget.com. Ця служба забезпечує адміністрування та моніторинг посилань у повідомленнях електронної пошти для захисту від зловмисників.

Akamai використовується, якщо ви бачите запити, що включають одне з наведених нижче повних доменних імен. Ця служба надає послуги geo-DNS і CDN.

*.akadns.net
*.akam.net
*.akamai.com
*.akamai.net
*.akamaiedge.net
*.akamaihd.net
*.akamaized.net
*.edgekey.net
*.edgesuite.net

  • Ви підключаєтеся до сторонніх служб, щоб скористатись основними інтернет-службами, наприклад для пошуку DNS чи отримання вмісту через мережу CDN. Підключення до сторонніх служб також потрібне для інтеграції, наприклад для включення відео YouTube у блокноти OneNote.

  • Ви підключаєтеся до додаткових служб, які розмістила та виконує корпорація Майкрософт, таких як межові вузли, щоб ваші запити мережі потрапляли в глобальну мережу Microsoft у найближчій точці доступу до Інтернету. Це третя за розміром мережа на планеті, що підвищує ефективність підключення. Ви також підключаєтеся до служб Microsoft Azure, наприклад Azure Media Services, які використовуються в низці служб Office 365.

  • Ви підключаєтеся до основних служб Office 365, як-от сервера поштових скриньок Exchange Online або сервера "Skype для бізнесу – онлайн", на яких розташовано ваші власні унікальні дані. Щоб підключитися до основних служб Office 365, можна використовувати FQDN (повне доменне ім’я) або IP-адресу, а також канали Інтернету чи ExpressRoute. Підключитися до сторонніх і додаткових служб можна лише через канал Інтернету з використанням імен FQDN.

На схемі нижче наведено відмінності між областями дії цих служб. На цій схемі локальна мережа клієнта в лівому нижньому куті має кілька мережевих пристроїв для керуванням підключеннями до мережі. Подібні конфігурації часто зустрічаються в корпоративних клієнтів. Якщо мережа має лише брандмауер між клієнтськими комп’ютерами та Інтернетом, така конфігурація також підтримується. Однак потрібно переконатися, що брандмауер підтримує наявність імен FQDN і символів узагальнення в правилах списку довірених.

Ознайомтеся зі статтею про підключення до мережі Office 365, щоб отримати докладні відомості про категорії кінцевих точок Office 365, а також дізнатися, які принципи підключення дають змогу безпечно розпоряджатися трафіком Office 365 і забезпечувати найвищу продуктивність.

Три різні типи кінцевих точок мережі під час використання Office 365

Office 365 – це набір служб, розрахований на роботу через Інтернет, і заяви щодо його надійності та доступності зумовлені доступністю багатьох стандартних інтернет-служб. Наприклад, щоб використовувати Office 365, як і більшість сучасних інтернет-служб мають бути доступні такі стандартні інтернет-служби, як DNS, CRL і CDN.

Крім цих базових інтернет служб, ще є сторонні служби, які використовуються лише для інтеграції функціональних можливостей. Наприклад, використання Giphy.com у Microsoft Teams дає змогу клієнтам додавати зображення у форматі GIF. YouTube і Flickr – це теж сторонні служби, які використовуються для інтеграції відео й зображень з Інтернету в клієнти Office. Хоча ці служби потрібні для інтеграції, у статті про кінцеві точки Office 365 вони позначені як необов’язкові, тому, якщо така кінцева точка буде недоступна, базова функціональність служби не порушиться.

Якщо під час спроби скористатись Office 365 ви виявите, що сторонні служби недоступні, переконайтеся, що всі повні доменні імена (FQDN), позначені в цій статті як обов’язкові чи необов’язкові, дозволено на проксі-сервері й у брандмауері.

Додаткові служби – це служби Microsoft, які не підпадають під керування Office 365. Це, наприклад, такі елементи, як межова мережа, служби Azure Media Services і мережі доставки вмісту Azure. Усі вони необхідні для використання Office 365 і мають бути доступні.

Якщо під час спроби скористатись Office 365 ви виявите, що сторонні служби недоступні, переконайтеся, що всі повні доменні імена (FQDN), позначені в цій статті як обов’язкові чи необов’язкові, дозволено на проксі-сервері й у брандмауері.

Ви несете відповідальність за обмеження доступу до клієнтських служб для користувачів. Єдиний надійний спосіб заблокувати служби для користувачів – обмежити доступ до імені FQDN login.live.com. Це ім’я FQDN використовується широким набором служб, зокрема неклієнтських, таких як MSDN, TechNet тощо. Обмеження доступу до цього імені FQDN може викликати потребу включити винятки в правило для запитів мережі, зіставлених із цими службами.

Не забувайте: якщо заблокувати доступ лише до клієнтських служб Microsoft, будь-який користувач у мережі все ще зможе відфільтрувати дані за допомогою клієнта Office 365 чи іншої служби.

Пов’язані теми

Діапазони IP-адрес центрів обробки даних Microsoft Azure
Загальнодоступні IP-адреси Microsoft
Вимоги до мережевої інфраструктури для Microsoft Intune
Power BI та ExpressRoute
Діапазони URL- і IP-адрес Office 365
Керування ExpressRoute для підключення до Office 365
Принципи підключення до мережі Office 365

Удосконалення навичок роботи з Office
Ознайомтеся з навчальними матеріалами
Отримуйте нові функції раніше за інших
Приєднайтеся до оцінювачів Office

Ця інформація корисна?

Дякуємо за ваш відгук!

Дякуємо за відгук! Схоже, вам може стати в нагоді допомога одного з наших спеціалістів служби підтримки Office, з яким ми вас можемо з’єднати.

×