Mastering Firewalls for Intunes and Autopilot Success

In the realm of IT, especially with the advent of cloud-based systems like M365 and Intune, managing firewalls has evolved into a complex challenge. Gone are the days of a handful of external ports; now, it’s like navigating a digital maze of ports and IP ranges. Enter the Firewall Team, tasked with untangling these complexities to ensure a seamless 100% functionality for Intune and other critical processes.

And let’s not forget the Firewall’s critical role in Intune deployments. As Intune downloads its packages via HTTP/Port 80, it’s essential that the Firewall handles the Port 80 stream according to Microsoft’s specifications, be it Palo Alto, Fortigate, or other contenders. This unassuming box holds the power to determine whether Intune and Autopilot will operate at 10% or achieve a flawless 100%, and sometimes, it’s a game-changer.

Do NOT Break SSL, do not watch into SSL

That one should be really clear and no don’t try it. It will look like it works than a few minutes later, or next client or package it want.

Allow HTTP Protocoll “Partial Repsonse” or “Partial Downloads”

RFC for HTTP requests (Section 14.35.2): https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.

This is security related. If the attacker can download small parts of an large file (Code) in small parts and then merge them together. As we understood as example

The IPS Filter or Realtime file Sandbox (Whatever FW producers use as terms) can’t analyse the file or try to analyse. That sound strange but because he download 3 separate parts 1xGIF, 1xJPG, 1xHTML and merge that together somehow.

The HTTP range option is like a secret handshake tucked away in the HTTP header. It’s the way client machines subtly ask servers for only specific chunks of a file. Picture it as a covert dance, where the client gracefully seeks out particular bytes from the server. This nifty protocol proves its worth when you’re resuming a download that took a pause or when you’re snatching parts of an executable file from a website.

Imagine you’re downloading an exe file, excited to unleash its power. The client doesn’t demand the whole file; instead, it politely whispers to the server, “Just a snippet, please.” This is the moment where the HTTP range option steps into the spotlight.

But here’s the intriguing part: sometimes, the client doesn’t devour the entire file immediately. It stores a portion away for safekeeping, like a squirrel stashing acorns for later. When it craves the rest, it sends an HTTP Accept-Ranges header, a subtle signal to the server that it’s ready for the next chapter.

We tried to explain this to ourself (Like RESUME in FTP)

The “Accept-Ranges” field in a server’s response is like a little flag telling the client whether it’s cool to make partial requests for a specific resource. Imagine you’re downloading a file, and this field says, “Hey, I’m okay with you asking for just a piece of this file if you want.”

For example, if a server is all about byte-range requests (where you request specific chunks of a file), it will include:

Accept-Ranges: bytes

This is like a green light for the client to use byte range requests for that specific resource. It’s like saying, “Feel free to download this file in parts if you need to. Bytes are the units we’re talking about here.” The technical term for these units is defined in Section 14.1 of the RFC.

Now, here’s the twist: a client can decide to make range requests even if it didn’t get this “Accept-Ranges” field. It’s not a strict rule; it’s more like a suggestion to help things run smoother and save on unnecessary data transfers.

But—and there’s always a but—the client should never assume that just because it got an “Accept-Ranges” field, future range requests will always get partial responses. The content might change, the server might only allow range requests at certain times, or maybe a different middleman will handle the next request.

If a server is not into any kind of range requests for a specific resource, it might shoot back:

Accept-Ranges: none

This is like saying, “Don’t bother asking for parts of this file. I’m not into that range request thing for this particular resource.” The term “none” is reserved just for this purpose.

Now, the tech wizards say this “Accept-Ranges” info can be sent in a trailer section, but it’s better to send it as a header field. Why? Because it’s super helpful when you’re trying to restart a big download that got interrupted. It gives the client a heads up on whether it’s worth trying to download in parts or not before it reaches the trailer section of the response.

We have found info regarding this issue for Palo Alto FW:

Firewall breaks SCCM communication for agent push/download between client and server

https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g0000008TvuCAE&lang=en_US%E2%80%A9

Check the box for: Device >> Setup >> Content-ID >> Content -ID Settings >> Allow HTTP Partial response

When it is valid for an SCCM Agent it also valid for a M365 Intunes Deployment standalone.

Microsoft side CRL, FQDN andd IP list you need Intunes and Microsoft Store (Company Portal) working

You want something working the FW-Teams wan’s a KB or a list with targets you must reach and how they can handle the stream (Break SSL, etc.)

Most firewall producers have Databases you can use as target objects like Fortigate. There are over 4’000 FQDN in that Service database. However sometimes Fortinet is not fast enough to update those or there are simply error in the data. Also keep in mind for any Round Robin DNS that cache may play a role.

Microsoft offers a Source list which will give you all FQDN and IP you need to open. The FQDN is depending on your Firewalls Round Robin mechanism and HOW fast this will update or cache. Behind a an FQDN there could be several IP address and depending on your FW or client system this may be outdated sometimes (Load Balancers).

Here is how to get the most important FQDN/IP’s from an INTUNES client which is already connected to MDM/Intunes and did run a deployment. (For the Parts with certutil). The certutil part will show you what CRL Cert Revocation Lists are used by Code Signing (EXE/DLL) on your machine. You MUST 100% have those URL open and working.

Get all FQDN that Intunes needs in a textfile with PowerShell
(invoke-restmethod -Uri (“https://endpoints.office.com/endpoints/WorldWide?ServiceAreas=MEM`&`clientrequestid=” + ([GUID]::NewGuid()).Guid)) | ?{$_.ServiceArea -eq “MEM” -and $_.ips} | select -unique -ExpandProperty ips > Intunes_FQDN.txt
Get all IP that Intunes needs in a textfile with Powershell
(invoke-restmethod -Uri (“https://endpoints.office.com/endpoints/WorldWide?ServiceAreas=MEM`&`clientrequestid=” + ([GUID]::NewGuid()).Guid)) | ?{$_.ServiceArea -eq “MEM” -and $_.urls} | select -unique -ExpandProperty urls > Intunes_IP.txt
Get a list off all Certificate related CRL (Certificate Revocation List) that your Intunes clients needs
Certuitl –urlcache > Intunes_crt_crl.txt
16.11.2023 FQDN List needed for Intunes, Microsoft Store, Company Portal
*.swdd02.manage.microsoft.com

*.channelservices.microsoft.com

*.delivery.mp.microsoft.com

*.dl.delivery.mp.microsoft.com

*.do.dsp.mp.microsoft.com

*.emdl.ws.microsoft.com

*.go-mpulse.net

*.infra.lync.com

*.itunes.apple.com

*.manage.microsoft.com

*.mzstatic.com

*.notify.windows.com

*.officeconfig.msocdn.com

*.phobos.apple.com

*.prod.do.dsp.mp.microsoft.com

*.resources.lync.com

*.s-microsoft.com

*.support.services.microsoft.com

*.swda01.manage.microsoft.com

*.swda01-mscdn.manage.microsoft.com

*.swda02.manage.microsoft.com

*.swda02-mscdn.manage.microsoft.com

*.swdb01.manage.microsoft.com

*.swdb01-mscdn.manage.microsoft.com

*.swdb02.manage.microsoft.com

*.swdb02-mscdn.manage.microsoft.com

*.swdc01.manage.microsoft.com

*.swdc01-mscdn.manage.microsoft.com

*.swdc02.manage.microsoft.com

*.swdc02-mscdn.manage.microsoft.com

*.swdd01.manage.microsoft.com

*.swdd01-mscdn.manage.microsoft.com

*.swdd02-mscdn.manage.microsoft.com

*.trouter.skype.com

*.update.microsoft.com

*.vortex.data.microsoft.com

*.windowsupdate.com

*.wns.windows.com

5-courier.push.apple.com

approdimedatahotfix.azureedge.net

approdimedatapri.azureedge.net

approdimedatasec.azureedge.net

ax.itunes.apple.com.edgesuite.net

clientconfig.passport.net

config.office.com

contentauthassetscdn-prod.azureedge.net

contentauthassetscdn-prodeur.azureedge.net

contentauthrafcontentcdn-prod.azureedge.net

contentauthrafcontentcdn-prodeur.azureedge.net

devicelistenerprod.eudb.microsoft.com

devicelistenerprod.microsoft.com

edge.skype.com

ekcert.spserv.microsoft.com

ekop.intel.com

emdl.ws.microsoft.com

enterpriseregistration.windows.net

euprodimedatahotfix.azureedge.net

euprodimedatapri.azureedge.net

euprodimedatasec.azureedge.net

fd.api.orgmsg.microsoft.com

ftpm.amd.com

graph.windows.net

intunecdnpeasd.azureedge.net

intunemaape1.eus.attest.azure.net

intunemaape10.weu.attest.azure.net

intunemaape11.weu.attest.azure.net

intunemaape12.weu.attest.azure.net

intunemaape13.jpe.attest.azure.net

intunemaape17.jpe.attest.azure.net

intunemaape18.jpe.attest.azure.net

intunemaape19.jpe.attest.azure.net

intunemaape2.eus2.attest.azure.net

intunemaape3.cus.attest.azure.net

intunemaape4.wus.attest.azure.net

intunemaape5.scus.attest.azure.net

intunemaape6.ncus.attest.azure.net

intunemaape7.neu.attest.azure.net

intunemaape8.neu.attest.azure.net

intunemaape9.neu.attest.azure.net

itunes.apple.com

lgmsapeweu.blob.core.windows.net

login.microsoftonline.com

login.windows.net

manage.microsoft.com

naprodimedatahotfix.azureedge.net

naprodimedatapri.azureedge.net

naprodimedatasec.azureedge.net

ocsp.apple.com

payloadprod*.blob.core.windows.net

phobos.apple.com

phobos.itunes-apple.com.akadns.net

remoteassistanceprodacs.communication.azure.com

ris.prod.api.personalization.ideas.microsoft.com

swda01-mscdn.azureedge.net

swda02-mscdn.azureedge.net

swdb01-mscdn.azureedge.net

swdb02-mscdn.azureedge.net

swdc01-mscdn.azureede.net

swdc02-mscdn.azureedge.net

swdd01-mscdn.azureedge.net

swdd02-mscdn.azureedge.net

swdin01-mscdn.azureedge.net

swdin02-mscdn.azureedge.net

time.windows.com

tsfe.trafficshaping.dsp.mp.microsoft.com

windowsphone.com

www.msftconnecttest.com

www.msftncsi.com

16.11.2023 IP List needed for Intunes, Microsoft Store, Company Portal
13.67.13.176/28

13.67.15.128/27

13.69.67.224/28

13.69.231.128/28

13.70.78.128/28

13.70.79.128/27

13.71.199.64/28

13.73.244.48/28

13.74.111.192/27

13.77.53.176/28

13.86.221.176/28

13.89.174.240/28

13.89.175.192/28

20.37.153.0/24

20.37.192.128/25

20.38.81.0/24

20.41.1.0/24

20.42.1.0/24

20.42.130.0/24

20.42.224.128/25

20.43.129.0/24

20.44.19.224/27

20.49.93.160/27

20.189.172.160/27

20.189.229.0/25

20.191.167.0/25

20.192.159.40/29

20.192.174.216/29

20.204.193.10/31

20.204.193.12/30

40.67.121.224/27

40.70.151.32/28

40.71.14.96/28

40.74.25.0/24

40.78.245.240/28

40.78.247.128/27

40.79.197.64/27

40.79.197.96/28

40.80.180.208/28

40.80.180.224/27

40.80.184.128/25

40.82.248.224/28

40.82.249.128/25

40.119.8.128/25

52.150.137.0/25

52.162.111.96/28

52.168.116.128/27

52.182.141.192/27

52.236.189.96/27

52.240.244.160/27

104.46.162.96/27

Please see our other related posts:

https://www.butsch.ch/post/missing-entry-in-fortigate-application-filter-root-certificate-url-and-ocsp-source-of-w10-setup-failing/

https://www.butsch.ch/post/Missing-entry-in-Fortigate-Application-Filter-ROOTCERTIFICATEURL-and-OCSP-source-of-W10-Setup-failing/


 Category published:  Deployment FW Fortigate FW Sophos Intunes KEMP Load Balancer Microsoft SCCM,MEM,MDT SECURITY   Click on the Category button to get more articles regarding that product.