Hello @aya aya
There are actually two different activation flows here, and I would separate them when configuring the FortiGate.
1. Your Windows Server VMs → your internal KMS host
This is the normal KMS traffic. By default, KMS clients discover the KMS host through the _vlmcs._tcp DNS SRV record and connect to the KMS host using TCP 1688
Microsoft confirms TCP 1688 as the default KMS client-to-host port.
Since your three client VMs and KMS host are on the internal network, this traffic doesn't need Internet access.
Your FortiGate/internal firewall policy therefore only needs to permit the required client-to-KMS communication internally:
Source: KMS client subnet/servers
Destination: Internal KMS host
Protocol: TCP
Port: 1688
You can verify connectivity from a client with:
Test-NetConnection <KMS-host-FQDN> -Port 1688
Microsoft also documents checking TCP 1688 when troubleshooting communication between KMS clients and a self-hosted KMS server.
2. Your KMS host → Microsoft for activation of the KMS host key
This is different.
You must first activate the KMS host key with Microsoft. Microsoft's Windows Server 2025 KMS documentation supports either:
- online activation, which requires Internet access, or
- phone activation.
I would therefore not build a permanent FortiGate Internet rule around kms.core.microsoft.com:1688 based on the assumption that this is the required KMS-host activation endpoint.
Also be careful not to confuse this with azkms.core.windows.net:1688. Microsoft documents that endpoint specifically for Azure VMs using Azure KMS. That's not the same architecture as your on-premises KMS host.
For an environment where Internet access must be extremely restricted, the cleaner option may actually be phone activation of the KMS host key. That avoids maintaining an outbound Internet firewall exception solely for initial KMS host activation. Microsoft explicitly supports phone activation when configuring a KMS host.
Once the KMS host itself is activated, the 180-day renewal you're referring to applies to KMS clients, not to the KMS host making an Internet connection to Microsoft every 180 days.
KMS clients renew against your internal KMS host. Microsoft's default KMS renewal interval is 10,080 minutes, or 7 days.
So the traffic flow is essentially:
For FortiGate, I would consequently avoid SSL inspection or application-control modifications for the internal TCP/1688 KMS flow unless your security requirements specifically require them. A simple restricted service policy from the KMS clients to the KMS host is easier to troubleshoot.
One additional point: you mentioned only three Windows Server KMS clients. Microsoft requires a minimum activation threshold of five Windows Server computers before KMS begins activating server clients. With only three eligible Windows Server clients, the KMS host won't meet the activation threshold yet.
You can check the current KMS host state/count with:
slmgr.vbs /dlv
So before troubleshooting FortiGate further, I'd verify the KMS count. Three Windows Server VMs won't meet the KMS activation threshold on their own.
Sharing these Microsoft references:
Create a KMS activation host in Windows Server
KMS activation planning for Windows Server
KMS client activation and product keys
The first thing I'd address in your environment is the five-server activation threshold, rather than the FortiGate Internet rule.
Help make this community better for everyone: if this answer resolved your issue, please accept it or leave an upvote. If not, share more details in a comment so we can continue the discussion and find the right solution.