| Description | This article describes how to block websites that use encrypted TLS-ClientHello (ECH). |
| Scope | FortiGate. |
| Solution |
In this example, sites belonging to the 'Gambling' category cannot be blocked because those sites use ECH. Here is the Web Filter configured to block this category:
Examples:
Diagram:
config firewall policy set schedule "always" set service "HTTPS" "HTTP" "DNS" "Quic" set utm-status enable set inspection-mode flow set nat enable next end
config webfilter profile
With the previous configuration, the sites cannot be blocked, identifying that those sites use ECH, generating logs like the following:
date=2025-08-08 time=12:38:16 eventtime=1754667495655478890 tz="-0300" logid="1702062103" type="utm" subtype="ssl" eventtype="ssl-negotiation" level="information" vd="root" action="info" policyid=25 poluuid="916a1a8a-ab4a-51ef-8238-c0f79567272e" policytype="policy" sessionid=54164787 service="SSL" profile="certificate-inspection_Alumnos" srcip=10.1.1.35 srcport=64432 srccountry="Reserved" dstip=172.67.178.119 dstport=443 dstcountry="United States" srcintf="VLAN1" srcintfrole="lan" dstintf="wan2" dstintfrole="wan" srcuuid="bc5355aa-c400-51ed-6f23-4fa5e520c8f9" dstuuid="5a9b4e2a-bf4c-51ed-dc50-e448f485ac50" proto=6 sni="cloudflare-ech.com" eventsubtype="encrypted-client-hello" hostname="cloudflare-ech.com"
Method 1:
This method uses an SSL profile and is available starting with FortiOS 7.6.0. To achieve the desired behavior, apply the following configuration changes within the SSL profile:
config firewall ssl-ssh-profile end end
The SNI can be filtered by using the 'ech-outer-sni' under ssl-ssh-inspection profile settings: config firewall ssl-ssh-profile
For example for the SNI 'cloudflare-ech': config firewall ssl-ssh-profile After those changes, even if the Gambling websites use ECH, the FortiGate will be able to block them: date=2025-09-24 time=14:30:24 eventtime=1758735023765172940 tz="-0300" logid="1704062220" type="utm" subtype="ssl" eventtype="ssl-handshake" level="information" vd="root" action="info" policyid=25 poluuid="916a1a8a-ab4a-51ef-8238-c0f79567272e" policytype="policy" sessionid=28987146 service="SSL" profile="certificate-inspection_Alumnos" srcip=10.1.1.35 srcport=50293 srccountry="Reserved" dstip=104.21.93.125 dstport=443 dstcountry="United States" srcintf="VLAN1" srcintfrole="lan" dstintf="wan2" dstintfrole="wan" srcuuid="bc5355aa-c400-51ed-6f23-4fa5e520c8f9" dstuuid="5a9b4e2a-bf4c-51ed-dc50-e448f485ac50" proto=6 tlsver="tls1.3" sni="1xbets-ar.com" cipher="0x1301" authalgo="ecdsa" kxproto="ecdhe" kxcurve="x25519" eventsubtype="handshake-done" hostname="1xbets-ar.com" handshake="full" mitm="yes"
This traffic can be observed in a wireshark capture output. After ech is blocked, the client requested the destination hostname in plaintext (the client hello is not encrypted). As a result, certificate inspection can be performed properly to block URLs based on FortiGuard categories
Method 2:
This approach requires enabling a specific option in the DNS filter profile that is applied to the policy.
ECH is set up via DNS over HTTPS, and this option prevents that process from completing.
Method 3: Block ECH-Related Domain :
*cloudflare-ech* *whos.amung*
Note: For v7.2.x, only Method 3 works.
See Technical Tip: FortiGate Fails to block HTTPS website due to encrypted traffic |
The Fortinet Security Fabric brings together the concepts of convergence and consolidation to provide comprehensive cybersecurity protection for all users, devices, and applications and across all network edges.
Copyright 2025 Fortinet, Inc. All Rights Reserved.