FortiOS 7.6.0 New Features Guide
FortiOS 7.6.0 New Features Guide
FortiOS 7.6.0
FORTINET DOCUMENT LIBRARY
https://docs.fortinet.com
FORTINET BLOG
https://blog.fortinet.com
FORTIGUARD LABS
https://www.fortiguard.com
FEEDBACK
Email: [email protected]
Change Log 10
Overview 12
GUI 13
General usability enhancements 13
GUI support for local-in policies 13
GUI support for internet service groups 17
GUI displays logic between firewall policy objects 20
GUI support to create policies in FortiView Sources and traffic logs 23
GUI improvements to device upgrade 28
GUI support for enhanced logging for threat feeds 34
Expanded support for Advanced Threat Protection Statistics widget 38
GUI improvements to the IPsec VPN Wizard 40
GUI improvements to Security Rating 55
GUI support for web proxy forward server over IPv6 57
GUI support for security posture tags in dial-up IPsec VPN tunnels 7.6.1 59
CLI diagnostic shortcuts in the GUI 7.6.1 60
Asset Details pane 7.6.1 61
GUI access for global search 7.6.3 68
GUI warnings for IKE-TCP port conflicts 7.6.3 70
GUI improvements of PIM support for VRFs 7.6.3 72
Network 74
General 74
Configure the VRRP hello timer in milliseconds 74
FortiGate as a recursive DNS resolver 75
BGP network prefixes utilize firewall addresses and groups 81
Support UDP-Lite traffic 83
Custom LSA refresh rates and fast link-down detection on VLAN interfaces for OSPF 87
Filter NetFlow sampling 88
SOCKS proxy supports UTM scanning, authentication, and forward server 92
Implement the interface name as the source IP address in RADIUS, LDAP, and DNS
configurations 96
Include groups in PIM join/prune messages 99
Automatic LTE connection establishment 104
Netflow sampling 105
Support source-IP interface for system DNS database 107
Extended VRF ID range for enhanced network scalability 7.6.1 109
Enhanced PIM support for VRFs 7.6.1 109
Including denied multicast sessions in the session table 7.6.1 111
Support specific VRF ID for local-out traffic 7.6.1 112
Support source IP interface for system DNS 7.6.1 118
Improvements to IPsec monitoring 7.6.1 119
Connectivity Fault Management (CFM) now available for FG-80F-POE and FG-20xF
models 7.6.3 123
Application and network performance monitoring with FortiTelemetry 7.6.3 123
Fortinet Support Tool for capturing incidents 145
2025-04-24 Added Support IPv6 addresses for managed FortiSwitch units 7.6.3 on page 496 and Prevent
automatically created VLANs 7.6.3 on page 497.
2025-04-21 Added AliCloud ecs.g8i instance type support 7.6.3 on page 649.
2025-03-20 Added Streamline timezone updates with a downloadable database on page 532.
2025-03-17 Updated Stream-based antivirus scanning for HTML and Javascript files on page 321.
2025-03-04 Added Support FortiCare registration for FortiExtender 7.6.1 on page 513.
2025-03-03 Added Support multiple APNs in WAN extension mode 7.6.1 on page 511.
2025-02-28 Added Support split tunneling in LAN extension mode 7.6.1 on page 506.
2025-02-24 Added Support mTLS client certification for threat feed connections 7.6.1 on page 586.
2025-02-14 Added:
l Single FortiGuard license for FortiGate A-P HA cluster 7.6.1 on page 556
2025-01-09 Added Bearer token authentication for SCIM 7.6.1 on page 439.
2024-12-20 Added GUI support for SCIM clients 7.6.1 on page 435.
2024-12-13 Added Enhancing security with Post-Quantum Cryptography for IPsec key exchange 7.6.1 on
page 385 and BIOS security Low and High level classification 7.6.1 on page 568.
2024-12-10 Added KVM Red Hat Enterprise Linux 9.4 support on page 633.
2024-12-09 Added Generic connector for importing addresses 7.6.1 on page 579.
2024-12-06 Updated Monitor routing prefix for FGSP session failover 7.6.1 on page 553.
2024-12-04 Added Use per-FortiGate generated random password for private-data-encryption 7.6.1 on
page 564.
2024-12-03 Added CLI diagnostic shortcuts in the GUI 7.6.1 on page 60 and OCI support for on-premise
solutions 7.6.1 on page 649.
2024-12-02 Updated Add a RADIUS Called Station ID setting 7.6.1 on page 478.
2024-11-29 Added DHCP-PD support for MAP-E 7.6.1 on page 271 and Monitor routing prefix for FGSP
session failover 7.6.1 on page 553.
2024-10-29 Added Control TLS connections that utilize Encrypted Client Hello on page 358.
2024-10-24 Added Share ZTNA information through the EMS connector on page 283.
2024-10-10 Added Support the AWS r8g instance family on page 633.
2024-08-27 Added GCP SDN connector relay through FortiManager support on page 633.
2024-08-20 Updated Enhance real-time file system integrity checking on page 564.
Added Support fast failover for FortiExtender on page 498.
2024-08-09 Added Enhance real-time file system integrity checking on page 564.
2024-08-01 Added Support IKEv2 for FortiAP IPsec data channel management on page 463.
2024-07-26 Added IBM Cloud virtual network interface support on page 633.
Overview
This guide provides details of new features introduced in FortiOS 7.6. For each feature, the guide provides detailed
information on configuration, requirements, and limitations, as applicable. Features are organized into the following
sections:
l GUI
l Network
l SD-WAN
l Policy and objects
l Zero Trust Network Access
l Security profiles
l VPN
l User and authentication
l LAN Edge
l System
l Security Fabric
l Log and report
l Cloud
l Operational Technology
For features introduced in 7.6.1 and later versions, the version number is appended to the end of the topic heading. For
example, Extended VRF ID range for enhanced network scalability 7.6.1 on page 109 was introduced in 7.6.1. If a topic
heading has no version number at the end, the feature was introduced in 7.6.0.
For a list of features organized by version number, see Index on page 660.
This section includes information about FortiOS GUI related new features:
l General usability enhancements on page 13
Custom local-in policies can be created and configured in the GUI in Policy & Objects > Local-In Policy. Before, only
implicit read-only policies can be displayed.
Tabs have also been implemented to separate IPv4 and IPv6 policies. IPv4 and IPv6 local-in policies can be created and
edited in their respective tabs.
3. Click Create new. The Create New Local-In Policy pane is displayed.
3. Click Create new. The Create New IPv6 Local-In Policy pane is displayed.
Example 1
In this example, a local-in policy will be configured to prevent the source subnet 10.10.10.0/24 from pinging port1, but
allow administrative access for PING on port1.
f. Click OK.
d. Click OK.
Example 2
The following example demonstrates how to enable virtual patching on the port2 interface using a local-in policy.
4. Click OK.
Administrators can now create internet service groups using the GUI. Previously only the CLI was supported. See
Internet service groups in policies for more information.
1. Go to Policy & Objects > Internet Service Database, and click the Internet Service Group tab.
2. Click Create New.
1. Go to Policy & Objects > Internet Service Database, and click the Internet Service Group tab.
2. Select an internet service group, and click Clone.
1. Go to Policy & Objects > Firewall Policy, and click Create New.
2. Select the internet service group:
a. Click the Destination box. The Select Entries pane opens.
b. Select Internet Service, and select one or more internet service groups, such as NS_Grp1.
c. Click Close.
The FortiOS GUI can now display the logical AND relationship in firewall policies between source IP addresses, user
groups, and security posture tags to help you configure firewall policies.
1. Go to Policy & Objects > Firewall Policy, and click Create New to view the following changes under Source
& Destination:
l A Show Logic button is available.
l The User/group option is moved out of Source.
l A Security posture tag toggle is available.
4. In the Destination list, select one or more destinations to display And any of between the Destination and Service
fields.
Example
Following is the logic of using the mandatory and optional fields in the Source & Destination section, based on the
following configurations:
Creating a policy using IP or MAC addresses can now be done directly in the Dashboard > FortiView pages and Log
Viewer. This feature streamlines the policy creation process, making it more efficient and user-friendly.
There are multiple ways to create a firewall policy using an IP or MAC address from the Dashboard > FortiView Sources
page:
l Hover over a device in the Device column of an entry and click Firewall Policy.
l Double-click an entry. The source entry information displays. Click Actions > Create policy.
l Double-click an entry. The source entry information is displayed. Click Drill down. Click the Destination tab and
choose a Destination entry. Right-click a Destination Address and click Create policy > Create firewall policy by IP
address. Only IP addresses can be used to create a policy using this method.
Policies can also be created using an IP or MAC address from Log Viewer:
l Hover over any device in the Device column and click Firewall Policy in the tooltip window.
1. From the Dashboard > FortiView Sources page, choose any entry.
2. Click Create policy > Create firewall policy by IP address. The Create New Policy pane opens.
3. The Incoming interface field is auto-filled with the correct interface and the Source field is auto-filled with a new
staged object and a green icon.
4. Hover over the icon and a warning is shown: This entry does not exist yet. If selected, it will be automatically created
when the form is submitted. Check that the stage object has the correct IP address.
The staged object will not be saved if you click Cancel on the Create New Policy pane.
5. Fill in all other fields with the necessary data and save the policy.
6. When the policy is successfully created, a green notification displays in the top right of the window. Click Show in list
to view the policy that was created.
1. Choose another source entry and click Create policy > Create firewall policy by MAC address. The Create New
Policy pane opens.
2. The Incoming interface field is auto-filled with the correct interface and the Source field is auto-filled with a new
staged object and a green icon.
3. Hover over the icon and a warning is shown: This entry does not exist yet. If selected, it will be automatically created
when the form is submitted. Check that the stage object has the correct MAC address.
4. Fill in the other fields with required data and save the policy. When the policy is successfully created, a green
notification displays in the top right of the window. Click Show in list to view the policy.
5. Choose another source entry and click Drill down. On the Drill down page, navigate to the Destination tab.
6. Choose any Destination entry and click Create policy > Create firewall policy by IP address. The Create New Policy
pane opens.
7. Observe that the Incoming interface and Outgoing interface fields are auto-filled with the correct interfaces. The
Source and Destinations fields are auto-filled with new staged objects and have green icons. It indicates that they
are not saved yet.
8. Fill in the other fields with required data and save the policy. When the policy is successfully created, a green
notification displays in the top right of the window.
9. Click Show in list to view the policy.
1. Navigate to the Dashboard > FortiView Sources page and choose any source entry that was saved as an address
during policy creation in the previous section
2. Click Create policy > Create firewall policy by IP address. The Create New Policy panel opens.
3. The Incoming interface field is auto-filled with the correct interface and the Source field is auto-filled with the correct
address object. No green icon is shown for the address object. The object can be found in the Address list by
clicking Show in list in the object tooltip.
4. Fill in the other fields with required data and save the policy. When the policy is successfully created, a green
notification displays in the top right of the window.
5. Click Show in list to view the policy.
An updated GUI provides a consistent upgrade process for all supported devices, including FortiGate, FortiAP,
FortiSwitch, and FortiExtender devices. A tray on the bottom-right of the GUI provides progress information to help you
manage and monitor the upgrade.
From the System > Firmware & Registration page, you can:
l Select one or more devices to display the Upgrade button, and click Upgrade. Firmware images from FortiGuard or
file upload can be used for the upgrade.
l Click Upgrade all, and select whether to upgrade all Devices, Extension devices, FortiAPs, FortiSwitches, or
FortiExtenders. Available for Security Fabric and non-Security Fabric devices. Firmware images are downloaded
from FortiGuard.
l Monitor the upgrade progress using the tray on the bottom-right corner of the GUI.
The same consistent GUI experience is available for the following upgrade scenarios:
Select Upgrade all > Devices to FortiGate, FortiAP, FortiSwitch, and FortiGuard
upgrade all devices.* FortiExtender devices
Select Upgrade all > Extension FortiAP, FortiSwitch, and FortiGuard or file upload
devices to upgrade all extension FortiExtender devices
devices.*
Select Upgrade all > FortiAPs to FortiAP devices FortiGuard or file upload
upgrade all FortiAP devices.*
Select Upgrade all > FortiExtenders FortiExtender devices FortiGuard or file upload
to upgrade all FortiExtender devices.*
Select Upgrade all > FortiSwitches to FortiSwitch devices FortiGuard or file upload
upgrade all FortiSwitch devices.*
Select one or more FortiAP devices FortiAP devices FortiGuard or file upload
and click Upgrade.
To demonstrate the functionality of this feature, this example uses FortiGates that are running
and upgrading to fictitious build numbers.
To upgrade a device:
3. Select FortiGate only and click Next. The Select Firmware step is displayed.
The All Upgrades tab displays all firmware images available from FortiGuard for upgrade.
4. Select the firmware, and click Next. The wizard proceeds to the Choose Schedule step.
5. Choose a schedule, and click Next:
Immediate Select to start the upgrade immediately after completing the FortiGate
Upgrade wizard.
Specify Select to specify a date and time to start the upgrade after completing the
FortiGate Upgrade wizard.
Scheduling an upgrade using a manually uploaded file is only available for FortiGate
devices that have physical disk storage.
l If the FortiGate has a disk, File Upload upgrades can be scheduled for it and its
extension units both in the GUI and using the Security Fabric.
l If the FortiGate does not have a disk, File Upload upgrades cannot be scheduled for it
or its extension units.
All devices, including FortiGate, FortiSwitch, FortiAP, and FortiExtender devices, in a Security Fabric can be upgraded
using firmware images from FortiGuard. The firmware on the root FortiGate in the Security Fabric is used as basis for the
firmware upgrade for the rest of the FortiGates. Firmware images are downloaded from FortiGuard.
1. On the root FortiGate in the Security Fabric, go to System > Firmware & Registration.
2. Click Upgrade all > Devices. The Choose Upgrade Type step is displayed.
3. With Full Fabric upgrade selected, click Next. The wizard proceeds to the Select Firmware step.
4. Select a firmware version, and click Next.
The All Upgrades tab displays all firmware images available from FortiGuard for upgrade.
Scheduling an upgrade using a manually uploaded file is only available for FortiGate
devices that have physical disk storage.
l If the FortiGate has a disk, File Upload upgrades can be scheduled for it and its
extension units both in the GUI and using the Security Fabric.
l If the FortiGate does not have a disk, File Upload upgrades cannot be scheduled for it
or its extension units.
6. Review the upgrade details, and click Confirm and Backup Config.
FortiOS includes two new fields have been added to the threat feed system event log Log Details pane, Total External
Resource Entries and Invalid External Resource Entries. These fields display the total number of entries and the number
of invalid entries in the Threat Feed. The additional information from these new fields can assist in detecting
configuration errors and setting up alerts to spot significant and potentially abnormal changes in the size of the threat
feed.
These new fields are available on these threat feeds:
l MAC address
l IP address
l Category
l Malware hash
l Domain
When viewing threat feed logs in the CLI, exttotal and extinvalid have been added to the CLI:
CLI threat feed examples:
l MAC address
1: date=2024-06-17 time=11:09:21 eventtime=1718647761458961985 tz="-0700"
logid="0100022220" type="event" subtype="system" level="information" vd="vd1"
logdesc="Threat feed updated" status="success" msg="Threat feed 'ext-vd1.test-mac'
updated successfully" desc="threat-feed" exttotal=266 extinvalid=10
l IP address
1: date=2024-06-17 time=13:49:48 eventtime=1718657388125965730 tz="-0700"
logid="0100022220" type="event" subtype="system" level="information" vd="vd1"
logdesc="Threat feed updated" status="success" msg="Threat feed 'ext-vd1.test-ip-
address' updated successfully" desc="threat-feed" exttotal=24 extinvalid=1
l Category
1: date=2024-06-17 time=13:37:52 eventtime=1718656671378406008 tz="-0700"
logid="0100022220" type="event" subtype="system" level="information" vd="vd1"
logdesc="Threat feed updated" status="success" msg="Threat feed 'ext-vd1.test-
category' updated successfully" desc="threat-feed" exttotal=30 extinvalid=3
l Malware hash
1: date=2024-06-17 time=13:50:57 eventtime=1718657456529812599 tz="-0700"
logid="0100022220" type="event" subtype="system" level="information" vd="vd1"
logdesc="Threat feed updated" status="success" msg="Threat feed 'ext-vd1.test-mal'
updated successfully" desc="threat-feed" exttotal=11 extinvalid=4
l Domain
1: date=2024-06-17 time=13:54:23 eventtime=1718657663324715674 tz="-0700"
logid="0100022220" type="event" subtype="system" level="information" vd="vd1"
logdesc="Threat feed updated" status="success" msg="Threat feed 'ext-vd1.test-
domain' updated successfully" desc="threat-feed" exttotal=44 extinvalid=3
1. From the Log & Report > System Events page, click the Logs tab.
2. Enable these setting options in the window:
l General System Events
l Memory
3. Search for any threat feed and double-click a threat feed entry. The Log Details pane is displayed. The results for
valid and invalid entries are displayed at the bottom of the pane.
The Advanced Threat Protection Statistics (ATP) widget has been improved to provide per VDOM functionality, more
data source options, and enhanced user interactivity.
The ATP widget now uses FortiView stats for data, allows time frame selection, offers expanded views with antivirus logs
and supports log device settings. These improvements aim to provide users with more detailed and customizable threat
protection statistics.
Since the ATP widget was only available as a global setting before firmware version 7.6.0 after
upgrading from version 7.4.x to 7.6.0, users need to add this widget per VDOM, if desired.
FortiGate models without an HDD will not have the ATP widget available after upgrading to
7.6.0 firmware. Since the ATP widget used shared memory before, upgrading to 7.6.0 will first
attempt to use HDD before FortiAnalyzer and FortiGate Cloud becomes available as data
source.
1. From the Dashboard > Status page, click Add Widget. The Add Dashboard Widget pane is displayed.
2. In the Security section, click Advanced Threat Protection Statistics.
3. On the Edit Dashboard Widget - Advanced Threat Protection Statistics pane, select a FortiGate as the Data source
and click OK.
The Advanced Threat Protection Statistics widget is added to the main dashboard.
l Each category in the pie chart can be clicked to filter on the log information for that category. For example, selecting
the Malicious infection type, you can see the log entry associated with a file that was blocked.
l Logs can be downloaded for each category or all categories by clicking the Download button beside the Refresh
button.
l Tables can be customized to add or remove columns for each log
The process of creating and editing IPsec tunnels is now more logical. The IPsec Wizard supports setting the IKE
version for both hub and spoke and site-to-site configurations, along with other transport-related fields for site-to-site
tunnels. Additionally, security posture tags can be added to FortiClient Remote Access tunnels. These updates aim to
make the process more intuitive and efficient.
Additional enhancements include:
Examples
1. Go to VPN > IPsec Wizard and configure the following settings for the VPN template:
a. Enter a name for the VPN, for example, site2site.
b. Select the Site to Site template.
c. Click Begin.
d. Click Next.
g. Click Next.
6. Click Submit. The new site to site VPN tunnel is listed in the VPN > IPsec Tunnels table.
To configure a hub for a Hub and Spoke VPN using the VPN Wizard:
1. Go to VPN > IPsec Wizard and configure the following settings for the VPN template:
a. Enter a name for the VPN, for example, Hub-01.
b. Select the Hub and Spoke with ADVPN template.
c. Click Begin.
d. Select Hub.
e. Click Next.
c. Click Next.
6. Click Submit. The new VPN hub tunnel is listed in the VPN > IPsec Tunnels table.
7. Click the Easy configuration key link from notification in the top-right corner of the window once the tunnel is
created. The Edit VPN Tunnel pane opens.
8. In the Hub & spoke topology section, locate the IP address and copy the key from Easy Config Key column.
To configure a spoke for a Hub and Spoke VPN using the VPN Wizard:
1. Go to VPN > IPsec Wizard. Configure the following settings for the VPN template:
a. Enter a name for the VPN, for example, Hub-01.
b. Select the Hub and Spoke with ADVPN template.
c. Click Begin.
d. For the Local interface, click in the field and select port2 from the Select Entries pane.
e. For the Local subnets that can access VPN, enter 192.168.5.0/24.
f. For the Local AS, enter 65400.
g. Click Next.
c. Click Next.
6. Click Submit. The new VPN spoke tunnel is listed in the VPN > IPsec Tunnels table.
To configure a Remote Access VPN with security posture tags using the VPN Wizard:
1. Go to VPN > IPsec Wizard. Configure the following settings for the VPN template:
a. Enter a name for the VPN, for example, Forticlient.
b. Select the Remote Access template.
c. Click Begin.
e. Click Next.
a. For the Outgoing interface that binds to tunnel, select port1 from the dropdown menu.
b. Enable the Create and add interface zone option.
c. For the Local interface, click in the field and select port2 from the Select Entries pane.
d. For the Local Address, click in the field and select all from the Select Entries pane.
e. Click Next.
6. Click Submit. The new remote access VPN tunnel is listed in the VPN > IPsec Tunnels table.
The security rating display and integrations have been enhanced for a more streamlined experience:
l The Security Rating page now showcases the Security Controls and Vulnerabilities tabs, with reorganized and
categorized controls for improved navigation. Details on PSIRT advisory/Outbreak detection are now presented in a
dedicated card.
l A new Security Rating Insights feature provides immediate access to crucial security information. Hover over any
tested object to reveal a tooltip with more information about any non-conformance to best practices or industry
standards.
l Additionally, security rating checks are now run on-demand when relevant configuration changes are made,
addressing previous performance issues. An overview of Security Rating Insights on each page offers a quick filter
for items failing certain criteria.
l The Vulnerabilities tab displays PSIRT advisory and Outbreak detection entries that are included in the
b. On the bottom-left, click Security Rating Insights to display relevant issues. Select an issue, such as Unused
Policies to display a banner and filter that you can use to filter down to the applicable entries.
You can now use the GUI to configure an IPv6 address or an FQDN that resolves to an IPv6 address for the forward
server. Previously only the CLI was supported. See Support web proxy forward server over IPv6 for information about
the CLI.
Example
In this example, an explicit web proxy with a forward server can be reached by an IPv6 address, and a client PC uses this
explicit web proxy forward server to access a website, such as www.google.com.
The IPv6 address is configured for the web proxy forward server, and then the configuration is added to a proxy policy.
The web proxy forward server configuration could also be added to a proxy mode policy or a transparent web proxy
policy.
Port 8080
5. Set the remaining options as needed, and click OK to save the explicit web proxy.
GUI support for security posture tags in dial-up IPsec VPN tunnels - 7.6.1
Starting in FortiOS 7.6.1, you can use the GUI to configure a dial-up IPsec VPN tunnel with security posture tag
matching. Previously only the CLI was supported. See also Security posture tag match enforced before dial-up IPsec
VPN connection on page 381.
To configure a dial-up IPsec VPN tunnel with security posture tags in the GUI:
The command palette now includes a Diagnostics tab. It provides a list of troubleshooting commands, and allows you to
browse and search for debug commands directly in the GUI.
1. Press ctrl+p (or cmd+p for Mac) and then enter a /, or select the Diagnostics tab.
5. Click Copy to clipboard to copy the output to the clipboard, or Download the file to download the output as a text file.
6. Click Run to run the command again.
A new Asset Details pane is available and accessible from multiple GUI pages. The Asset Details pane provides
comprehensive endpoint information to streamline the diagnostic process and reduce reliance on CLI commands.
Access the Asset Details pane by clicking the Asset Details button from the following GUI locations:
l On the Dashboard > Assets & Identities page:
l Click the Assets widget to expand it. On the Assets pane, hover over a device to display a tooltip that includes
the Asset Details button, or select a row in the table to display a toolbar that includes the Asset Details button.
l Click the Assets - Vulnerabilities widget to expand it. On the Assets - Vulnerabilities pane, hover over a device
to display a tooltip that includes the Asset Details button, or select a row in the table to display a toolbar that
includes the Asset Details button.
l Click the Assets - FortiClient widget to expand it. On the Assets - FortiClient pane, hover over a device to
display a tooltip that includes the Asset Details button, or select a row in the table to display a toolbar that
includes the Asset Details button.
l Go to Asset Identity Center page. Hover over a device to display a tooltip that includes the Asset Details button,
or select a row in the table to display a toolbar that includes the Asset Details button.
l Go to FortiSwitch Clients. Hover over a device to display a tooltip that includes the Asset Details button, or
select a row in the table to display a toolbar that includes the Asset Details button.
l On the Log & Report > Forward Traffic page, hover over a device to display a tooltip that includes the Asset Details
button:
Click the Asset Details button to view the Asset Details pane:
l The following example of the Asset Details pane is for an endpoint named WinLap1 using a WiFi interface:
l The following example of the Asset Details pane is for an endpoint named PC75_WIN using a VLAN interface:
On the top-left of the Asset Details pane is information about the endpoint, such as MAC address, IP address, interface,
and so on. The following buttons are also available for the endpoint:
l Create > Firewall Address
l Create > Firewall Policy
l Quarantine > Quarantine Host
l Quarantine > Ban IP
l Disassociate is available for endpoints using a WiFi interface
l Packet capture
On the top-right are details about the WiFi or FortiLink interface when used by the endpoint.
Along the bottom are tabs of information, depending on the endpoint and interface used:
Tab Subtabs
FortiView Applications
Destinations
Sources
Policies
Vulnerabilities/Vulnerabilities FortiClient
<number> KEVs IoT/OT
Following are examples of the Asset Details pane for an endpoint named WinLap1 using a WiFi interface:
l The FortiView > Destinations tab:
Following are examples of the Asset Details pane for an endpoint named PC75_WIN using a VLAN interface:
l The FortiView > Policies tab:
The enhanced global search in the top header menu provides quick command palette access from the GUI and
additional keyboard shortcuts. This menu allows fast navigation to GUI pages as well as running actions, such as
opening the CLI console, executing diagnostic commands, and searching configurations.
The following global search functions can be selected from the top header menu or by using keyboard shortcuts:
Open ctrl + shift + Open a monitor in a prompt without changing the current
p GUI page, such as packet capture and the CLI console.
CLI diagnostics ctrl + p followed Run a diagnostic CLI command without the CLI console.
by / Recently used commands are listed first.
Once a command has been selected, you can search
within the output, copy the output, download an output
file, and run the command again.
Search configuration ctrl + / Search for and open a specific configuration in the GUI.
3. Enter the configuration you want and press Enter. Suggested results are displayed.
For FortiOS 7.6.1 and above, TCP port 443 is used by default to encapsulate ESP packets within TCP headers using its
proprietary solution. See Encapsulate ESP packets within TCP headers for more information.
Starting in FortiOS 7.6.3, if administrators assign port 443 for HTTPS administrative access on an interface that is also
bound to an IPsec tunnel, FortiOS will display a warning indicating that HTTPS access on that port will no longer be
available. This is because port 443 is also used for IKE over TCP, and in such cases, IKE takes precedence over
HTTPS, resulting in the loss of GUI access on that interface.
The default IKE-TCP value of port 443 is only applicable to new FortiGate configurations with
FortiOS 7.6.1 and above. If FortiOS is upgraded to 7.6.1 and above, the ike-tcp-port
value from before the upgrade is retained.
l In VPN > VPN Tunnels, a warning is displayed for the Network > Interface field when the HTTPS port conflicts with
IKE-TCP port and the selected port has HTTPS allow access.
l In VPN > VPN Tunnels, a warning is displayed in the Local Site > Outgoing interface that binds to tunnel field when
the HTTPS port conflicts with IKE-TCP port and the selected port has HTTPS allow access.
l In Security Fabric > Security Rating, a Security Posture failure is flagged for the HTTPS Port Conflict with IKE Port
check, indicating a configuration issue. Likewise, a Security Ratings Insights recommendation is listed. This occurs
when the HTTPS port conflicts with the IKE port.
Administrators can now configure VRF settings for multicast routing using the GUI. See Enhanced PIM support for VRFs
7.6.1 on page 109 for information on CLI support.
5. Click OK.
6. Click Apply.
Network
General
This section includes information about general network related new features:
l Configure the VRRP hello timer in milliseconds on page 74
l FortiGate as a recursive DNS resolver on page 75
l BGP network prefixes utilize firewall addresses and groups on page 81
l Support UDP-Lite traffic on page 83
l Custom LSA refresh rates and fast link-down detection on VLAN interfaces for OSPF on page 87
l Filter NetFlow sampling on page 88
l SOCKS proxy supports UTM scanning, authentication, and forward server on page 92
l Implement the interface name as the source IP address in RADIUS, LDAP, and DNS configurations on page 96
l Include groups in PIM join/prune messages on page 99
l Automatic LTE connection establishment on page 104
l Netflow sampling on page 105
l Support source-IP interface for system DNS database on page 107
l Extended VRF ID range for enhanced network scalability 7.6.1 on page 109
l Enhanced PIM support for VRFs 7.6.1 on page 109
l Including denied multicast sessions in the session table 7.6.1 on page 111
l Support specific VRF ID for local-out traffic 7.6.1 on page 112
l Support source IP interface for system DNS 7.6.1 on page 118
l Improvements to IPsec monitoring 7.6.1 on page 119
l Connectivity Fault Management (CFM) now available for FG-80F-POE and FG-20xF models 7.6.3 on page 123
l Application and network performance monitoring with FortiTelemetry 7.6.3 on page 123
l Fortinet Support Tool for capturing incidents on page 145
FortiOS allows the hello timer for the Virtual Router Redundancy Protocol (VRRP) to be configured in milliseconds. This
timer dictates the rate at which VRRP advertisements are sent. With this enhanced control, you can ensure quick failover
and high availability where necessary.
FortiOS supports being configured as a recursive DNS resolver. As a resolver, the FortiGate can directly interact with
root name servers, Top-Level Domain (TLD) name servers, and finally authoritative name servers to resolve DNS
queries. The FortiGate will iterate through these DNS servers to get the final IP address for the FQDN, as opposed to
forwarding the request to external resolvers in forwarder mode for example. This can avoid hitting limitations from
external resolvers which may limit the number of queries per second. Finally, clients can then use the FortiGate as their
DNS server to perform DNS resolution.
The recursive resolver mode has been added to the DNS server interface:
config system dns-server
edit <DNS server name>
set mode {recursive | non-recursive | forward-only | resolver}
next
end
recursive The system checks for the requested record in the shadow DNS database and
then forward to the system's DNS server.
non-recursive The search is restricted to only the Public DNS database.
forward-only All queries are forwarded directly to the system's DNS server.
resolver The recursive resolver mode will respond to a DNS query with local cached data
or send the request to the root name server, followed by the TLD name server and
an authoritative name server.
Furthermore, FortiOS also adds support for prioritizing root name servers. By default, a list of 13 public root name
servers are known to the FortiGate. These DNS servers can be viewed with diagnose test application
dnsproxy 19.
Prioritized root name servers will be highlighted among the total list of root servers. Prioritized (highlighted) root servers
will be queried in round robin fashion. Default (non-highlighted) root servers will only be queried if there are no prioritized
root servers.
You may configure root servers from the list of 13 default servers, or you can configure your own custom root name
server. Any custom root name servers you configure will be defined with an auto-generated name.
The root name servers can be prioritized and configured with the following:
config system dns
set primary <class IP address>
set root-servers <DNS root name server IP address>
end
Example 1
In the following example, we will configure the FortiGate’s WAN interface (port3) in resolver mode and configure 1 DNS
entry to return results for override.fortinet.com in the fortinet.com domain.
5. Click OK.
6. Under DNS Database, click Create New and configure the following:
Type Primary
View Shadow
Authoritative Disable
a. Under DNS Entries, click Create New and configure the following:
Hostname override
IP Address 10.88.0.30
b. Click OK.
7. Click OK.
To verify:
;; QUESTION SECTION:
;override.fortinet.com. IN A
;; ANSWER SECTION:
override.fortinet.com. 86400 IN A 10.88.0.30
3. From the FortiGate debugs, observe the results are found locally.
FortiGate-VM64-KVM # [worker 0] batch_on_read()-3563
[worker 0] udp_receive_request()-3219: vfid=0, vrf=0, intf=5, len=62, alen=16,
10.0.3.2:51485=>10.0.3.254:53
[worker 0] handle_dns_request()-2497: vfid=0 real_vfid=0 id=0xd296 req_type=3
name=override.fortinet.com qtype=1
[worker 0] dns_nat64_ptr_lookup()-272
[worker 0] dns_nat64_update_request()-305
[worker 0] dns_local_lookup_common()-2578: vfid=0, real_vfid=0, view=2,
qname=override.fortinet.com, qtype=1, qclass=1, offset=39, map#=3 max_sz=512
[worker 0] dns_lookup_aa_zone()-627: vfid=0, fqdn=override.fortinet.com
[worker 0] dns_local_lookup_common()-2630: found zone=fortinet domain=fortinet.com
[worker 0] dnsentry_search()-507: domain=fortinet.com, name=override.fortinet.com,
type=1
[worker 0] dnsentry_lookup()-431: domain=fortinet.com, name=override.fortinet.com,
type=1
[worker 0] dnsentry_lookup()-441: found entry=override.fortinet.com
…
[worker 0] dns_send_response()-1626: domain=override.fortinet.com reslen=55
;; QUESTION SECTION:
;www.fortinet.com. IN A
;; ANSWER SECTION:
www.fortinet.com. 60 IN CNAME fortinet.96983.fortiwebcloud.net.
fortinet.96983.fortiwebcloud.net. 60 IN CNAME ipv6.lb-2.us-west-1.aws.waas-online.net.
ipv6.lb-2.us-west-1.aws.waas-online.net. 60 IN A 54.177.212.176
;; SERVER: 10.0.3.254#53(10.0.3.254)
;; WHEN: Tue Jul 23 17:11:04 Pacific Daylight Time 2024
;; MSG SIZE rcvd: 146
5. From the FortiGate debugs, observe the FortiGate makes the resolver query to each DNS name server directly to
resolve the address.
FortiGate-VM64-KVM # [worker 0] dns_query_check_timeout()-623: jiffies=60824828
[worker 0] batch_on_read()-3563
[worker 0] udp_receive_request()-3219: vfid=0, vrf=0, intf=5, len=57, alen=16,
10.0.3.2:52979=>10.0.3.254:53
[worker 0] handle_dns_request()-2497: vfid=0 real_vfid=0 id=0x5fb1 req_type=3
name=www.fortinet.com qtype=1
[worker 0] dns_nat64_ptr_lookup()-272
[worker 0] dns_nat64_update_request()-305
[worker 0] dns_local_lookup_common()-2578: vfid=0, real_vfid=0, view=2,
qname=www.fortinet.com, qtype=1, qclass=1, offset=34, map#=3
max_sz=512
[worker 0] dns_lookup_aa_zone()-627: vfid=0, fqdn=www.fortinet.com
[worker 0] dns_local_lookup_common()-2630: found zone=fortinet domain=fortinet.com
[worker 0] dnsentry_search()-507: domain=fortinet.com, name=www.fortinet.com, type=1
[worker 0] dnsentry_lookup()-431: domain=fortinet.com, name=www.fortinet.com, type=1
[worker 0] dnsentry_lookup()-431: domain=fortinet.com, name=www.fortinet.com, type=5
[worker 0] dns_send_resol_request()-1322: orig id: 0x5fb1 local id: 0x5fb1
domain=www.fortinet.com
[worker 0] resolver_check_slist()-392: id=0x5fb1 domain=www.fortinet.com
zone=fortinet.com ns=ns3.fortinet.com:208.91.113.63
…
[worker 0] dns_send_resol_request()-1322: orig id: 0xa2d9 local id: 0xa2d9
domain=fortinet.96983.fortiwebcloud.net
[worker 0] resolver_check_slist()-392: id=0xa2d9 domain=fortinet.96983.fortiwebcloud.net
zone=fortiwebcloud.net ns=ns-111.awsdns-13.
com:205.251.192.111
…
[worker 0] dns_send_resol_request()-1322: orig id: 0x8850 local id: 0x8850
domain=ipv6.lb-2.us-west-1.aws.waas-online.net
[worker 0] resolver_check_slist()-392: id=0x8850 domain=ipv6.lb-2.us-west-1.aws.waas-
online.net zone=waas-online.net ns=ns-131.awsdn
s-16.com:205.251.192.131
…
[worker 0] __udp_receive_response()-3419: vd-0: len=210, addr=205.251.192.131:53,
rating=0
[worker 0] dns_query_handle_response()-2762: vfid=0 real_vfid=0 vrf=0 id=0x8850
domain=ipv6.lb-2.us-west-1.aws.waas-online.net pktle
n=210
…
[worker 0] dns_send_response()-1626: domain=www.fortinet.com reslen=146
6. From the FortiGate, change the DNS server setting for WAN (port3) to recursive mode.
7. Restart the dnsproxy:
# diagnose test application dnsproxy 99
8. From the client, use dig to issue a lookup for www.fortinet.com again
9. From the FortiGate debugs, observe the FortiGate now forwards the query to a resolver instead of resolving the
query itself.
Example 2
In the following example, the root name servers that should be prioritized will be defined, and the DNS server will be
highlighted from the list of root name servers.
Example 3
In the following example, the user configures a custom root server which will be added to the root zone cache. The name
of the new user-defined root server will be auto-generated.
2. Display the DNS server for the user-defined root name server:
# diagnose test application dnsproxy 19
worker idx: 0
name=. label_count=0 ns_count=14
ns=a.root-servers.net A=198.41.0.4 use=1
ns=b.root-servers.net A=199.9.14.201 use=1
ns=c.root-servers.net A=192.33.4.12 use=1
ns=d.root-servers.net A=199.7.91.13 use=1
ns=e.root-servers.net A=192.203.230.10 use=1
ns=f.root-servers.net A=192.5.5.241 use=1
ns=g.root-servers.net A=192.112.36.4 use=1
ns=h.root-servers.net A=198.97.190.53 use=1
ns=i.root-servers.net A=192.36.148.17 use=1
ns=j.root-servers.net A=192.58.128.30 use=1
ns=k.root-servers.net A=193.0.14.129 use=1
ns=l.root-servers.net A=199.7.83.42 use=1
ns=m.root-servers.net A=202.12.27.33 use=1
*ns=a.user-root-servers.fgt A=172.16.200.55 use=1
BGP prefixes can be configured utilizing firewall addresses (ipmask and interface-subnet types) and groups. This
streamlines the configuration processing, allowing users to leverage their existing firewall addresses and groups when
configuring BGP network prefixes.
To configure various firewall address and groups and use them in BGP network prefixes:
UDP-Lite (RFC 3828) is a version of UDP that is able to deliver partially damaged data payload to an application by
defining partial checksums on the packet. FortiOS now provides full support for UDP-Lite (IP protocol 136), including, but
not limited to:
l Parsing of UDP-Lite traffic (extracting src/dst port numbers for the session)
l Traffic logging
l HA session synchronization for connectionless sessions (when enabled)
l Strict header checking (when enabled) to silently drop UDP-Lite packets that have invalid header format or wrong
checksum errors
l Defining a custom UDP-Lite service
l Defining session-ttl
l Applying UDP-Lite in policy routing
FortiOS does not currently support NP6/NP7 packet offloading of UDP-Lite traffic.
Usage
When configuring a custom firewall service, the protocol can be set to UDP-Lite and the UDP-Lite port range can be
configured:
config firewall service custom
edit "UDPLite_8090"
set protocol TCP/UDP/UDP-Lite/SCTP
set udplite-portrange 8090
next
end
In the GUI, go to Policy & Objects > Services and click Create New:
When configuring session TTL, after setting the protocol to 136, the start and end ports can be configured:
config system session-ttl
config port
edit 1
set protocol 136
set start-port 8090
set end-port 8090
next
end
end
When configuring a router policy, after setting the protocol to 136, the start, start source, end, and end source ports can
be configured:
config router policy
edit 1
set protocol 136
set start-port 8080
set end-port 8090
set start-source-port 1
set end-source-port 65535
next
end
FortiOS does not currently support NP6/NP7 packet offloading of UDP-Lite traffic.
In this example, the UDP-Lite protocol is set in the system session TTL, and a firewall policy is created to handle the
traffic. The traffic is parsed as a UDP-Lite session, and the custom session TTL can be applied to session.
3. Send UDP-Lite packets with destination port 8090 to pass through the FortiGate and hit the configured policy, then
check the session table. The UDP-Lite protocol number, source and destinations ports, and session timeout is
correctly identified by the FortiGate:
# diagnose sys session list
session info: proto=136 proto_state=01 duration=10 expire=3789 timeout=3800 refresh_
dir=both flags=00000000 socktype=0 sockport=0 av_idx=0 use=3
origin-shaper=
reply-shaper=
per_ip_shaper=
class_id=0 ha_id=0 policy_dir=0 tunnel=/ vlan_cos=0/255
state=log may_dirty npu f00
statistic(bytes/packets/allow_err): org=45/1/1 reply=45/1/1 tuples=2
tx speed(Bps/kbps): 4/0 rx speed(Bps/kbps): 4/0
orgin->sink: org pre->post, reply pre->post dev=8->7/7->8 gwy=0.0.0.0/0.0.0.0
hook=post dir=org act=snat 10.1.100.41:60390->172.16.200.155:8090(172.16.200.6:60390)
hook=pre dir=reply act=dnat 172.16.200.155:8090->172.16.200.6:60390(10.1.100.41:60390)
misc=0 policy_id=2 pol_uuid_idx=8169 auth_info=0 chk_client_info=0 vd=0
serial=00007dcf tos=ff/ff app_list=0 app=0 url_cat=0
route_policy_id=1
rpdb_link_id=00000001 ngfwid=n/a
npu_state=00000000
npu info: flag=0x00/0x00, offload=0/0, ips_offload=0/0, epid=0/0, ipid=0/0,
vlan=0x0000/0x0000
vlifid=0/0, vtag_in=0x0000/0x0000 in_npu=0/0, out_npu=0/0, fwd_en=0/0, qid=0/0, ha_
divert=0/0
no_ofld_reason:
ofld_fail_reason(kernel, drv): none/not-established, none(0)/none(0)
npu_state_err=00/04
total session: 1
4. Check the traffic log to ensure that the service of the packets is udp-lite/8090, meaning that the FortiGate
correctly identified the protocol:
1: date=2024-04-12 time=14:37:07 eventtime=1712957827949666276 tz="-0700"
logid="0000000013" type="traffic" subtype="forward" level="notice" vd="root"
srcip=10.1.100.41 srcport=56284 srcintf="port2" srcintfrole="undefined"
dstip=172.16.200.155 dstport=8090 dstintf="port1" dstintfrole="undefined"
srcuuid="7fcec30c-f795-51ee-6b79-a787816736bf" dstuuid="8b1ab996-f795-51ee-7127-
a688cca288f5" srccountry="Reserved" dstcountry="Reserved" sessionid=32331 proto=136
action="accept" policyid=2 policytype="policy" poluuid="643284de-eb0c-51ee-6779-
16a7d8e406f0" policyname="policy-2" service="udp-lite/8090" trandisp="snat"
transip=172.16.200.6 transport=56284 duration=8 sentbyte=45 rcvdbyte=45 sentpkt=1
rcvdpkt=1 appcat="unscanned"
In this example, a policy route is defined to route UDP-Lite traffic (protocol 136) that meets the policy route criteria out to
port5. Only the policy route configuration is shown. It is assumed that the interfaces, routes, and firewall polices have
already been correctly configured.
Custom LSA refresh rates and fast link-down detection on VLAN interfaces for
OSPF
You can now customize the Link State Advertisement (LSA) refresh interval for the OSPF protocol to provide enhanced
flexibility and control over the timing parameters within the network. Furthermore, OSPF's capabilities have been
expanded to include fast link-down detection on VLAN interfaces, which markedly boosts the network's responsiveness
and dependability.
The config router ospf command includes new options:
config router ospf
set lsa-refresh-interval <integer>
config ospf-interface
edit <name>
set interface <string>
set linkdown-fast-failover {enable | disable}
next
end
end
set lsa-refresh-interval How often LSA refreshes for OSPF, in seconds (0 to 5, default = 5).
<integer>
set linkdown-fast- Enable/disable fast link failover.
failover {enable | l enable: OSPF updates the link status from up to down and advertises the
disable}
LSA update as soon as the underlying physical interface goes down.
l disable: Disable the use of OSPF and use the kernal detection and
notification instead.
Used when the ospf-interface interface attribute is configured, and the type
of the underlying interface is VLAN.
Exclusion filters can be applied to NetFlow sampling based on criteria including source and destination IP addresses,
source and destinations ports, and IP protocol. This enhances the relevance of collected data, streamlines data
management processes, and reduces excess network traffic. Exclusion filters are defined globally, and up to 64 can be
configured.
config system netflow
config exclusion-filters
edit <id>
set source-ip <IP_address>
set destination-ip <IP_address>
set source-port <port>
set destination-port <port>
set protocol <protocol_ID>
next
end
end
In this example, IPv4-IPv4 and IPv6-IPv4 exclusion filters are configured on a FortiGate that is connected to a NetFlow
connector. Packets are sent that hit the filters, then the session lists are checked for the NetFlow flag and the sessions
are checked on the collector.
l If there are two IPv6-IPv4 (NAT64) sessions, and only the first one matches filter ID 64:
# diagnose sys session6 list
session6 info: proto=58 proto_state=00 duration=23 expire=59 timeout=0 refresh_
dir=both flags=00000000 sockport=0 socktype=0 use=3
origin-shaper=
reply-shaper=
per_ip_shaper=
class_id=0 ha_id=0 policy_dir=0 tunnel=/ vlan_cos=0/0
state=log may_dirty netflow-origin netflow-reply
statistic(bytes/packets/allow_err): org=2392/23/0 reply=2392/23/0 tuples=2
tx speed(Bps/kbps): 102/0 rx speed(Bps/kbps): 102/0
orgin->sink: org pre->post, reply pre->post dev=8->43/43->8
hook=pre dir=org act=dnat 2000:10:1:100::41:11138->65:ff9b::ac10:c837:128
(65:ff9b::ac10:c837:11138)
hook=post dir=reply act=snat 65:ff9b::ac10:c837:11138->2000:10:1:100::41:129
(65:ff9b::ac10:c837:11138)
peer=172.16.201.8:1066->172.16.200.55:8 naf=1
hook=pre dir=org act=noop 172.16.201.8:1066->172.16.200.55:8(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.55:1066->172.16.201.8:0(0.0.0.0:0)
misc=0 policy_id=4 pol_uuid_idx=8176 auth_info=0 chk_client_info=0 vd=0
serial=0000067e tos=ff/ff ips_view=9572 app_list=0 app=0 url_cat=0
rpdb_link_id=00000000 ngfwid=n/a
npu_state=0x040001 no_offload
no_ofld_reason: disabled-by-policy non-npu-intf
(65:ff9b::ac10:c89b:11137)
peer=172.16.201.8:1065->172.16.200.155:8 naf=1
hook=pre dir=org act=noop 172.16.201.8:1065->172.16.200.155:8(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.155:1065->172.16.201.8:0(0.0.0.0:0)
misc=0 policy_id=4 pol_uuid_idx=8176 auth_info=0 chk_client_info=0 vd=0
serial=0000067d tos=ff/ff ips_view=9572 app_list=0 app=0 url_cat=0
rpdb_link_id=00000000 ngfwid=n/a
npu_state=0x040001 no_offload
no_ofld_reason: disabled-by-policy non-npu-intf
total session6: 2
4. Check on the collector server. The FlowSets are received on collector for the session/session6 if they do not match
the filters. If the sessions match the filter in the system NetFlow, then no FlowSets are received on the collector.
l IPv4-IPv4 FlowSets:
Do not receive FlowSets that match exclusion filter ID 44:
l IPv6-IPv4 FlowSets:
Do not receive FlowSets that match exclusion filter ID 64:
SOCKS proxy now supports UTM scanning, authentication, and forward server.
Examples
FortiGate can resign server certificates and block expired server certificates through the SOCKS proxy.
l When user credentials are provided, the connection succeeds and traffic can be passed:
root@client:~# curl --socks5-host 10.1.100.6:1080 http://172.16.200.99 -v -k --proxy-
user test1:123
* Trying 10.1.100.6:1080...
* SOCKS5 connect to 172.16.200.99:80 (remotely resolved)
* SOCKS5 request granted.
* Connected to 10.1.100.6 (10.1.100.6) port 1080 (#0)
> GET / HTTP/1.1
> Host: 172.16.200.99
> User-Agent: curl/7.83.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Fri, 14 Jun 2024 00:46:47 GMT
< Server: Apache/2.4.38 (Ubuntu)
< Upgrade: h2c
< Connection: Upgrade
< Last-Modified: Tue, 08 Nov 2022 23:15:16 GMT
< ETag: "2f-5ecfdb689edac"
< Accept-Ranges: bytes
< Content-Length: 47
< Content-Type: text/html
<
It works!
this is pc4.
this is a test file
* Connection #0 to host 10.1.100.6 left intact
Implement the interface name as the source IP address in RADIUS, LDAP, and DNS
configurations
configurations
To account for dynamic IP address changes, such as those governed by SD-WAN rules, interface names can be used to
define the source IP addresses in RADIUS, LDAP, and DNS configurations using the source-ip-interface
command. The interface's current IP address will be used as the source IP address in the configuration; enhancing
network flexibility and resolving potential connectivity issues.
The following examples demonstrate configuring the interface name as the source IP address in RADIUS and LDAP
servers, and local DNS databases, respectively. The server configuration on the FortiGate will need to have a source IP
address included. This source IP address can be any interface, including the IP address of a loopback interface.
In this example, the loopback interface is used as the source IP address and the interface method is set to specify.
b. Perform a sniffer check in a separate SSH session to verify that the source IP address contains the expected IP
address of the loop interface:
# diagnose sniffer packet any 'host 10.1.100.142 and port 1812' 4
interfaces=[any]
filters=[host 10.1.100.142 and port 1812]
5.144791 testvlink1 out 10.1.10.9.17437 -> 10.1.100.142.1812: udp 110
5.144794 testvlink0 in 10.1.10.9.17437 -> 10.1.100.142.1812: udp 110
5.144812 port2 out 10.1.10.9.17437 -> 10.1.100.142.1812: udp 110
5.149570 port2 in 10.1.100.142.1812 -> 10.1.10.9.17437: udp 169
5.149581 testvlink0 out 10.1.100.142.1812 -> 10.1.10.9.17437: udp 169
5.149583 testvlink1 in 10.1.100.142.1812 -> 10.1.10.9.17437: udp 169
In this example, a VDOM link is used as the source IP address and the interface method is set to sdwan.
3. Confirm in a packet capture that the correct IP address is used in the outgoing and incoming packets:
# diagnose sniffer packet any 'port 389' 4
interfaces=[any]
filters=[port 389]
11.356977 testvlink1 out 10.12.1.10.11742 -> 172.18.60.214.389: syn 1099805903
11.356979 testvlink0 in 10.12.1.10.11742 -> 172.18.60.214.389: syn 1099805903
11.357001 port1 out 172.16.200.9.11742 -> 172.18.60.214.389: syn 1099805903
11.357548 port1 in 172.18.60.214.389 -> 172.16.200.9.11742: syn 2083328609 ack
1099805904
11.357556 testvlink0 out 172.18.60.214.389 -> 10.12.1.10.11742: syn 2083328609 ack
1099805904
11.357558 testvlink1 in 172.18.60.214.389 -> 10.12.1.10.11742: syn 2083328609 ack
1099805904
11.357566 testvlink1 out 10.12.1.10.11742 -> 172.18.60.214.389: ack 2083328610
11.357564 testvlink0 in 10.12.1.10.11742 -> 172.18.60.214.389: ack 2083328610
11.357571 port1 out 172.16.200.9.11742 -> 172.18.60.214.389: ack 2083328610
In this example, the system DNS database uses a customized DNS server and a loopback interface as the source IP
address.
3. Clear the DNS host cache and ping any FQDN in the DNS domain:
# execute ping login.fortinet-fsso.com
PING login.fortinet-fsso.com (10.1.100.5): 56 data bytes
64 bytes from 10.1.100.5: icmp_seq=0 ttl=255 time=0.1 ms
64 bytes from 10.1.100.5: icmp_seq=1 ttl=255 time=0.0 ms
64 bytes from 10.1.100.5: icmp_seq=2 ttl=255 time=0.0 ms
64 bytes from 10.1.100.5: icmp_seq=3 ttl=255 time=0.0 ms
64 bytes from 10.1.100.5: icmp_seq=4 ttl=255 time=0.0 ms
4. Perform a sniffer check on the FortiGate to confirm that the loopback interface was used as the source IP address in
a DNS query:
# diagnose sniffer packet any 'host 10.1.100.150 and port 53' 4
interfaces=[any]
filters=[host 10.1.100.150 and port 53]
91.180362 port2 out 10.3.10.9.1328 -> 10.1.100.150.53: udp 41
91.180733 port2 in 10.1.100.150.53 -> 10.3.10.9.1328: udp 57
468.753163 port2 out 10.3.10.9.3990 -> 10.1.100.150.53: udp 41
468.753533 port2 in 10.1.100.150.53 -> 10.3.10.9.3990: udp 57
523.470007 port2 out 10.3.10.9.3990 -> 10.1.100.150.53: udp 44
523.470017 port2 out 10.3.10.9.3990 -> 10.1.100.150.53: udp 45
523.470025 port2 out 10.3.10.9.3990 -> 10.1.100.150.53: udp 47
523.470350 port2 in 10.1.100.150.53 -> 10.3.10.9.3990: udp 60
523.470380 port2 in 10.1.100.150.53 -> 10.3.10.9.3990: udp 85
523.470396 port2 in 10.1.100.150.53 -> 10.3.10.9.3990: udp 95
^C
10 packets received by filter
0 packets dropped by kernel
FortiOS now includes groups in the Protocol Independent Multicast (PIM) join/prune messages sent to the router,
according to section 4.9.5 in RFC 4601. Previously, FortiOS could accept PIM join/prune messages with multiple groups;
however, FortiOS could only send one group in one PIM join/prune message to the router. This improvement reduces
the number of messages sent to the router, ensuring greater stability and efficiency in network operations, particularly in
extensive multicast environments.
Example
In this example, multicast routing is configured on FortiGate A. On FortiGate B, multicast routing is configured with a
static group consisting of 10 group addresses. The PIM join/prune messages sent from FortiGate B to the receiver
include the group addresses.
config pim-sm-global
config rp-address
edit 1
set ip-address 1.1.1.1
next
end
end
config interface
edit "port2"
set pim-mode sparse-mode
next
edit "agg1"
set pim-mode sparse-mode
next
edit "loopback1"
set pim-mode sparse-mode
next
end
end
4. On FortiGate B, after traffic flows, confirm the visibility of the multicast groups on FortiGate A. A successful
enumeration of these groups signifies the correct execution of the multicast join process. Conversely, during a
multicast prune operation, ensure that the multicast groups are appropriately retracted from FortiGate A:
# get router info multicast pim sparse-mode table
IP Multicast Routing Table
(*,*,RP) Entries: 0
(*,G) Entries: 10
(S,G) Entries: 0
(S,G,rpt) Entries: 0
FCR Entries: 0
(*, 225.1.1.10) - 2
RP: 1.1.1.1
RPF nbr: 0.0.0.0
RPF idx: None
RPF RP: 1.1.1.1, 0, 1, 1, 424238339
Upstream State: JOINED
Downstream Expired: 0
Local:
Total: 0
Joined:
agg1
Total: 1
Lost assert:
Total: 0
FCR:
(*, 225.1.1.11) - 2
RP: 1.1.1.1
RPF nbr: 0.0.0.0
RPF idx: None
RPF RP: 1.1.1.1, 0, 1, 1, 424238339
Total: 0
Joined:
agg1
Total: 1
Lost assert:
Total: 0
FCR:
(*, 225.1.1.15) - 2
RP: 1.1.1.1
RPF nbr: 0.0.0.0
RPF idx: None
RPF RP: 1.1.1.1, 0, 1, 1, 424238339
Upstream State: JOINED
Downstream Expired: 0
Local:
Total: 0
Joined:
agg1
Total: 1
Lost assert:
Total: 0
FCR:
(*, 225.1.1.16) - 2
RP: 1.1.1.1
RPF nbr: 0.0.0.0
RPF idx: None
RPF RP: 1.1.1.1, 0, 1, 1, 424238339
Upstream State: JOINED
Downstream Expired: 0
Local:
Total: 0
Joined:
agg1
Total: 1
Lost assert:
Total: 0
FCR:
(*, 225.1.1.17) - 2
RP: 1.1.1.1
RPF nbr: 0.0.0.0
RPF idx: None
RPF RP: 1.1.1.1, 0, 1, 1, 424238339
Upstream State: JOINED
Downstream Expired: 0
Local:
Total: 0
Joined:
agg1
Total: 1
Lost assert:
Total: 0
FCR:
(*, 225.1.1.18) - 2
RP: 1.1.1.1
RPF nbr: 0.0.0.0
RPF idx: None
RPF RP: 1.1.1.1, 0, 1, 1, 424238339
Upstream State: JOINED
Downstream Expired: 0
Local:
Total: 0
Joined:
agg1
Total: 1
Lost assert:
Total: 0
FCR:
(*, 225.1.1.19) - 2
RP: 1.1.1.1
RPF nbr: 0.0.0.0
RPF idx: None
RPF RP: 1.1.1.1, 0, 1, 1, 424238339
Upstream State: JOINED
Downstream Expired: 0
Local:
Total: 0
Joined:
agg1
Total: 1
Lost assert:
Total: 0
Establishing an LTE connection is now automated. When you insert a SIM card into FortiGate, FortiOS can obtain the
Mobile Country Code (MCC) and Mobile Network Code (MNC) from the service provider's radio tower. FortiOS then
uses the codes to look up the appropriate APN for the SIM card in a predefined table and automatically creates a
wireless profile. Manual configuration is no longer needed, which simplifies the process of establishing an LTE
connection.
Netflow sampling
FortiOS supports NetFlow sampling, allowing it to maintain a count of the number of packets or bytes that have been
sampled for an interface. If the packet count for a session surpasses the configured threshold for transmitted or received
traffic on a NetFlow-enabled interface, a NetFlow report is exported. This helps reduce the load on the collector.
config system interface
edit <name>
set netflow-sampler {tx | rx | both}
set netflow-sample-rate <integer>
set netflow-sampler-id <integer>
next
end
netflow-sampler {tx | rx Enable/disable NetFlow on this interface and set the data that NetFlow collects.
| both}
netflow-sample-rate NetFlow sample rate. Sample one packet every configured number of packets (1 -
<integer> 65535, default = 1, which means standard NetFlow where all packets are
sampled).
netflow-sampler-id NetFlow sampler ID.
<integer>
All sessions that hit the interface with NetFlow sampling configured are still reported to the exporter daemon (sflowd),
which keeps a tally of the sampled packets and bytes. If the session has more ingress, egress, or both, packets than the
configured threshold (netflow-sample-rate), then a NetFlow report is exported. The Netflow report includes
rounded-up numbers of packets and bytes divided by the sampling rate.
In this example, FortiGate is connect on port2 to a NetFlow collector, NetFlow sampling is configured on port2 with a
sampling rate of 100. It is assumed that policies are already configured. Packets are sent that hit the policy. If the number
of packets is less than the sampling, then no flowset is sent to the collector. If the number of packets is more than the
sampling rate, then a flowset is sent to the collector.
set snmp-index 2
config ipv6
set ip6-address 2000:10:1:100::6/64
set ip6-allowaccess https ssh http telnet
end
set speed 1000auto
next
end
no_ofld_reason: disabled-by-policy
total session: 1
You can now specify by name what interface to use for the system DNS database, and the interface's IP address is used
as the source IP address. Specifying the interface name rather the IP address provides greater flexibility and control over
network configurations, especially in SD-WAN deployments.
config system dns-database
set source-ip-interface <string>
end
Example
In this example, a DNS server is enabled on FGT-A and on FGT-C with FGT-A configured to forward DNS queries to
FGT-C. On FGT-A, port1 is configured as the source-ip interface. When FGT-B pings a domain name, the request is
forwarded to the FGT-C DNS server to resolve.
5. On FGT-A, check that DNS proxy (dnsproxy) finds the source-IP address from port1.
# diagnose test application dnsproxy 8
worker idx: 0
The range of Virtual Routing and Forwarding (VRF) IDs has been extended from 0 through 251 to 0 through 511,
allowing for a maximum of 512 unique VRF instances configured per VDOM.
This enhancement allows for greater scalability and flexibility in network configurations.
PIM now supports all VRFs (up to 511) and is aware of IPv4 multicast routing and forwarding over a single overlay,
enhancing network scalability and flexibility compared to the previous VRF 0-only support.
Per-VRF commands have been included for multicast routing, as follows:
config router multicast
config pim-sm-global-vrf
edit <vrf>
set bsr-candidate {enable | disable}
set bsr-interface <interface>
set bsr-priority <0-255, default = 0>
VRF support has also been included in the following diagnose, get, and execute commands:
diagnose ip multicast mfc-add
diagnose ip multicast mfc-del
diagnose vpn mr|mr6 add
diagnose vpn mr|mr6 del
get router info multicast igmp groups
get router info multicast igmp groups-detail
get router info multicast table
get router info multicast table-count
get router info multicast pim sparse-mode bsr-info
get router info multicast pim sparse-mode rp-mapping
get router info multicast pim sparse-mode next-hop
get router info multicast pim sparse-mode table
execute mrouter clear multicast-routes
execute mrouter clear sparse-mode-bsr
execute mrouter clear sparse-routes
execute mrouter clear statistics
NPU offloading of VRF multicast traffic on a dynamic IPsec tunnel is not supported.
Example
l The VRF2 client can receive 225.1.1.2 and cannot receive 225.1.1.1:
4.320988 vd3-vlan331 out 22.1.1.55 -> 225.1.1.2: icmp: echo request
4.320996 vd4-vlan331 in 22.1.1.55 -> 225.1.1.2: icmp: echo request
5.320703 vd3-vlan331 out 22.1.1.55 -> 225.1.1.2: icmp: echo request
5.320717 vd4-vlan331 in 22.1.1.55 -> 225.1.1.2: icmp: echo request
6.320671 vd3-vlan331 out 22.1.1.55 -> 225.1.1.2: icmp: echo request
6.320678 vd4-vlan331 in 22.1.1.55 -> 225.1.1.2: icmp: echo request
Sessions can be created for denied multicast traffic, enabling subsequent packets to be directly matched and dropped,
reducing CPU usage and improving performance.
For more information about this feature, see Including denied multicast sessions in the session table.
Value Description
disable Do not add denied multicast sessions to the session table (default).
enable Include denied multicast sessions in the session table.
Previously, you could not specify a Virtual Routing and Forwarding (VRF) instance for local-out traffic, but now you can.
This enhancement provides traffic segregation, optimized routing, and enhanced policy enforcement to improve network
organization, security, and performance.
The following configuration commands now include the option to set a VRF instance number:
config system interface
edit "port2"
set dhcp-relay-vrf-select
next
end
set dhcp-relay-vrf-select VRF ID used for connection to sever. Set VRF instance number (0 to 511, default
<integer> = 0).
set dhcp-proxy-vrf-select VRF ID used for connection to sever. Set VRF instance number (0 to 511, default
<integer> = 0).
set vrf-select <integer> VRF ID used for connection to sever. Set VRF instance number (0 to 511, default
= 0).
The following execute commands now include the option to specify a VRF instance number:
# execute ping-options vrf <integer>
# execute ping6-options vrf <integer>
# execute traceroute-options vrf <integer>
The following execute command now includes the option to specify a VRF instance number:
# execute tracert6 -v <integer>
The following diagnose commands now include the option to specify a VRF instance number:
# diagnose ip proute match <dst> <src> <iif> <proto> <dport> <sport> <vrf>
# diagnose ipv6 proute match <dst> <src> <iif> <proto> <dport> <sport> <vrf>
# diagnose test authserver radius-direct <server_name or IP> <port number (0 default port)>
<udp | tcp | tls> <secret> <pap | chap | mschap | mschap2> <vrf> <user> <password
In this example, the local-out traffic flows through the VRF interface to its destination. The VRF server can be reached by
port1 (VRF 22), but not port2 (VRF 0).
In this example, the local-out traffic flows through the VRF interface to its destination. IP address 3.3.3.3 can be reached
by port1 (VRF 22).
Like the other examples in this topic, port1 is in VRF 22, and port2 is in VRF 0. This example demonstrates how the
diagnose ip proute match command works with and without a specified VRF ID.
Previously the local IP addresses could differ on each unit in a cluster, and the source-ip setting for DNS could not be
synchronized across the cluster. This feature introduces a new source-ip-interface configuration option for DNS,
ensuring consistent DNS configurations across the cluster and enhancing the overall network management experience.
config system vdom-dns
set vdom-dns enable
set source-ip-interface <string>
end
set source-ip-interface Specify an interface to use the IP address of the specified interface as the source
<string> IP address.
Requires vdom-dns to be enabled.
set source-ip-interface Specify an interface to use the IP address of the specified interface as the source
<string> IP address.
Example
In this example, a private DNS is used. Port2 is configured with an IP address, and the private DNS is configured to use
the IP address for port2 as its source IP address.
1. Configure port2 with an IP address. You can either specify an IP address or configure the interface to receive an
IP address from a DHCP server.
3. Sniff port2:
# diagnose sniffer packet port2 ""
....
3.336987 10.1.100.1.2264 -> 172.17.254.148.53: udp 43
The IPsec monitor now includes pie charts for tunnel status and uptime, filters, and quick access to several tools, which
all boost usability and visualization for better VPN management.
l Go to Dashboard > Network. Hover over the IPsec widget and click Click to expand.
The IPsec Monitor is displayed, and it contains pie charts, a search bar, and a table of VPN tunnels:
3. In the table, hover over the first column heading to display and click the Configure Table icon to choose what
columns to display.
4. In the table, hover over a column heading to display and click a filter icon.
For example, hover over the Name column heading, and click the filter icon to display filter options.
To reset statistics:
Connectivity Fault Management (CFM) now available for FG-80F-POE and FG-20xF
models - 7.6.3
Connectivity Fault Management (CFM) has been extended to the following models: FG-80F-POE and FG-20xF. This
enhancement helps administrators efficiently diagnose and resolve issues in Ethernet networks.
See Connectivity Fault Management for more information.
Rapid increase in cloud adoption and recent trends in remote work have shifted organizations' requirements. Critical
information about the application-level availability and user experience is now needed. FortiTelemetry provides
information about the user experience based on application and network performance.
FortiTelemetry agents send raw application-level and network-level metrics to FortiTelemetry Cloud for data analysis.
Based on its analytics, FortiTelemetry Cloud returns to the FortiGate acting as a FortiTelemetry Controller two additional
metrics: application experience score and application failure rate. FortiTelemetry Controller presents the metrics on
FortiTelemetry monitor pages.
A FortiTelemetry deployment consists of one FortiGate hardware model acting as FortiTelemetry Controller and one or
more FortiTelemetry agents:
l The FortiTelemetry Controller manages the agents by onboarding them to the Security Fabric, managing telemetry
profiles and policies, and providing monitoring tools to give administrators a view of application metrics and
statistics.
l FortiTelemetry agents are on-premise FortiGate-integrated telemetry agents that continuously emulate, monitor,
and detect performance metrics across SaaS applications without any user intervention or involvement.
This topic lists the FortiTelemetry Requirements on page 124 and identifies the following FortiOS changes to support
FortiTelemetry:
l CLI changes on page 124
l GUI changes on page 128
Requirements
The IP address for each agent must be in the same subnet as the FortiTelemetry Controller
interface for incoming FortiTelemetry agent traffic.
CLI changes
New syntax to configure the interface between FortiTelemetry Controller and FortiTelemetry agents:
config system interface
edit <name>
...
set telemetry-discover {enable|disable}
next
end
New command to configure telemetry connectors for FortiTelemetry agents managed by a FortiTelemetry Controller:
config telemetry-controller agent
edit <agent ID>
set comment <string>
set alias <string>
set authz {rejected | authorized | unauthorized}
set agent-profile <string>
next
end
New command to view pre-defined applications available for FortiTelemetry agents to monitor:
config telemetry-controller application predefine
edit <app-name>
next
end
config telemetry- View pre-defined applications available for FortiTelemetry agents to monitor.
controller
application
predefine
edit <app-name> Edit the pre-defined application.
config application
edit <id>
set app-name <string>
set monitor {enable | disable}
set interval <integer>
next
end
next
end
l Atlassian Cloud
l Dropbox
l Elastic Search
l Google Docs
l Google Drive
l Google Maps
l Go To Meeting
l Microsoft 365
l Microsoft SharePoint
l Microsoft Teams
l Sales Force
l Slack
l Twilio
l Webex
l Yahoo
l Zendesk
l Zoom
monitor {enable | Enable/disable monitoring of the application.
disable}
interval <integer> Time in milliseconds to check the application (1000 - 86,400 * 1000, default = 300
* 1000 ms).
GUI changes
On a FortiGate configured as a FortiTelemetry Controller, go to System > Feature Visibility to enable FortiTelemetry, and
then you can use the following GUI pages:
l Telemetry connector on page 128
l Telemetry profile on page 131
l Telemetry firewall policy on page 134
l FortiTelemetry monitors on page 135
Telemetry connector
Use the Telemetry connector to view, authorize, and edit FortiTelemetry agents. You can also configure pre-authorized
telemetry connectors to automatically authorize discovered agents.
Monitored Tasks Number of tasks being monitored by authorized FortiTelemetry agents based
on the configured telemetry profile(s) selected in the firewall policy used by the
FortiTelemetry Controller.
2. Click the Telemetry connector, and click Edit. The FortiTelemetry Settings pane opens.
In this example, all FortiTelemetry agents are unauthorized and listed under Uncategorized. Authorized
FortiTelemetry agents are grouped by interface.
Agent Profile Profile assigned to the agent when FortiTelemetry Controller discovers the
agent.
FortiTelemetry Controller automatically creates and assigns the following
profiles:
l The Auto-WINDOWS agent profile is assigned to software agents.
Agent Model Model of the agent: Windows for software agents and FTL100G for hardware
agents.
3. Select an agent to access additional buttons, such as Edit, Delete, and More > Authorize/Unauthorize/Reject.
4. Select an agent, and click Edit. The Telemetry Agent pane opens.
Agent Profile Select an agent profile. Ensure the model configured in the profile matches the
type of agent.
4. Click OK. The telemetry connector is displayed in the uncategorized list until the FortiTelemetry Controller discovers
the corresponding telemetry agent and uses the connector to automatically authorize the agent and assign a status
of Online.
Telemetry profile
Use telemetry profiles to communicate to FortiTelemetry agents which of the pre-defined SaaS applications to monitor. A
default telemetry profile is provided to monitor Google Docs, Microsoft 365, and Salesforce. You can edit or clone the
default profile to create custom profiles.
FortiOS 7.6.3 includes pre-defined SaaS applications that FortiTelemetry agents can monitor. On the FortiTelemetry
Controller, use the config telemetry-controller application predefine command to view the list.
For the monitored applications, the FortiTelemetry agent sends the following raw metrics to FortiTelemetry Cloud for
analysis:
l Application-level metrics:
l Time to First Byte (TTFB)
l Application Total Downloading Time (ATDT)
l Network-level metrics:
l Latency
l Jitter
l Packet Loss
l TCP Round Trip Time (RTT)
l DNS resolving time
l TLS handshake time
l Application throughput
l Network path info:
l Network path information
FortiTelemetry Cloud returns to the FortiTelemetry Controller two additional metrics: application experience score and
application failure rate, which you can view in the FortiTelemetry monitor.
1. Go to Security Profiles > Telemetry Profile. The list of telemetry profiles is displayed, including a default telemetry
profile.
2. Select a profile to access additional buttons, such as Edit, Clone, Delete, and More.
3. Select the default profile, and click Edit. The Telemetry Profile pane opens.
The default profile monitors the following predefined applications: Google docs, Microsoft 365, and Salesforce. No
SLA targets are defined.
b. Enable SLA Targets to view what information is gathered. Although you can enable SLA targets, the
functionality does not work yet.
Experience score Overall application experience score threshold between 0 and 10.
Experience scores are categorized as follows:
l Good: 8 to 10
l OK: 5 to 8
l Poor: 3 to 5
l Broken: 0 to 3
Failure rate Failure rate threshold for monitoring HTTP requests as a percentage (%).
Time to first byte Time to first byte threshold monitor requests in milliseconds (ms).
Application total download Application total download time threshold for monitoring HTTP requests in
time milliseconds (ms).
Application throughput The throughput threshold for monitoring HTTP requests in megabytes
(MBps).
TCP round trip time TCP round trip time threshold for monitoring HTTP requests in milliseconds
(ms).
95% DNS resolving time DNS resolving time threshold for monitoring HTTP requests in
milliseconds.
1. Go to Security Profiles > Telemetry Profile, and click Create New. The Telemetry Profile pane opens.
2. Enter a name and optional comment for the profile.
3. In the Monitored Applications section, click Create New. The Profile Application pane opens.
4. Complete the options, and click OK to finish adding the application to the list.
5. Add additional applications as desired.
6. Click OK to save the telemetry profile.
Create a firewall policy with type set to Telemetry, and select the telemetry profile. FortiTelemetry Controller uses the
following firewall policy configuration elements to automatically create a monitor task:
l FortiTelemetry agent from the policy source
l Applications to monitor from the telemetry profile
You must also allow the monitor traffic from FortiGate.
Action Set the action to Accept to send monitoring tasks to the agents.
Incoming Interface Choose the FortiGate port that is used to connect to the FortiTelemetry agent.
5. Click OK to continue. The policy is saved and displayed at the top of the policy table.
The Type column displays Telemetry.
FortiTelemetry monitors
Add FortiTelemetry monitors to view and monitor data collected by the agents and analyzed by FortiTelemetry Cloud.
After FortiTelemetry Cloud analyzes the data, it returns to the FortiTelemetry Controller an application experience score
and an application failure rate, which you can view in the FortiTelemetry monitor.
1. In the tree menu, under the monitors section, click + (Add Monitor). The Add Monitor window opens.
2. Under Security Fabric, click + (Add) next to FortiTelemetry. The Add FortiTelemetry as Standalone Dashboard pane
opens.
3. Set the following options, and click OK to add the monitor:
l Agent
l Source interface
l Destination interface
l Profile
l Policy
l 24 hours
l 7 days
Example
In this example, a FortiGate is configured as a FortiTelemetry Controller. Port1 connects to the Internet and
FortiTelemetry Cloud. Port2 connects to a FortiTelemetry Windows agent, and port3 connects to a FortiTelemetry-100G
agent.
Preparing a certificate
When using a Windows FortiTelemetry agent, you must prepare a CA certificate that the FortiTelemetry Controller can
use to validate the identity of the FortiTelemetry Windows agent, and then add the certificate to the FortiTelemetry
Controller and FortiTelemetry Windows agent.
The FTL-100G agents uses a Fortinet built-in certificate.
1. Create a certificate authority (CA) certificate using your preferred certificate authority. The certificates used by
FortiTelemetry Windows agent are not included by default and must be supplied and maintained by the
administrator.
2. Upload the CA certificate on the FortiGate acting as FortiTelemetry Controller:
2. Configure the retry interval and the CA certificate used to validate the identity of the FortiTelemetry Windows agent:
config telemetry-controller global
set region global
set retry-interval 60
set telemetry-ca-certificate "CA_Cert_1"
end
4. Include fabric in the FortiGate interface allowaccess, and enable automatic discovery of FortiTelemetry
agents:
This example is for port2. Run these commands for any other ports with FortiTelemetry agents, such as port3 for
FTL-100G.
config system interface
edit "port2"
set allowaccess ping https ssh snmp http telnet fabric
set telemetry-discover enable
next
end
The IP address for each agent must be in the same subnet as the FortiTelemetry Controller interface for incoming
FortiTelemetry agent traffic.
For details on deploying FortiTelemetry agents, see the FortiTelemetry Administration Guide.
Summary of agents:
Agent Notes
FortiTelemetry Windows agent Use the provided installer to install the agent. Once installed, the agent has a GUI.
Add to the agent GUI the CA certificate that you prepared.
You must also add this CA certificate to the FortiGate Controller.
FortiTelemetry-100G agent Use the FortiTelemetry console and CLI to configure the hardware agent. No
GUI is available.
The FTL-100G agents uses a Fortinet built-in certificate.
The FortiTelemetry Controller automatically discovers FortiTelemetry agents and displays them in the GUI on the
Telemetry card. You must manually authorize agents for use.
1. On the FortiTelemetry Controller, go to Security Fabric > Fabric Connectors. A Telemetry card is available.
The Telemetry card shows Telemetry is Enabled, but no agents are authorized and no tasks are being monitored.
2. Click the Telemetry card, and click Edit. The FortiTelemetry Settings pane opens and displays the discovered,
unauthorized FortiTelemetry agents.
3. For each agent, select the agent, and click More > Set Status > Authorize. The status changes to Online for each
agent.
When agents are online, a firewall address with type subnet is automatically created for each agent. You can view
the addresses on the Policy & Objects > Addresses pane.
A default telemetry profile is provided to monitor Google Docs, Microsoft.365, and Salesforce. Be default, agents monitor
the applications every 5 minutes. The monitor interval can only be changed in CLI with the config telemetry-
controller profile command.
Create a profile for each agent.
Create the following firewall policies for the FortiTelemetry Controller to allow traffic from the FortiTelemetry Controller
interface to the FortiGate WAN interface used to send data to FortiTelemetry Cloud:
l One firewall policy for the traffic from port3 to port1 for the FTL-100G agent. The FTL-100G agent connects to port3,
and port1 connects to the Internet.
l Two firewall policies for traffic from port2 to port1, one for each Windows agent. The FortiTelemetry Windows
agents connect to port2.
Action Set the action to Accept to send monitoring tasks to the agents.
Incoming Interface Choose port3, which is the FortiGate port used to connect to the FTL-
100G agent.
5. Click OK to continue. The policy is saved and displayed at the top of the policy table.
The Type column displays Telemetry.
6. Create two telemetry firewall policies for traffic from port2 to port1, one for each Windows agent.
As a result, three telemetry policies are created: Telemetry-Policy-1, Telemetry-Policy-2, and Telemetry-Policy-3.
After the FortiTelemetry Controller pushes the tasks the FortiTelemetry agents, the Security Fabric > Fabric
Connectors > Telemetry card updates to show the number of Monitored Tasks.
Monitored tasks also display in the GUI for the FortiTelemetry Windows agent. There is no command to display the
monitored tasks on the FTL hardware agent.
FortiTelemetry monitor includes the following views: Application, Agents, Source Interfaces, Destination Interfaces,
Profiles, and Policies.
From the different views, you can drill down to details of each application’s performance.
1. In the tree menu, under the monitors section, click + (Add Monitor). The Add Monitor window opens.
2. Under Security Fabric, click + (Add) next to FortiTelemetry. The Add FortiTelemetry as Standalone Dashboard pane
opens.
3. Set the following options, and click OK to add the monitor:
l Agent
l Source interface
l Destination interface
l Profile
l Policy
l 24 hours
l 7 days
The monitory displays in the tree menu under the monitors section.
Following is an example of a FortiTelemetry monitor configured with Source set to Application and Sort by set to
Experience Score. On the monitor, you monitor can drill down to details of each application’s performance.
l Hover over the Experience Score rating to view the experience score for each application:
l Select the application row in the table to display a Drill Down button, and click Drill Down to view details about the
agent on the Agent tab:
l You can continue drilling down to additional details. For example, select the agent to display a Drill Down button,
and click Drill Down to view details about the destination interface on the Destination Interface tab, and so on.
The Fortinet Support Tool application is used to capture real-time debugging information through a REST API key
generated directly on the FortiGate device. It can be installed on Windows from the Microsoft Store and on macOS from
the App store.
The program can run in the background for up to 48 hours. This increases the likelihood that it is active during an
incident, allowing administrators to gather comprehensive logs and ensuring faster and more efficient troubleshooting.
2. Configure the Connect to (IP/FQDN), Protocol, and Port, and set when the key will expire..
The Fortinet Support Tool will attempt to connect to this device using the specified IP/FQDN, protocol, and port.
3. Optionally, configure trusted hosts.
4. Click Generate key.
2. Paste the generated key into the field. The connection will start to be established immediately.
You can also select Recent devices to try to reconnected to a previously used device.
3. Select the scenario to analyze.
The user interface can only be captured using the Fortinet Support Tool Chrome extension.
4. Select the daemons to collect logs and apply filters as needed.
To view a capture:
You can also select Recently viewed to review a previously opened capture.
2. Select a capture file with the extensions .fgtcapture, .ftntguicap, or .ftntcap for review.
When playing .fgtcapture or .ftntguicap files:
l Top-left section: Video frame
l Bottom-left section: Resource chart
l Right section: Tabs including:
l Summary
l Device Info (Config, Crash log, Licenses, Table size, Profiling)
l Client Info
l Logs
3. Configure whether or not the application window is automatically maximized when viewing a capture file.
4. Click Clear all application data to clear all of the application data, such as recent devices or captures.
IPv6
This section includes information about IPv6 network related new features:
l Recursive resolution of BGP routes using IPv6 prefix with on-link flag from route aggregation on page 154
l DHCPv6 enhancements on page 151
l Enhancing SIP reliability in 464XLAT environments 7.6.1 on page 156
DHCPv6 enhancements
The DHCPv6 server/client can accommodate multiple (more than three) DHCP options. Support for Option 16, also
known as the Vendor Class Option, is added for DHCPv6. This allows IP pools and options assignment based on VCI
matching for DHCPv6 server and client.
Four DHCPv6 option types can be configured: fqdn, hex (default), ip6, and string.
To configure the options and IP range when the FortiGate is the DHCPv6 server:
To configure the options and IP range when the FortiGate is a DHCPv6 client:
3. If VCI matching is enabled and the VCI value does not match the DHCP client, then the DHCP client cannot get an
IP address.
Recursive resolution of BGP routes using IPv6 prefix with on-link flag from route
aggregation
When a FortiGate is acting as an IPv4 BGP neighbor and using stateful DHCPv6, it learns BGP routes with the IPv6 next
hop belonging to an on-link prefix that is advertised through route aggregation (RA).
By default, the administrative distance for routes learned from the kernel is 255, and the routes do not interfere with the
current route selection. To make the RA route usable by BGP, the distance must be set to less than 255 using the new
kernel-route-distance command.
config router setting
set kernel-route-distance <0-255>
end
If there are other user space routes with the same prefix, the best route is selected based on the distance.
1. Configure FGT_A:
config system interface
edit "agg1"
set vdom "root"
set ip 172.16.203.1 255.255.255.0
set allowaccess ping https http
set type aggregate
set member "port4"
set alias "To_FGT_B_agg1"
set lldp-transmission enable
set snmp-index 40
config ipv6
set ip6-mode dhcp
set ip6-allowaccess ping
end
next
end
config ipv6
set ip6-address 2001:4::133/64
set ip6-allowaccess ping
set ip6-send-adv enable
set ip6-manage-flag enable
set ip6-other-flag enable
set ip6-max-interval 10
set ip6-min-interval 5
config ip6-prefix-list
edit 2001:4::/64
next
end
end
next
end
config system dhcp6 server
edit 1
set subnet 2001:4::/64
set interface "agg2"
config ip-range
edit 1
set start-ip 2001:4::11
set end-ip 2001:4::20
next
end
next
end
3. By default, the learned kernel route has a distance of 255 and does not interfere with the current route selection:
FGT_A (root)# get router info6 routing-table database
IPv6 Routing Table
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, B - BGP, V - BGP VPNv6
> - selected route, * - FIB route, p - stale info
Timers: Uptime
FortiGate can now disable IP address translation within the SIP payload in 464XLAT environments as needed. This
ensures SIP packets with IPv4 information reach user equipment without translation, which addresses an issue where
the customer-side translator (CLAT) component does not revert the IPv6 address to IPv4 within the SIP header and
body, which leads to RTP connection issues in 464XLAT environments. By preventing unnecessary translation,
FortiGate ensures seamless communication and robust connectivity to improve the reliability of SIP-based services in
complex network scenarios.
FortiGate only uses this feature as needed. A flag is added to each voip_session_stream,
and FortiGate uses the flag and other information to identify 464XLAT environments. When a
client initiates SIP traffic to a server, such as a REGISTER request to a server, and if the
VOIP daemon detects an IPv6 layer address, but the SIP payload header contains an IPv4
address, the payload is identified as for a 464XLAT environment, and FortiGate stops NAT46
on the SIP payload.
Only one TCP connection is used between each SIP client and the SIP server, and the TCP connection remains up (in
other words, doesn't tear down).
All SIP traffic between each SIP client and the SIP server must use the same TCP connection.
Because of the above requirements, SIP pinhole is not created.
The SIP server must offer its own IP address. The twin case for hnt_464xlat is not supported.
Only SIP/TCP-5060 is supported, and session-helper must be configured:
config system session-helper
edit 13
set name sip
set protocol 6
set port 5060
next
end
Example
This example describes the behavior in FortiOS 7.6.0 and earlier followed by a description of the behavior change in
FortiOS 7.6.1.
In FortiOS 7.6.0 and earlier when NAT46 IP address translation is enabled within the SIP payload for return traffic, and
the address is the server's IPv4 IP in a 464XLAT environment, a connection fails to establish for RTP traffic with the IPv6
destination. The example uses the following topology:
1. The CLAT component run insides the user equipment (UE) and performs a one-to-one (IPv4 to IPv6) stateless
translation. The CLAT component translates traffic with an IPv4 destination to IPv6. While the IPv4 address is
converted to IPv6 in the IP header, the IP information within the payload, including the SIP header and body,
remains unchanged (IPv4).
2. FortiGate as PLAT performs many-to-one (IPv6 to IPv4) stateful translation to translate the IP address within the IP
header from IPv6 to IPv4. Furthermore, SIP-ALG modifies the IP address within the payload in the SIP header and
body by substituting the IPv4 address with a publicly NATed IP address.
3. When traffic is returned from the SIP server to FortiGate, the IPv4 address within the IP header is translated back to
IPv6. Concurrently, the IP address contained within the SIP header and body is also translated back to IPv6 by
FortiGate.
4. The packet reaches UE, and the CLAT component translates the IP address of the IP header from IPv6 to IPv4. The
CLAT component does not function as an ALG and does not modify the IP address within the SIP header and body.
5. The UE receives the packet but cannot establish RTP connection with the IPv6 destination.
Step 3 changes in FortiOS 7.6.1. For traffic returning from SIP server, FortiGate stops NAT46 on the SIP payload and
only translates the IPv4 addresses in the IP header into an IPv6 address. Thus, the IP address contained within the SIP
header and body remains IPv4, which the user equipment can recognize, and RTP connections can be successfully
established.
To check the SIP calls when phone A (10.1.100.11) and phone B (172.16.200.33) are registering to the SIP
server (172.16.200.44):
sip calls
vdom 1 (vdom1) vrf 0 call 7fc9eb265000
call-id: QFwxzc1FTIYZQJsQZW3-kKofMxJUcxaB
txn 7fc9eb250e00 (REGISTER)
cseq 49308 dir 0 state 5 status 200 expiry 903 HA 0
i_session: 7fc9eb250000 r_session: 7fc9eb250000
register: present
from: sip:[email protected]
to: sip:[email protected]
src: [2000:1:1:1::1:6e0c]:49555
dst: 172.16.200.44:5060
vdom 1 (vdom1) vrf 0 call 7fc9eb265000
call-id: QFwxzc1FTIYZQJsQZW3-kKofMxJUcxaB
txn 7fc9eb250700 (REGISTER)
cseq 49307 dir 0 state 7 status 401 expiry 23 HA 0
i_session: 7fc9eb250000 r_session: 7fc9eb250000
register: present
from: sip:[email protected]
to: sip:[email protected]
src: [2000:1:1:1::1:6e0c]:49555
dst: 172.16.200.44:5060
To check the SIP calls and session lists when phone A (10.1.100.1) is calling phone B (172.16.200.33):
sip calls
vdom 1 (vdom1) vrf 0 call 7fc9eb265100
call-id: mNcOPU8ul76A1ihupFMNU78kePJYEfr3
txn 7fc9eb251c00 (INVITE)
cseq 102 dir 1 state 11 status 200 expiry 297 HA 0
i_session: 7fc9eb250000 r_session: 7fc9eb250000
register: not-present
from: sip:[email protected]
to: sip:[email protected]
src: 172.16.200.44:5060
dst: [2000:1:1:1::1:6e0c]:49555
vdom 1 (vdom1) vrf 0 call 7fc9eb265100
call-id: mNcOPU8ul76A1ihupFMNU78kePJYEfr3
txn 7fc9eb250700 (INVITE)
cseq 22155 dir 0 state 11 status 200 expiry 296 HA 0
i_session: 7fc9eb250000 r_session: 7fc9eb250000
register: not-present
from: sip:[email protected]
to: sip:[email protected]
src: [2000:1:1:1::1:6e0c]:49555
dst: 172.16.200.44:5060
...
orgin->sink: org pre->post, reply pre->post dev=34->43/43->34
hook=pre dir=org act=dnat 2000:1:1:1::1:6e0c:34143->2000:172:16:200::44:5060
(2000:172:16:200::44:5060)
hook=post dir=reply act=snat 2000:172:16:200::44:5060->2000:1:1:1::1:6e0c:34143
(2000:172:16:200::44:5060)
peer=172.16.200.6:34143->172.16.200.44:5060 naf=1
hook=pre dir=org act=noop 172.16.200.6:34143->172.16.200.44:5060(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.44:5060->172.16.200.6:34143(0.0.0.0:0)
...
orgin->sink: org pre->post, reply pre->post dev=34->43/43->0
hook=post dir=org act=noop 2000:1:1:1::1:6e0c:9117->2000:172:16:200::44:64446(:::0)
hook=pre dir=reply act=noop 2000:172:16:200::44:64446->2000:1:1:1::1:6e0c:9117(:::0)
peer=172.16.200.6:64444->172.16.200.44:18764 naf=1
hook=pre dir=org act=noop 172.16.200.6:64444->172.16.200.44:18764(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.44:18764->172.16.200.6:64444(0.0.0.0:0)
...
orgin->sink: org pre->post, reply pre->post dev=34->43/43->34
hook=pre dir=org act=dnat 2000:1:1:1::1:6e0c:9117->2000:172:16:200::33:64448
(2000:172:16:200::33:64448)
hook=post dir=reply act=snat 2000:172:16:200::33:64448->2000:1:1:1::1:6e0c:9117
(2000:172:16:200::33:64448)
peer=172.16.200.6:9117->172.16.200.33:64448 naf=1
hook=pre dir=org act=noop 172.16.200.6:9117->172.16.200.33:64448(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.33:64448->172.16.200.6:9117(0.0.0.0:0)
...
orgin->sink: org pre->post, reply pre->post dev=34->43/43->34
hook=post dir=org act=noop 2000:1:1:1::1:6e0c:9118->2000:172:16:200::44:64447(:::0)
hook=pre dir=reply act=noop 2000:172:16:200::44:64447->2000:1:1:1::1:6e0c:9118(:::0)
peer=172.16.200.6:64445->172.16.200.44:18765 naf=1
hook=pre dir=org act=noop 172.16.200.6:64445->172.16.200.44:18765(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.44:18765->172.16.200.6:64445(0.0.0.0:0)
...
orgin->sink: org pre->post, reply pre->post dev=34->43/43->34
hook=pre dir=org act=dnat 2000:1:1:1::1:6e0c:9118->2000:172:16:200::33:64449
(2000:172:16:200::33:64449)
hook=post dir=reply act=snat 2000:172:16:200::33:64449->2000:1:1:1::1:6e0c:9118
(2000:172:16:200::33:64449)
peer=172.16.200.6:9118->172.16.200.33:64449 naf=1
hook=pre dir=org act=noop 172.16.200.6:9118->172.16.200.33:64449(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.33:64449->172.16.200.6:9118(0.0.0.0:0)
...
...
orgin->sink: org pre->post, reply pre->post dev=34->0/43->0
hook=post dir=org act=noop 2000:1:1:1::1:6e0c:0->2000:172:16:200::44:64448(:::0)
peer=172.16.200.6:64444->172.16.200.33:4000 naf=1
...
orgin->sink: org pre->post, reply pre->post dev=34->0/43->0
hook=post dir=org act=noop 2000:1:1:1::1:6e0c:0->2000:172:16:200::44:64448(:::0)
peer=172.16.200.6:64444->172.16.200.33:4000 naf=1
...
orgin->sink: org pre->post, reply pre->post dev=34->0/43->0
hook=post dir=org act=noop 2000:1:1:1::1:6e0c:0->2000:172:16:200::44:64449(:::0)
peer=172.16.200.6:64445->172.16.200.33:4001 naf=1
...
orgin->sink: org pre->post, reply pre->post dev=34->0/43->0
hook=post dir=org act=noop 2000:1:1:1::1:6e0c:0->2000:172:16:200::44:64449(:::0)
peer=172.16.200.6:64445->172.16.200.33:4001 naf=1
...
...
orgin->sink: org pre->post, reply pre->post dev=43->23/23->43
gwy=172.16.200.33/172.16.200.6
hook=pre dir=org act=noop 172.16.200.6:9117->172.16.200.33:64448(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.33:64448->172.16.200.6:9117(0.0.0.0:0)
peer=2000:172:16:200::33:64448->2000:1:1:1::1:6e0c:9117 naf=2
hook=pre dir=org act=dnat 2000:1:1:1::1:6e0c:9117->2000:172:16:200::33:64448
(2000:172:16:200::33:64448)
hook=post dir=reply act=snat 2000:172:16:200::33:64448->2000:1:1:1::1:6e0c:9117
(2000:172:16:200::33:64448)
...
orgin->sink: org pre->post, reply pre->post dev=43->23/23->43
gwy=172.16.200.33/172.16.200.6
hook=pre dir=org act=noop 172.16.200.6:9118->172.16.200.33:64449(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.33:64449->172.16.200.6:9118(0.0.0.0:0)
peer=2000:172:16:200::33:64449->2000:1:1:1::1:6e0c:9118 naf=2
hook=pre dir=org act=dnat 2000:1:1:1::1:6e0c:9118->2000:172:16:200::33:64449
(2000:172:16:200::33:64449)
hook=post dir=reply act=snat 2000:172:16:200::33:64449->2000:1:1:1::1:6e0c:9118
(2000:172:16:200::33:64449)
...
orgin->sink: org pre->post, reply pre->post dev=43->23/23->43
gwy=172.16.200.44/172.16.200.6
hook=pre dir=org act=noop 172.16.200.6:34143->172.16.200.44:5060(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.44:5060->172.16.200.6:34143(0.0.0.0:0)
peer=2000:172:16:200::44:5060->2000:1:1:1::1:6e0c:34143 naf=2
hook=pre dir=org act=dnat 2000:1:1:1::1:6e0c:34143->2000:172:16:200::44:5060
(2000:172:16:200::44:5060)
hook=post dir=reply act=snat 2000:172:16:200::44:5060->2000:1:1:1::1:6e0c:34143
(2000:172:16:200::44:5060)
...
orgin->sink: org pre->post, reply pre->post dev=43->23/23->0 gwy=172.16.200.44/0.0.0.0
hook=pre dir=org act=noop 172.16.200.6:64444->172.16.200.44:18764(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.44:18764->172.16.200.6:64444(0.0.0.0:0)
peer=2000:172:16:200::44:64446->2000:1:1:1::1:6e0c:9117 naf=2
hook=post dir=org act=noop 2000:1:1:1::1:6e0c:9117->2000:172:16:200::44:64446(:::0)
hook=pre dir=reply act=noop 2000:172:16:200::44:64446->2000:1:1:1::1:6e0c:9117(:::0)
...
orgin->sink: org pre->post, reply pre->post dev=43->23/23->43
gwy=172.16.200.44/172.16.200.6
hook=pre dir=org act=noop 172.16.200.6:64445->172.16.200.44:18765(0.0.0.0:0)
hook=post dir=reply act=noop 172.16.200.44:18765->172.16.200.6:64445(0.0.0.0:0)
peer=2000:172:16:200::44:64447->2000:1:1:1::1:6e0c:9118 naf=2
hook=post dir=org act=noop 2000:1:1:1::1:6e0c:9118->2000:172:16:200::44:64447(:::0)
hook=pre dir=reply act=noop 2000:172:16:200::44:64447->2000:1:1:1::1:6e0c:9118(:::0)
...
...
orgin->sink: org pre->post, reply pre->post dev=43->0/23->0 gwy=0.0.0.0/0.0.0.0
hook=pre dir=org act=noop 172.16.200.6:0->172.16.200.33:4001(0.0.0.0:0)
peer=:::0->:::0 naf=2
...
orgin->sink: org pre->post, reply pre->post dev=43->0/23->0 gwy=0.0.0.0/0.0.0.0
hook=pre dir=org act=noop 172.16.200.6:0->172.16.200.33:4001(0.0.0.0:0)
peer=:::0->:::0 naf=2
...
orgin->sink: org pre->post, reply pre->post dev=43->0/23->0 gwy=0.0.0.0/0.0.0.0
hook=pre dir=org act=noop 172.16.200.6:0->172.16.200.33:4000(0.0.0.0:0)
peer=:::0->:::0 naf=2
...
orgin->sink: org pre->post, reply pre->post dev=43->0/23->0 gwy=0.0.0.0/0.0.0.0
hook=pre dir=org act=noop 172.16.200.6:0->172.16.200.33:4000(0.0.0.0:0)
peer=:::0->:::0 naf=2
...
This section includes information about explicit and transparent proxy related new features:
l Specifying outgoing interface and VRF for a web proxy forward server or isolator server 7.6.1 on page 163
l Isolator servers in proxy policies 7.6.1 on page 165
l GUI support of isolator servers for proxy policies 7.6.3 on page 168
Specifying outgoing interface and VRF for a web proxy forward server or isolator
server - 7.6.1
You can specify the outgoing interface and VRF for a web proxy forward server or a web proxy isolator server, such as
FortiIsolator.
The following CLI command options have been added:
config web-proxy forward-server
edit <name>
set interface-select-method specify
set interface <port>
set vrf-select <vrf-id>
next
end
Example
In the following example, a forward server is applied to the FortiGate in an explicit proxy policy. A interface that is not in
the policy, such as port3, can be specified to forward traffic.
Without this feature, the FortiGate would have to forward traffic through the management
interface which is the destination interface of the policy.
To specify a outgoing interface and VRF for a web proxy forward server:
2. Configure the web proxy forward server with a interface that is not included in the policy:
config web-proxy forward-server
edit "FWD_SVR"
set ip 172.16.200.7
set port 8080
set interface-select-method specify
set interface "port3"
set vrf-select 10
next
end
3. Specify the destination interface and web proxy forward server in the proxy policy:
config firewall proxy-policy
edit 1
set proxy explicit-web
set dstintf "mgmt"
set srcaddr "all"
set dstaddr "all"
set service "webproxy"
set action accept
set schedule "always"
set logtraffic all
set webproxy-forward-server "FWD_SVR"
next
end
5. Go to Log & Report > Forward Traffic and review the traffic log. The Destination Interface is port3 instead of the
management interface.
Web proxy isolator servers, such as FortiIsolator, are supported in proxy policies. Isolators are fundamentally the same
as web proxy forward servers because both will redirect HTTP and HTTPS requests to an HTTP or HTTPS proxy server.
However, isolators have the specific function of isolating potentially unsafe traffic from a user environment.
The isolate action in proxy policies can be used to distinguish isolated traffic from normal traffic in logs. Isolator
servers can only be applied in explicit and transparent proxy policies.
The following CLI commands have been added to support isolator servers:
config web-proxy isolator-server
edit <name>
set addr-type {ip | ipv6 | fqdn}
set ip <any_ip>
set ipv6 <IPv6 address>
set fqdn <string>
set port <port>
next
end
config firewall proxy-policy
edit <id>
set action isolate
set isolator-server <name>
next
end
Example
The following example demonstrates how to apply an isolator server to a proxy policy. Two explicit proxy policies are
configured:
l A web proxy forward server is applied to one policy with the action set to accept.
l An isolator server is applied to the other policy with the action set to isolate.
Each proxy policy uses a different destination IP address to separate traffic. Once traffic passes, logs are generated for
the specific actions.
4. Generate traffic for the proxy policies and go to Log & Report > Forward Traffic in the GUI to review the logs:
a. When accessing www.fortinet.com, the traffic hits proxy policy 1 and is accepted.
Since the traffic matches the destination address, it goes to the forward server and then to the internet. A traffic
log is generated with the action set to accept.
b. When accessing www.cibc.com, the traffic hits proxy policy 3 and is isolated.
Since the traffic matches the destination address, it goes to the isolator server and then to the internet. A traffic
Isolator servers can be configured for explicit and transparent proxy policies in the GUI. For more information on isolator
servers, see Isolator servers in proxy policies 7.6.1 on page 165.
SD-WAN
This section includes information about overlay and underlay related new features:
l ADVPN 2.0 enhancements on page 170
l ADVPN 2.0 overlay placeholders for shortcuts between spokes 7.6.1 on page 177
l SD-WAN Setup wizard for guided configuration 7.6.1 on page 185
l Fabric Overlay Orchestrator Topology dashboard widget for hub FortiGates 7.6.3 on page 193
ADVPN 2.0 operation has been enhanced for SD-WAN. ADVPN 2.0 edge discovery and path management was
introduced in FortiOS 7.4.2. See ADVPN 2.0 edge discovery and path management.
The following enhancements have been added:
l The local spoke directly sends a shortcut-query to a remote spoke to trigger a shortcut after ADVPN 2.0 path
management makes a path decision.
l ADVPN 2.0 path management can trigger multiple shortcuts for load balancing SD-WAN rules. Traffic can be load
balanced over these multiple shortcuts to use as much of the available WAN bandwidth as possible without wasting
idle links if they are healthy. The algorithm to calculate multiple shortcuts for the load balancing service will consider
transport group and in-SLA status for both local and remote parent overlays.
l Spokes can automatically deactivate all shortcuts connecting to the same spoke when user traffic is not observed
for a specified time interval. This is achieved by enabling a shared idle timeout setting in the IPsec VPN Phase 1
interface settings for associated overlays.
CLI
The following commands configure the shared idle timeout for overlays used by ADVPN. The only new command is set
shared-idle-timeout.
set idle-timeout {enable Enable/disable IPsec tunnel idle timeout (default = disable). Must be set to
| disable} enable when shared-idle-timeout is enabled.
set shared-idle-timeout Enable/disable shared-idle-timeout on involved overlays (default =
{enable | disable} disable).
set idle-timeoutinterval IPsec tunnel idle timeout, in minutes (5 - 43200, default = 5).
<integer>
The previous SD-WAN CLI commands continue to be used for configuring ADVPN 2.0. See SD-WAN CLI configuration.
Example
This example relies on the same network topology used in the previous ADVPN 2.0 topic, except for Spoke 1 having a
single SD-WAN Rule/Service using the load balancing strategy with SLA targets. For details, see Network Topology and
Load balancing strategy with SLA targets.
Recall the network topology is as follows:
l Standard Hub-Spoke topology
l The topology has two spokes, and each spoke has three overlays to Hub. Two overlays are created on internet
links, and another overlay is created on the MPLS link.
l BGP neighbor per overlay is established between spoke and hub.
This section shows the SD-WAN configuration, selected IPsec configuration, and health check status on Spoke 1: on
page 171 and Spoke 2: on page 173.
Spoke 1:
next
edit 2
set interface "H1_T22"
set zone "overlay"
set transport-group 1
next
edit 3
set interface "H1_T33"
set zone "overlay"
set transport-group 2
next
end
config health-check
edit "HUB"
set server "172.31.100.100"
set members 1 2 3
config sla
edit 1
set link-cost-factor latency
set latency-threshold 100
next
end
next
end
config service
edit 1
set name "1"
set load-balance enable
set mode sla
set dst "CORP_LAN"
set src "CORP_LAN"
config sla
edit "HUB"
set id 1
next
end
set priority-members 1 2 3
next
end
end
config vpn ipsec phase1-interface
edit "H1_T11"
...
set idle-timeout enable
set shared-idle-timeout enable
set idle-timeoutinterval 5
...
next
end
...
next
end
Spoke 2:
config sla
edit 1
set link-cost-factor latency
set latency-threshold 100
next
end
next
end
end
config vpn ipsec phase1-interface
edit "H1_T11"
...
set idle-timeout enable
set shared-idle-timeout enable
set idle-timeoutinterval 5
...
next
end
In this scenario, PC1 connected to Spoke 1 initiates an ICMP ping destined for PC1 connected to Spoke 2. Therefore,
this user traffic matches SD-WAN rule 1 and triggers shortcut path selection and establishment.
On Spoke 1, in the IKE debug (diagnose debug application ike -1), debug messages indicate that multiple
direct shortcut-query packets are being sent to Spoke 2:
ike :VWL_ADVPN_MSG_T_TRIGGER
ike V=root:0 looking up shortcut by addr 172.31.80.2, resp-name:H1_T11, name H1_T22, peer-
addr 172.31.3.101:0
ike V=root:0:H1_T22: send shortcut-query
...
ike :VWL_ADVPN_MSG_T_TRIGGER
ike V=root:0 looking up shortcut by addr 172.31.81.2, resp-name:H1_T22, name H1_T22, peer-
addr 172.31.3.105:0
ike V=root:0:H1_T22: send shortcut-query
...
ike :VWL_ADVPN_MSG_T_TRIGGER
ike V=root:0 looking up shortcut by addr 172.31.82.2, resp-name:H1_T33, name H1_T33, peer-
addr 172.31.4.101:0
ike V=root:0:H1_T33: send shortcut-query
...
From the diagnostic command on Spoke 1, observe that multiple shortcuts are triggered in bold based on the ADVPN
2.0 path management calculation where in-SLA overlays within the same transport group were selected.
Branch1_FGT# diagnose system sdwan service4
Service(1): Address Mode(IPV4) flags=0x24200 use-shortcut-sla use-shortcut
Tie break: cfg
Shortcut priority: 3
Gen(69), TOS(0x0/0x0), Protocol(0): src(1->65535):dst(1->65535), Mode(sla hash-
mode=round-robin)
Member sub interface(8):
1: seq_num(1), interface(H1_T11):
1: H1_T11_0(103)
2: H1_T11_1(104)
2: seq_num(2), interface(H1_T22):
1: H1_T22_0(105)
2: H1_T22_1(106)
3: seq_num(3), interface(H1_T33):
1: H1_T33_0(100)
Members(8):
1: Seq_num(1 H1_T11 overlay), alive, sla(0x1), gid(2), num of pass(1), selected
2: Seq_num(2 H1_T22 overlay), alive, sla(0x1), gid(2), num of pass(1), selected
3: Seq_num(3 H1_T33 overlay), alive, sla(0x1), gid(2), num of pass(1), selected
4: Seq_num(3 H1_T33_0 overlay), alive, sla(0x1), gid(2), num of pass(1), selected
5: Seq_num(1 H1_T11_0 overlay), alive, sla(0x1), gid(2), num of pass(1), selected
6: Seq_num(1 H1_T11_1 overlay), alive, sla(0x1), gid(2), num of pass(1), selected
7: Seq_num(2 H1_T22_0 overlay), alive, sla(0x1), gid(2), num of pass(1), selected
8: Seq_num(2 H1_T22_1 overlay), alive, sla(0x1), gid(2), num of pass(1), selected
Src address(1):
10.0.0.0-10.255.255.255
Dst address(1):
10.0.0.0-10.255.255.255
At this point, PC1 connected to Spoke 1 initiated multiple ICMP pings destined for PC1 connected to Spoke 2. The
packet capture diagnostic command on Spoke 1 demonstrates that these ICMP pings have been load balanced over all
shortcuts:
Branch1_FGT# diagnose sniffer packet any 'host 10.0.4.2' 4
interfaces=[any]
filters=[host 10.0.4.2]
3.481994 port4 in 10.0.3.2 -> 10.0.4.2: icmp: echo request
3.482103 H1_T11_1 out 10.0.3.2 -> 10.0.4.2: icmp: echo request
3.482799 H1_T11_1 in 10.0.4.2 -> 10.0.3.2: icmp: echo reply
3.482928 port4 out 10.0.4.2 -> 10.0.3.2: icmp: echo reply
4.614480 port4 in 10.0.3.2 -> 10.0.4.2: icmp: echo request
4.614580 H1_T33_0 out 10.0.3.2 -> 10.0.4.2: icmp: echo request
4.615122 H1_T33_0 in 10.0.4.2 -> 10.0.3.2: icmp: echo reply
4.615152 port4 out 10.0.4.2 -> 10.0.3.2: icmp: echo reply
5.286394 port4 in 10.0.3.2 -> 10.0.4.2: icmp: echo request
5.286497 H1_T22_0 out 10.0.3.2 -> 10.0.4.2: icmp: echo request
5.287129 H1_T22_0 in 10.0.4.2 -> 10.0.3.2: icmp: echo reply
5.287155 port4 out 10.0.4.2 -> 10.0.3.2: icmp: echo reply
6.079759 port4 in 10.0.3.2 -> 10.0.4.2: icmp: echo request
6.079883 H1_T22_1 out 10.0.3.2 -> 10.0.4.2: icmp: echo request
6.080496 H1_T22_1 in 10.0.4.2 -> 10.0.3.2: icmp: echo reply
6.080537 port4 out 10.0.4.2 -> 10.0.3.2: icmp: echo reply
7.983357 port4 in 10.0.3.2 -> 10.0.4.2: icmp: echo request
7.983447 H1_T11_0 out 10.0.3.2 -> 10.0.4.2: icmp: echo request
7.984078 H1_T11_0 in 10.0.4.2 -> 10.0.3.2: icmp: echo reply
7.984120 port4 out 10.0.4.2 -> 10.0.3.2: icmp: echo reply
Without user traffic traversing the shortcut during the idle interval time, from the diagnostic command on Spoke 1,
observe that all shortcuts have been removed:
Branch1_FGT# diagnose system sdwan service4
Service(1): Address Mode(IPV4) flags=0x24200 use-shortcut-sla use-shortcut
Tie break: cfg
Shortcut priority: 3
Gen(16), TOS(0x0/0x0), Protocol(0): src(1->65535):dst(1->65535), Mode(sla hash-
mode=round-robin)
Members(3):
1: Seq_num(1 H1_T11 overlay), alive, sla(0x1), gid(2), num of pass(1), selected
2: Seq_num(2 H1_T22 overlay), alive, sla(0x1), gid(2), num of pass(1), selected
3: Seq_num(3 H1_T33 overlay), alive, sla(0x1), gid(2), num of pass(1), selected
Src address(1):
10.0.0.0-10.255.255.255
Dst address(1):
10.0.0.0-10.255.255.255
Hubs are not necessarily connected to all the same underlay transports as spokes. ADVPN 2.0 can now use overlay
placeholders to trigger shortcuts between spokes over transports to which hubs are not connected. As long as the path is
in-SLA and is the best quality, ADVPN 2.0 uses the overlay placeholders to establish a shortcut tunnel.
Shortcut tunnels require each spoke to be configured with these CLI commands:
config vpn ipsec phase1-interface
edit <placeholder_phase1_interface_name>
set type dynamic
...
set net-device enable
...
set auto-discovery-dialup-placeholder {enable | disable}
next
end
Example
In this SD-WAN example with ADVPN 2.0 enabled, Spoke-1 and Spoke-2 have regular parent tunnels (H1_T11) to the
Hub. Spoke-1 and Spoke-2 also have placeholder parent tunnels configured (Placeholder_MPLS_1), where auto-
discovery-dialup-placeholder is enabled and remote-gateway isn't statically specified.
Traffic is sent from PC-1 to PC-2, and the first bit of traffic goes through the Hub and triggers SHORTCUT_
QUERY/SHORTCUT_REPLY exchange with the Hub. When Spoke-1 receives SHORTCUT_REPLY message, which
includes SD-WAN information about Spoke-2, Spoke-1 calculates and creates the shortcut between regular parent
tunnels and triggers a shortcut between the placeholder parent tunnels too.
Health-checks, which are automatically running on the regular shortcut and the placeholder shortcut, help decide which
interface to use for forwarding the remaining traffic.
b. Configure SD-WAN:
Enable ADVPN 2.0 and health-checks for the overlay. Configure the SD-WAN members and their transport
groups.
config system sdwan
set status enable
config zone
edit "overlay"
set advpn-select enable
set advpn-health-check "HUB"
next
end
config members
edit 4
set interface "H1_T11"
set zone "overlay"
set source 172.31.0.65
set priority 10
set transport-group 1
next
edit 13
set interface "Placeholder_MPLS_1"
set zone "overlay"
set source 172.31.0.65
set priority 10
set transport-group 2
next
end
config health-check
edit "HUB"
set server "172.31.100.100"
set members 4 13
config sla
edit 1
set link-cost-factor latency
set latency-threshold 100
next
end
next
end
config service
edit 1
set name "1"
set mode sla
set dst "spoke-2_LAN-1"
set src "spoke-1_LAN-1"
config sla
edit "HUB"
set id 1
next
end
set priority-members 4 13
next
end
end
b. Configure SD-WAN:
Enable ADVPN 2.0 and health-checks for the overlay. Configure the SD-WAN members and their transport
groups. The internet overlay (H1_T11) is added to transport group 1, and the MPLS overlay (Placeholder_
MPLS_1) is added to transport group 2.
config system sdwan
set status enable
config zone
edit "overlay"
set advpn-select enable
set advpn-health-check "HUB"
next
end
config members
edit 4
set interface "H1_T11"
set zone "overlay"
set source 172.31.0.66
set priority 10
set transport-group 1
next
edit 13
set interface "Placeholder_MPLS_1"
set zone "overlay"
set source 172.31.0.66
set priority 10
set transport-group 2
next
end
config health-check
edit "HUB"
set server "172.31.100.100"
set members 4 13
config sla
edit 1
set link-cost-factor latency
set latency-threshold 100
next
end
next
end
end
1. Check the health status on Spoke-1 and Spoke-2, and check the SD-WAN status of Spoke-1:
a. Check the health of Spoke-1:
The placeholder tunnel (Placeholder_MPLS_1) is dead.
# diagnose sys sdwan health-check
Health Check(HUB):
Seq(4 H1_T11): state(alive), packet-loss(0.000%), latency(0.235), jitter(0.011), mos
(4.404), bandwidth-up(999998), bandwidth-dw(999998), bandwidth-bi(1999996), sla_
map=0x1
Seq(13 Placeholder_MPLS_1): state(dead), packet-loss(100.000%), sla_map=0x0
Members(2):
1: Seq_num(4 H1_T11 overlay), alive, sla(0x1), gid(0), cfg_order(0), local cost
(0), selected
2: Seq_num(13 Placeholder_MPLS_1 overlay), dead, sla(0x0), gid(0), cfg_order(1),
local cost(0)
Src address(1):
10.0.3.0-10.0.3.255
Dst address(1):
10.0.4.0-10.0.4.255
4. When the regular shortcut tunnel (H1_T11_0) is out of SLA, traffic switches to the placeholder shortcut tunnel
(Placeholder_MPLS_1).
a. Diagnose the SD-WAN service:
The placeholder shortcut tunnel (Placeholder_MPLS_1) is preferred, and the regular shortcut tunnel (H1_T11_
0 overlay) is out of SLA.
# diagnose sys sdwan service4
b. Sniff the packet to see the traffic switch to the placeholder shortcut tunnel (Placeholder_MPLS_1_0):
# diagnose sniffer packet any 'host 10.0.4.2' 4
interfaces=[any]
filters=[host 10.0.4.2]
An SD-WAN Setup wizard is now available on the SD-WAN > SD-WAN Zones page to provide guided configuration of
the following settings for a simple SD-WAN setup:
l Interface
The wizard supports a maximum of two interfaces.
l Networking
l Performance SLA
l SD-WAN Rule
After completing the wizard, configure a default static route for the newly created SD-WAN interface.
FortiGate requires a valid SD-WAN Network Monitor (SWNM) entitlement before the SD-WAN Setup wizard is visible.
See also FortiGuard SLA database for SD-WAN performance SLA 7.6.1 on page 226.
Example
This example describes how to use the SD-WAN Setup wizard to create an SD-WAN configuration with one SD-WAN
zone (named Test) and two SD-WAN members (agg1 and vlan100). The wizard also guides you to complete the
networking, performance SLA, and SD-WAN rule. After the wizard completes, configure a default static route for the SD-
WAN interface.
1. Go to the Network > SD-WAN > SD-WAN Zones page to access the wizard:
l When no SD-WAN configuration exists, the following message is displayed. Click Begin SD-WAN setup wizard
to access the wizard.
l When an SD-WAN configuration exists, click Create New > SD-WAN Wizard to access the wizard.
b. Click Add a new WAN underlay, select an interface, and click Apply.
c. Click Add a new WAN underlay again, select an interface, and click Apply.
Gateway Select one of the following methods to assign a gateway IP address to the
interface:
l Dynamic: Select to leave the gateway undefined and proceed to the next
Cost Used by the lowest-cost SLA strategy. The link with the lowest cost is chosen
to pass traffic. The lowest possible cost is 0.
Fallback priority Select one of the following methods to define the priority of SD-WAN
members:
l Default: Select to use the default, which is the same priority for all SD-
WAN members.
l Specify: Select to specify a priority for the SD-WAN member in the Priority
box.
Performance SLA Select one of the following to choose how to define performance SLA:
l FortiGuard: Select to use the FortiGuard SLA database. Select a
predefined server from the Server list, and specify the protocol to use.
l Manual: Select to manually define a server for the SLA.
Skip creation of SD-WAN rule Enable to use the implicit rule instead of creating an SD-WAN rule.
and use implicit rule
Interface selection strategy Available when Skip creation of SD-WAN rule and use implicit rule is disabled.
Specify how SD-WAN should select an interface:
l Best quality: Select to use the interface with the best measured
performance.
l Lowest cost (SLA): Select to use the interface that meets the defined
performance SLA targets. When a tie occurs, the interface with the lowest
assigned cost is selected.
l Maximize bandwidth: Traffic is load balanced among interfaces that meet
SLA targets.
Zone Displays the name of the SD-WAN zone that will be created.
Members Displays the name of the interface members that will be added to the SD-WAN
zone.
Performance SLA Displays the name of the performance SLA configuration that will be used for
the SD-WAN configuration.
Rule Displays the name of the SD-WAN rule that will be used for the SD-WAN
configuration
b. On the SD-WAN Rule tab, view the rule that you created.
c. On the Performance SLAs tab, view the SLA configuration that you created.
Fabric Overlay Orchestrator Topology dashboard widget for hub FortiGates - 7.6.3
The Fabric Overlay Orchestrator Topology dashboard widget provides an interactive view of hub and spoke devices
previously configured using the Fabric Overlay Orchestrator feature. It can display health-check status, multiple tunnels,
resource usage, shortcuts, and so on.
This dashboard widget is only available on the hub or root FortiGate device.
5. Click OK.
6. Click Close.
To review hub and spoke details in the Fabric Overlay Orchestrator Topology widget:
l Hover over a hub or spoke in the topology to view device information, such as Serial Number, Model, and
Version information.
Performance SLA
This section includes information about performance SLA related new features:
l Embed SLA priorities in ICMP probes on page 196
l Embed SLA status in ICMP probes on page 208
l Map SD-WAN member priorities to BGP MED attribute when spoke advertises routes using iBGP to hub 7.6.1 on
page 220
l FortiGuard SLA database for SD-WAN performance SLA 7.6.1 on page 226
l Passive monitoring of TCP metrics 7.6.1 on page 230
l Enhanced passive monitoring of TCP metrics 7.6.3 on page 234
In SD-WAN hub-and-spoke topologies, each spoke can now embed an SLA priority (priority-in-sla and
priority-out-sla) in ICMP probes and send them to the hub. The hub can use the received SLA priorities from each
spoke to manage route priority for hub-to-spoke traffic.
SLA status can also be embedded in ICMP probes. See Embed SLA status in ICMP probes on page 208 for more
information. Prior to FortiOS 7.6.0, only the measured SLA information was embedded in ICMP probes. See Embedded
SD-WAN SLA information in ICMP probes for more information.
Spoke-initiated speed tests can also use the embedded information. When a spoke continually embeds an out-of
SLA priority into ICMP probes on the overlay, the hub can use the received out-of SLA priority information to manage
route priorities and detour hub-to-spoke user traffic to other tunnels.
For configuration on a spoke, the config system sdwan command includes new options:
config system sdwan
config members
edit <entry>
set priority-in-sla <integer>
set priority-out-sla <integer>
next
end
end
set priority-in-sla Preferred priority of routes to this member when this member is in SLA (0 - 65535,
<integer> default = 0).
set priority-out-sla Preferred priority of routes to this member when this member is out of SLA (0 -
<integer> 65535, default = 0).
Example
The SD-WAN topology with ADVPN and BGP neighbor on loopback is used for the following two examples:
l Path selection based on embedded SLA priorities on page 198
l Speed test rerouting based on embedded SLA priorities on page 204
next
end
next
end
end
In this example, spokes are configured to embed the SLA priority in ICMP probes, and the hub is configured to use the
information. With this configuration:
l The spoke's overlay priority on each overlay is embedded in the ICMP probes and transported to the hub.
l The hub sets priorities on IKE routes over different overlays based on the received overlay priorities.
l On the hub, BGP routes, which are used to guide hub-to-spoke traffic, rely on IKE routes to be resolved to tunnels
and inherit the priorities from the IKE routes.
l The hub can steer traffic to spokes by resolved BGP routes with different inherited priorities.
edit 5
set interface "H1_T22"
set zone "overlay"
set source 172.31.0.65
set priority 10
set priority-in-sla 15
set priority-out-sla 25
next
end
config health-check
edit "HUB"
set server "172.31.100.100"
set embed-measured-health enable
set sla-id-redistribute 1
set members 4 5
config sla
edit 1
set link-cost-factor latency
set latency-threshold 50
next
end
next
end
end
b. Configure BGP:
config router bgp
set as 65001
set router-id 172.31.0.65
......
config neighbor
edit "172.31.0.1"
......
set remote-as 65001
set update-source "Loopback0"
next
end
config network
edit 1
set prefix 10.0.3.0 255.255.255.0
next
end
......
end
a. Configure SD-WAN:
config system sdwan
set status enable
set speedtest-bypass-routing enable
config zone
edit "overlay"
next
end
config members
edit 4
set interface "H1_T11"
set zone "overlay"
set source 172.31.0.66
set priority 10
set priority-in-sla 30
set priority-out-sla 40
next
edit 5
set interface "H1_T22"
set zone "overlay"
set source 172.31.0.66
set priority 10
set priority-in-sla 35
set priority-out-sla 45
next
end
config health-check
edit "HUB"
set server "172.31.100.100"
set embed-measured-health enable
set sla-id-redistribute 1
set members 4 5
config sla
edit 1
set link-cost-factor latency
set latency-threshold 70
next
end
next
end
end
b. Configure BGP:
config router bgp
set as 65001
set router-id 172.31.0.66
......
config neighbor
edit "172.31.0.1"
......
set remote-as 65001
set update-source "Loopback0"
next
end
config network
edit 1
set prefix 10.0.4.0 255.255.255.0
next
end
......
end
b. Configure BGP:
config router bgp
set as 65001
set router-id 172.31.0.1
set recursive-inherit-priority enable
......
config neighbor-group
edit "EDGE"
set remote-as 65001
set update-source "Loopback0"
set route-reflector-client enable
next
end
config neighbor-range
edit 1
set prefix 172.31.0.64 255.255.255.192
set neighbor-group "EDGE"
next
end
......
end
4. After the spokes' overlay priorities are embedded in ICMP probes and transported to the hub, view the routing tables
on the hub.
The hub sets overlay priorities on IKE routes over EDGE_T1 and EDGE_T2. Meanwhile, recursively resolved BGP
routes inherit the priorities from those IKE routes.
a. On the hub, get the static routing table:
# get router info routing-table static
Routing table for VRF=0
5. Change the latency on Spoke-1 and Spoke-2, and view the results.
a. On Spoke-1, increase H1_T11's latency to 60 to make it out of SLA.
b. On Spoke-2, increase H1_T11's latency to 80 to make it out of SLA.
c. On Spoke-1, run a health check:
Branch1_A_FGT (root) (Interim)# diagnose sys sdwan health-check
Health Check(HUB):
Seq(4 H1_T11): state(alive), packet-loss(0.000%) latency(60.247), jitter(0.036), mos
(4.373), bandwidth-up(999998), bandwidth-dw(999997), bandwidth-bi(1999995) sla_
map=0x0
Seq(5 H1_T22): state(alive), packet-loss(0.000%) latency(0.218), jitter(0.016), mos
(4.404), bandwidth-up(999998), bandwidth-dw(999998), bandwidth-bi(1999996) sla_map=0x
6. After the hub receives the updated overlay priorities, run a health check on the hub and view the routing tables.
The hub has updated the route priorities.
a. Run a health check:
# diagnose sys sdwan health-check remote
When spoke-initiated speed tests are enabled for this configuration, the out-of SLA priority is used by the hub to choose
other routes during the speed test.
1. On the hub, enable speed tests and allow them on the underlays and overlays.
a. Enable speed tests:
config system global
set speedtest-server enable
set speedtestd-ctrl-port 6000
set speedtestd-server-port 7000
end
next
end
set guaranteed-bandwidth-percentage 20
set maximum-bandwidth-percentage 50
next
end
next
end
Before starting the speed test on Spoke-1, route priorities are based on the received overlay priorities on both H1_T11
and H1_T22
DC1_A_FGT (root) (Interim)# get router info routing-table bgp
Routing table for VRF=0
B 10.0.3.0/24 [200/0] via 172.31.0.65 (recursive via EDGE_T1 tunnel 10.0.0.20 [10]),
00:11:56
(recursive via EDGE_T2 tunnel 172.31.0.65 [15]),
00:11:56, [1/0]
While the speed test is running on H1_T11 of Spoke-1, Spoke-1 will constantly embed out-of SLA overlay priority into
probes on H1_T11 and send them to the hub. Then the Hub updates route priorities accordingly and detours hub-to-
spoke traffic to H1_T22 to avoid the impact on speed test of H1_T11. EDGE_T2 is preferred, and the EDGE_T1 priority
changed from 10 to 20.
DC1_A_FGT (root) (Interim)# get router info routing-table bgp
Routing table for VRF=0Routing table for VRF=0
B 10.0.3.0/24 [200/0] via 172.31.0.65 (recursive via EDGE_T2 tunnel 172.31.0.65 [15]),
00:03:49
(recursive via EDGE_T1 tunnel 10.0.0.20 [20]),
00:03:49, [1/0]
During the speed test on H1_T22 of Spoke-1, Spoke-1 constantly embeds out-of SLA overlay priority into probes on H1_
T22 and sends them to the hub. Then the Hub updates route priorities accordingly and detours hub-to-spoke traffic to
H1_T11 to avoid the impact on speed test of H1_T22. EDGE_T1 is preferred, and the EDGE_T2 priority changed from
15 to 25.
Once speed test completes, the results are applied on child tunnels as egress-shaping-profile on the hub.
DC1_A_FGT (root) (Interim)# diagnose vpn tunnel list
list all ipsec tunnel in vd 0
------------------------------------------------------
name=EDGE_T1_0 ver=2 serial=22 172.31.1.1:0->172.31.3.1:0 nexthop=172.31.1.2 tun_
id=10.0.0.20 tun_id6=::10.0.0.31 status=up dst_mtu=1500 weight=1
.....
dec: spi=9932cb6a esp=aes-gcm key=36
0819373cc74d0eb2dae8ac559519b756010fb42d2453b1c046429f8aad4d7dcbb507b990
ah=null key=0
enc: spi=dea67361 esp=aes-gcm key=36
c2ac45b9c1144d6728b5a7a542d1a35c86d018af35f6f661888dc39f771dc4820e2a40ff
ah=null key=0
dec:pkts/bytes=0/0, enc:pkts/bytes=3789/517724
npu_flag=03 npu_rgwy=172.31.3.1 npu_lgwy=172.31.1.1 npu_selid=26 dec_npuid=1 enc_npuid=1
npu_isaidx=719 npu_osaidx=39
egress traffic control:
bandwidth=711495(kbps) lock_hit=0 default_class=2 n_active_class=3
class-id=2 allocated-bandwidth=71149(kbps) guaranteed-bandwidth=71149
(kbps)
max-bandwidth=71149(kbps) current-bandwidth=1(kbps)
priority=low forwarded_bytes=82K
dropped_packets=0 dropped_bytes=0
class-id=3 allocated-bandwidth=284597(kbps) guaranteed-bandwidth=213448
(kbps)
max-bandwidth=284597(kbps) current-bandwidth=0(kbps)
priority=medium forwarded_bytes=0
dropped_packets=0 dropped_bytes=0
class-id=4 allocated-bandwidth=355747(kbps) guaranteed-bandwidth=142298
(kbps)
max-bandwidth=355747(kbps) current-bandwidth=0(kbps)
priority=high forwarded_bytes=0
dropped_packets=0 dropped_bytes=0
------------------------------------------------------
name=EDGE_T2_1 ver=2 serial=1c 172.31.1.5:0->172.31.3.5:0 nexthop=172.31.1.6 tun_
id=172.31.0.65 tun_id6=::10.0.0.25 status=up dst_mtu=1500 weight=1
......
dec: spi=9932cb69 esp=aes-gcm key=36
01842dbbe1fe98fc6503b491c0768a844d815074950589b48db8a9a00c7505e73a96dc84
ah=null key=0
enc: spi=dea67360 esp=aes-gcm key=36
c2e4cb1065325de7970d6f8edb3cac8829a33420ff79acedd6dcf4012e4614dd92d7b16b
ah=null key=0
dec:pkts/bytes=0/0, enc:pkts/bytes=3518/499252
npu_flag=03 npu_rgwy=172.31.3.5 npu_lgwy=172.31.1.5 npu_selid=27 dec_npuid=1 enc_npuid=1
npu_isaidx=718 npu_osaidx=40
egress traffic control:
bandwidth=374876(kbps) lock_hit=0 default_class=2 n_active_class=3
class-id=2 allocated-bandwidth=37487(kbps) guaranteed-bandwidth=37487
(kbps)
max-bandwidth=37487(kbps) current-bandwidth=2(kbps)
priority=low forwarded_bytes=78K
dropped_packets=0 dropped_bytes=0
class-id=3 allocated-bandwidth=149950(kbps) guaranteed-bandwidth=112462
(kbps)
max-bandwidth=149950(kbps) current-bandwidth=0(kbps)
priority=medium forwarded_bytes=0
dropped_packets=0 dropped_bytes=0
class-id=4 allocated-bandwidth=187438(kbps) guaranteed-bandwidth=74975
(kbps)
max-bandwidth=187438(kbps) current-bandwidth=0(kbps)
priority=high forwarded_bytes=0
dropped_packets=0 dropped_bytes=0
In SD-WAN hub-and-spoke topologies, each spoke can now embed in ICMP probes sent to the hub the SLA status
decided by the spoke. The SLA status is either in SLA or out of SLA. The hub uses the received SLA status from each
spoke to manage route priority for hub-to-spoke traffic.
SLA priority can also be embedded in ICMP probes. See Embed SLA priorities in ICMP probes on page 196 for more
information. Prior to FortiOS 7.6.0, only the measured SLA information was embedded in ICMP probes. See Embedded
SD-WAN SLA information in ICMP probes for more information.
Spoke-initiated speed tests can also use the embedded information. When a spoke continually embeds an out-of
SLA status into ICMP probes—regardless of the SLA calculation—the hub can use the received out-of SLA status
information to manage route priorities and detour hub-to-spoke user traffic to other tunnels.
For configuration on a hub, the config system sdwan command includes new options:
config system sdwan
config health-check
edit <entry>
set sla-id-redistribute <ID>
config sla
edit <entry>
set link-cost-factor remote {latency | jitter | packet-loss | mos |
remote}
next
end
next
end
end
set sla-id-redistribute Select the ID from the SLA subtable. The selected SLA's priority value will be
<ID> distributed into the routing table (0 - 32, default = 0).
The hub can also work in a hybrid mode. If set sla-id-redistribute is not configured on the spoke, the hub can
use its own SLA settings to determine the route priority.
Example
The SD-WAN topology with ADVPN and BGP neighbor on loopback is used for the following two examples:
l Path selection based on embedded SLA status on page 210
l Speed test rerouting based on embedded SLA status on page 216
In this example, spokes are configured to embed the SLA status in ICMP probes, and the hub is configured to use the
information. With this configuration:
l The spoke's SLA information (packet-loss, latency, jitter, and mos) and SLA status (in SLA or out of SLA) on each
overlay are embedded into ICMP probes and transported to the hub;
l The hub sets priorities on IKE routes over different overlays based on the received SLA status on overlays
l On the hub, BGP routes, which are used to guide hub-to-spoke traffic, rely on IKE routes to be resolved to tunnels
and inherit the priorities from the IKE routes
l The hub can steer traffic to spokes by resolved BGP routes with different inherited priorities
b. Configure BGP:
config router bgp
set as 65001
set router-id 172.31.0.65
......
config neighbor
edit "172.31.0.1"
......
set remote-as 65001
set update-source "Loopback0"
next
end
config network
edit 1
set prefix 10.0.3.0 255.255.255.0
next
end
......
end
b. Configure BGP:
config router bgp
set as 65001
set router-id 172.31.0.66
......
config neighbor
edit "172.31.0.1"
......
set remote-as 65001
set update-source "Loopback0"
next
end
config network
edit 1
set prefix 10.0.4.0 255.255.255.0
next
end
......
end
b. Configure BGP:
4. After the spokes' SLA status on overlays are embedded in ICMP probes and transported to the hub, view the routing
tables on the hub.
Based on the received in-SLA status, the hub sets a predefined priority of 100 on IKE routes over EDGE_T1
and EDGE_T2. Meanwhile, recursively resolved BGP routes inherit the priorities from those IKE routes.
5. Change the latency on Spoke-1 and Spoke-2, and view the results.
a. On Spoke-1, increase H1_T11's latency to 60 to make it out of SLA.
b. On Spoke-2, increase H1_T11's latency to 80 to make it out of SLA.
c. On Spoke-1, run a health check:
Branch1_A_FGT (root) (Interim)# diagnose sys sdwan health-check
Health Check(HUB):
Seq(4 H1_T11): state(alive), packet-loss(0.000%) latency(60.229), jitter(0.021), mos
(4.373), bandwidth-up(999999), bandwidth-dw(999998), bandwidth-bi(1999997) sla_
map=0x0
Seq(5 H1_T22): state(alive), packet-loss(0.000%) latency(0.210), jitter(0.012), mos
(4.404), bandwidth-up(999998), bandwidth-dw(999997), bandwidth-bi(1999995) sla_
map=0x1
6. After the hub receives the updated SLA status, run a health check on the hub and view the routing tables.
The hub has updated the route priorities based on predefined priority settings (set priority-in-sla 100 and
set priority-out-sla 200).
a. Run a health check:
# diagnose sys sdwan health-check remote
When spoke-initiated speed tests are enabled for this configuration, the out-of SLA status is used by the hub to choose
other routes during the speed test.
1. On the hub, enable speed tests and allow them on the underlays and overlays.
a. Enable speed tests:
config system global
set speedtest-server enable
set speedtestd-ctrl-port 6000
set speedtestd-server-port 7000
end
set guaranteed-bandwidth-percentage 30
set maximum-bandwidth-percentage 40
next
edit 3
set class-id 4
set guaranteed-bandwidth-percentage 20
set maximum-bandwidth-percentage 50
next
end
next
end
Before starting the speed test on Spoke-1, route priorities are based on the received in-SLA status on both H1_T11 and
H1_T22
DC1_A_FGT (root) (Interim)# get router info routing-table bgp
Routing table for VRF=0
B 10.0.3.0/24 [200/0] via 172.31.0.65 (recursive via EDGE_T2 tunnel 172.31.0.65
[100]), 00:24:14
(recursive via EDGE_T1 tunnel 10.0.0.20 [100]),
00:24:14, [1/0]
While the speed test is running on H1_T11 of Spoke-1, Spoke-1 will constantly embed NOKstatus into probes on H1_T11
and send them to the hub. Then the Hub updates route priorities accordingly and detours hub-to-spoke traffic to H1_T22
to avoid the impact on speed test of H1_T11. EDGE_T2 is preferred, and the EDGE_T1 priority changed from 100 to
200.
DC1_A_FGT (root) (Interim)# get router info routing-table bgp
Routing table for VRF=0
B 10.0.3.0/24 [200/0] via 172.31.0.65 (recursive via EDGE_T2 tunnel 172.31.0.65
[100]), 00:04:42
(recursive via EDGE_T1 tunnel 10.0.0.20 [200]),
00:04:42, [1/0]
During the speed test on H1_T22 of Spoke-1, Spoke-1 constantly embeds NOK status (out of SLA status) into probes on
H1_T22 and sends them to the hub. Then the Hub updates route priorities accordingly and detours hub-to-spoke traffic
to H1_T11 to avoid the impact on speed test of H1_T22. EDGE_T1 is preferred, and the EDGE_T2 priority changed from
100 to 200.
DC1_A_FGT (root) (Interim)# get router info routing-table bgp
Routing table for VRF=0
B 10.0.3.0/24 [200/0] via 172.31.0.65 (recursive via EDGE_T1 tunnel 10.0.0.20 [100]),
00:00:05
(recursive via EDGE_T2 tunnel 172.31.0.65
[200]), 00:00:05, [1/0]
Once speed test completes, the results are applied on child tunnels as egress-shaping-profile on the hub.
DC1_A_FGT (root) (Interim)# diagnose vpn tunnel list
list all ipsec tunnel in vd 0
------------------------------------------------------
name=EDGE_T1_0 ver=2 serial=22 172.31.1.1:0->172.31.3.1:0 nexthop=172.31.1.2 tun_
id=10.0.0.20 tun_id6=::10.0.0.31 status=up dst_mtu=1500 weight=1
.......
dec: spi=9932cb0d esp=aes-gcm key=36
466db2b7ef257f0cf4b32ce79ef009485cbaececf0bad273b27c6a0a03d736557dfa15db
ah=null key=0
enc: spi=dea67332 esp=aes-gcm key=36
4f10635db3f4b52f156d98291e0b9af21529a12233cb77c8f94d5a58027d26efcfe7d1ac
ah=null key=0
dec:pkts/bytes=0/0, enc:pkts/bytes=1762/235516
npu_flag=03 npu_rgwy=172.31.3.1 npu_lgwy=172.31.1.1 npu_selid=26 dec_npuid=1 enc_npuid=1
npu_isaidx=626 npu_osaidx=39
egress traffic control:
bandwidth=673982(kbps) lock_hit=0 default_class=2 n_active_class=3
class-id=2 allocated-bandwidth=67398(kbps) guaranteed-bandwidth=67398
(kbps)
max-bandwidth=67398(kbps) current-bandwidth=1(kbps)
priority=low forwarded_bytes=173K
dropped_packets=0 dropped_bytes=0
class-id=3 allocated-bandwidth=269592(kbps) guaranteed-bandwidth=202194
(kbps)
max-bandwidth=269592(kbps) current-bandwidth=0(kbps)
priority=medium forwarded_bytes=0
dropped_packets=0 dropped_bytes=0
class-id=4 allocated-bandwidth=336990(kbps) guaranteed-bandwidth=134796
(kbps)
max-bandwidth=336990(kbps) current-bandwidth=0(kbps)
priority=high forwarded_bytes=0
dropped_packets=0 dropped_bytes=0
------------------------------------------------------
name=EDGE_T2_1 ver=2 serial=1c 172.31.1.5:0->172.31.3.5:0 nexthop=172.31.1.6 tun_
id=172.31.0.65 tun_id6=::10.0.0.25 status=up dst_mtu=1500 weight=1
.......
dec: spi=9932cb0e esp=aes-gcm key=36
551bdf438cb62ba0bf2df131d5e7da4697dfbec5d4f1d60e876f049ef9ec29bae2deb3b1
ah=null key=0
enc: spi=dea67333 esp=aes-gcm key=36
1d94ae5e40f32d48f03555d1d76008b72f3662e6619c4fc16fc730b9bae8c7546b595acc
ah=null key=0
dec:pkts/bytes=0/0, enc:pkts/bytes=1560/215488
Map SD-WAN member priorities to BGP MED attribute when spoke advertises
routes using iBGP to hub - 7.6.1
When a spoke advertises routes using iBGP to a hub, SD-WAN member priorities are mapped into the BGP multiple exit
discriminator (MED) attribute using the following CLI commands:
config system sdwan
config neighbor
edit <bgp-peer-IP>
set member <num_1> ... <num_n>
set route-metric {preferable | priority}
set health-check <health-check-name>
next
end
end
Value Description
preferable Select neighbor based on its HC to match BGP preferable/unpreferable route_
map.
priority Select neighbor based on its members' priority-in-sla/priority-out-sla value.
Routes to prefixes behind spokes are advertised by the SD-WAN hub to eBGP peers on an external network. The
relative values of the BGP MED attribute for each hub are used to indicate to eBGP peers the more preferred paths, that
is, the preferred hub used to route to spoke prefixes.
This enhancement depends on the spoke SD-WAN configuration defined in Embed SLA priorities in ICMP probes on
page 196 and hub SD-WAN and BGP configuration defined in Embed SLA status in ICMP probes on page 208.
Example
See Embedded SD-WAN SLA information in ICMP probes for more information.
2. Configure SD-WAN on the spoke:
config system sdwan
set status enable
config zone
edit "overlay"
next
end
config members
edit 4
set interface "H1_T11"
set zone "overlay"
set source 172.31.0.65
set priority-in-sla 50
set priority-out-sla 100
next
edit 5
set interface "H1_T22"
set zone "overlay"
set source 172.31.0.65
set priority-in-sla 70
set priority-out-sla 120
next
edit 7
set interface "H2_T11"
set zone "overlay"
set source 172.31.0.65
set priority-in-sla 60
set priority-out-sla 110
next
edit 8
set interface "H2_T22"
set zone "overlay"
set source 172.31.0.65
set priority-in-sla 80
set priority-out-sla 130
next
end
config health-check
edit "HUB"
set server "172.31.100.100"
set embed-measured-health enable
set sla-id-redistribute 1
set sla-fail-log-period 10
set sla-pass-log-period 10
set members 4 5 7 8
config sla
edit 1
set link-cost-factor latency
set latency-threshold 100
next
end
next
end
config neighbor
edit "172.31.0.1"
set member 4 5
set route-metric priority
set health-check "HUB"
next
edit "172.31.0.2"
set member 7 8
set route-metric priority
set health-check "HUB"
next
end
end
The routes with MEDs are advertised to a router on the external network that establishes a BGP neighbor
relationship with Hub-1 and Hub-2. When sending traffic destined for 10.0.3.0/24, the router on the external network
will prefer to send traffic to the hub with the lower MED.
3. All overlays are in SLA.
When sending traffic destined for 10.0.3.0/24, the router on the external network will prefer to send traffic to Hub-1
with lower MED 50 over Hub-2 with higher MED 60.
# diagnose sys sdwan health-check
Health Check(HUB):
Seq(4 H1_T11): state(alive), packet-loss(0.000%), latency(0.225), jitter(0.035), mos
A new FortiGuard SLA database is available, and it includes popular SaaS and internet destinations as well as
recommended settings that you can select as probe servers for SD-WAN Performance SLA configurations in the GUI or
CLI.
In the GUI, go to Network > SD-WAN > Performance SLA, and click Create New to access the new database.
In the CLI, use the following new options:
config system sdwan
config health-check
edit <health-check name>
set fortiguard {enable | disable}
set fortiguard-name <string>
next
end
end
The FortiGate requires a valid SD-WAN Network Monitor (SWNM) entitlement before the FortiGuard SLA Database can
be downloaded or updated.
See also SD-WAN Setup wizard for guided configuration 7.6.1 on page 185.
Example
In this example, an SD-WAN performance SLA is configured to use the FortiGuard SLA database and its Amazon target.
1. Go to Network > SD-WAN > Performance SLA, and click Create New. The New Performance SLA pane is
displayed.
2. Set Performance SLA to FortiGuard to select the database, and set SLA Target to the www.amazon.com target
from the database.
3. Complete the remaining options, and click OK. The configuration is displayed on the Performance SLAs pane.
4. On the Performance SLAs pane, select the configuration to view the health-check status.
1. Configure an SD-WAN health-check to use the SLA database and its Amazon target:
config system sdwan
set status enable
config zone
edit "virtual-wan-link"
next
end
config members
edit 1
set interface "agg1"
set gateway 172.16.203.2
next
edit 2
set interface "vlan100"
set gateway 172.16.206.2
next
end
config health-check
edit "test"
set fortiguard enable
set fortiguard-name "Amazon"
set server "www.amazon.com"
set members 0
config sla
edit 1
next
end
next
end
end
...
SLA Database
---------
Version: 1.00003
Contract Expiry Date: Wed Apr 30 2025
Last Updated using scheduled update on Mon Nov 25 09:46:47 2024
Last Update Attempt: Wed Nov 27 14:36:01 2024
Result: No Updates
Timezone Database
---------
Version: 1.0006
...
target-name:ADP
deprecated:0
sz_domain:5
target-name:AOL
deprecated:0
sz_domain:9
target-name:AWS dynamodb
deprecated:0
sz_domain:27
target-name:AWS ec2
deprecated:0
sz_domain:27
target-name:AWS ecs
deprecated:0
sz_domain:27
target-name:AWS es
deprecated:0
sz_domain:27
target-name:AWS lambda
deprecated:0
sz_domain:27
...
3. List the domains under a specific target predefined by FortiGuard in the SLA database:
# diagnose sladb domain-list ADP
domain-name:www.adp.com
desc:ADP (www.adp.com)
deprecated:0
sz_protocol:2
domain-name:ipay.adp.com
desc:Online payroll management and payment platform.
deprecated:0
sz_protocol:2
domain-name:workforcenow.adp.com
desc:Human resource management platform.
deprecated:0
sz_protocol:2
domain-name:globalview.adp.com
desc:Global HR management platform.
deprecated:0
sz_protocol:2
domain-name:mobile.adp.com
desc:Mobile app for ADP services.
deprecated:0
sz_protocol:2
4. List the protocols under a specific target and domain predefined by FortiGuard in the SLA database:
protocol: ping
protocol: https
5. View the communication method between FortiGate and servers predefined by FortiGuard for SD-WAN health-
checks.
# show system health-check-fortiguard
config system health-check-fortiguard
edit "8X8"
set server "www.8x8.com"
set protocol https
next
edit "ADP"
set server "www.adp.com"
next
edit "AOL"
set server "www.aol.com"
next
edit "AWS dynamodb"
set server "dynamodb.me-central-1.amazonaws.com"
next
edit "AWS ec2"
set server "ec2.us-east-1.amazonaws.com"
next
edit "AWS ecs"
set server "ecs.me-central-1.amazonaws.com"
next
edit "AWS es"
set server "es.us-east-1.amazonaws.com"
next
edit "AWS lambda"
set server "lambda.us-east-1.amazonaws.com"
next
...
FortiGate can now perform passive monitoring of TCP metrics by measuring and logging the following for each TCP
session:
l Network response time
l Server response time
l Original retransmits
l Reply retransmits
l SYN retransmits
l SYN-ACK retransmits
l Original or reply resets
Passive monitoring of TCP sessions is configured in firewall policies with the SD-WAN zone as the destination interface
using the following CLI command:
config firewall policy
edit <entry>
set app-monitor {enable | disable}
next
end
When set app-monitor is enabled in a firewall policy, NPU offloading for the firewall policy is automatically disabled.
The following metrics for each TCP session are logged:
tcpnrt Represents TCP Network Response Time and the time between SYN_ACK to ACK
in milliseconds.
tcpsrt Represents TCP Server Response Time and the time between SYN to SYN_ACK
in milliseconds.
tcporgrtrs Represents TCP Original Retransmit and the number of retransmissions in the
original direction.
tcprplrtrs Represents TCP Reply Retransmit and the number of retransmissions in the reply
direction.
tcpsynackrtrs Represents TCP SYN ACK Retransmit and number of SYN_ACK retransmissions.
tcprst Represents TCP Reset and values are none, origin, and reply.
This feature helps monitor performance of TCP traffic and locate potential network issues. You can display TCP metrics
using the diagnose sys session list command, or you can view traffic logs in either the CLI or the GUI.
SD-WAN traffic steering remains independent from the measured TCP session metrics.
Example
In this example, SD-WAN is configured with a zone named virtual-wan-link, and it contains two members (vlan100 and
vd1-p1). A firewall policy is configured for the SD-WAN zone to passively monitor TCP metrics from the PC to a server.
To configure SD-WAN:
1. Configure SD-WAN:
config system sdwan
set status enable
config zone
edit "virtual-wan-link"
next
end
config members
edit 1
set interface "vd1-p1"
next
edit 2
set interface "vlan100"
set gateway 172.16.206.2
next
end
config service
edit 1
set name "1"
set dst "all"
set src "172.16.205.0"
set priority-members 1 2
next
end
end
Members(2):
1: Seq_num(1 vd1-p1 virtual-wan-link), alive, selected
2: Seq_num(2 vlan100 virtual-wan-link), alive, selected
Src address(1):
172.16.205.0-172.16.205.255
Dst address(1):
0.0.0.0-255.255.255.255
3. Configure a firewall policy for the SD-WAN zone to monitor traffic from the PC:
In this example, the dstintf option is set to the SD-WAN zone (virtual-wan-link), the srcaddr option
identifies the PC (172.16.205.0), and passive monitoring and logging of TCP metrics is enabled.
config firewall policy
edit 1
set name "TCP-Metrics"
set srcintf "any"
set dstintf "virtual-wan-link"
set action accept
set srcaddr "172.16.205.0"
set dstaddr "all"
set schedule "always"
set service "ALL"
set app-monitor enable
set utm-status enable
set ssl-ssh-profile "certificate-inspection"
set application-list "g-default"
set logtraffic all
set auto-asic-offload disable
next
end
4. As traffic passes from the PC through FortiGate to the server, TCP traffic is measured and logged, and you can view
the results:
l View a session list:
# diagnose sys session list
rtrs=0 tcp_rst=00
npu_state=0x1041001 no_offload
no_ofld_reason: disabled-by-policy non-npu-intf
total session: 1
The latest enhancement introduces passive monitoring of TCP metrics for each application, expanding the range of
metrics measured and logged. Previously, monitoring was limited to a session with a limited set of metrics. See Passive
monitoring of TCP metrics 7.6.1 on page 230 for more information.
The new metrics include:
l Server Response Time
l Network Transfer Time
l Latency
l RTT Sample
l Origin Jitter
l Reply Jitter
l Jitter
l Origin Packet Loss
l Reply Packet Loss
l Packet Loss
l Retransmission Sample
l Origin Retransmission
l Reply Retransmission
l SYN Retransmission
l SYN-ACK Retransmission
l Origin Reset
l Reply Reset
Example
In this example, SD-WAN is configured with a zone named virtual-wan-link, and it contains two members (vlan100 and
vd1-p1). A firewall policy is configured for the SD-WAN zone to passively monitor TCP metrics from the PC to a server.
See Passive monitoring of TCP metrics 7.6.1 on page 230 for information about the complete configuration.
You can use the configuration from the 7.6.1 topic with a small change. Enable passive-wan-health-measurement
for passive monitoring of applications.
As traffic passes from the PC through FortiGate to the server, TCP traffic is measured and logged, providing valuable
insights into application performance.
For example, the SD-WAN log captures detailed performance metrics, as shown below:
1: date=2025-03-06 time=09:40:33 eventtime=1741210833244790449 tz="+1200" logid="0113022941"
type="event" subtype="sdwan" level="information" vd="root" logdesc="SDWAN application
performance metrics via kernel" eventtype="Application Performance Metrics" appid=16091
interface="vd1-p1" serverresponsetime="162.0" networktransfertime="0.0" latency="162.0"
rttsample=5 originjitter="0" replyjitter="100" jitter="100.0" originpktloss="21.8"
replypktloss="2.6" packetloss="3.7" retransample=6 originretransmission=13
replyretransmission=17 synretransmission=0 synackretransmission=0 originreset=0 replyreset=0
msg="Application Performance Metrics via kernel"
Service rules
This section includes information about service rule related new features:
l Allow SD-WAN rules to steer IPv6 multicast traffic on page 236
l Specify SD-WAN zones in some policies 7.6.1 on page 242
SD-WAN rules can now steer IPv6 multicast traffic. Previously only IPv4 multicast traffic was supported. When an SD-
WAN member is out of SLA, multicast traffic can fail over to another SD-WAN member, and switch back when
SLA recovers.
The new pim-use-sdwan option enables or disables the use of SD-WAN for PIM (Protocol Independent Multicast)
when checking RP (Rendezvous Point) neighbors and sending PIM-SM join or register packets.
config router multicast6
config pim-sm-global
set pim-use-sdwan {enable | disable}
end
end
When SD-WAN steers multicast traffic, ADVPN is not supported. Use the set shortcut
option to disable shortcuts for the service:
config system sdwan
config service
edit <id>
set shortcut {enable | disable}
next
end
end
Example
In the following example, three PIM-SM enabled tunnels are configured between Spoke-1 and the Hub. The multicast
source is located at Hub, and the multicast receiver is attached to Spoke-1.
This example focuses on configuration related to the new feature. Following is an overview of the configuration steps:
1. On the hub FortiGate, configure multicast routing for the source and the multicast RP.
2. On the spoke FortiGate, configuring multicast routing and enable SD-WAN for steering.
3. Verify traffic failover for the following scenarios:
l When the cost of an SD-WAN member changes
l When a link is in SLA
l When a link is out of SLA
1. On Hub, configure multicast routing for the source and the multicast RP:
In this example, port5 is used for the multicast source, and 20000:172:16:205::1 is the IPv6 address for the
RP.
config router multicast6
set multicast-routing enable
config interface
edit "hub-phase1"
next
edit "hub2-phase1"
next
edit "port5"
next
edit "hub3-phase1"
next
end
config pim-sm-global
config rp-address
edit 1
set ip6-address 2000:172:16:205::1
next
end
end
end
To configure Spoke-1:
3. Configure SD-WAN:
In this example, the protocol is set to 103 to match PIM-SM join/register messages.
config system sdwan
set status enable
config zone
edit "virtual-wan-link"
next
end
config members
edit 1
set interface "spoke11-p1"
next
edit 2
set interface "spoke12-p1"
next
edit 3
set interface "spoke13-p1"
next
end
config health-check
edit "1"
set addr-mode ipv6
set server "2000::9:0:0:1"
set update-static-route disable
set members 1
config sla
edit 1
next
end
next
edit "2"
set addr-mode ipv6
set server "2000::9:0:0:2"
set update-static-route disable
set members 2
config sla
edit 1
next
end
next
edit "3"
set addr-mode ipv6
set server "2000::9:0:0:3"
set update-static-route disable
set members 3
config sla
edit 1
next
end
next
end
config service
edit 1
set name "1"
set addr-mode ipv6
set mode sla
set protocol 103
config sla
edit "1"
set id 1
next
edit "2"
set id 1
next
edit "3"
set id 1
next
end
set priority-members 1 2 3
set sla-compare-method number
set dst6 "all"
next
end
end
1. On Spoke-1, diagnose the SD-WAN service. The preferred route is spoke11-p1 to hub-phase1:
# diagnose sys sdwan service6
2. When the receiver initiates IGMP to join group ff15::10, view mroute on Spoke-1 and Hub:
l On Spoke-1:
The RPF idx is connected to hub-phase1, indicating that PIM-SM join message follows SD-WAN service and
is sent to spoke11-p1, and port2 is connected to the receiver.
FGT_B (root)# get router info6 multicast pim sparse-mode mroute ff15::10
IP Multicast Routing Table
......
(*, ff15::10)
RP: 2000:172:16:205::1
RPF nbr: fe80:10:10:15::253
RPF idx: spoke11-p1
Upstream State: JOINED
Local:
port2
Joined:
Asserted:
FCR:
Source: 2000:172:16:205::100
Outgoing:
port2
KAT timer running, 196 seconds remaining
l On the Hub:
We see that hub-phase1 is connected to spoke11-p1 on Spoke-1.
FGT_A (root) (Interim)# get router info6 multicast pim sparse-mode mroute ff15::10
IP Multicast Routing Table
......
(*, ff15::10)
RP: 2000:172:16:205::1
RPF nbr: ::
RPF idx: None
Upstream State: JOINED
Local:
Joined:
hub-phase1
Asserted:
FCR:
...
3. The server starts to send multicast traffic to group ff15::10, and Hub forwards the traffic to Spoke-1 through hub-
phase1.
FGT_A (root) (Interim)# diagnose sniffer packet any 'host ff15::10' 4
interfaces=[any]
filters=[host ff15::10]
0.637174 port5 in 2000:172:16:205::100.38823 -> ff15::10.12345: udp 46 [flowlabel
0x8ea58]
0.637228 hub-phase1 out 2000:172:16:205::100.38823 -> ff15::10.12345: udp 46 [flowlabel
0x8ea58]
4. When the cost of member spoke11-p1 and spoke12-p1 is increased, SD-WAN prefers spoke13-p1.
The PIM-SM join message from Spoke-1 to RP is sent to member spoke13-p1, and multicast traffic fails over
to hub3-phase1 on the Hub accordingly.
l On Spoke-1:
In this example, spoke13-p1, which is connected to hub-phase3, is preferred.
FGT_B (root) (Interim)# diagnose sys sdwan service6
l On the Hub:
Once the cost of spoke11-p1 is increased, multicast traffic fails over to hub2-phase1. Once the cost of
spoke12-p1 is increased, multicast traffic fails over to hub3-phase1.
FGT_A (root) (Interim)# diagnose sniffer packet any 'host ff15::10' 4
interfaces=[any]
filters=[host ff15::10]
....
385.497887 port5 in 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46 [flowlabel
0xa5e3d]
385.497927 hub-phase1 out 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46
[flowlabel 0xa5e3d]
386.497967 port5 in 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46 [flowlabel
0xa5e3d]
386.498258 hub2-phase1 out 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46
[flowlabel 0xa5e3d]
387.498044 port5 in 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46 [flowlabel
0xa5e3d]
...
400.499075 port5 in 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46 [flowlabel
0xa5e3d]
400.499120 hub2-phase1 out 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46
[flowlabel 0xa5e3d]
401.499180 port5 in 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46 [flowlabel
0xa5e3d]
401.499515 hub3-phase1 out 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46
[flowlabel 0xa5e3d]
402.499254 port5 in 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46 [flowlabel
0xa5e3d]
402.499319 hub3-phase1 out 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46
[flowlabel 0xa5e3d]
403.499330 port5 in 2000:172:16:205::100.41944 -> ff15::10.12345: udp 46 [flowlabel
0xa5e3d]
...
5. When spoke13-p1 becomes out of SLA, SD-WAN selects spoke11-p1 as the preferred member.
This change redirects the PIM-SM join message from Spoke-1 to RP towards spoke11-p1, causing the multicast
traffic to failover to hub-phase1 on the Hub.
6. Conversely, when spoke13-p1 is in SLA again, it is prioritized by SD-WAN.
This adjustment redirects the PIM-SM join message from Spoke-1 to RP towards spoke13-p1, triggering a failover
of the multicast traffic to hub3-phase1 on the Hub.
SD-WAN zones can be specified as interfaces in Local In policies, DoS policies, Multicast policies, TTL policies, and
central SNAT maps. This simplifies policy management and improves operational efficiency.
Example
This section includes information about policy and object related new features:
l NGFW on page 246
l Policies on page 247
l Objects on page 277
NGFW
This section includes information about new features related to NGFW policy mode:
l Seven-day policy hit counter on page 246
The hit count for the last seven days is now available for next-generation firewall (NGFW) policies. The hit count offers a
rolling tally of how many times over the previous seven days a policy has been triggered, providing comprehensive,
dynamic insight into policy usage patterns.
11).
1. Check the hit counter for a policy. The following example checks the hit count for the security policy with ID 1:
# diagnose ips pme policy stats
[ 357] vdom:2 policy:1 ""
first hit: 2024-06-05 10:22:56
last hit: 2024-06-12 10:28:38
hit count: 6 (1 0 0 1 1 1 1 1)
...
Policies
FortiOS adds partial support of the Network Prefix Translation (NPTv6) protocol in RFC6296 for IPv6 address
translation, ensuring end-to-end connectivity, address independence, and 1:1 address mapping. It allows the use of
private IPv6 addresses internally while translating them to globally routable IPv6 addresses when communicating with
external networks. It operates at the prefix level by translating the network, prefix portion of an IPv6 address while
leaving the host information unchanged. This enhances network scalability and facilitates efficient IPv6 network
management.
A new NPTv6 type IP pool is introduced which allows an internal prefix of a IPv6 address to be translated to an external
prefix. This enables administrators the freedom to use any internal prefix, but efficiently translate these to the prefix
provided by their provider that can be routed globally.
NPTv6 works on the principle that network translation is accomplished using a stateless approach, and that it is
checksum-neutral at the transport layer. For instance, at the TCP layer, TCP checksums should remain unchanged even
after the IP address has been translated.
In brief, TCP checksum is calculated based on a pseudo-header that includes the source and destination IP address.
When the source address is translated, it needs to be done in a way that offsets the change to keep the checksum
unchanged. This can be accomplished with the following rules:
l For an IPv6 with prefix length of 48-bit or shorter, a 16-bit adjustment can be made on the 4th word (4th hextat) of
the IPv6 address which is the subnet field.
l For an IPv6 with prefix length greater than 48-bit, a 16-bit adjustment can be made on the 5th, 6th, 7th or 8th word of
the IPv6 address.
For example, to translate from an internal prefix of fc00:1::/48 to an external prefix of 2003:db8:1::/48, an “adjustment” of
0xce45 has to be made in the 5th word, by adding 0xce45 to the 16-bit subnet field.
Therefore, the internal address fc00:1::1/48 becomes 2003:db8:1:ce45::1/48.
For more information, see section RFC6296 Section 3 – NPTv6 Algorithmic Specification.
Example
In the following example, an NPTv6 pool will be created and applied to the firewall policy. The packet IPv6 address
translation will then be verified.
3. Verify the session table. The translated IP address shows 2000:172:16:200:fd88::41 after applying the external
prefix and the adjustment.
# diagnose sys session6 list
session6 info: proto=58 proto_state=00 duration=15 expire=45 timeout=0 refresh_dir=both
flags=00000000 sockport=0 socktype=0 use=3
origin-shaper=
reply-shaper=
per_ip_shaper=
class_id=0 ha_id=0 policy_dir=0 tunnel=/ vlan_cos=0/0
state=log may_dirty npu
statistic(bytes/packets/allow_err): org=1096/2/0 reply=1096/2/0 tuples=2
tx speed(Bps/kbps): 0/0 rx speed(Bps/kbps): 0/0
orgin->sink: org pre->post, reply pre->post dev=8->7/7->8
The IPv6 prefix and subnet fields have been translated but the host field remains unchanged.
Mapping of Address and Port with Encapsulation (MAP-E) now supports multiple Virtual Network Embedding (VNE)
interfaces within the same VDOM, allowing for a more versatile network setup. Previously only one VNE interface was
supported.
After upgrading to FortiOS 7.6.0, any existing VNE configurations are converted to a table and retain their previous
names.
In the config system vne-interface command, the set status option is no longer needed and has been
removed.
Full cone Network Address Translation (NAT) support is added for Fixed Port Range (FPR) IP pools. It allows all external
hosts to send packets to internal hosts through a mapped external IP address and port, enhancing connectivity and
communication efficiency. Full cone NAT is also known as Endpoint Independent Filtering (EIF).
To enable full cone NAT, enable the permit-any-host command when configuring the FPR IP pool.
config firewall ippool
edit <name>
set type fixed-port-range
set permit-any-host {enable | disable}
next
end
In this example, a NAT44 FPR IP pool with permit-any-host enabled is created and applied to a policy. The packet is
sent from Client1 to Server1 that hits the policy. The session list is checked for the NAT IP address and port,
172.16.201.3 and 1033. The expectation session list is checked to see that the session will be used to allow access to
the NAT IP address and port from any other external host, such as Server2. The packet sent from Server2 to the NAT
IP address and port is forwarded to Client1.
5. Check that the packet sent from Server2 to the NAT IP address and port number is forwarded to Client1:
# diagnose sniffer packet any 'udp and port 1033 or 20041' 4
interfaces=[any]
filters=[udp and port 1033 or 20041]
12.001145 port1 in 172.16.200.55.4155 -> 172.16.201.3.1033: udp 4
12.001180 port2 out 172.16.200.55.4155 -> 10.1.100.41.20041: udp 4
Administrators can now configure custom port ranges from 1024 to 65535 for the port block allocation (PBA) and fixed
port range (FPR) types of IP pools, enhancing control and adaptability in network configuration.
The config firewall ippool command includes new options:
config firewall ippool
edit <ID>
set type {fixed-port-range | port-block-allocation}
set startport <integer>
set endport <integer>
next
end
l Set Type to Fixed Port Range. The Start port and End port options are displayed
3. Click OK.
HTTP transaction details are logged in a new type of traffic log when HTTP traffic is routed through a proxy. This ensures
comprehensive logging of HTTP interactions for improved monitoring and analysis.
After an HTTP transaction is proxied through the FortiGate, traffic logs of the http-transaction subtype are generated in
addition to the forward subtype log. HTTP transaction logs are based on each transaction, such as an HTTP request and
response pair. When there are multiple HTTP transactions completed over the TCP connection there will be multiple
http-transaction logs and only one forward traffic log.
HTTP transaction logging can be enabled in explicit-web proxy, transparent-web proxy, access-proxy, and proxy-mode
firewall policies.
config firewall proxy-policy
edit 1
set proxy {explicit-web | transparent-web | access-proxy}
logtraffic {utm | all}
set log-http-transaction {enable | disable}
next
end
config firewall policy
edit 1
set inspection-mode proxy
logtraffic {utm | all}
set log-http-transaction {enable | disable}
next
end
Log examples
One http-transaction log is generated for each HTTP transaction. A TCP connection can have multiple HTTP
transactions, so there can be multiple http-transaction logs for one forward traffic log.
When the EICAR test file in the response is blocked by utm-av, utmref information referring to the corresponding
utm-av log is included:
# execute log detail 2 "65515-0"
1 logs found.
1 logs returned.
1: date=2024-05-21 time=20:06:17 eventtime=1716347177536848145 tz="-0700"
logid="0211008192" type="utm" subtype="virus" eventtype="infected" level="warning"
vd="vdom1" policyid=1 poluuid="1e1e0b2e-14c1-51ef-7b4c-6b789be487f2" policytype="proxy-
policy" msg="File is infected." action="blocked" service="HTTP" sessionid=316483733
transid=50331679 srcip=10.1.100.11 dstip=172.16.200.44 srcport=42694 dstport=80
srccountry="Reserved" dstcountry="Reserved" srcintf="port1" srcintfrole="undefined"
dstintf="port3" dstintfrole="undefined" proto=6 direction="incoming"
filename="eicar.com" quarskip="Quarantine-disabled" virus="EICAR_TEST_FILE"
viruscat="Virus" dtype="av-engine" itype="infected"
ref="https://fortiguard.com/encyclopedia/virus/2172" virusid=2172
url="http://172.16.200.44/eicar.com" profile="av" agent="curl/7.68.0" httpmethod="GET"
analyticssubmit="false" crscore=50 craction=2 crlevel="critical"
l Forward traffic log and http-transaction logs for transparent-web proxy policy, access-proxy proxy policy, and proxy-
mode firewall policy:
For HTTPS with explicit-web proxy, there is an additional piece of http-transaction log for each CONNECT request and
response:
3: date=2024-05-21 time=20:34:44 eventtime=1716348884524284243 tz="-0700" logid="0006000026"
type="traffic" subtype="http-transaction" level="notice" vd="vdom1" srcip=10.1.100.11
srcport=46030 dstip=172.16.200.44 dstport=443 sessionid=316483736 transid=50331683
action="accept" policyid=1 policytype="proxy-policy" poluuid="1e1e0b2e-14c1-51ef-7b4c-
6b789be487f2" url="https://172.16.200.44/" agent="curl/7.68.0" duration=0 reqlength=118
resplength=0 rcvdbyte=0 sentbyte=118 scheme="https" hostname="172.16.200.44"
resptype="generated" httpmethod="CONNECT" statuscode="200" reqtime=1716348884 resptime=0
respfinishtime=1716348884 appcat="unscanned"
For HTTPS with certificate-inspection or no inspection, there is only one http-transaction log for each TCP connection
because the encrypted HTTP messages are not decrypted:
l Firewall policy:
2: date=2024-05-23 time=21:38:56 eventtime=1716525535340969183 tz="-0700"
logid="0006000026" type="traffic" subtype="http-transaction" level="notice" vd="vdom1"
srcip=10.1.100.11 srcport=46462 dstip=172.16.200.44 dstport=443 sessionid=70593
transid=1 srcuuid="bdba900e-14c0-51ef-1328-c1b8329857ef" dstuuid="bdba900e-14c0-51ef-
1328-c1b8329857ef" policyid=1 policytype="policy" poluuid="1ab9cbbc-14c1-51ef-55cd-
4b90ff9a117a" url="172.16.200.44" duration=0 reqlength=842 resplength=3100 rcvdbyte=3100
sentbyte=842 scheme="https" hostname="172.16.200.44" resptype="N/A" reqtime=1716525535
resptime=1716525535 respfinishtime=1716525535 appcat="unscanned"
For SOCKS proxy, there is one http-transaction log for each HTTP transaction per TCP connection:
1: date=2024-05-23 time=22:50:34 eventtime=1716529833463518327 tz="-0700" logid="0006000026"
type="traffic" subtype="http-transaction" level="notice" vd="vdom1" srcip=10.1.100.143
srcport=63744 dstip=34.107.221.82 dstport=80 sessionid=1369348358 transid=117441403
srcuuid="bdba900e-14c0-51ef-1328-c1b8329857ef" dstuuid="bdba900e-14c0-51ef-1328-
c1b8329857ef" action="pending" policyid=1 policytype="proxy-policy" poluuid="1e1e0b2e-14c1-
51ef-7b4c-6b789be487f2" url="http://detectportal.firefox.com/success.txt?ipv4"
agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0"
duration=0 reqlength=305 resplength=216 rcvdbyte=7128 sentbyte=20143 scheme="http"
hostname="detectportal.firefox.com" resptype="normal" httpmethod="GET" statuscode="200"
reqtime=1716529833 resptime=1716529833 respfinishtime=1716529833 appcat="unscanned"
UTM logs that do not belong to an HTTP transaction are only associated with the forward traffic log, and not the http-
transaction log:
Only the forward traffic log is associated to the utm-ssl log by the utmref.
l forward traffic log:
1: date=2024-05-23 time=22:01:43 eventtime=1716526903039789335 tz="-0700"
logid="0000000010" type="traffic" subtype="forward" level="notice" vd="vdom1"
srcip=10.1.100.11 srcport=57928 srcintf="port1" srcintfrole="undefined"
dstcountry="Reserved" srccountry="Reserved" dstip=172.16.200.44 dstport=443
dstintf="port3" dstintfrole="undefined" sessionid=1369348243 service="HTTPS"
proxyapptype="web-proxy" proto=6 action="accept" policyid=1 policytype="proxy-policy"
poluuid="1e1e0b2e-14c1-51ef-7b4c-6b789be487f2" trandisp="snat" transip=172.16.200.8
transport=1837 duration=0 wanin=3051 rcvdbyte=3051 wanout=618 lanin=960 sentbyte=960
lanout=4623 appcat="unscanned" utmaction="allow" countssl=2 utmref=65523-0
l http-transaction logs:
2: date=2024-05-23 time=22:01:43 eventtime=1716526903038941661 tz="-0700"
logid="0006000026" type="traffic" subtype="http-transaction" level="notice" vd="vdom1"
srcip=10.1.100.11 srcport=57928 dstip=172.16.200.44 dstport=443 sessionid=1369348243
transid=50331675 action="accept" policyid=1 policytype="proxy-policy" poluuid="1e1e0b2e-
14c1-51ef-7b4c-6b789be487f2" url="https://172.16.200.44/" agent="curl/7.68.0" duration=0
reqlength=38 resplength=185 rcvdbyte=3051 sentbyte=936 scheme="https"
hostname="172.16.200.44" resptype="normal" httpmethod="GET" statuscode="200"
reqtime=1716526903 resptime=1716526903 respfinishtime=1716526903 appcat="unscanned"
3: date=2024-05-23 time=22:01:43 eventtime=1716526903015933382 tz="-0700"
logid="0006000026" type="traffic" subtype="http-transaction" level="notice" vd="vdom1"
srcip=10.1.100.11 srcport=57928 dstip=172.16.200.44 dstport=443 sessionid=1369348243
transid=50331674 action="accept" policyid=1 policytype="proxy-policy" poluuid="1e1e0b2e-
14c1-51ef-7b4c-6b789be487f2" url="https://172.16.200.44/" agent="curl/7.68.0" duration=0
reqlength=118 resplength=0 rcvdbyte=0 sentbyte=118 scheme="https"
hostname="172.16.200.44" resptype="generated" httpmethod="CONNECT" statuscode="200"
reqtime=1716526903 resptime=0 respfinishtime=1716526903 appcat="unscanned"
Support for NAT64 has been added to the fixed port range (FPR) type of IP pool, enabling the configuration of internal
IPv6 ranges in the NAT64 FPR IP pool. This addition is significant because it allows for prefix-based restrictions, which
provides greater control and security over network traffic management.
The config firewall ippool command includes new options when type is set to fixed-port-range and
nat64 is enabled:
config firewall ippool
edit 1
set type fixed-port-range
set nat64 enabled
set source-prefix6 <IPv6 network>
set client-prefix <integer>
...
end
end
NAT64 Enable.
Custom IPv6 Prefix Length Enter the subnet length of a single deterministic NAT64 client.
Example
In this example, an FPR type of IP pool is created with the source-prefix6 is set to 2000:10:1:100::/64 and the
client-prefix-length set to 68. The start and end NAT IPv4 range is 172.16.202.0-172.16.202.3. The IP
pool is applied to a firewall policy. After traffic passes through the firewall policy, the IP translation is verified.
1. Create an IP pool:
config firewall ippool
edit "test-new-fpr64-ippool"
set type fixed-port-range
set startip 172.16.202.0
set endip 172.16.202.3
set startport 1024
set endport 65535
set nat64 enable
set source-prefix6 2000:10:1:100::/64
set client-prefix-length 68
set tcp-session-quota 20
set udp-session-quota 20
set icmp-session-quota 10
next
end
The current port block allocation (PBA) and fixed port range (FPR) IP pool mechanisms use a sequential port selection
algorithm, which assigns the next available non-conflicting port within the specified range. This enhancement introduces
an option for a randomized port selection algorithm, making the allocation process less predictable, which enhances
security.
The config firewall central-snat-map command includes a new option:
config firewall central-snat-map
edit 1
set port-preserve disable
set port-random {enable | disable}
next
end
set port-random {enable | Enable/disable random source port selection for source NAT (default = disable).
disable}
Available when port-preserve is disabled.
In addition, the port-preserve option now supports firewall policies with NAT64/NAT46/NAT66 enabled. Previously
only NAT44 was supported.
The port-preserve and port-random options are mutually exclusive, and both support
firewall policies with NAT44/NAT64/NAT46/NAT66 enabled.
Example
In this example, an FPR type of IP pool is created to use the port range 5245-5372 for SNAT port allocation. A firewall
policy is created with port-preserve disabled, port-random enabled, and the IP pool selected.
Packets are sent from client through the firewall policy on the FortiGate to server1.
2. Configure the firewall policy with port-preserve disabled, port-random enabled, and the IP pool selected:
config firewall policy
edit 44
set status disable
set name "nat44_policy"
set uuid a8d52dfe-8e71-51ef-0bc7-bf5e922f55b5
set srcintf "port2"
set dstintf "port1"
set action accept
set srcaddr "10-1-100-0"
set dstaddr "172-16-200-0"
set schedule "always"
set service "ALL"
set logtraffic all
set auto-asic-offload disable
set nat enable
set port-preserve disable
set port-random enable
set ippool enable
set poolname "test-nat44-fpr-1"
next
end
A default local-in policy has been added with internet service source enabled for Malicious-Malicious.Server, Tor-
Exit.Node, and Tor-Relay.Node ISDB sources. This policy is designed to utilize these three sources to identify known
malicious threat actors and prevent them from accessing any interface on the FortiGate on any service and port.
The new default local-in policy is automatically added when a FortiGate is in factory default setting, or a new VDOM is
created. Resetting your device to factory default settings is not recommended, so you can manually add the policy on
FortiOS versions that support ISDB as a local-in policy source (7.4.4 and higher). See Local-In policy for details.
1. Go to Policy & Objects > Internet Service Database and select the Internet Service tab.
2. Search for Malicious-Malicious.Server, Tor-Exit.Node, or Tor-Relay.Node.
3. Hover over the entry and, in the pop-up, click View/Edit Entries.
The listed addresses are the sources that will be blocked.
Example
In this example, the default local-in policy is used to protect the FortiGate management interface (port1) from large-
scale, brute force attacks originating from various malicious networks.
The following steps will be completed:
1. Enable VDOMS
2. Configure a new VDOM
3. View the default local-in policy
4. Move the management interface to newly created VDOM
Enable VDOMS
You will be logged out of the device when the VDOM mode is enabled.
Most FortiGate devices support 10 VDOMs be default. Many models also support purchasing
a license key to increase the maximum number of VDOMs. Some exceptions may apply.
config vdom
edit mgmt
config system settings
set vdom-type traffic
end
next
end
1. In the mgmt VDOM, go to Policy & Objects > Local-In Policy. If Local-In-Policy is not visible in the tree menu, go to
System > Feature Visibility to enable it.
An interface can only be assigned to one VDOM, and cannot be moved if it is referenced in an existing configuration.
In the GUI, the interface list Ref. column shows if the interface is referenced in an existing
configuration and allows you to quickly access and edit those references.
config global
config system interface
edit port1
set vdom mgmt
next
end
end
Mapping of address and port with encapsulation (MAP-E) can operate in DHCPv6 prefix delegation (DHCPv6-PD)
environments, providing greater flexibility, improved automation, and scalability in network configurations. Previously,
MAP-E utilized the RA IPv6 prefix for deployment; see MAP-E support.
MAP-E mode
edit 1
set prefix-hint ::/56
next
end
end
next
end
# dianose ipv ad list | grep port6
dev=7 devname=port6 flag= scope=0 prefix=64 addr=2400:4050:6::1 preferred=22 valid=45
cstamp=9913 tstamp=6047755
dev=7 devname=port6 flag=P scope=253 prefix=64 addr=fe80::20c:29ff:fe7b:d83b
preferred=4294967295 valid=4294967295 cstamp=6263 tstamp=6263
Fixed IP mode
end
next
end
# diagnose ipv ad list | grep port3
dev=13 devname=port3 flag=P scope=0 prefix=64 addr=2606:f900:8102:301:8000::
preferred=4294967295 valid=4294967295 cstamp=61106 tstamp=61106
dev=13 devname=port3 flag=P scope=253 prefix=64 addr=fe80::e223:ffff:fe67:8e6e
preferred=4294967295 valid=4294967295 cstamp=56882 tstamp=56882
filters=[ip6]
4.319283 2606:f900:8102:301:8000:: -> 2606:f900:8102:302::2: 10.100.100.1 -> 8.8.8.8:
icmp: echo request
4.324193 2606:f900:8102:302::2 -> 2606:f900:8102:301:8000::: 8.8.8.8 -> 10.100.100.1:
icmp: echo reply
5.331276 2606:f900:8102:301:8000:: -> 2606:f900:8102:302::2: 10.100.100.1 -> 8.8.8.8:
icmp: echo request
5.337550 2606:f900:8102:302::2 -> 2606:f900:8102:301:8000::: 8.8.8.8 -> 10.100.100.1:
icmp: echo reply
6.341289 2606:f900:8102:301:8000:: -> 2606:f900:8102:302::2: 10.100.100.1 -> 8.8.8.8:
icmp: echo request
6.345900 2606:f900:8102:302::2 -> 2606:f900:8102:301:8000::: 8.8.8.8 -> 10.100.100.1:
icmp: echo reply
7.351258 2606:f900:8102:301:8000:: -> 2606:f900:8102:302::2: 10.100.100.1 -> 8.8.8.8:
icmp: echo request
7.355743 2606:f900:8102:302::2 -> 2606:f900:8102:301:8000::: 8.8.8.8 -> 10.100.100.1:
icmp: echo reply
8.361257 2606:f900:8102:301:8000:: -> 2606:f900:8102:302::2: 10.100.100.1 -> 8.8.8.8:
icmp: echo request
8.365788 2606:f900:8102:302::2 -> 2606:f900:8102:301:8000::: 8.8.8.8 -> 10.100.100.1:
icmp: echo reply
Objects
The new RSSO dynamic address object subtype can be used in a firewall policy's source and destination fields. It allows
for more granular and precise policies based on RSSO group membership, enhancing security and flexibility when
managing network traffic and enforcing policies.
When the sub-type is rsso, the sso-attribute-value must be set. The IP address of the RADIUS single sign-on
user matching the group value will be loaded to the address object.
next
end
Variable Description
sub-type rsso RSSO address sub-type.
sso-attribute-value <name Name(s) of the RADIUS user groups that this address includes.
(s)>
Example
2. Configure the RADIUS user and user group for the RSSO address:
config user radius
edit "rsso_server"
set rsso enable
set rsso-radius-response enable
set rsso-secret **************
set rsso-flush-ip-session enable
next
end
config user group
edit "rsso_g1"
set group-type rsso
set sso-attribute-value "rsso_group_1"
next
end
5. Check the RSSO dynamic address. In this case, 172.16.200.155 is loaded into the RSSO dynamic address:
# diagnose test application radiusd 6
dynamic addresses total[vd:root]:0.
dynamic addresses total[vd:vdom1]:1.
name, ip_db-total
test-rsso-addr-1, 1
# diagnose test application radiusd 66
dynamic addresses total[vd:root]:0.
dynamic addresses total[vd:vdom1]:1.
name:test-rsso-addr-1, ip_db total:1.
ip, installed
172.16.200.155, 1.
# diagnose firewall dynamic list test-rsso-addr-1
CMDB name: test-rsso-addr-1
test-rsso-addr-1: ID(90)
ADDR(172.16.200.155)
Total IP dynamic range blocks: 0.
Total IP dynamic addresses: 1.
6. Send a packet that hits the policy, then check the session to see that the RSSO dynamic address works as a
destination in the firewall policy:
# diagnose sys session list
session info: proto=6 proto_state=07 duration=6 expire=115 timeout=3600 refresh_dir=both
flags=00000000 socktype=0 sockport=0 av_idx=0 use=3
origin-shaper=
reply-shaper=
per_ip_shaper=
The Fortinet-FortiGuard.SOCaaS Internet service database (ISDB) entry for Fortinet SOCaaS enables policies to be
configured for devices to forward data to SOCaaS collectors without relying on DNS. Eliminating the dependency on
DNS reduces the risk of DNS mapping failures and helps ensure a more reliable and seamless data forwarding
processing.
2. Generate and then check a log generated by traffic hitting the policy:
1: date=2024-10-29 time=17:52:49 eventtime=1730249569310005321 tz="-0700"
logid="0000000013" type="traffic" subtype="forward" level="notice" vd="root"
srcip=10.1.100.42 srcport=38380 srcintf="wan2" srcintfrole="lan" dstip=66.35.19.120
dstport=514 dstintf="wan1" dstintfrole="undefined" srcuuid="70a3388c-dfec-51ea-f8dd-
88267a721f36" srccountry="Reserved" dstinetsvc="Fortinet-FortiGuard.SOCaaS"
dstcountry="United States" dstregion="California" dstcity="Sunnyvale" dstreputation=5
sessionid=474401 proto=6 action="close" policyid=99 policytype="policy"
poluuid="ac8e35a2-dffd-51ea-9df6-e3860c663d3b" policyname="ISDB_Policy"
service="Fortinet-FortiGuard.SOCaaS" trandisp="snat" transip=172.16.200.10
transport=38380 appcat="unscanned" duration=2 sentbyte=300 rcvdbyte=172 sentpkt=5
rcvdpkt=4 mastersrcmac="00:0c:29:6e:3a:47" srcmac="00:0c:29:6e:3a:47" srcserver=0
This section includes information about security posture and EMS connector related new features:
l Share ZTNA information through the EMS connector on page 283
FortiClient EMS 7.2.5 or later, or 7.4.1 or later is required for this feature.
Previously, all TCP and SaaS applications that required a ZTNA destination on FortiClient had to first be manually
configured on FortiClient or FortiClient EMS. With this enhancement, FortiGate can share ZTNA information, such as
ZTNA VIP addresses and application addresses and ports, with the EMS connector. On FortiClient EMS, the configured
ZTNA TCP and SaaS applications are pulled into the ZTNA application catalog, and can be to ZTNA destinations without
any additional configuration. This streamlines the deployment of ZTNA applications and rules between FortiGate and
FortiClient, and reduces errors from manual configurations.
For more information about this feature, see Share ZTNA application configurations with FortiClient EMS.
Application gateway
This section includes information about application gateway related new features:
l ZTNA agentless web-based application access 7.6.1 on page 283
A ZTNA web portal is now available to provide end-user access to applications without FortiClient or client certificate
checks. The ZTNA portal handles authentication and authorization of traffic destined for the protected resources. It is
implemented entirely in WAD.
When end-users connect to the ZTNA web portal, they are directed to a login page:
Once logged in, end-users can access bookmarks defined by the administrator:
For web applications, the client must resolve the FQDN to the ZTNA portal VIP. In addition, when accessing the web
application, end users are presented with the certificate configured on the ZTNA portal VIP instead of the certificate on
the end web server. Hence, the certificate requires the correct Subject Alternate Name(s) to avoid browser certificate
errors.
CLI syntax
Configure an access-proxy type of VIP. Disable client-cert so that it is not checked when an agentless client
connects.
config firewall vip
edit <name>
set type access-proxy
set server-type https
set extip <ip address>
set extintf <interface>
set client-cert disable
set extport <port>
set ssl-certificate <certificate>
next
end
Configure an access-proxy virtual host. End-users will connect to this destination to access the ZTNA web portal.
Disable client-cert for this virtual host.
config firewall access-proxy-virtual-host
edit "ztna-web-portal-fqdn"
set host < web portal host name or ip >
set client-cert disable
next
end
Configure an authentication scheme. Then configure an authentication rule with the new protocol ztna-portal.
config authentication rule
edit <rule>
set protocol ztna-portal
set active-auth-method < auth scheme >
next
end
set vip <vip name> The access-proxy VIP associated with this portal.
set host <virtual host The access-proxy virtual host object and FQDN defined for accessing this portal.
name> This virtual host object should not conflict with other virtual host objects used in
TCP forwarding and HTTP web services or with the SAML SP host.
set auth-portal {enable | Enable/disable the authentication portal.
disable}
set vip6 <virtual IPv6 The access-proxy VIP6 associated with the ZTNA server and applications that
name> this portal is allowing.
Not all options are listed. Some options are available only for certain types of applications.
Within the proxy-policy (full ZTNA policy), a new proxy type is added called ztna-proxy. Configure your proxy-policy to
map to your web-portal.
config firewall proxy-policy
edit <id>
set proxy ztna-proxy
set active-auth-method <authentication rule>
set ztna-proxy <web-portal>
…
next
end
Example
This example demonstrates connecting to a ZTNA web portal to gain access to protected resources. Authentication is
performed with LDAP.
Prerequisites:
next
end
6. Create a full ZTNA policy (proxy-policy) to allow access to the new VIP:
config firewall proxy-policy
edit 0
set name "ZTNA-web-portal"
set proxy ztna-proxy
set ztna-proxy "ztna-web-portal-ldap"
set srcintf "any"
set srcaddr "all"
set dstaddr "all"
set action accept
set schedule "always"
set logtraffic all
next
end
Verification:
4. Click Webserver to access s2.ztnademo.com. A new tab opens up to the web page.
5. Check the certificate to confirm it is signed by the CA certificate used in the VIP configurations.
6. On the FortiGate, go to Log & Report > ZTNA Traffic to view the latest traffic log. Alternatively, use these commands
to view the logs from CLI:
# execute log filter field subtype ztna
7. On the ZTNA Portal, connect to RDP. When prompted enter the credentials.
8. Once successfully connected, users can press F8 for additional controls.
A working connection will output the debugs indicating the web-portal matched the proper gateway. Then accessing the
bookmark will output debugs for matching the bookmark.
GET
/XX/YY/ZZ/webservice?bmgroup=bookmark&bmname=Webserver&cookie=9DC408DF3F32C8805385A1204DED7F
81 HTTP/1.1
Host: s2.ztnademo.com
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/131.0.0.0 Safari/537.36
accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q
=0.8,application/signed-exchange;v=b3;q=0.7
sec-fetch-site: same-site
sec-fetch-mode: navigate
sec-fetch-user: ?1
sec-fetch-dest: document
sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
referer: https://web-portal.ztnademo.com/
accept-encoding: gzip, deflate, br, zstd
accept-language: en-US,en;q=0.9
cookie: ZTPORTAL-EP-w8ICkTaqA8_EMoSCNDe_
gyTAXEUw=430AAAAAAIAAAAAAAAAKF1h1WrrQAbAnodk0tYbtu1vnZZ-qlaOhL_y-
UZIXxPCwqIplM3ujQ==DAAAAFB0iNTviC6zS6nUx9VNZ3yWCbkG
priority: u=0, i
General
This section includes information about general ZTNA related new features:
l ZTNA support for UDP traffic on page 293
l ZTNA support for SaaS application access control in the GUI on page 306
l Include EMS tag information in traffic logs on page 308
l ZTNA single sign-on with Entra ID 7.6.3 on page 308
l ZTNA tags on 2 GB entry-level platforms in IP/MAC-based access control 7.6.3 on page 317
ZTNA now supports UDP traffic from FortiClient 7.4.1 and later endpoints. When UDP traffic to a destination is detected,
FortiClient forms a UDP connection over QUIC to the FortiGate ZTNA gateway. After authentication, security posture
check, and authorization, FortiGate forms a connection with the destination and the end-to-end UDP traffic passes
through.
CLI syntax
In order to support UDP traffic forwarding, the FortiGate VIP associated with the ZTNA server configurations must have
h3-support enabled.
config firewall vip
edit <ZTNA VIP>
set type access-proxy
set h3-support {enable | disable}
next
end
The remaining UDP applications can be configured under the firewall access-proxy configuration:
config firewall access-proxy
edit <name>
set vip <ZTNA VIP>
config api-gateway
edit 1
set url-map "/tcp"
set service tcp-forwarding
config realservers
edit 1
set address <UDP application address>
set mappedport <UDP application port(s)>
next
end
next
end
next
end
From the FortiClient EMS server, you must change the ZTNA applications to enable UDP.
To enable UDP:
1. From Fabric & Connectors > ZTNA Application Catalog, locate the applications retrieved from the FortiGate.
2. On the right side of the entry, click Edit.
3. In the Edit Application popup, select Enable UDP.
When applying the application to a ZTNA Destination Profile, confirm that the protocol displays both TCP & UDP.
Example
When an application on an endpoint initializes UDP traffic, FortiClient forms a UDP connection over QUIC to the
FortiGate ZTNA gateway (10.0.3.10:9043). After authentication, security posture check, and authorization, FortiGate
forms a UDP connection with the destination (quic.nginx.org), and the end-to-end UDP traffic passes through, allowing
the endpoint to reach three different destinations through UDP.
To configure FortiGate:
1. From Fabric & Connectors > ZTNA Application Catalog, locate each application retrieved from the FortiGate.
2. Edit each application, and select Enable UDP.
3. Go to Endpoint Profiles > ZTNA Destinations, and edit the Default profile.
4. Under Rules, click +Add. Select the applications learned from the FortiGate, and then click Finish.
5. Click Save to save this profile, and push changes to managed FortiClients.
To verify:
www.fortinet.com.fortiad.info.
[2024-10-18 13:14:28.7635697] [fortitcs] proxy-src: 10.0.3.2:62261
[2024-10-18 13:14:28.7635982] [fortitcs] proxy-dst: 8.8.8.8:53
[2024-10-18 13:14:28.7636256] [fortitcs] handleConnection: gatewayIP=10.0.3.10
gatewayPort=9043 encryption=0redirect=0 fqdn_name= path=tcp
[2024-10-18 13:14:28.7636570] [fortitcs] tunnKey: 8.8.8.8:53-10.0.3.2:62261-
10.0.3.10:9043
[2024-10-18 13:14:28.7637298] [fortitcs] Establish: &{0 10.0.3.10:9043 tcp 8.8.8.8:53
udp }
[2024-10-18 13:14:28.7637620] [fortitcs] strPort: 53
[2024-10-18 13:14:28.7638829] [fortitcs] Request: GET
/tcp?address=8.8.8.8&port=53&proto=udp HTTP/1.1
Host: 10.0.3.10:9043
Accept: */*
User-Agent: Forticlient
c. From FortiGate, go to Log & Report > ZTNA Traffic, and view log details for the ZTNA-webserver:
b. From Server:
# iperf3 -s -V -p 5001
…
[2024-10-18 13:55:45.4413329] [fortitcs] handleConnection: end
[2024-10-18 13:55:45.4414211] [fortitcs] New stream established, cancel closing
gateway 10.0.3.10:9043
[2024-10-18 13:55:45.4703313] [fortitcs] Write to stream id: 3len: 4
[2024-10-18 13:55:45.5103964] [fortitcs] proxy-src: 172.16.7.3:51211
[2024-10-18 13:55:45.5105414] [fortitcs] proxy-dst: 10.88.0.1:5001
[2024-10-18 13:55:45.5106482] [fortitcs] handleConnection: gatewayIP=10.0.3.10
gatewayPort=9043 encryption=0redirect=0 fqdn_name= path=tcp
[2024-10-18 13:55:45.5107198] [fortitcs] tunnKey: 10.88.0.1:5001-172.16.7.3:51211-
10.0.3.10:9043
[2024-10-18 13:55:45.5107829] [fortitcs] Found existing tunnel for [src:
172.16.7.3:51211 dst: 10.88.0.1:5001 gw: 10.0.3.10:9043]
Using default datagram length of 8000 causes the stream to fail due to exceeding
datagram length, as seen in the fortitcs_2.log:
[2024-10-18 13:53:59.8142919] [fortitcs] Stream ID: 0
[2024-10-18 13:53:59.8143302] [fortitcs error] Failed to send
message: DATAGRAM frame too large
[2024-10-18 13:53:59.8143734] [fortitcs] handleConnection: end
Added GUI support for specifying SaaS applications within the service/server mapping inside a ZTNA server object. This
enhanced feature allows users to create and manage the ZTNA server with a SaaS service type more intuitively and
efficiently, providing a more user-friendly experience.
6. Click OK. The SaaS options are added to the ZTNA server.
By enabling ZTNA EMS tag checking in a firewall policy, you can include EMS tag information in the traffic log.
When primary and secondary ZTNA EMS tag checking is enabled using address groups, the Primary EMS tag and
Secondary EMS tag fields will be included in the GUI traffic logs.
Likewise, the emstag and emstag2 fields will be included in the CLI traffic logs.
10: date=2024-05-23 time=21:22:41 eventtime=1716524560990015176 tz="-0700"
logid="0000000013" type="traffic" subtype="forward" level="notice" vd="root"
srcip=21.21.21.120 srcport=56140 srcintf="port2" srcintfrole="undefined"
dstip=172.16.200.139 dstport=8013 dstintf="port3" dstintfrole="undefined" emstag="grp_ztna_
tag" emstag2="grp_classification_tag" srccountry="United States" dstcountry="Reserved"
sessionid=33027 proto=6 action="client-rst" policyid=4 policytype="policy"
poluuid="1c129108-d6e1-51ec-b73c-aca3c493ce64" policyname="0000" service="tcp/8013"
trandisp="snat" transip=172.16.200.4 transport=56140 duration=5 sentbyte=1063 rcvdbyte=1255
sentpkt=7 rcvdpkt=7 fctuid="6CB4E52E85BE45E8A9ADDE54E89A6B38" unauthuser="frank"
unauthusersource="forticlient" srcremote=172.18.62.4 appcat="unscanned"
In this enhancement, Windows users signed in to their workstations using Microsoft Entra ID domain are automatically
allowed access to ZTNA-protected TCP resources by using the same IdP login information. FortiGate queries Entra ID
using the client’s login token to look up and validate the user. This allows single sign-on (SSO) and eliminates the extra
step for each user to authenticate when they access a TCP application.
Prerequisites include:
l FortiClient 7.4.3 and later
l FortiOS 7.6.1 and later
l Domain configured on Microsoft Entra ID
l Enterprise application configured on Microsoft Entra ID
l Various permissions enabled in Microsoft Entra ID
l Windows clients that are able to join to the Entra ID domain
Entra ID configurations
1. Click Create your own application, and select the Register an application to integrate with Microsoft Entra ID (App
you're developing) option.
2. Open the App registrations page, and locate your app. On the Overview page, you can obtain the Application
(client) ID and the Directory (tenant) ID.
In the this example, the values from the ZTNA_entra_ID app can be applied to the FortiClient EMS ZTNA Destinations
profile in later steps:
Users and groups can be assigned to the enterprise application. In this example, the user
[email protected] belongs to a group assigned to the ZTNA_entra_ID app.
The user belongs to the Entra ID domain that is used by the user workstation to join the domain.
In FortiClient EMS 7.4.3 and later, the client ID and tenant ID can be specified in the azure_app attribute in XML.
Not shown here, but TCP forwarding destinations are defined in the ZTNA destination profile.
Once logged in and FortiClient is registered to EMS, click the user avatar to display information about the user, including
the login domain name.
FortiGate configuration
FortiGate ZTNA server configurations remain the same. EMS connectivity and ZTNA server configurations are not
explained in this topic. The major difference in FortiGate configurations is in the authentication scheme, rule, and user
group. Therefore, the configuration process starts with authentication scheme and rule.
1. Go to Policy & Objects > Authentication, and click the Authentication Schemes tab.
2. Click Create new.
3. Enter the name.
4. For method, click + and select the method Microsoft Entra Single Sign-On.
5. Create a new User External Identity Provider:
a. Click the drop-down and click Create.
b. Enter a name.
c. Leave the default values of Microsoft Graph and v1.0, which are enabled by default.
d. Click OK.
6. Select the newly created External Identity Provider.
7. Click OK to save.
8. Click the Authentication Rule tab. Click Create new.
a. Configure the following:
Field Value
Protocol HTTP
SSO Authentication Scheme Enabled. Set to the name of the new authentication scheme
b. Click OK to save.
Next, you must configure the user group that is authorized to access the protected TCP application. The user group is
queried against Entra ID using Microsoft Graph v1.0.
1. Go to User & Authentication > User Groups, and click Create new.
2. Enter a name.
3. Keep type as default (Firewall).
Finally, you must apply the user group to a ZTNA policy. In this example, a full ZTNA policy is configured.
1. Go to Policy & Objects > Proxy Policy, and click Create new.
2. Configure the following:
Field Value
Type ZTNA
Incoming Interface Interface used by FortiGate to listen for the ZTNA connections.
Source Address: Specify the source, or select all to allow all traffic sources.
User: select the user group that was created in the previous step.
Schedule always
Action ACCEPT
In this example, a user logged in to Windows as [email protected] in the AzureAD domain attempts
to access a host 172.16.200.209:22 through SSH.
As the screenshot shows, the user can connect to the server through SSH without logging in again.
From the FortiGate, go to Log & Report > ZTNA Traffic to view corresponding traffic logs. Alternatively, use the CLI to
run:
# execute log filter field subtype ztna
# execute log display
1: date=2024-11-18 time=14:46:53 eventtime=1731970013042933838 tz="-0800" logid="0005000024"
type="traffic" subtype="ztna" level="notice" vd="vdom1" srcip=10.1.100.214 srcport=51765
srcintf="port2" srcintfrole="lan" dstcountry="Reserved" srccountry="Reserved"
dstip=172.18.62.66 dstport=4443 dstintf="port1" dstintfrole="lan" sessionid=100630
service="tcp/4443" proxyapptype="ztna-proxy" proto=6 action="accept" policyid=3
policytype="proxy-policy" poluuid="5a72570a-932a-51ef-4e9e-a2d01c654769" policyname="fzt"
trandisp="dnat" tranip=172.16.200.209 tranport=22 appcat="unscanned" duration=121
user="[email protected]" group="aad_group" gatewayid=2 vip="ztna_4"
accessproxy="ztna_4" clientdeviceid="0D48C06390CA42D78158BE90C480A3F0"
clientdevicemanageable="manageable" clientdeviceems="FCTEMS8821001322" clientdevicetags="ZT_
PO_AV_ENABLED/ZT_OS_WIN/ZT_FILE_TESTFILE/ZT_EMS_MGMT/all_registered_clients"
clientcert="yes" emsconnection="online" wanin=1729 rcvdbyte=1729 wanout=1412 lanin=6820
sentbyte=6820 lanout=4279 fctuid="0D48C06390CA42D78158BE90C480A3F0" unauthuser="ZTNAuser"
unauthusersource="forticlient" srcdomain="fosdevqa.onmicrosoft.com" srcremote=204.101.161.19
Entry-level platforms with 2 GB memory now support ZTNA tags in IP/MAC-based access control. Once registered with
the EMS server, they can synchronize posture tags and IP/MAC addresses for use in firewall policies.
The following settings can now be configured from CLI:
config firewall policy
edit <id>
ZTNA options are not available in the GUI until the CLI has been configured. Once ZTNA has been enabled and the tags
configured for the policy in the CLI, the ZTNA Security posture tags are available in the GUI.
Likewise, client access will be filtered by the IP/MAC address resolved from the ZTNA EMS tag.
This section includes information about security profile related new features:
l Antivirus on page 319
l Web filter on page 323
l IPS on page 331
l Data loss prevention on page 334
l Application control on page 339
l Virtual patching on page 341
l Others on page 348
Antivirus
FortiOS antivirus supports Microsoft OneNote files through the content disarm and reconstruction (CDR) feature. This
allows the FortiGate to sanitize these files by detecting and removing active content, such as hyperlinks and embedded
media, while preserving the text. This feature provides an additional tool for network administrators to protect users from
malicious documents.
5. Click OK.
6. Review the logs:
l In Log & Report > Security Events > Logs, the content disarm of Microsoft OneNote files are listed.
l In the logs, the content disarm of Microsoft OneNote files are listed:
1: date=2024-02-15 time=13:41:29 eventtime=1708033288658288261 tz="-0800"
logid="0205009240" type="utm" subtype="virus" eventtype="content-disarm"
level="warning" vd="vdom1" policyid=1 poluuid="12703e08-bc4a-51ed-a0bd-185c7e368bef"
policytype="policy" epoch=1499437875 eventid=2 msg="File was disarmed by Content
Disarm engine." action="content-disarmed" service="HTTP" sessionid=4321
srcip=10.1.100.18 dstip=172.16.200.44 srcport=47632 dstport=80 srccountry="Reserved"
dstcountry="Reserved" srcintf="port2" srcintfrole="undefined" dstintf="port1"
dstintfrole="undefined" srcuuid="dfcbd5b6-bc49-51ed-1617-cf3ea170cee5"
dstuuid="dfcbd5b6-bc49-51ed-1617-cf3ea170cee5" proto=6 direction="incoming"
filename="with_multiple_insert_files.one" checksum="8d077b7"
url="http://172.16.200.44/content_disarm/OneNote/with_multiple_insert_files.one"
profile="av"
analyticscksum="4fab69475ede27c359ba7f1b3eab2555a1faa471e2664a4d8e48e31e67333110"
contentdisarmed="disarmed" cdrcontent="office-embedded-object" rawdata="[RESP]
Content-Type=application/onenote" crscore=10 craction=2 crlevel="medium"
FortiOS now offers stream-based antivirus scanning in flow mode for HTML and Javascript files with AV engine 7.0. With
this enhancement, the AV engine determines the necessary amount of file payload to buffer and scans the partial buffer
in certain instances, eliminating the need to cache the entire file, and potentially improving memory usage.
Prior to this enhancement, flow AV operates in a hybrid mode where the IPS engine will attempt an in-process AV scan
by default. If the built-in AV engine in the IPS process indicates a full scan is required, the file is sent to the scanunit
process for a full scan. In this scenario, the whole file is cached before scanunit can begin scanning the file.
With this stream-based AV scanning enhancement, the built-in AV engine in the IPS process can attempt to scan HTML
and Javascript files as it buffers the file. This provides better performance and potentially less memory usage overall
compared to a full scan.
The full antivirus scanning method is retained for file types and configurations unsupported by stream-based scanning.
The following table summarizes the types of scans and when they are automatically used:
Default antivirus l Automatically uses stream-based scanning in flow mode for HTML and Javascript files.
scan l Automatically scans other supported files using the flow DB.
l Triggers a legacy scan for unsupported configurations and file types.
Full antivirus scan l Automatically used for files types unsupported by default antivirus scans.
l Automatically used when any of the following antivirus scanning features are enabled:
l Machine learning-based malware detection (set machine-learning-
detection)
l Extreme antivirus database (set use-extreme-db)
l Antivirus PUP/PUA grayware checks
l Mobile malware database (set mobile-malware-db)
l External block list (set external-blocklist)
l EMS threat feed
l FortiGuard outbreak prevention
l Automatically used when any of the following scanning features are used:
l Data loss prevention (DLP)
l File filter
Example
When the default antivirus scan is used, the AV engine uses stream-based scanning to partially buffer the file and scan
it:
The above debug is taken while a user attempts to download a EICAR file. Partial buffering occurred and the file is
scanned inside the IPS engine.
When the default antivirus scan (stream-based scanning) cannot be used for a file, the full antivirus scan is used, and the
IPS engine buffers the entire file before sending it to scanunit for scanning:
# diagnose debug application ipsengine 0x1000
# diagnose sys scanunit debug all
# diagnose debug enable
...
[flav-496] [41]: quickscan_close() flav_ctx=0x7fdfc41a1000, rc = -7
[flav-496] [41]: file requires fullscan
[flav-496] attempting switch to fullscan
[flav-496] succesfully switched to fullscan
[flav-496] got FlowAV fullscan request: query_id=41 view_id=3 file_size=12939
[flav-496] quickscan_destroy(), flow_writes=10, flow_bytes=12939, flav_ctx=0x7fdfc41a1000
su 2388 open
The Flow AV statistics monitor can be used to view whether the default or full (legacy) scan method was used:
# diagnose test app ipsmonitor 24
Web filter
This section includes information about web filter related new features:
l Introduce URL risk-scores in determining policy action 7.6.1 on page 323
In this enhancement, risk level rating is added to the FortiGuard URL rating service. A FortiGate can query the rating
service to retrieve the risk score for a URL. This risk score rates the likelihood that a website has malicious intent. It
combines the results of machine learning models and human analysis together to predict how likely a given URL is
malicious.
The risk score returned from FortiGuard is a value from 0-100, where:
0 Unrated The URL does not exist in FortiGuard DB or the risk score of the URL
is unknown.
The FortiGate can utilize this risk score and risk level in two different ways.
1. In a web filter profile, a risk level can be associated with the action Block or Monitor. When traffic hits a policy with
the web filter profile applied, the URL will be used to query the FortiGuard URL rating service. If the risk score
matches a level defined in the profile, the action is taken on that website.
The firewall policy must use proxy-based inspection. Either certificate or deep inspection
will work with this feature.
2. In an explicit or transparent web proxy, a proxy-policy can be configured with a risk level. The risk level becomes a
matching criteria for the policy.
Furthermore, the risk score range associated with each predefined level above cannot be modified on the FortiGate.
However, new risk levels can be created with a custom range. These risk levels can be used within a web filter profile or
within a proxy-policy.
Tie-breaker
In a web filter profile, when both risk level and web filter category are used, the action for the matched risk level will be
ranked against the action for the matched web category.
Actions have the following weight order:
1. Block
2. Warning (Authenticate)
3. Monitor
4. Allow
When the action resulting from the risk level query and web filter category query return different actions, the action higher
in the weight order will be performed. For example, a block and a warning action will result in the page being blocked.
When the actions returned are the same, then that action will be applied, and the replacement message and UTM log will
indicate the decision was made by web filter category check.
Finally, if multiple risk levels are matched within a web filter profile, the action that has the higher weight will be applied.
A risk score can be overridden by a local risk-score override value. This override applies to a single URL specified in the
object name.
CLI Syntax
The follow CLI syntax are included for introducing URL risk-scores to determine policy action:
l Risk level configuration in a web filter profile:
config webfilter profile
edit <name>
set feature-set proxy
config ftgd-wf
unset options
config risk
edit <id>
set risk-level <pre-defined or custom level>
set action {block | monitor}
set log {enable | disable}
next
end
end
next
end
Examples
www.example.com 58 Moderate
www.httpbin.org 46 Low
In the web filter examples, the profile is applied to a firewall policy that utilizes proxy-based inspection and deep
inspection.
Example 2: Overriding the URL's FortiGuard risk score with local risk score
To override the URL's FortiGuard risk score with local risk score:
next
end
end
set log-all-url enable
next
end
The low risk-level is added to the web filter profile, with the action monitor.
When a client accesses www.example.com, the URL is allowed.
end
end
set log-all-url enable
next
end
Example 4: Matching an explicit web proxy policy by the URL’s risk level
When a client accesses www.example.com, no proxy policy is matched. The URL is blocked.
IPS
As cyber threats become increasingly sophisticated, traditional signature-based detection is struggling to keep up. To
improve it, AI and machine learning-based models are trained on features extracted during protocol decoding, such as
HTTP traffic. These models act as classifiers, distinguishing exploits from clean traffic through supervised learning.
Instead of applying machine learning (ML) models blindly across all traffic, we will first use signatures for preliminary
filtering, allowing AI-based detection to be more targeted and efficient. This hybrid approach will reduce false positives
while maintaining high performance.
CLI syntax
The AI/Machine Learning IPS Definitions package is downloaded by FortiOS from FortiGuard through
FortiGuard updates. Devices with active IPS subscription can download this package. The package can be viewing in
the diagnose autoupdate versions output.
# diagnose autoupdate versions | grep -A 7 AI
The IPS machine learning database version is displayed in the output of get system status command.
# get system status
The IPS machine learning rules can be displayed in the output of get ips rule status command. For example,
looking up rule 57293 returns the following:
# get ips rule status | grep -B 2 -A 16 57293
rule-name: "Backdoor.Cobalt.Strike"
rule-id: 57293
rev: 0.000
date: 2025-03-12 09:00:00
action: pass
status: enable
log: disable
log-packet: disable
severity: 3.high
service: TCP, HTTP
location: client
os: All
application: All
rate-count: 0
rate-duration: 0
rate-track: none
rate-mode: continuous
Example
In the following example, AI and ML-based IPS detection is implemented on a regular firewall policy. As the IPS machine
learning detection runs alongside traditional IPS signature detection, the configuration of the IPS sensor remains the
same.
1. Configure an IPS sensor with machine learning signature Backdoor.Cobalt.Strike set to block:
config ips sensor
edit "MI-test"
config entries
edit 1
set rule 57293
set status enable
set action block
next
end
next
end
...
[699@214]ips_process_event: ctx 14: 6 => 2
[699@214]ips_process_event: ctx 14: 2 => 4
[699@214]ips_ml_classify_internal: model=0 labels=[0.9960013, 0.0]@0=0.9960013
[699@214]ips_match_rule: pattern matched 57293,99455: Backdoor.Cobalt.Strike
[699@214]ips_match_rule: matched rule 57293 99455 Backdoor.Cobalt.Strike (weight:0)
[699@214]ips_match_candidates: set best rule 57293 99455 Backdoor.Cobalt.Strike
[699@214]ips_set_pkt_verdict: action=DROP
[699@214]ips_set_pkt_verdict: turn tcp drop to DROP_SESSION
[699@214]ips_report_alert_va_internal: v_id=57293, a_id=99455, log=1, log_pkt=1
[699@214]ips_log: id=57293 conf=0x44, action=1
[699@214]ips_log_packet: aid=99455 log=0xb
[699@214]match_ips: disarm ftgd queries when request is to be blocked.
[699@214]ips_process_event: ctx 14: 4 => 3
[699@214]ips_handle_pkt_verdict: drop a session, size=296
[699@214]ips_session_sched_release: serial=7429 close session 0x7f8a84751018, reason 0
[699@214]ips_process_event: ctx 14: 3 => 5
[699@-1]ips_dsct_http_prep_release_sess: sess 214: http release proxy layer
To filter the debug logs to only display the bolded results, enter diagnose ips debug
enable ml instead.
This section includes information about data loss prevention (DLP) related new features:
l FortiGuard managed DLP dictionaries on page 334
Three confidence levels are added to the DLP signature package retrieved from FortiGuard. Users can select a
FortiGuard dictionary with varying confidence levels based on their specific requirements.
l The high level provides maximum precision to minimize false positives.
l The medium level balances match quantity and precision.
l The low level captures the most matches, but may result in more false positives.
A valid DLP license is required to obtain the latest package.
To see the available confidence levels for a dictionary, go to Security Profiles > Data Loss Prevention, select the
Dictionary tab, and then edit the dictionary:
When applying a FortiGuard built-in dictionary to a custom sensor, the dictionary with the highest confidence level is
selected by default.
The confidence level of a dictionary applied to a custom sensor can be adjusted by editing the entry:
In these use case examples, various Canadian Social Insurance Number (SIN) formats are tested at different confidence
levels using different protocols.
SIN format Matching criteria: regular Matching criteria: regular Matching criteria: regular
expression, data expression, data expression, data
validation validation SIN format validation, SIN format
validation validation, Match-around
data
To verify that a FortiGuard dictionary with the low confidence level will block matching message through
an HTTPS post:
1. Configure a DLP profile with a DLP sensor that uses the Canadian SIN card dictionary (fg-can-natl_id-sin-
dict) DLP dictionary with the Confidence level set to Low and then use the profile in a policy.
2. Test that an HTTPS message containing a SIN is blocked. DLP Test > HTTPS Post can be used to send a test
message:
3. Go to Log & Report > Security Events and view the Data Loss Prevention logs matching the can-natl_id-sin-dict-low
dictionary.
4. Check the raw logs:
1: date=2024-05-29 time=16:55:27 eventtime=1717026926501493215 tz="-0700"
logid="0954024576" type="utm" subtype="dlp" eventtype="dlp" level="warning" vd="vdom1"
ruleid=1 rulename="sensor_can_sin_low" dlpextra="Sensor 'sensor_can_sin_low' matching
any: ('g-fg-can-natl_id-sin-dict-low'=1) >= 1; match." filtertype="sensor"
filtercat="message" severity="medium" policyid=1 poluuid="a084e3dc-1d48-51ef-5286-
940d89557186" policytype="policy" sessionid=64304 epoch=2100732550 eventid=1
srcip=10.1.100.241 srcport=34184 srccountry="Reserved" srcintf="port2"
srcintfrole="undefined" srcuuid="5a9d01f6-1d48-51ef-1c5f-c5a49f106988"
dstip=35.209.95.242 dstport=443 dstcountry="United States" dstintf="port1"
dstintfrole="undefined" dstuuid="5a9d01f6-1d48-51ef-1c5f-c5a49f106988" proto=6
service="HTTPS" filetype="N/A" direction="outgoing" action="block"
hostname="dlptest.com" url="https://dlptest.com/https-post/" agent="Mozilla/5.0 (X11;
Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
httpmethod="POST" referralurl="https://dlptest.com/https-post/" profile="customer_can_
sin"
To verify that a FortiGuard dictionary with medium confidence level will block matching message
through a FTPS post:
1. Configure a DLP profile with a DLP sensor that uses the Canadian SIN card dictionary (fg-can-natl_id-sin-
dict) DLP dictionary with the Confidence level set to Medium and then use the profile in a policy.
2. Test that posting a file that contains 193849270 is blocked.
3. Go to Log & Report > Security Events and view the Data Loss Prevention logs matching the can-natl_id-sin-dict-
med dictionary.
To verify that the FortiGuard dictionary with a high confidence level will block matching message
through an SMTP post:
1. Configure a DLP profile with a DLP sensor that uses the Canadian SIN card dictionary (fg-can-natl_id-sin-
dict) DLP dictionary with the Confidence level set to High and then use the profile in a policy.
2. Test that sending email with an attached file that contains sin# 193849270 is blocked.
3. Go to Log & Report > Security Events and view the Data Loss Prevention logs matching the can-natl_id-sin-dict-
high dictionary.
4. Check the raw logs:
1: date=2024-05-30 time=11:37:18 eventtime=1717094238851929893 tz="-0700"
logid="0954024576" type="utm" subtype="dlp" eventtype="dlp" level="warning" vd="vdom1"
ruleid=3 rulename="sensor_can_sin_high" dlpextra="Sensor 'sensor_can_sin_high' matching
any: ('g-fg-can-natl_id-sin-dict-high'=1) >= 1; match." filtertype="sensor"
filtercat="file" severity="medium" policyid=1 poluuid="a084e3dc-1d48-51ef-5286-
940d89557186" policytype="policy" sessionid=96838 epoch=1455065196 eventid=2
srcip=10.1.100.171 srcport=51141 srccountry="Reserved" srcintf="port2"
srcintfrole="undefined" srcuuid="5a9d01f6-1d48-51ef-1c5f-c5a49f106988"
dstip=172.16.200.175 dstport=25 dstcountry="Reserved" dstintf="port1"
dstintfrole="undefined" dstuuid="5a9d01f6-1d48-51ef-1c5f-c5a49f106988" proto=6
service="SMTP" filetype="unknown" direction="outgoing" action="block"
from="[email protected]" to="[email protected]"
sender="[email protected]" recipient="[email protected]"
subject="Canadian SIN" attachment="yes" filename="sin.txt" filesize=70
profile="customer_can_sin"
Application control
This section includes information about new features related to application control:
l Introducing domain fronting protection on page 339
FortiOS now protects against domain fronting in both explicit proxy and proxy-based firewall policies. In both cases,
FortiGate checks whether the domain of the request matches the host domain in the HTTP header, and then allows,
blocks, or monitors the traffic. This feature enhances security by preventing unauthorized access that could result from
domain mismatches.
The config firewall profile-protocol-options command includes a new option:
config firewall profile-protocol-options
edit protocol
config http
set domain-fronting {allow | block | monitor}
next
end
end
Example
In this example, the server name indication (SNI) in the request is httpbin.org, and the host header in the request is
google.com.
When FortiGate has an explicit proxy policy configured with set domain-fronting block, traffic is blocked and
logged when the request domain does not match the HTTP header domain.
l Example traffic log:
1: date=2024-06-11 time=10:38:23 eventtime=1718127503650731465 tz="-0700"
logid="0000000013" type="traffic" subtype="forward" level="notice" vd="vdom1"
srcip=10.1.100.77 srcport=41548 srcintf="port2" srcintfrole="undefined"
dstip=3.211.196.247 dstport=443 dstintf="port3" dstintfrole="undefined"
srccountry="Reserved" dstcountry="United States" sessionid=1542161161 proto=6
action="deny" policyid=1 policytype="proxy-policy" poluuid="01352fb2-1370-51ef-8ac3-
c46f77827b80" service="HTTPS" trandisp="noop" duration=0 sentbyte=0 rcvdbyte=0 sentpkt=0
rcvdpkt=0 appcat="unscanned" utmaction="block" countweb=1 msg="Traffic denied because of
domain fronting" utmref=65498-0
When FortiGate has a transparent proxy policy configured with set domain-fronting monitor, traffic is passed
and logged when the request domain does not match the HTTP header domain.
l Example traffic log:
1: date=2024-06-11 time=11:14:22 eventtime=1718129661884640964 tz="-0700"
logid="0000000010" type="traffic" subtype="forward" level="notice" vd="vdom1"
srcip=10.1.100.77 srcport=44250 srcintf="port2" srcintfrole="undefined"
dstcountry="United States" srccountry="Reserved" dstip=3.211.196.247 dstport=443
dstintf="port3" dstintfrole="undefined" sessionid=2024 service="web" proxyapptype="web-
proxy" proto=6 action="accept" policyid=22 policytype="proxy-policy" poluuid="05d56dfc-
1370-51ef-5315-e0ee922dd3b5" trandisp="snat" transip=172.16.200.2 transport=44250
duration=0 wanin=15331 rcvdbyte=15331 wanout=578 lanin=777 sentbyte=777 lanout=12868
appcat="unscanned" utmaction="allow" countweb=1 utmref=65496-0
Virtual patching
This section includes information about new features related to virtual patching:
l Streamline IoT/OT device detection 7.6.1 on page 341
l Unified OT virtual patching and IPS signatures 7.6.1 on page 596
You can directly enable IoT and OT categories for device detection, without applying an Application Control profile. If the
IoT or OT signatures are not excluded in any of the policy interfaces, a built-in application list is automatically created
and applied, ensuring that relevant IoT and OT categories are active, optimizing IPS functionality, and reducing overall
configuration complexity. Database licenses are not changed for IoT and OT signatures.
Command Description
device-identification {enable | Enable/disable passively gathering of device identity information about the
disable} devices on the network connected to this interface (default = disable).
exclude-signatures {iot ot} Exclude IOT and/or OT application control signatures. This option is hidden when
device-identification is disabled.
Example
2. Configure the interface with device identification enabled and neither signature excluded:
config system interface
edit "port1"
set vdom "vd1"
set ip 172.16.200.101 255.255.255.0
set allowaccess ping https ssh snmp http telnet
set type physical
set device-identification enable
next
end
3. Simulate iPad device traffic on the server with the following command to generate an IoT app-category log:
# curl 10.1.100.11 -H "User-Agent: Mozilla/5.0 (iPad; CPU OS 12_5_5 like Mac OS X)
AppleWebKit/605.1.15 (KHTML, like Gecko) Version/10.1.2 Mobile/15E148 Safari/604.1"
5. Simulate Advantech device traffic with the following command to generate an OT app-category log:
# curl -v http://172.16.200.55/ips/index.php
8. Simulate iPad device traffic on the server with the following command to generate an IoT app-category log:
# curl 10.1.100.11 -H "User-Agent: Mozilla/5.0 (iPad; CPU OS 12_5_5 like Mac OS X)
AppleWebKit/605.1.15 (KHTML, like Gecko) Version/10.1.2 Mobile/15E148 Safari/604.1"
10. Simulate Advantech device traffic with the following command to see that no OT app-category log is generated:
# curl -v http://172.16.200.55/ips/index.php
Virtual patching now includes OT virtual patching and IPS signatures. This allows IPS signatures to be used in OT/IoT
vulnerability lookup and response, covering additional threats and vulnerabilities.
Virtual patching works by:
1. Collecting device information on connected devices.
2. Performing a vulnerability query through FortiGuard for device-specific vulnerabilities.
3. Retrieving and caching application signatures and mitigation rules for the device.
4. Applying the application rules on matched device traffic.
In the second step, FortiGuard now returns additional signature IDs based on IPS database that can match
vulnerabilities on most IT devices, like Windows, Mac, and so on.
Examples
To demonstrate the flow of a virtual patching detection, an IPS signature (Eicar.Virus.Test.File (id=29844)) was added to
a demo FortiGuard Server. This can be observed in the following debug:
# diagnose ips share list otvp_cfgcache
10.1.100.11 f2:d7:39:5d:40:11 3 29844(ips) 10000673(n/a) 10000684
This cache output shows the cached response of an application rule that identifies the IPS signature 29844 matching the
source device 10.1.100.11.
Traffic originating from a device (10.1.100.11) that matches this signature (29844) will trigger either the virtual patching
profile, if enabled, or the IPS profile, if enabled. This use case demonstrates that an OT virtual profile can use an IPS
signature for matching, and will either drop or reset the connection.
Note that rule 29844 is not valid on the production server; it is only for testing and demonstration purposes.
Example 1
If only the virtual patch profile is enabled in the firewall policy, its configuration takes effect and a virtual patch log is
generated.
Example 2
If both the IPS sensor's and virtual patch profile's actions are set to block, the IPS sensor configuration takes effect and
an IPS log is generated.
Example 3
If the IPS sensor's action is pass and the virtual patch profile's action is block, the virtual patch profile configuration takes
effect and a virtual patch log is generated.
Example 4
If only the IPS sensor enabled, its configuration takes effect and an IPS log is generated.
next
end
config firewall policy
edit 1
set ips-sensor "test"
next
end
Others
This section includes information about other security profile related new features:
l Support the Zstandard compression algorithm for web content on page 348
l DNS filtering in proxy policies on page 351
l DNS translation support for Service records over the DNS Filter profile on page 354
l Control TLS connections that utilize Encrypted Client Hello on page 358
l Selective forwarding to ICAP server 7.6.1 on page 358
l Control TLS connections that utilize Encrypted Client Hello in flow mode 7.6.3 on page 361
l Inline CASB security profile to support control factors in exchanged JSON data for custom SaaS applications 7.6.3
on page 368
FortiOS now supports the Zstandard (ZSTD) compression algorithm for web content. FortiOS can use proxy-based
policies to decode ZSTD-encoded web content, scan it, and forward the web content to a browser. Then the web content
can be passed to the user or blocked from the user based on UTM profile settings, ensuring a seamless and secure
browsing experience.
Example
In this example, FortiGate is configured with explicit web proxy, a proxy policy, and a UTM DLP profile.
The user visits the facebook web site (www.facebook.com) through FortiGate. The facebook web site uses ZSTD to
code web content. When FortiGate receives the ZSTD-encoded web content from facebook, it decodes and scans the
web content, and uses the settings in the UTM profile to pass or block the web content.
When the DLP profile passes the web content, the facebook login page is displayed for the user:
When the DLP profile is configured to block web sites if the web content contains the Connect with friends string,
then access to facebook is blocked, and a replacement message is displayed to the user:
Without this feature, FortiGate cannot display ZSTD-encoded content from facebook in the browser:
And when a UTM antivirus profile is applied, a log is generated that shows contentencoding="zstd"
msg="Unknown content-encoding detected and blocked.", for example:
1: date=2024-06-12 time=12:43:25 eventtime=1718221405781282450 tz="-0700" logid="0249009241"
type="utm" subtype="virus" eventtype="unknown" level="warning" vd="vdom1" policyid=1
sessionid=1123 srcip=10.1.100.11 dstip=157.240.249.35 srcport=52290 dstport=443
DNS filtering can be applied to proxy policies, providing an extra layer of protection for users that are behind a proxy.
This is particularly useful when client applications use DoH and DoT protocols and require the added security of DNS
filtering.
3. Test the filter from a client that is configured to use the proxy:
l DoH client request through an explicit proxy policy with the action set to block:
curl -H 'accept: application/dns-message' -x 10.1.100.1:8080 -v -k
'https://1.1.1.1/dns-query?dns=q80BAAABAAAAAAAAA3d3dwN1YmMCY2EAAAEAAQ' | hexdump
* Trying 10.1.100.1:8080...
* TCP_NODELAY set
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0*
Connected to 10.1.100.1 (10.1.100.1) port 8080 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to 1.1.1.1:443
> CONNECT 1.1.1.1:443 HTTP/1.1
> Host: 1.1.1.1:443
> User-Agent: curl/7.68.0
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
< Proxy-Agent: Fortinet-Proxy/1.0
<
* Proxy replied 200 to CONNECT request
* CONNECT phase completed!
* ALPN, offering h2
* ALPN, offering http/1.1
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
} [5 bytes data]
* Using Stream ID: 1 (easy handle 0x555786e4bdb0)
} [5 bytes data]
> GET /dns-query?dns=q80BAAABAAAAAAAAA3d3dwN1YmMCY2EAAAEAAQ HTTP/2
> Host: 1.1.1.1
> user-agent: curl/7.68.0
> accept: application/dns-message
} [5 bytes data]
< HTTP/2 200
< content-type: application/dns-message
< content-length: 28
<
{ [28 bytes data]
100 28 100 28 0 0 430 0 --:--:-- --:--:-- --:--:-- 430
* Connection #0 to host 10.1.100.1 left intact
0000000 cdab 0381 0100 0000 0000 0000 7703 7777
0000010 7503 6362 6302 0061 0100 0100
000001c
connect svr orig 10.1.100.11:33270->10.1.100.1:8080 out 10.1.100.11:33270->1.1.1.1:8080
[I][p:386][s:1746142837][r:50331664] wad_http_upd_ses_ctx_by_req :1046 wad http
session 0x7f3842990b80 forward (nil) fwd_srv_ip=
[V][p:386][s:1746142837][r:50331664] wad_http_connect_srv :791
[0x7f384377a8e8] Connect to server: 1.1.1.1:443/1.1.1.1:443
HTTP/1.1 200
server: cloudflare
l DoT client request to a Cloudfare server at 1.1.1.1 through an explicit proxy policy with the action set to redirect:
kdig www.ubc.ca +tls @127.0.0.1:853
;; TLS session (TLS1.3)-(ECDHE-X25519)-(ECDSA-SECP256R1-SHA256)-(AES-256-GCM)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 64291
;; Flags: qr rd; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 0
;; QUESTION SECTION:
;; www.ubc.ca. IN A
;; ANSWER SECTION:
www.ubc.ca. 60 IN A 208.91.112.55
;; Received 44 B
;; Time 2024-07-02 22:18:51 UTC
;; From 127.0.0.1@853(TCP) in 54.8 ms
[worker 0] dns_secure_forward_response()-1660: category=30 profile=dnsfilter_fgd
[worker 0] dns_visibility_log_hostname()-371: vd=1 pktlen=468
[worker 0] wildcard_fqdn_response_cb()-951: vd=1 pktlen=468
[worker 0] hostname_entry_insert()-292: af=2 domain=www.ubc.ca
[worker 0] hostname_entry_insert()-292: af=2 domain=www.ubc.ca
[worker 0] hostname_entry_insert()-292: af=2 domain=www.ubc.ca
[worker 0] hostname_entry_insert()-292: af=2 domain=www.ubc.ca
[worker 0] dns_profile_do_url_rating()-2036: vfid=1 profile=dnsfilter_fgd category=30
domain=www.ubc.ca
[worker 0] dns_profile_do_url_rating()-2128: response filter result for www.ubc.ca
(type=7 action=10)
[worker 0] dns_secure_apply_action()-2270: action=10 category=30 log=1 error_allow=0
profile=dnsfilter_fgd
[worker 0] dns_secure_answer_redir()-1605
[worker 0] dns_send_response()-1626: domain=www.ubc.ca reslen=44
[worker 0] dns_secure_log_response()-1254: id:0x23fb domain=www.ubc.ca
profile=dnsfilter_fgd action=10 log=1
l DoH client request through a transparent proxy policy with the action set to redirect:
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
} [5 bytes data]
* Using Stream ID: 1 (easy handle 0x562b7267bdb0)
} [5 bytes data]
> GET /dns-query?dns=q80BAAABAAAAAAAAA3d3dwN1YmMCY2EAAAEAAQ HTTP/2
> Host: 1.1.1.1
> user-agent: curl/7.68.0
> accept: application/dns-message
< HTTP/2 200
< content-type: application/dns-message
< content-length: 28
<
{ [28 bytes data]
100 28 100 28 0 0 27 0 0:00:01 0:00:01 --:--:-- 27
* Connection #0 to host 1.1.1.1 left intact
0000000 cdab 0381 0100 0000 0000 0000 7703 7777
0000010 7503 6362 6302 0061 0100 0100
000001c
[worker 0] dns_profile_do_url_rating()-2036: vfid=1 profile=dnsfilter_fgd category=30
domain=www.ubc.ca
[worker 0] dns_profile_do_url_rating()-2128: response filter result for www.ubc.ca
(type=7 action=10)
[worker 0] dns_secure_apply_action()-2270: action=10 category=30 log=1 error_allow=0
profile=dnsfilter_fgd
[worker 0] dns_send_error_response()-1809: id: 0xabcd domain: www.ubc.ca qtype: 1 err: 3
[worker 0] dns_send_response()-1626: domain=www.ubc.ca reslen=28
[worker 0] dns_secure_log_response()-1254: id:0xcdab domain=www.ubc.ca
profile=dnsfilter_fgd action=10 log=1
[worker 0] dns_policy_find_by_idx()-2990: vfid=1 idx=1 policy_type=1
[worker 0] dns_secure_log_response()-1504: write to log: logid=54803 qname=www.ubc.ca
[worker 0] dns_unix_stream_packet_write()-287: vfid=1 real_vfid=1 vrf=0 id=0xabcd
domain=www.ubc.ca req_type=2 req=0
[worker 0] dns_unix_stream_packet_write()-309: type=7 len=31 session_id=259 flags=1
[worker 0] dns_query_delete()-560: orig id:0xabcd local id:0xabcd domain=www.ubc.ca
use=5 active
DNS translation support for Service records over the DNS Filter profile
DNS translation now supports Service (SRV) records over the DNS Filter profile, providing broader coverage and finer
control to network administrators.
2. The client DNS query for SRV record is _telnet._tcp.ftntqa.com. The configured IP addresses on DNS server for the
SRV records are 172.16.200.56 (A) and 2000:172:16:200::56(AAAA), and the configured hostname is
telnet.ftntqa.com .
nslookup -type=SRV _telnet._tcp.ftntqa.com
Address: 2000:172:16:200::200
_telnet._tcp.ftntqa.com SRV service location:
priority = 2
weight = 1
port = 23
svr hostname = v
telnet.ftntqa.com internet address = 1.2.3.4
telnet.ftntqa.com AAAA IPv6 address = 2000:1:2:3::4
In the GUI, go to Log & Report > Security Events, and filter by Query Type = SRV:
In the GUI, go to Log & Report > Security Events, and filter by Query Type = SRV:
Encrypted Client Hello (ECH) is an extension to TLS that allows TLS to effectively hide information that is exposed in the
unencrypted TLS ClientHello message. The ClientHello is one of the first messages sent in a TLS handshake, containing
information inside the Server Name Indication (SNI) field about the destination host. By encrypting the ClientHello, this
information is not exposed in plaintext.
Using the ECH extension, the client queries DNS for the DNS record of the destination host containing the ECH
configuration, and public key for encrypting the ClientHello message. To prevent the identity from being exposed within
the DNS query, clients usually use DoH or DoT to encrypt the DNS packets.
With the public key returned from the DNS server, the client can encrypt the ClientHello message, now called the inner
ClientHello. An outer, unencrypted ClientHello must still be present to route to the server, often a CDN, that can unpack
and reroute the traffic to the final destination.
For more information about this feature, see Control TLS connections that utilize Encrypted Client Hello.
The ICAP profile now includes a new ocr-only option to forward only image files, such as JPEG, JPG, and PNG, to an
ICAP (Internet Content Adaptation Protocol) server for OCR (optical character recognition) scanning. When enabled,
FortiGate forwards only image files that are relevant for OCR scanning to the ICAP server. This selective forwarding
applies only to image files in HTTP responses; it does not apply to image files in HTTP requests. By reducing processing
time and optimizing resource usage, this feature enhances overall system efficiency.
config icap profile
edit <name>
set ocr-only {enable | disable}
next
end
set ocr-only {enable | Enable/disable only passing OCR scan requests of images files to ICAP server
disable} (default = disabled).
When enabled, also enable response to allow FortiGate to forward images to
the ICAP server.
Example
In this example, FortiGate acts as the ICAP client, and FortiProxy acts as the ICAP server. An ICAP profile is configured
on FortiGate with ocr-only enabled. An ICAP server is configured on FortiProxy with the icap-service configured to
use an image-analyzer ICAP profile.
When a client HTTP response includes an image that is of interest to OCR, FortiGate forwards only the image file to the
ICAP server for OCR scanning, and the scan results determine whether the image is passed or blocked.
When OCR scanning passes the image in the HTTP response, the image is displayed to the client, for example:
When OCR scanning blocks the image in the HTTP response, an alert message is displayed instead of the image:
Control TLS connections that utilize Encrypted Client Hello in flow mode - 7.6.3
Previously, support for inspecting TLS connections that utilize Encrypted Client Hello (ECH) was added in proxy mode.
In this enhancement, flow mode can now support the following:
l Inspect DNS over TLS (DoT) and DNS over HTTPS (DoH) traffic.
l Strip the ECH response returned from the DNS server over DoT or DoH.
l Block TLS Client Hello that uses ECH, allowing TLS to fallback to using a plain text Client Hello.
No new CLI syntax was added for supporting flow mode.
For more background on this feature, see the original new feature implemented for proxy mode in FortiOS 7.4.4: Control
TLS connections that utilize Encrypted Client Hello.
Examples
l Example 1: Inspecting DoT and DoH traffic in flow mode on page 362
l Example 2: Stripping ECH information from DoH responses on page 365
l Example 3: Blocking TLS connections with certificate inspection when ECH is used in the TLS handshake through
the FortiGate on page 367
In the following example, the DNS profile is configured to inspect DoT and DoH traffic in differing scenarios.
Scenario 1
In the first scenario, the Education category is inspected and the DNS response is redirected to the default portal of
208.91.112.55.
set category 30
set action block
next
end
end
set block-action redirect
set block-botnet disable
set redirect-portal 0.0.0.0
next
end
1. Using the kdig command, perform a DNS query over DoT to an education website:
kdig -d @1.1.1.1 +tls +header +all www.ubc.ca
;; DEBUG: Querying for owner(www.ubc.ca.), class(1), type(1), server(1.1.1.1), port
(853), protocol(TCP)
;; QUESTION SECTION:
;; www.ubc.ca. IN A
;; ANSWER SECTION:
www.ubc.ca. 60 IN A 208.91.112.55
;; Received 44 B
;; Time 2024-06-19 00:02:51 UTC
;; From 1.1.1.1@853(TCP) in 67.2 ms
Scenario 2
In the second scenario, the same configuration as Scenario 1 on page 362 is modified so that the DNS response is
blocked entirely.
1. Using the kdig command, perform a DNS query over DoT to an education website.
There is no resolution for the DNS query.
2. View the DNS log to verify:
# execute log filter field subtype dns
# execute log display
1: date=2024-06-18 time=10:43:35 eventtime=1718732614247027641 tz="-0700"
logid="1501054803" type="utm" subtype="dns" eventtype="dns-response" level="warning"
vd="vdom1" policyid=1 poluuid="e0aa630a-2d34-51ef-2628-4db06034250d" policytype="policy"
sessionid=45757 srcip=10.1.100.11 srcport=51786 srccountry="Reserved" srcintf="port1"
srcintfrole="undefined" dstip=1.1.1.1 dstport=853 dstcountry="Australia" dstintf="port9"
dstintfrole="undefined" proto=6 profile="dnsfilter_fgd" xid=13873 qname="www.mcgill.ca"
qtype="A" qtypeval=1 qclass="IN" msg="Domain belongs to a denied category in policy"
action="block" cat=30 catdesc="Education" rcode=3
DNS filters are used to strip ECH information from DNS responses, and force the browser to not use ECH for TLS
connections. The browser relies on the ECH information from DoH for ECH-enabled TLS connections.
In this example, a client sends a DNS message to query the public key for a destination. The ECH information in the DNS
response is stripped. Accessing the web page in the browser indicates that ECH is not used in the TLS connection.
1. Configure a SSL profile to perform DoT and DoH inspection with Certificate Inspection:
a. Go to Security Profiles > SSL/SSH Inspection.
b. Click Create new.
c. Enter a name.
d. Set Inspection method to SSL Certificate Inspection.
e. Click OK to save.
2. Configure a DNS filter profile:
a. Go to Security Profiles > DNS Filter.
b. Click Create new.
c. Enter a name.
d. Under Options, enable Strip Encrypted Client Hello service parameters.
e. Click OK to save.
3. Apply the SSL profile and the DNS filter profile to an outbound firewall policy.
;; OPT PSEUDOSECTION:
;EDNS: version: 0, flags: do; udp: 1232
;;QUESTION SECTION:
;tls-ech.dev. IN HTTPS
;; ANSWER SECTION:
tls-ech.dev. 60 IN HTTPS 1.
ech=AEn+DQBFKWAgACABWIHUGj4u+PIggYXcR5JF@gYk3dCRLoBW8uJq9H4mKAAIAAEAAQABAANAEnB1YmxpYy50
bHMtZWN0LmRldgAA
When strip-ech is enabled on the DNS profile, the result will not return the ECH payload.
# dig @1.1.1.1 HTTPS tls-ech.dev +dnssec
; <<>> DiG 9.18.30-0ubuntu0.22.04.2-Ubuntu <<>> @1.1.1.1 HTTPS tls-ech.dev +dnssec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37261
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
;EDNS: version: 0, flags: do; udp: 1232
;;QUESTION SECTION:
;tls-ech.dev. IN HTTPS
;; ANSWER SECTION:
tls-ech.dev. 60 IN HTTPS 1.
This website indicates that ECH is not used. This is due to the ECH payload being stripped from the DNS response.
Example 3: Blocking TLS connections with certificate inspection when ECH is used in the TLS
handshake through the FortiGate
In this example, an SSL/SSH inspection profile is configured to block TLS connections from some SNIs when ECH is
used in the TLS handshake. Client messages with the outer SNI public.tls-ech.dev are blocked.
A web filter block message will be shown when trying to connect directly to public.tls-ech.dev. And accessing the web
page tls-ech.dev, which uses public.tls-ech.dev in its outer SNI, will show that the client is not using ECH.
edit 1
set name "TLS-ECH-block”
set srcintf "port1"
set dstintf "port9"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
set utm-status enable
set profile-protocol-options "protocol"
set ssl-ssh-profile "block_ech_cert"
set webfilter-profile “webfilter”
set logtraffic all
set nat enable
next
end
The page tls-ech.dev uses ECH to encrypt the SNI field and adds a new outer SNI of public.tls-ech.dev. The
browser will initially try to establish an ECH-enabled TLS connection to public.tls-ech.dev, but that will be blocked,
forcing the browser to reconnect without ECH. As a result, the page tls-ech.dev loads and indicates that ECH is not
used.
For QUIC sessions that utilize ECH, flow mode inspection is also able to strip ECH and
fallback to a connection without using ECH.
Inline CASB security profile to support control factors in exchanged JSON data for
custom SaaS applications - 7.6.3
Introduced in FortiOS 7.4.1, the inline CASB security profile enables the FortiGate to perform granular control over SaaS
applications directly on firewall policies. In FortiOS 7.6.3, the inline CASB security profile has been enhanced to support
control factors such as tenant information in JSON data exchanged between a web browser and a custom SaaS
application. For example, for some custom SaaS applications, the URL does not change to reflect the type or identity of
the user or organization when logged in as such tenant information is exchanged using JSON data instead of through
changes in the URL. With this enhancement, JSON data can be extracted using JQ filters (see
https://jqlang.org/manual/v1.5/#basic-filters).
Example
In CASB filtering, the administrator wants to distinguish between two types of users in different categories, and assign
different actions accordingly.
The following two SaaS application requests will be made:
curl -k https://httpbin.org/headers -H "Partners-Data: {'company': 'contractorsA'}"
curl -k https://httpbin.org/headers -H "Partners-Data: {'company': 'contractorsB'}"
Traffic is classified based on the tenant information company in the HTTP request header Partners-Data. Traffic from
contractorsA is authorized and monitored, and traffic from contractorsB is blocked.
This information is transported in a JSON structure within the request, so the JQ tenant extraction feature is used.
1. Go to Security Profiles > Inline-CASB and select the SaaS Application tab.
2. Click Create New.
3. Enter a Name, such as httpbin.
4. Enter the Domains, such as httpbin.org.
5. In Tenant Controls, select the Output controls tab and then click Create New.
6. Enter the Attribute, such as company, then click OK.
7. Click OK.
1. Go to Security Profiles > Inline-CASB and, on the Profile tab, click Create New.
2. Enter a Name, such as casbProfile.
3. In the SaaS applications table, click Create New.
4. Select the httpbin custom application (custom applications are at the bottom of the list), then click Next.
12. In the Apply action by attribute match table click Create New.
Field Value
Name contractorsA
Attribute company
Value contractorsA
14. Click OK, then click Create New again to configure the tenant information for contractorsB:
Field Value
Name contractorsB
Attribute company
Value contractorsB
2. Check the logs to see that the SaaS application request for contractorsA is passed and a log is generated:
1: date=2025-03-22 time=00:25:19 eventtime=1742628319441656177 tz="-0700"
logid="2500010002" type="utm" subtype="casb" eventtype="casb" level="information"
vd="vdom1" policyid=1 poluuid="e0a45778-05e0-51f0-d77d-e4e8a02811e2" policytype="policy"
sessionid=7535 srcip=10.1.100.13 dstip=54.236.151.211 srcport=46476 dstport=443
srcintf="lan" srcintfrole="undefined" srcuuid="bcbee936-05e0-51f0-5712-f0e95616dde0"
dstintf="mgmt" dstintfrole="lan" dstuuid="bcbee936-05e0-51f0-5712-f0e95616dde0" proto=6
url="https://httpbin.org/headers" action="monitor" profile="casbProfile"
saasapp="httpbin" useractivity="httpbin-partners" subaction="monitor"
tenantmatch="matched" activitycategory="other" msg="CASB access was monitored because it
contained activity."
3. In the GUI, go to Log & Report > Security Events and view the Inline-CASB event logs.
4. Confirm that the SaaS application request for contractorsB is blocked, as its sub-action is set to block.
Starting from FortiOS 7.6.3, SSL VPN web mode is renamed Agentless VPN.
This section includes information about IPsec and SSL VPN or Agentless VPN related new features:
l Automatic selection of IPsec tunneling protocol on page 376
l Security posture tag match enforced before dial-up IPsec VPN connection on page 381
l Enhancing security with Post-Quantum Cryptography for IPsec key exchange 7.6.1 on page 385
l Migration from SSL VPN tunnel mode to IPsec VPN 7.6.3 on page 392
l Agentless VPN 7.6.3 on page 413
l Configure FortiClient SIA for IPsec VPN tunnels 7.6.3 on page 413
l Support Quantum Key Distribution and Digital Signature Algorithm Post-Quantum Cryptography 7.6.3 on page 417
With IKE version 2, you can now enable automatic selection of the IPsec tunneling protocol. Initially, IKE uses UDP
encapsulation. If the UDP connection fails to establish within the defined threshold, then FortiOS automatically
transitions to TCP for performance and reliability.
In the config vpn ipsec phase1-interface command, the set transport upd-fallback-tcp option
changed to set transport auto, and the set fallback-tcp-threshold changed to set auto-transport-
threshold. Now the config vpn ipsec phase1-interface command contains the following options:
config vpn ipsec phase1-interface
edit <name>
set ike-version 2
set transport {auto | udp | tcp}
set auto-transport-threshold <integer>
next
end
In the GUI, the VPN Wizard can be used to set the IKE transport protocol.
The Use Fortinet encapsulation option displays only when Transport is set to TCP
encapsulation. See Encapsulate ESP packets within TCP headers for more information.
When Transport is set to Auto, you can adjust the threshold for switching to
TCP encapsulation by using the set auto-transport-threshold command.
Example
In this example, FGT-A has IPsec phase 1 configured for automatic protocol selection with a failover threshold of 3
seconds. By default FGT-A encapsulates IKE packed in UDP packets. But the UDP connection fails to establish within
the defined threshold time of 3 seconds, so TCP is automatically used instead.
804000005000000080400000E02000034020100050300000C0100000C800E0100030000080200000503
0000080300000C0300000804000005000000080400000E0200002C030100040300000C0100001480
0E008003000008020000050300000804000005000000080400000E0200002C040100040300000C01000
014800E010003000008020000060300000804000005000000080400000E0000002C0501000403000
00C0100001C800E010003000008020000050300000804000005000000080400000E28000108000E0000
4872689DAFB661C0AB548E3ACB11EB4F103375F65DF62B0C125091C2A9432D9C813EBE7F15456AEA
4A4977BBDF623C371BD57AA72CB756E409EAF41C3AC827F72A48306FF9D0444D5D8C0A48B516AB69233
87286C8B669073CEBED027F4555F7192293350C2E46DFD50E536B8781109F3D0247C9EE2DCC0893F
28B1EC5CF68F7911AAD7937C61223CC7A1A03492C70E48559C462F9E4581EF7B3039FBBBF006F518F9B
58AB4FDC8690ADCC0F24234612B89C9087D580E6D32451058A131BEA77FB31DCE100A6DBD38CA04A
18F650A442B33DC71209275BCCCBC7D72D81304453DB7BFCD161AE5427B17F8BE75E1E1FF24A66D2D95
B2F1B451EB47B42FA207B9A290000240F07B9E8BCC75601A050A9F7328158588F21796161E93F5BB
D40C01655CC5FB82900001C000040043087B6D2B7AB7F74D6574F1AED0BD831067CA86D2900001C0000
4005DF7F5E0FF0BDE220F8F7BA03E566EDAE56814327000000080000402E
ike V=root:0:tofgtd:0: sent IKE msg (SA_INIT): 11.101.1.1:500->173.1.1.1:500,
len=632, vrf=0, id=8994f030780aaa66/0000000000000000, oif=15
ike 0:tofgtd:0: out
8994F030780AAA660000000000000000212022080000000000000278220000F00200003401010005030
0000C0100000C800E00800300000802000005030000080300000C0300000
804000005000000080400000E02000034020100050300000C0100000C800E0100030000080200000503
0000080300000C0300000804000005000000080400000E0200002C030100040300000C0100001480
0E008003000008020000050300000804000005000000080400000E0200002C040100040300000C01000
014800E010003000008020000060300000804000005000000080400000E0000002C0501000403000
00C0100001C800E010003000008020000050300000804000005000000080400000E28000108000E0000
4872689DAFB661C0AB548E3ACB11EB4F103375F65DF62B0C125091C2A9432D9C813EBE7F15456AEA
4A4977BBDF623C371BD57AA72CB756E409EAF41C3AC827F72A48306FF9D0444D5D8C0A48B516AB69233
87286C8B669073CEBED027F4555F7192293350C2E46DFD50E536B8781109F3D0247C9EE2DCC0893F
28B1EC5CF68F7911AAD7937C61223CC7A1A03492C70E48559C462F9E4581EF7B3039FBBBF006F518F9B
58AB4FDC8690ADCC0F24234612B89C9087D580E6D32451058A131BEA77FB31DCE100A6DBD38CA04A
18F650A442B33DC71209275BCCCBC7D72D81304453DB7BFCD161AE5427B17F8BE75E1E1FF24A66D2D95
B2F1B451EB47B42FA207B9A290000240F07B9E8BCC75601A050A9F7328158588F21796161E93F5BB
D40C01655CC5FB82900001C000040043087B6D2B7AB7F74D6574F1AED0BD831067CA86D2900001C0000
4005DF7F5E0FF0BDE220F8F7BA03E566EDAE56814327000000080000402E
ike V=root:0:tofgtd:0: sent IKE msg (RETRANSMIT_SA_INIT): 11.101.1.1:500-
>173.1.1.1:500, len=632, vrf=0, id=8994f030780aaa66/0000000000000000, oif=15
ike V=root:0:tofgtd:0: auto transport timeout, use tcp port 4500
Security posture tag match enforced before dial-up IPsec VPN connection
In an IPsec dial-up VPN configuration, an option is added to enforce ZTNA security posture tag matching before
establishing a VPN tunnel. When a tag is defined on an IKEv2 IPsec tunnel, the client IP addresses that are resolved by
that tag will be allowed to establish connection to the tunnel. When multiple tags are used, tags are checked sequentially
until a match is made. If no tags match, then the client cannot establish a VPN connection.
The following settings have been added:
config vpn ipsec phase1-interface
edit <name>
set ike-version 2
set remote-gw-match {any | ipmask | iprange | geography | ztna}
set remote-gw-ztna-tags <IPv4 ZTNA posture tags>
next
end
Example
A PC (172.16.200.242) makes a connection to the dial-up VPN gateway (172.16.200.4). The following example
configuration and outputs show a successful connection with a matching ZTNA security posture tag (EMS1_ZTNA_all_
registered_clients) and an unsuccessful connection when a ZTNA security posture tag cannot be matched.
It is assumed that the following mandatory pre-configurations are complete before configuring VPN:
l FortiGate has established a connection with FortiClient EMS and has synchronized the ZTNA security posture tags,
including the EMS1_ZTNA_all_registered_clients tag.
l FortiClient is registered to EMS and has the ZTNA security posture tag (EMS1_ZTNA_all_registered_
clients).
Results
When a client (172.16.200.242) has the appropriate ZTNA security posture tag, it is synchronized to FortiClient EMS and
FortiGate.
The address resolves to the IP address that is configured on the client endpoint. It does not resolve to the NAT’d public
IP address when the client is behind NAT. In other words, the address resolves to the IP Address in the following
output, and not the Public IP Address:
# diagnose endpoint ec-shm list
Record #0:
IP Address = 172.16.200.242
MAC Address = **:**:**:**:67:74
MAC list =
VDOM = root (0)
TOKEN VDOM = (-1)
EMS serial number: FCTEMS***********
EMS tenant id: *************1EDB589FBC4626
Client cert SN: *************60ACA9FE283DEEC3B
Public IP address: *************
Quarantined: no
Online status: online
Registration status: registered
On-net status: on-net
Gateway Interface: port1
FortiClient version: 7.2.4
…
Number of Routes: (1)
Gateway Route #0:
- IP:172.16.200.242, MAC: **:**:**:**:67:74, VPN: no
- Interface:port1, VDOM:root (0), SN: FG5H*************
From the PC1 client, establish a tunnel with the FortiGate VPN gateway. When enabled, the following debug information
displays the output when the security posture tag is matched:
# diagnose debug application ike -1
…
ike V=root:0:DY:155: received FCT-UID : 6108A9179A5C40D7BD57504E15114C1F
ike V=root:0:DY:155: received EMS SN : FCTEMS***********
ike V=root:0:DY:155: received EMS tenant ID : *************1EDB589FBC4626
ike V=root:0:DY:155: peer identifier IPV4_ADDR 172.16.200.242
ike V=root:0:DY:155: re-validate gw ID
ike V=root:0:DY:155: gw validation OK
ike V=root:0:DY:155: responder preparing EAP identity request
…
The following tunnel output indicates a dial-up tunnel has been established:
# diagnose vpn ike gateway list
vd: root/0
name: dialup_0
version: 2
interface: port1 9
addr: 172.16.200.4:500 -> 172.16.200.242:500
tun_id: 10.212.134.200/::10.0.0.5
remote_location: 0.0.0.0
network-id: 0
transport: UDP
created: 34s ago
eap-user: userc
2FA: no
peer-id: 172.16.200.242
peer-id-auth: no
FortiClient UID: 6108A9179A5C40D7BD57504E15114C1F
assigned IPv4 address: 10.212.134.200/255.255.255.255
pending-queue: 0
PPK: no
parent=dialup index=0
…
In the scenario where a client without a matching tag tries to establish a tunnel, the following debug information indicates
that the tunnel cannot match the remote IP of the client.
# diagnose debug application ike -1
Enhancing security with Post-Quantum Cryptography for IPsec key exchange - 7.6.1
IPsec key exchange now supports Post-Quantum Cryptography (PQC) to enhance security with algorithms that protect
against quantum computer attacks. This update ensures future-proof encryption and addresses vulnerabilities in
traditional methods, aligning with upcoming security standards.
FortiOS allows users to specify various KE groups; however, only the following KE groups are standardized by NIST and
are FIPS 203 compliant:
l ML-KEM-512
l ML-KEM-768
l ML-KEM-1024
FIPS 203, also known as the Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) Standard, is a set of
guidelines established by the National Institute of Standards and Technology (NIST). These guidelines specify the use of
lattice-based cryptographic algorithms for key encapsulation mechanisms, which are crucial for secure communication
in various applications.
The three parameter sets offer different levels of security and performance:
ML-KEM-512 Provides a balance between security and efficiency, suitable for environments
where moderate security is sufficient.
ML-KEM-768 Offers a higher level of security compared to ML-KEM-512, making it suitable for
more sensitive applications.
ML-KEM-1024 Delivers the highest level of security among the three, ideal for highly sensitive
data and critical applications.
See FIPS203 and Module-Lattice-Based Key-Encapsulation Mechanism Standard for more information.
CLI configuration
The following commands have been included to enable and configure PQC:
config vpn ipsec phase1-interface
edit <name>
set addke1 <option1>, <option2>, <option3>
set addke2 <option1>, <option2>, <option3>
set addke3 <option1>, <option2>, <option3>
Example
A financial institution uses IPsec VPN to move sensitive customer data, such as account numbers, social insurance
numbers, and credit card information. The current encryption used is based on traditional algorithms, which could be
vulnerable to attacks from quantum computers in the future. By implementing Post-Quantum Cryptography, the financial
institution can ensure that their data remains secure even as technology advances, protecting themselves and their
customers from potential breaches due to advancements in computing power. This ensures compliance with regulatory
requirements and maintains customer trust.
This is a site-to-site VPN setup. Only the new configuration is being demonstrated in the GUI
for this example. For more information, see Basic site-to-site VPN with pre-shared key.
5. In Phase 2 selectors, click Create new and repeat the steps above.
1. Configure FGT-C:
config vpn ipsec phase1-interface
edit "site_002"
set interface "port1"
set ike-version 2
set peertype any
set net-device disable
set proposal aes128-sha256 aes256-sha256 aes128gcm-prfsha256 aes256gcm-prfsha384
chacha20poly1305-prfsha256
set addke1 35 36 37
set addke2 1083
set childless-ike enable
set transport auto
set remote-gw 172.16.200.9
set psksecret XXXXXX
next
end
config vpn ipsec phase2-interface
edit "site_002"
set phase1name "site_002"
set addke1 1090
set proposal aes128-sha1 aes256-sha1 aes128-sha256 aes256-sha256 aes128gcm
aes256gcm chacha20poly1305
next
end
2. Configure FGT-D:
vd: root/0
name: site_001PPPPPP1
version: 2
interface: port1 9
addr: 172.16.200.9:500 -> 172.16.200.8:500
tun_id: 172.16.200.8/::172.16.200.8
remote_location: 0.0.0.0
network-id: 0
transport: UDP
created: 88s ago
peer-id: 172.16.200.8
peer-id-auth: no
pending-queue: 0
PPK: no
IKE SA: created 1/1 established 1/1 time 0/0/0 ms
IPsec SA: created 1/1 established 1/1 time 0/0/0 ms
QKD: no
PQC-KEM (IKE): yes
PQC-KEM (all IPsec): yes
lifetime/rekey: 86400/86041
DPD sent/recv: 00000000/00000000
peer-id: 172.16.200.8
Starting from FortiOS 7.6.3, SSL VPN tunnel mode is no longer supported. All existing configurations related to SSL
VPN tunnel mode, including associated firewall policies, are not upgraded from previous versions to FortiOS 7.6.3. To
get a list of CLI commands that are not supported, see Appendix A: FortiOS CLI on page 404.
To ensure uninterrupted remote access, you must migrate your SSL VPN tunnel mode configuration to IPsec VPN
before upgrading to FortiOS 7.6.3.
If you are using SSL VPN web mode, your existing configurations will persist after the upgrade. Thus, SSL VPN web
mode remains functional and continues to operate under its new name Agentless VPN, see Agentless VPN 7.6.3 on
page 413 and Agentless VPN.
FortiGates set up as SSL VPN clients are no longer supported. All existing configurations related to SSL VPN clients,
including firewall policies, are not upgraded from previous versions to FortiOS 7.6.3. To configure remote access using
IPsec VPN, see FortiGate as dialup client.
This topic includes the following sections:
l IPsec and SSL VPN comparison on page 392
l Migration planning and design considerations on page 393
l Migration steps for SSL VPN tunnel mode to IPsec VPN on page 393
l Key components comparison on page 394
l Examples on page 396
l Appendix A: FortiOS CLI on page 404
l Appendix B: FortiClient XML on page 406
IPsec VPN and SSL VPN tunnel mode each offer distinct advantages, depending on the use case. Some key benefits of
IPsec VPN include:
l Strong security: Uses robust encryption standards to protect data from cyber threats.
l Efficient performance: Optimized bandwidth usage and low latency improve overall network performance.
l Seamless integration: Works well with enterprise security policies and authentication mechanisms.
l Advanced Networking Features: Supports split tunneling, split DNS, traffic shaping, and QoS for better traffic
management.
l Scalability: Suitable for large-scale enterprise deployments with both site-to-site IPsec VPNs and remote access
options.
l Interoperability: Compatible with a wide range of networking devices and operating systems.
l End-to-End Encryption: Ensures data integrity and confidentiality throughout transmission.
l Automatic Key Management: Uses protocols like IKEv1, IKEv2 for secure and automated key exchanges.
l Multi-Factor Authentication (MFA) Support: Enhances security by integrating with strong authentication
methods such as LDAP, Radius, SAML, and so on.
l Resilience: Supports failover and redundancy for high availability and business continuity.
l Traffic Segmentation: Enables policy-based routing and access controls to restrict and optimize traffic flow.
l Compliance Readiness: Helps meet security standards and regulatory requirements like GDPR and HIPAA.
l Device Identity Verification: Uses certificates or pre-shared keys for secure endpoint authentication.
l Support for Mobile and Remote Users: Efficiently handles varying network conditions, including broadband and
cellular connections.
For more details, see the Migration background section of the SSL VPN to IPsec VPN Migration guide.
You are strongly advised to plan a detailed migration strategy to transition your SSL VPN tunnel mode configuration to
IPsec VPN. Key considerations for a successful migration include:
1. Assessing current SSL VPN tunnel mode usage and identifying its key configurations on FortiGate.
2. Ensuring IPsec VPN compatibility with existing authentication methods, routing configurations, and network
policies.
3. Testing the new IPsec VPN configuration before deploying it organization-wide.
4. Communicating the transition plan to users and providing necessary training on IPsec VPN usage.
For information about different design considerations when migrating from SSL VPN tunnel mode to IPsec VPN, see
Design Considerations.
Migrating from SSL VPN tunnel mode to IPsec VPN involves multiple steps, depending on factors such as the migration
method (GUI or CLI), whether the FortiGate is managed by FortiManager, and the specific FortiOS version in use. Follow
the steps below for a smooth transition:
1. Back up existing configuration.
Before making any changes, back up the current SSL VPN tunnel mode configuration to prevent data loss and
facilitate rollback if needed. See Backing up and restoring configurations from the GUI.
2. Convert FortiGate and FortiClient configurations in their existing versions.
The SSL VPN tunnel mode configuration can be converted to IPsec VPN using either the GUI, CLI, or
FortiConverter service.
a. Migrating FortiGate and FortiClient using GUI:
i. For FortiGate devices running FortiOS 7.4.4 and planned for an upgrade to FortiOS 7.6.3, migration to
IPsec VPN is required before upgrading. For detailed steps, see the FortiOS 7.4 SSL VPN to IPsec VPN
Migration guide.
ii. For FortiGate devices running FortiOS 7.6.0, 7.6.1, or 7.6.2 and planned for an upgrade to FortiOS 7.6.3,
migration to IPsec VPN is also required before upgrading. For detailed steps, see the FortiOS 7.6 SSL
VPN to IPsec VPN Migration guide.
iii. For FortiClient endpoint configuration migration, see FortiClient endpoint configuration migration.
b. Migrating FortiGate using CLI and FortiClient using XML configuration:
i. For CLI-based migration of FortiGate and XML-based configuration migration for FortiClient, see
Examples on page 396.
c. Use the FortiConverter service to perform the conversion.
3. Enable IPsec VPN alongside SSL VPN during transition.
a. Apply the converted IPsec VPN configuration to the current FortiOS version, and configure the IPsec VPN
profile in FortiClient EMS.
b. Deploy the IPsec VPN profile from FortiClient EMS to endpoints.
4. Verify IPsec VPN functionality.
Test the IPsec VPN connection between FortiClient and FortiGate to confirm successful migration and ensure
reliable IPsec VPN connectivity.
5. Upgrade steps for FortiGate managed by FortiManager.
If FortiGate is managed by FortiManager, follow these steps to ensure compatibility and centralized management
after completing the IPsec VPN migration on one of the FortiGate devices:
a. Upgrade FortiManager to version 7.6.3 before upgrading FortiOS to maintain compatibility.
b. Re-import the new FortiGate configuration to FortiManager 7.6.3 to ensure centralized management
consistency.
c. Use FortiManager to upgrade FortiOS to version 7.6.3.
d. Re-validate the IPsec VPN configuration after upgrade to confirm full functionality.
6. Upgrade steps for standalone FortiGate.
For unmanaged or standalone FortiGate devices:
a. Upgrade the FortiGate to FortiOS 7.6.3 after completing the IPsec VPN migration. The unsupported SSL VPN
tunnel mode configuration is automatically removed after upgrade. For a list of unsupported CLI commands,
see Appendix A: FortiOS CLI on page 404.
b. After upgrade, re-validate the IPsec VPN configuration to ensure IPsec VPN’s functionality.
7. Enforce IPsec VPN and disable SSL VPN on FortiClient EMS.
After verifying that IPsec VPN is functioning correctly, update the FortiClient EMS VPN profile:
a. Remove SSL VPN tunnel mode configurations.
b. Enforce IPsec VPN usage across all managed endpoints to complete the transition.
This section aims to help you understand how your existing SSL VPN tunnel CLI setup maps to an IPsec VPN CLI setup.
By understanding these mappings, you can effectively convert your SSL VPN tunnel configuration to IPsec VPN while
maintaining equivalent functionality and security.
SSL VPN configuration on FortiOS consists of several key elements, each defined by specific CLI settings. The following
sections outline these components and their respective configuration commands:
SSL VPN portal #config vpn ssl web Defines portal settings For FortiOS 7.6.2, see
portal such as user access config vpn ssl web portal.
permissions, bookmarks,
and tunnel mode and web
mode configurations.
SSL VPN portal #config vpn ssl Specifies global SSL VPN For FortiOS 7.6.2, see
settings settings, including listening config vpn ssl settings.
ports, encryption methods,
authentication parameters,
and routing options.
Firewall policies #config firewall Defines firewall policies For FortiOS 7.6.2, see
policy that regulate SSL VPN config firewall policy.
traffic by specifying
source/destination, allowed
services, and security
rules. The SSL-VPN tunnel
interface (ssl.root) is used
in the Incoming or
Outgoing interface fields.
IPsec VPN setup consists of multiple configuration elements, including Phase 1 and Phase 2 settings that establish and
maintain the tunnel, as well as firewall policies that control traffic flow. Depending on your use cases, you can configure
multiple SSL VPN web portals, each tailored to specific user groups or access requirements. For each SSL VPN web
portal, you might also need one or more corresponding IPsec Phase 1 and Phase 2 tunnel configurations to support your
current use cases.
Following is an overview of key configurations of IPsec VPN:
IPsec Phase 1 #config vpn ipsec Defines phase 1 settings For FortiOS 7.6.2, see
phase1- for IPsec VPN tunnels, config vpn ipsec phase1-
interface
including authentication, interface.
encryption, and key
exchange parameters.
IPsec Phase 2 #config vpn iphase Specifies phase 2 settings For FortiOS 7.6.2, see
phase2- for IPsec VPN, including config vpn iphase phase2-
interface
security proposals and interface.
traffic selectors.
Firewall policies #config firewall Defines firewall policies For FortiOS 7.6.2, see
policy that regulate IPsec VPN config firewall policy.
traffic by specifying
source/destination, allowed
services, and security
rules. The IPsec VPN
tunnel interface is used in
the Incoming or Outgoing
interface fields.
Examples
You can convert the SSL VPN tunnel mode settings to IPsec using CLI/XML on FortiGate and FortiClient EMS. Use the
following examples to understand your current SSL VPN tunnel mode configuration and its equivalent IPsec VPN
configuration after conversion. The XML configuration for SSL VPN tunnel mode to IPsec VPN remains same in both
examples.
The configurations provided in these examples are for demonstration purposes only. Customers must evaluate their own
environments and, with the help of these example configurations, develop an IPsec equivalent setup suitable for their
transition. It is essential to test and validate the configurations before applying them to production environments.
Topology
Example 1
Corp1 uses the following SSL VPN tunnel mode configuration. This configuration enables remote users to securely
connect to corporate network using SSL VPN tunnel mode configuration. It enforces full tunnel mode, meaning all user
traffic is routed through the VPN tunnel without split tunneling. In addition, features such as auto-connect, keep alive,
and save password are enabled.
The following network setup is in use:
l WAN Interface (listening for SSL VPN connections on port 443): wan1
l LAN Interface: port1
l IP address assigned to VPN users: REMOTE-CLIENT-ADDRESS-RANGE
l User group for user authentication: vpn-user-group
l Address object for LAN: Local-LAN
l Other features: auto-connect, keep alive, save password.
If your SSL VPN configuration assigns IP addresses to remote clients from multiple IP ranges,
you can achieve similar behavior with IPsec VPN using mode config. IPsec mode config
supports assigning client IP addresses from multiple IP ranges by referencing an address
group that contains the desired IP range objects. During IKE negotiation, the FortiGate
dynamically allocates an available IP address from the specified address group to the
connecting IPsec client.
next
edit "my-full-tunnel-portal"
set tunnel-mode enable
set auto-connect enable
set keep-alive enable
set save-password enable
set ip-pools "REMOTE-CLIENT-ADDRESS-RANGE"
set split-tunneling disable
next
end
To view the XML configuration on FortiClient EMS for SSL VPN configuration, see the XML configuration for SSL VPN
on page 406 section in Appendix B: FortiClient XML on page 406.
The following configuration provides an equivalent setup to the existing SSL VPN configuration, enabling a seamless
migration to IPsec VPN while maintaining secure remote access.
IPsec VPN can be configured to use either pre-shared key (PSK) or certificate-based
authentication for peer identity authentication. This deployment example uses PSK for
simplicity and ease of configuration. When using certificate-based authentication,
administrators must configure a certificate authority (CA), issue certificates to all FortiClient
endpoints, and ensure the FortiGate is properly configured to validate client certificates during
IKE negotiation. For more information about certificate-based authentication, see Dialup IPsec
VPN with certificate authentication.
To view the XML configuration on FortiClient EMS for IPsec VPN configuration, see the XML configuration for IPsec VPN
on page 409 section in Appendix B: FortiClient XML on page 406.
Example 2
Corp2 uses the following SSL VPN tunnel mode configuration. The company has different types of users. Based on their
specific requirements, users are assigned different SSL VPN portals, each offering distinct connectivity and security
settings.
l dhcpra: The dhcpra portal enforces full tunneling, ensuring that all internet traffic from VPN users is routed through
the FortiGate firewall. VPN users obtain an IP address dynamically from an external DHCP server, with FortiGate
acting as a DHCP relay agent to facilitate it. In addition, features such as auto-connect, keep alive and save
password enabled.
l split-dns: The split-dns portal is designed for users who need access to specific corporate networks while allowing
direct internet access for non-corporate traffic. VPN users are assigned custom DNS servers for their DNS queries.
Certain domains are routed to internal DNS servers using split DNS feature. In addition, features such as auto-
connect, keep alive and save password enabled.
If your SSL VPN configuration assigns IP addresses to remote clients from multiple IP ranges,
you can achieve similar behavior with IPsec VPN using mode config. IPsec mode config
supports assigning client IP addresses from multiple IP ranges by referencing an address
group that contains the desired IP range objects. During IKE negotiation, the FortiGate
dynamically allocates an available IP address from the specified address group to the
connecting IPsec client.
config authentication-rule
edit 1
set group "group-dhcpra"
set portal "dhcpra"
next
edit 2
set groups "group-split-dns"
set portal "split-dns"
next
end
end
To view the XML configuration on FortiClient EMS for SSL VPN configuration, see the XML configuration for SSL VPN
on page 406 section in Appendix B: FortiClient XML on page 406.
Since IPsec VPN does not support portals, you may be required to configure separate IPsec VPN tunnels to
accommodate the various use cases your current SSL VPN tunnel mode web portals support. Each IPsec VPN tunnel
should be configured based on the specific security, authentication, and routing requirements of the associated SSL
VPN portal.
IPsec VPN can be configured to use either pre-shared key (PSK) or certificate-based
authentication for peer identity authentication. This deployment example uses PSK for
simplicity and ease of configuration. When using certificate-based authentication,
administrators must configure a certificate authority (CA), issue certificates to all FortiClient
endpoints, and ensure the FortiGate is properly configured to validate client certificates during
IKE negotiation. For more information about certificate-based authentication, see Dialup IPsec
VPN with certificate authentication.
end
SSL VPN in tunnel mode supports the configuration of both split DNS and DNS suffix. For
dialup IPsec tunnels, the availability of these features depends on the IKE version in use.
l IKE version 1: Supports DNS suffix configuration but requires enabling unity-support
The configured user group, <group-name>, must be either configured inside the IPsec
Phase 1 setting, set authusrgrp <group-name>, or in the firewall policy, set groups
<group-name>, to allow the traffic to flow through the IPsec tunnel. If the user group is
configured in both IPsec Phase 1 and firewall policy, the traffic does not flow through the IPsec
tunnel. In the example discussed, the user group is configured it in the IPsec tunnel.
To view the XML configuration on FortiClient EMS for IPsec VPN configuration, see the XML configuration for IPsec VPN
on page 409 section in Appendix B: FortiClient XML on page 406.
After upgrade to FortiOS 7.6.3, the following configuration commands for SSL VPN tunnel mode are no longer supported
or configurable. These configurations will be lost once upgraded to FortiOS 7.6.3. Administrators should migrate their
SSL VPN tunnel-related configuration to IPsec VPN accordingly to avoid remote access issues in FortiOS 7.6.3 or later.
l SSL VPN settings:
The commands under config vpn ssl settings related to tunnel mode.
config vpn ssl settings
set dtls-hello-timeout
set dtls-heartbeat-idle-timeout
set dtls-heartbeat-interval
set dtls-heartbeat-fail-count
set tunnel-ip-pools
set tunnel-ipv6-pools
set dns-server1
set dns-server2
set wins-server1
set wins-server2
set ipv6-dns-server1
set ipv6-dns-server2
set ipv6-wins-server1
set ipv6-wins-server2
set dtls-tunnel
set dtls-max-proto-ver
set dtls-min-proto-ver
set tunnel-connect-without-reauth
set tunnel-user-session-timeout
set tunnel-addr-assigned-method
set ztna-trusted-client
end
After upgrade to FortiOS 7.6.3, the following configuration commands for SSL VPN Client are no longer supported or
configurable. These configurations will be lost once upgraded to FortiOS 7.6.3. Administrators should migrate their SSL
VPN client-related configuration to IPsec VPN accordingly to avoid remote access issues in FortiOS 7.6.3 or later.
l SSL VPN Client configuration
config vpn ssl client
end
l All references to interfaces configured under config system interface with their type set as SSL (that is, set
type ssl), including:
l Interface definitions under config system interface
l Link monitors referencing SSL interfaces
l Zone configurations containing SSL interfaces
l Firewall policies involving SSL interfaces
To understand the various XML settings available in FortiClient EMS for SSL VPN and IPsec configuration, refer to the
XML Reference Guide version that matches your FortiClient EMS version. For example, for FortiClient EMS 7.4.2, refer
the FortiClient 7.4.2 XML Reference Guide.
The following XML configuration on FortiClient EMS demonstrates the SSL VPN settings used for Example 1 on page
396 and Example 2 on page 399:
<forticlient_configuration>
<vpn>
<options>
<on_os_start_connect_has_priority>0</on_os_start_connect_has_priority>
<allow_personal_vpns>0</allow_personal_vpns>
<on_os_start_connect/>
<disable_connect_disconnect>0</disable_connect_disconnect>
<keep_running_max_tries>0</keep_running_max_tries>
<show_negotiation_wnd>0</show_negotiation_wnd>
<autoconnect_only_when_offnet>0</autoconnect_only_when_offnet>
<autoconnect_on_install>0</autoconnect_on_install>
<minimize_window_on_connect>1</minimize_window_on_connect>
<secure_remote_access>0</secure_remote_access>
<certs_require_keyspec>0</certs_require_keyspec>
<autoconnect_tunnel>sslvpn</autoconnect_tunnel>
<current_connection_type>ssl</current_connection_type>
<use_windows_credentials>0</use_windows_credentials>
<suppress_vpn_notification>0</suppress_vpn_notification>
<show_vpn_before_logon>0</show_vpn_before_logon>
<use_legacy_vpn_before_logon>0</use_legacy_vpn_before_logon>
<current_connection_name>sslvpn</current_connection_name>
<disable_internet_check>1</disable_internet_check>
</options>
<lockdown>
<max_attempts>3</max_attempts>
<grace_period>120</grace_period>
<exceptions>
<apps/>
<ips/>
<domains/>
<icdb_domains/>
</exceptions>
<enabled>0</enabled>
</lockdown>
<ipsecvpn>
<connections/>
<options>
<check_for_cert_private_key>0</check_for_cert_private_key>
<usesmcardcert>1</usesmcardcert>
<uselocalcert>0</uselocalcert>
<no_dns_registration>0</no_dns_registration>
<usewincert>1</usewincert>
<use_win_current_user_cert>1</use_win_current_user_cert>
<enable_udp_checksum>0</enable_udp_checksum>
<disallow_invalid_server_certificate>0</disallow_invalid_server_certific
<disable_default_route>0</disable_default_route>
<block_ipv6>1</block_ipv6>
<beep_if_error>0</beep_if_error>
<enhanced_key_usage_mandatory>0</enhanced_key_usage_mandatory>
<use_win_local_computer_cert>1</use_win_local_computer_cert>
<show_auth_cert_only>0</show_auth_cert_only>
<enabled>0</enabled>
</options>
</ipsecvpn>
<enabled>1</enabled>
<sslvpn>
<connections>
<connection>
<name>sslvpn</name>
<uid>434A9FE6-7CC5-48C2-83E9-F264B15F076C</uid>
<machine>0</machine>
<keep_running>0</keep_running>
<username/>
<password/>
<certificate/>
<pkcs11_lib/>
<prompt_certificate>0</prompt_certificate>
<prompt_username>1</prompt_username>
<fgt>1</fgt>
<disclaimer_msg/>
<sso_enabled>0</sso_enabled>
<keep_fqdn_resolution_consistency>0</keep_fqdn_resolution_consis
<use_external_browser>0</use_external_browser>
<azure_auto_login>
<enabled>0</enabled>
<azure_app>
<tenant_name/>
<client_id/>
</azure_app>
</azure_auto_login>
<single_user_mode>0</single_user_mode>
<ui>
<show_remember_password>1</show_remember_password>
<show_alwaysup>1</show_alwaysup>
<show_autoconnect>1</show_autoconnect>
<save_username>1</save_username>
</ui>
<warn_invalid_server_certificate>1</warn_invalid_server_certific
<allow_standard_user_use_system_cert>0</allow_standard_user_use_
<redundant_sort_method>0</redundant_sort_method>
<RedundantSortMethod>0</RedundantSortMethod>
<tags>
<allowed/>
<prohibited/>
</tags>
<host_check_fail_warning/>
<android_cert_path/>
<android_cert_source>filesystem</android_cert_source>
<no_vnic_dns_server>0</no_vnic_dns_server>
<dual_stack>0</dual_stack>
<server>192.0.2.1:443</server>
<on_connect>
<script>
<os>windows</os>
<script/>
</script>
<script>
<os>MacOSX</os>
<script/>
</script>
<script>
<os>linux</os>
<script/>
</script>
</on_connect>
<on_disconnect>
<script>
<os>windows</os>
<script/>
</script>
<script>
<os>MacOSX</os>
<script/>
</script>
<script>
<os>linux</os>
<script/>
</script>
</on_disconnect>
<traffic_control>
<enabled>0</enabled>
<mode>1</mode>
</traffic_control>
</connection>
</connections>
<options>
<preferred_dtls_tunnel>0</preferred_dtls_tunnel>
<prefer_sslvpn_dns>1</prefer_sslvpn_dns>
<negative_split_tunnel_metric/>
<no_dns_registration>0</no_dns_registration>
<disallow_invalid_server_certificate>0</disallow_invalid_server_certific
<dnscache_service_control>0</dnscache_service_control>
<block_ipv6>1</block_ipv6>
<use_gui_saml_auth>0</use_gui_saml_auth>
<warn_invalid_server_certificate>1</warn_invalid_server_certificate>
<show_auth_cert_only>0</show_auth_cert_only>
<enabled>1</enabled>
</options>
</sslvpn>
</vpn>
<endpoint_control>
<ui>
<display_vpn>1</display_vpn>
</ui>
</endpoint_control>
</forticlient_configuration>
The following XML configuration on FortiClient EMS demonstrates the VPN settings for Example 1 and Example 2.
However, the value for the <networkid> XML tag will vary based on the network ID specified in the corresponding
IPsec configuration.
<forticlient_configuration>
<vpn>
<options>
<on_os_start_connect_has_priority>0</on_os_start_connect_has_priority>
<allow_personal_vpns>0</allow_personal_vpns>
<on_os_start_connect/>
<disable_connect_disconnect>0</disable_connect_disconnect>
<keep_running_max_tries>0</keep_running_max_tries>
<show_negotiation_wnd>0</show_negotiation_wnd>
<autoconnect_only_when_offnet>0</autoconnect_only_when_offnet>
<autoconnect_on_install>0</autoconnect_on_install>
<minimize_window_on_connect>1</minimize_window_on_connect>
<secure_remote_access>0</secure_remote_access>
<certs_require_keyspec>0</certs_require_keyspec>
<autoconnect_tunnel>ipsec</autoconnect_tunnel>
<current_connection_type>ipsec</current_connection_type>
<use_windows_credentials>0</use_windows_credentials>
<suppress_vpn_notification>0</suppress_vpn_notification>
<show_vpn_before_logon>0</show_vpn_before_logon>
<use_legacy_vpn_before_logon>0</use_legacy_vpn_before_logon>
<current_connection_name>ipsec</current_connection_name>
<disable_internet_check>1</disable_internet_check>
</options>
<lockdown>
<max_attempts>3</max_attempts>
<grace_period>120</grace_period>
<exceptions>
<apps/>
<ips/>
<domains/>
<icdb_domains/>
</exceptions>
<enabled>0</enabled>
</lockdown>
<ipsecvpn>
<connections>
<connection>
<name>ipsec</name>
<uid>A47A1B4A-01C4-4E19-9A21-3981067058B5</uid>
<machine>0</machine>
<keep_running>0</keep_running>
<disclaimer_msg/>
<single_user_mode>0</single_user_mode>
<type>manual</type>
<ui>
<show_remember_password>1</show_remember_password>
<show_alwaysup>1</show_alwaysup>
<show_autoconnect>1</show_autoconnect>
<show_passcode>0</show_passcode>
<save_username>0</save_username>
</ui>
<redundant_sort_method>0</redundant_sort_method>
<tags>
<allowed/>
<prohibited/>
</tags>
<host_check_fail_warning/>
<ike_settings>
<server>192.0.2.1</server>
<authentication_method>Preshared Key</authentication_met
<fgt>1</fgt>
<prompt_certificate>1</prompt_certificate>
<xauth>
<use_otp>0</use_otp>
<enabled>1</enabled>
<prompt_username>1</prompt_username>
</xauth>
<version>2</version>
<mode>aggressive</mode>
<key_life>86400</key_life>
<localid/>
<implied_SPDO>0</implied_SPDO>
<implied_SPDO_timeout>0</implied_SPDO_timeout>
<nat_traversal>1</nat_traversal>
<nat_alive_freq>5</nat_alive_freq>
<enable_local_lan>0</enable_local_lan>
<enable_ike_fragmentation>0</enable_ike_fragmentation>
<mode_config>1</mode_config>
<dpd>1</dpd>
<run_fcauth_system>0</run_fcauth_system>
<sso_enabled>0</sso_enabled>
<ike_saml_port>443</ike_saml_port>
<dpd_retry_count>3</dpd_retry_count>
<dpd_retry_interval>5</dpd_retry_interval>
<networkid>0</networkid>
<auth_data>
<preshared_key>Enc
4beb1e1c4306fadaaf3409c77e27861e20b21eb51dc331d082bf4c6c272404f0</preshared_key>
</auth_data>
<xauth_timeout>120</xauth_timeout>
<dhgroup>5;15</dhgroup>
<proposals>
<proposal>AES128|SHA256</proposal>
<proposal>AES256|SHA256</proposal>
</proposals>
</ike_settings>
<ipsec_settings>
<remote_networks>
<network>
<addr>0.0.0.0</addr>
<mask>0.0.0.0</mask>
</network>
<network>
<addr>::/0</addr>
<mask>::/0</mask>
</network>
</remote_networks>
<dhgroup>14</dhgroup>
<key_life_type>seconds</key_life_type>
<key_life_seconds>43200</key_life_seconds>
<key_life_Kbytes>5200</key_life_Kbytes>
<replay_detection>1</replay_detection>
<pfs>1</pfs>
<use_vip>1</use_vip>
<virtualip>
<type>modeconfig</type>
<ip>0.0.0.0</ip>
<mask>0.0.0.0</mask>
<dnsserver>0.0.0.0</dnsserver>
<winserver>0.0.0.0</winserver>
</virtualip>
<proposals>
<proposal>AES128|SHA1</proposal>
<proposal>AES256|SHA256</proposal>
</proposals>
</ipsec_settings>
<android_cert_path/>
<warn_invalid_server_certificate>1</warn_invalid_server_certific
<on_connect>
<script>
<os>windows</os>
<script/>
</script>
<script>
<os>MacOSX</os>
<script/>
</script>
<script>
<os>linux</os>
<script/>
</script>
</on_connect>
<on_disconnect>
<script>
<os>windows</os>
<script/>
</script>
<script>
<os>MacOSX</os>
<script/>
</script>
<script>
<os>linux</os>
<script/>
</script>
</on_disconnect>
<traffic_control>
<enabled>0</enabled>
<mode>1</mode>
</traffic_control>
</connection>
</connections>
<options>
<check_for_cert_private_key>0</check_for_cert_private_key>
<usesmcardcert>0</usesmcardcert>
<uselocalcert>0</uselocalcert>
<no_dns_registration>0</no_dns_registration>
<usewincert>0</usewincert>
<use_win_current_user_cert>1</use_win_current_user_cert>
<enable_udp_checksum>0</enable_udp_checksum>
<disallow_invalid_server_certificate>0</disallow_invalid_server_certific
<disable_default_route>0</disable_default_route>
<block_ipv6>1</block_ipv6>
<beep_if_error>0</beep_if_error>
<enhanced_key_usage_mandatory>0</enhanced_key_usage_mandatory>
<use_win_local_computer_cert>1</use_win_local_computer_cert>
<show_auth_cert_only>0</show_auth_cert_only>
<enabled>1</enabled>
</options>
</ipsecvpn>
<enabled>1</enabled>
<sslvpn>
<connections/>
<options>
<preferred_dtls_tunnel>0</preferred_dtls_tunnel>
<prefer_sslvpn_dns>1</prefer_sslvpn_dns>
<negative_split_tunnel_metric/>
<no_dns_registration>0</no_dns_registration>
<disallow_invalid_server_certificate>0</disallow_invalid_server_certific
<dnscache_service_control>0</dnscache_service_control>
<block_ipv6>1</block_ipv6>
<use_gui_saml_auth>0</use_gui_saml_auth>
<warn_invalid_server_certificate>1</warn_invalid_server_certificate>
<show_auth_cert_only>0</show_auth_cert_only>
<enabled>0</enabled>
</options>
</sslvpn>
</vpn>
<endpoint_control>
<ui>
<display_vpn>1</display_vpn>
</ui>
</endpoint_control>
</forticlient_configuration>
Starting from FortiOS 7.6.3, SSL VPN web mode is now referred to as Agentless VPN. This updated terminology reflects
FortiGate’s ability to provide secure remote access without requiring a VPN client or agent on the user’s device.
Changes in FortiOS 7.6.3 and later:
l Terminology update: The term SSL VPN Web Mode is now Agentless VPN across the FortiOS GUI and public
documentation. The CLI configuration to configure it remains unchanged.
l Existing configurations remain valid: Any existing SSL VPN web mode configurations will continue to work as
expected.
l No functional changes: Users can continue securely accessing web-based applications and services through their
browser without installing a VPN client.
l However, SSL VPN tunnel mode is no longer supported. Thus, users who are using SSL VPN tunnel mode must
migrate to IPsec VPN. See Migration from SSL VPN tunnel mode to IPsec VPN 7.6.3 on page 392 and Appendix A:
FortiOS CLI on page 404.
The FortiClient Secure Internet Access (SIA) template for the VPN Wizard enables the configuration of a remote access
IPsec VPN to ensure all FortiClient traffic is routed through the FortiGate IPsec VPN tunnel for security inspection. The
template allows administrators to select the desired security profile, including certificate or deep inspection, and
configure policies to block access to botnet and C&C servers. Additionally, it provides an option to allow remote VPN
users access to specified local subnets and local interfaces.
To configure IPsec VPN with FortiClient as the dial up client in the GUI:
5. Configure the following Local FortiGate and Secure Internet Access (SIA) settings:
a. From the Incoming interface that binds to tunnel dropdown list, select the port. This port may be your WAN
interface, or any other interface designated for establishing the IPsec tunnel on.
b. Enable Local subnets that remote endpoints can access.
c. Set the Local interface and Local Address.
d. From the Shared WAN dropdown list, select WAN interface. This interface can also be the same interface used
for establishing the IPsec tunnel if your internet access is through it.
e. Enable the other Secure Internet Access (SIA) fields, as needed.
The Block external feeds field is an optional feature that allows you to block specific
external feeds. After enabling the field, select an Address External Feed or Dynamic
Address option to proceed.
6. Click Submit.
Support is added for configuring Quantum Key Distribution (QKD) and Digital Signature Algorithm (DSA) / Post-
Quantum Cryptography (PQC). This allows you to mix keys from QKD, PQC, and traditional Diffie-Hellman (DH) key
exchange, ensuring robust security. By combining different types of keys, users can achieve maximum resilience
against potential threats.
This feature can be used in environments handling highly sensitive data, necessitating the highest level of security. For
example, a financial institution might use this feature in its network infrastructure to secure communications between
different system components. This ensures that even if one key exchange method is compromised, the other methods
will still provide secure communication.
In such a scenario, the financial institution could enable QKD for advanced quantum security, PQC for resilience against
quantum threats, and DH for traditional key exchange. By combining these methods, they can tailor their security
approach to meet specific needs and maximize resilience against potential threats.
Example
To configure IPsec key retrieval with a QKD and PQC keys together by CLI:
1. Configure FGT-A
a. Configure the QKD profile:
config vpn qkd
edit "qkd_1"
set server "10.1.100.9"
set port 8989
set id "123456"
set peer "qkdtest"
next
end
2. Configure FGT-D
a. Configure the QKD profile:
config vpn qkd
edit "qkdtest"
set server "10.1.100.9"
set port 8989
set id "123456"
set peer "qkdtest"
next
end
transport: UDP
created: 1557s ago
peer-id: 173.1.1.1
peer-id-auth: no
pending-queue: 0
PPK: no
IKE SA: created 1/18 established 1/18 time 0/2/10 ms
IPsec SA: created 1/33 established 1/18 time 0/16/20 ms
id/spi: 67 bc882e536cbc7f1d/ede854f1e0dc71bb
direction: responder
status: established 17-17s ago = 0ms
proposal: aes128-sha256
child: yes
SK_ei: 4e415c84e086e980-059f1be89239ec30
SK_er: fb14db5b3718dad4-e7f5158308ba00c0
SK_ai: 8894937bd4e66304-a5c64941dc08d544-c7d725408247cfc4-489a292a3fb44b51
SK_ar: 0bbf85dcd9daaa1b-1f1e04318b69aaae-befc871e40f9ab4c-0d005f0f980a3d60
message-id sent/recv: 0/1
QKD: yes
PQC-KEM (IKE): yes
PQC-KEM (all IPsec): yes
lifetime/rekey: 86400/86112
DPD sent/recv: 00000000/00000000
peer-id: 173.1.1.1
This section includes information about user and authentication related new features:
l Authentication on page 423
Authentication
You can now use a global option to specify how many passwords to save for local users and system administrators, and
then you can specify how many of the saved passwords can be reused. Password history is visible in the backup
configuration.
The config system global command includes a new option:
config system global
set user-history-password-threshold <integer>
end
set user-history- Global maximum number of previous passwords saved for each local user and
password-threshold system administrator (3-15, default = 3).
<integer>
When a password policy is enabled for system administrators, a new option is available:
config system password-policy
set reuse-password-limit <integer>
end
When expire-status and reuse-password are enabled in the password policy for a local user, a new option is
available:
set reuse-password-limit Number of times the password for system administrators or local users can be
<integer> reused (0 - 20, default = 0). If set to 0, the password can be reused an unlimited
number of times.
Cannot exceed the global user-history-password-threshold.
For existing password policies, the new options are disabled by default after upgrading to FortiOS 7.6.0 or later.
Multiple password policies can be created and applied to different local user accounts.
1. Configure a global password history limit.
In this example, the global policy is to save three passwords for each local user and system administrator.
config system global
set user-history-password-threshold 3
end
4. Add the local user to a firewall policy, an SSL VPN policy, or to FortiGate user groups used in policies.
Before the password for the local user expires, the FortiOS GUI provides the option to change the password during login
or skip the password change.
If the password for the local user has expired, the FortiOS GUI provides the option to change the password during login.
When the local user enters a password that adheres to the policy, the login continues. If the new password has been
used too many times before, a warning message is displayed.
The password policy applies to all administrator accounts when enabled, including the built-in admin account named
admin. If an existing system administrator account fails to comply with the enabled password policy, the administrator is
forced to change passwords on next login.
1. Configure a global history password limit.
In this example, the global policy is to save three passwords for each local user and system administrator.
config system global
set user-history-password-threshold 3
end
b. Enable the expire status and set the password reuse limit.
In this example, the reuse-password-limit is set to 1, which means one of the globally-set three saved
passwords can be reused.
config system password-policy
set expire-status enable
set expire-day 3
set reuse-password-limit 1
end
When a password policy is enabled, and passwords for existing system administrators fail to comply with the new policy,
the Change Password dialog box is displayed to communicate the policy requirements and prompt the password
change.
After the system administrator password expires, the Change Password dialog box is displayed after the system
administrator logs in to prompt the password change:
DNS and ICMP queries can trigger RADIUS authentication. In some situations, a RADIUS client cannot trigger
authentication with only HTTP, HTTPS, or Telnet traffic, such as VoIP gateways or servers. Without RADIUS
authentication there is no RADIUS accounting, which can be required in some circumstances.
In this example, a Client PC is used as a VoIP gateway.
To configure FGT-B:
2. Find the MAC address on the interface. In the RADIUS accounting start message it will be the Called-Station-Id.
# get hardware nic port10 | grep HW
Current_HWaddr 80:80:2c:a3:50:f3
Permanent_HWaddr 80:80:2c:a3:50:f3
5. Configure a policy:
config firewall policy
edit 1
1. Trigger RADIUS authentication on the Client PC using the ip-auth-bypass feature configured on the FortiGate.
This can be done by either:
l Pinging any external resource (ICMP query).
l Connecting to an external webpage using an FQDN URL in a browser with an empty cache, which requires a
new DNS query.
The FortiGate will use the Client PC IP address as the credentials for authentication. If successful, this will be
followed by a RADIUS accounting start message.
2. On FGT-B, check the local firewall authentication list.
The RADIUS user that is used for ip-auth-bypass is the IP address of the Client PC. The source MAC address is
the MAC address of the Client PC.
# diagnose firewall auth list
10.1.100.188, 10.1.100.188
src_mac: 00:0c:29:44:be:b9
type: fw, id: 0, duration: 16, idled: 10
expire: 284, allow-idle: 300, max-life: 2384
flag(14): hard radius
server: FreeRADIUS
packets: in 4 out 5, bytes: in 1105 out 1044
group_id: 5
group_name: remote-radius
3. Check the RADIUS accounting start messages in the traffic between FGT-B and the RADIUS server. The MAC
address of FGT-B is the Called-Station-Id, and the IP address of the Client PC is the User-Name.
FortiGate models with a log disk can preserve authentication sessions a firewall reboot. This eliminates the need to
reauthenticate after rebooting, enhancing the user experience.
When session authentication backup is enabled, authenticated sessions are backed up at the configured interval. By
default, session authentication backup is disabled.
config system global
set auth-session-auto-backup {enable | disable}
set auth-session-auto-backup-interval {1min | 5min | 15min | 30min | 1hr}
end
2. Authenticate with valid user credentials on a PC and start communicating with an external resources .
3. On the FortiGate, check that current sessions are backed up correctly:
2024-07-11 06:47:24 vd_name:root logon_total:1 num: 1.
2024-07-11 06:47:24 [get_auth_backup_file:107]: Temp json file path: /var/log/auth/auth_
ses.json.tmp
2024-07-11 06:47:24 [authd_json_session_backup:367]: Authenticated sessions are backed
up.
2024-07-11 06:47:24 [crypto_free:216]: [crypto_free:216]: (./migbase/osapi/rnd.c:266)
2024-07-11 06:47:24 [crypto_free:216]: [crypto_free:216]: (crypto/threads_pthread.c:147)
...
2024-07-11 06:48:24 authd_timer_run: 1 expired
2024-07-11 06:48:24 authd_epoll_work: timeout 2990
2024-07-11 06:48:24 authd_json_backup_logon user:test1, duration:172 idled:0 expire:300
2024-07-11 06:48:24 authd_json_backup_groups id:2, group:ldap-group
2024-07-11 06:48:24 vd_name:root logon_total:1 num: 1.
2024-07-11 06:48:24 [get_auth_backup_file:107]: Temp json file path: /var/log/auth/auth_
ses.json.tmp
2024-07-11 06:48:24 [authd_json_session_backup:367]: Authenticated sessions are backed
up.
2024-07-11 06:48:24 [crypto_free:216]: [crypto_free:216]: (./migbase/osapi/rnd.c:266)
System for Cross-domain Identity Management (SCIM) is an open-standard protocol that facilitates the exchange of
identity data between platforms. In a business environment with a large number of employees and hundreds of cloud
applications, manual provisioning can be challenging and susceptible to errors. By automating user provisioning, SCIM
greatly minimizes the time, effort, and cost involved in managing user life cycles.
See the following RFCs for more information:
l See RFC 7642 for information about definitions, overview, concepts, and requirements.
l See RFC 7643 for information about the core schema.
l See RFC 7644 for information about the protocol.
SCIM is based on a client-server model where the client is usually an identity provider (IdP) that maintains a directory of
user identities, and the server is typically a service provider (SP). The client sends user and group information to the
server, enabling automatic provisioning of users and groups between the SP and IdP.
FortiOS 7.6.0 supports SCIM servers. This enhancement allows FortiGate to communicate with an Identity Provider
(IdP) using the SCIM 2.0 protocol, which facilitates the automatic provisioning of users and groups on FortiGate. Once
users and groups are provisioned on FortiGate, they can be used with SAML to provide user authentication.
The config system global command includes new SCIM settings:
config system global
set scim-http-port <integer>
set scim-https-port <integer>
set scim-server-cert <string>
end
scim-http-port <integer> Specify the port on which the SCIM server will listen for HTTP requests (default =
44558).
scim-https-port <integer> Specify the port on which the SCIM server will listen for HTTPS requests (default
= 44559).
scim-server-cert <string> Specify the certificate that will be used if the HTTPS protocol is being used to
communicate with the SCIM client.
The certificate used by FortiGate must be trusted by the SCIM client.
status {enable| disable} Enable/disable System for Cross-domain Identity Management (SCIM).
base-url <string> Server URL to receive SCIM create, read, update, and delete (CRUD) requests.
FortiGate will communicate with the SCIM client based on the protocol specified
in base-url.
client-authentication- Specify the TLS client authentication methods (default = token).
method {token |
base}
certificate <name> The certificate sent by the SCIM client during the TLS handshake. Applies when
HTTPS is used for communication.
FortiGate must have the corresponding Certificate Authority (CA) certificate
installed.
client-identity-check Enable/disable client identity check (default = disabled).
{enable| disable}
When enabled, FortiOS will check the Subject Alternative Name (SAN) field of the
SCIM client certificate, which must contain a correct FQDN or URL.
Example
In this example, FortiGate is configured as the SCIM server (SP), and FortiAuthenticator is configured as the SCIM client
(IdP). Two groups are configured on FortiAuthenticator: IT and Pochiya clan. The groups contain the following
users:
l The IT group contains three users: admin, sk, and sy.
l The Pochiya clan group contains two users: naynay and kiki.
Upon successful configuration, users and groups are provisioned on FortiGate. This setup can leverage SAML to
provide access to authenticated users.
Name Test-SCIM
The SCIM endpoint and access token must match the base-url and client-secret-
token respectively, as configured on the FortiGate.
Furthermore, an initial synchronization is necessary to commence provisioning for the first
time. However, when alterations to identities occur in the IdP, including creation, updating, and
deletion, these changes are automatically synchronized with SP in accordance with the SCIM
protocol.
IT
pochiya clan
total:2
admin
kiki
naynay
sk
sy
The configuration in this topic incorporates all the SCIM groups configured on FortiAuthenticator and enables all users to
authenticate. However, if you want to limit authentication to users who belong to specific groups, such as the IT group,
the following additional configuration is necessary:
config user group
edit saml-scim
For brevity, only the commands relevant to this enhancement are included. See SAML for
more information about configuring SP and IdP.
GUI support is added for SCIM clients. System for Cross-domain Identity Management (SCIM) is an open-standard
protocol that facilitates the exchange of identity data between platforms. See SCIM server support on page 431 for more
information.
To specify the SCIM server certificate and HTTP(S) port in the GUI:
1. Go to User & Authentication > SCIM Clients, and click Create New.
2. Set Status to Enabled, enter a Name, then configure the remaining settings as needed.
3. Click OK.
1. Go to User & Authentication > Single Sign-On and edit an existing entry or click Create New to create a new single
sign-on.
2. In the Additional SAML Attributes section, enable SCIM client and select a SCIM client.
3. Click OK.
Example
In this example, FortiGate is configured as the SCIM server (SP), and FortiAuthenticator is configured as the SCIM client
(IdP). Two groups are configured on FortiAuthenticator: IT and Pochiya clan. The groups contain the following
users:
l The IT group contains three users: admin, sk, and sy.
l The Pochiya clan group contains two users: naynay and kiki.
Upon successful configuration, users and groups are provisioned on FortiGate. This setup can leverage SAML to
provide access to authenticated users.
c. Click OK.
2. Specify the SCIM server certificate:
a. Go to System > Settings.
b. In the SCIM Settings section, set Server certificate.
c. Click Apply.
3. Configure SCIM client entries:
a. Go to User & Authentication > SCIM Clients, and click Create New.
b. Set Status to Enabled, enter a Name, then configure the remaining settings as needed.
c. Click OK.
Name Test-SCIM
The SCIM endpoint and access token must match the base-url and client-secret-
token respectively, as configured on the FortiGate.
Furthermore, an initial synchronization is necessary to commence provisioning for the first
time. However, when alterations to identities occur in the IdP, including creation, updating, and
deletion, these changes are automatically synchronized with SP in accordance with the SCIM
protocol.
IT
pochiya clan
total:2
admin
kiki
naynay
sk
sy
1. Go to User & Authentication > Single Sign-On and edit an existing entry or click Create New to create a new single
sign-on.
2. In the Additional SAML Attributes section, enable SCIM client and select the SCIM client.
3. Click OK.
To modify the SAML user group used in the firewall policy in the GUI:
The configuration in this topic incorporates all the SCIM groups configured on FortiAuthenticator and enables all users to
authenticate. However, if you want to limit authentication to users who belong to specific groups, such as the IT group,
the following additional configuration is necessary:
1. Go to User & Authentication > User Groups and click Create New. Firewall is selected as the default Type.
2. Enter the group name, such as saml-scim.
3. In the Remote Groups section, click Add.
4. Set Remote Server to the SAML user, SCIM-SAML.
5. For the Groups, select Specify, then click the text box to see the groups pulled from SCIM client as Suggestions.
In addition to the current pre-shared secret, bearer token authentication is also now supported for SCIM to improve
security between the SCIM server and client. Bearer tokens generated by FortiOS can be temporary to minimize the risk
of unauthorized access and adhere to modern security standards. A long lived token can also be configured. Additionally
a new option is added to verify the token from the SCIM client.
A new execute gen-token command is available to generate the bearer token. This command is available for each
VDOM.
execute gen-token <type> <string> <algorithm> <expire>
Example
This example shows how to generate a certificate type of bearer token and configure verification of the bearer token.
When generating a bearer token on FortiGate, remember:
l You can use any of the built-in or custom certificates available in the local certificate store.
l You must select a signing algorithm that supports the certificates.
l When the bearer token expires, the administrator must manually generate a new bearer token on FortiGate and
copy the token to the SCIM client.
1. Enter execute gen-token cert to display the list of certificates available in the local certificate store:
Custom and built-in certificates are displayed, and either can be used to generate tokens. In this example,
FGT401E-II-SAN-all is a custom certificate, and Fortinet_CA_SSL is a built-in certificate.
# execute gen-token cert
<string> Certificate or preshared-key for token generation.
Available certificates:
FGT401E-II-SAN-all local
Fortinet_CA_SSL local
Fortinet_CA_Untrusted local "
Fortinet_Factory local "
Fortinet_Factory_Backup local
Fortinet_GUI_Server local "
Fortinet_SSL local
Fortinet_SSL_DSA1024 local
Fortinet_SSL_DSA2048 local
Fortinet_SSL_ECDSA256 local
Fortinet_SSL_ECDSA384 local
Fortinet_SSL_ECDSA521 local
Fortinet_SSL_ED448 local
Fortinet_SSL_ED25519 local
Fortinet_SSL_RSA1024 local
Fortinet_SSL_RSA2048 local
Fortinet_SSL_RSA4096 local
Generated
token:eyAidHlwIjogIkpXVCIsICJhbGciOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1. Configure the certificate name or pre-shared key to use for verification of the bearer token.
In this example, a certificate (cert) type of bearer token is configured. You must specify the same certificate used
to generate the bearer token:
config user scim
edit "SCIM-server-to-FAC"
set id 1
set status enable
set base-url "https://10.1.100.7/SCIM-server-to-FAC/scim/v2/"
set auth-method token
set token-certificate "FGT401E-II-SAN-all"
set certificate "REMOTE_Cert_1"
set client-identity-check disable
next
end
When using a pre-shared key (key), you must specify the same value used to generate the bearer token, for
example:
config user scim
edit "SCIM-server-to-FAC"
set id 1
set status enable
set base-url "https://10.1.100.8/SCIM-server-to-FAC/scim/v2/"
set auth-method token
set secret ENC mSoyZXvQ/tM1v1VOuS31DOrCZRNQ383JiXXXXXXXXXXXXXXXXXXXXX"
set certificate "REMOTE_Cert_2"
set client-identity-check disable
next
end
This section includes information about LAN Edge related new features:
l Wireless on page 442
l Switch controller on page 482
l FortiExtender on page 498
Wireless
This information is also available in the FortiWiFi and FortiAP 7.6 Configuration Guide:
l Configuring location tracking
This release adds support for the 802.11mc Wi-Fi protocol, which enables supported devices and clients to measure
their distance to nearby Wi-Fi access points. APs act as a Fine Timing Measurement (FTM) responder to time
measurement queries sent from a client.
FortiAP radios can be configured to operate in 802.11mc responder mode, enabling connected devices and clients to
use enhanced location accuracy.
The FortiAP must be running firmware version 7.6.0 or later to support this feature.
1. From the FortiGate, verify that 802.11mc has been successfully enabled.
FortiGate-81E-POE (Interim)# diagnose wireless-controller wlac -c wtp FP23JFTF21000769 |
grep 80211mc -B 2
Radio 1 : AP
80211d enable: : enabled
80211mc enable : enabled
--
Radio 2 : AP
80211d enable: : enabled
80211mc enable : enabled
2. From the FortiAP, verify that 802.11mc has been successfully enabled.
FortiAP-23JF # rcfg | grep 802.11mc -B4
Radio 0: AP
country : cfg=US oper=US
countryID : cfg=841 oper=841
802.11d enable : enabled
802.11mc enable : enabled
--
Radio 1: AP
country : cfg=US oper=US
countryID : cfg=841 oper=841
802.11d enable : enabled
802.11mc enable : enabled
3. Using a packet capture tool, check the packet capture result for the customer_usage SSID configured in the FortiAP
profile.
Fine Timing Measurement Responder should be set to True, indicating that the FortiAP supports the 802.11mc
responder mode.
4. Optionally, you can use a scanning app such as Google's WifiRttScan App to scan for nearby Wi-Fi RTT (802.11mc)
capable access points.
This information is also available in the FortiWiFi and FortiAP 7.6 Configuration Guide:
l Configuring OpenRoaming on FortiAP
This release adds support for the Wireless Broadband Alliance (WBA) OpenRoaming Standards on FortiAPs.
OpenRoaming enhances Wi-Fi management and user experience by automating guest Wi-Fi onboarding, enabling
seamless and secure roaming between Wi-Fi and LTE/5G networks, and providing you with insightful customer
analytics. For example, when implemented in a city, tourists can roam between Wi-Fi networks throughout the city
without manual authentication, enabling them to stay connected while traveling.
The following CLI configuration settings have been added to configure OpenRoaming:
config wireless-controller hotspot20 hs-profile
edit <name>
set roaming-consortium <string>
set wba-open-roaming [enable | disable]
set wba-financial-clearing-provider <string>
set wba-data-clearing-provider <string>
set wba-charging-currency <string>
set wba-charging-rate <integer>
next
end
1. Create a Hotspot 2.0 Access Network Query Protocol (ANQP) Roaming Consortium profile, and specify the
Organization Identifier (OI) for the device's service provider.
config wireless-controller hotspot20 anqp-roaming-consortium
edit "openroaming"
config oi-list
edit 1
set oi "BAA2D00000"
next
end
next
end
2. Create a Hotspot 2.0 profile and apply the ANQP Roaming Consortium profile you created, and then configure
OpenRoaming options.
config wireless-controller hotspot20 hs-profile
edit "openroaming"
set roaming-consortium "openroaming"
set wba-open-roaming enable
set wba-financial-clearing-provider "RBC"
set wba-data-clearing-provider "444444"
set wba-charging-currency "CAN"
set wba-charging-rate 135
next
end
6. Using a packet capture tool, verify that OpenRoaming configurations have been successfully applied.
When the client connects to the SSID, the Access-Request from the FortiGate to the RADIUS server includes the
following example OpenRoaming information:
This information is also available in the FortiWiFi and FortiAP 7.6 Configuration Guide:
l Wireless network with segregated WLAN traffic
This enhancement supports local LAN segregation for FortiAPs operating in WAN-LAN mode. When enabled, wired
clients on the LAN port and wireless clients on the SSID remain within the same layer-2 bridge. Clients can continue to
send and receive data traffic through the same VLAN segment of the FortiAP WAN port, however, their local traffic is
segregated from the FortiAP's WAN side. This feature provides customers with enhanced control over their network
traffic, improving security and network management.
For more information on WAN-LAN mode, refer to LAN port options in the FortiWiFi and FortiAP Configuration Guide.
The following CLI command has been added:
config wireless-controller vap
edit <name>
set local-standalone enable
set local-bridging enable
set local-lan-partition {enable|disable}
next
end
In this example, the customer has two separate networks: CORP and INT. They want to deploy dual LAN FortiAP units
and connect the LAN1 port to the CORP network and the LAN2 port to the INT network.
l Both networks have their own switches, routers, firewalls, policies, and ingress/egress to the internet.
l The FortiGate on the CORP network manages all FortiAPs, with the FortiAPs broadcasting all necessary SSIDs.
l The FortiAP LAN2 port bridges to INTwifi (Standalone mode), it connects to the INT switch and INT wired network to
provide DHCP, gateway, and traffic routing.
The CORP network is a typical WLAN and LAN network. This example focuses on configuring the INT network.
Note: vlanid is used to distinguish the VLAN segregated from the FortiAP WAN port. The SSID and LAN local
bridge traffic has no VLAN tag.
2. Configure the FortiAP unit to operate in WAN-LAN mode, and then bridge the LAN port to the bridge mode VAP. For
more information, refer to LAN port options in the FortiWiFi and FortiAP Configuration Guide.
l From the FortiGate, make the following configurations to bridge the LAN port to the bridge mode VAP:
config wireless-controller wtp-profile
edit "431F"
config platform
set type 431F
set ddscan enable
end
set wan-port-mode wan-lan
config lan
set port-mode bridge-to-ssid
set port-ssid "INT"
end
set handoff-sta-thresh 55
config radio-1
set mode disabled
end
config radio-2
set band 802.11a 802.11n-5G 802.11ac-5G 802.11ax-5G
set channel-bonding 40MHz
set vap-all manual
set vaps "INT" "wifi.fap.01"
set channel "40"
end
config radio-3
set mode monitor
end
next
end
3. Log into the FortiAP CLI to verify the changes have been successfully made.
FortiAP-431F # wcfg
WTP Configuration
name : FortiAP-431F
......
LAN mode : WAN LAN, ESL
ESL ses-imagotag : scd disabled, conn_state tcp-conn-down compliance level 2,
chan 127, power A, coex 0, apc :0, tls cert enabled fqdn disabled
LAN port cnt : 2
port1-cfg : BR-TO-SSID(3) 0 84:39:8f:88:5d:61 ssid=INTwifi
vlan_tag=0064 flags=0000402b lsw lbr loc_auth st lan_loc
port2-cfg : offline (0)
encrypt_key[0-15] : 16-fa-3b-ec-f7-b5-10-2e-d7-7b-a3-f5-e9-e8-a5-10
encrypt_key[16-31] : ca-28-cc-4f-c1-85-d9-18-0b-a8-9a-1a-cc-6e-9a-f2
syslog conf : disabled server=0.0.0.0():0 log-level=0
5. Verify that the connected clients can ping the correct networks.
a. Log into a client on the INTwifi network, and run the following command:
wifi1-fap-robot:~# ifconfig
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.100.101.22 netmask 255.255.255.0 broadcast 10.100.101.255
inet6 fe80::1e87:2cff:feb7:bccc prefixlen 64 scopeid 0x20<link>
ether 1c:87:2c:b7:bc:cc txqueuelen 1000 (Ethernet)
RX packets 1421 bytes 146158 (146.1 KB)
RX errors 0 dropped 0 overruns 0 frame 346
TX packets 1931 bytes 164133 (164.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 17
b. Verify that the INTwifi client can ping LAN PC in the INT network (subnet 10.100.101.0/24).
root@wifi1-fap-robot:~# ping 10.100.101.20
PING 10.100.101.20 (10.100.101.20) 56(84) bytes of data.
64 bytes from 10.100.101.20: icmp_seq=1 ttl=64 time=5.88 ms
c. Verify that the INTwifi client cannot reach CORP network (subnet 10.10.100.0/24) or the other way around.
root@wifi1-fap-robot:~# ping 10.10.100.22
PING 10.10.100.22 (10.10.100.22) 56(84) bytes of data.
From 10.100.101.1 icmp_seq=1 Destination Net Unreachable
This information is also available in the FortiWiFi and FortiAP 7.6 Configuration Guide:
l Isolate mDNS traffic on the Bonjour profile
This release enables Bonjour profiles to isolate multicast Domain Name System (mDNS) traffic using the Micro-Location
feature. Micro-Location confines mDNS traffic originating from one location so that it remains isolated from other
locations. In this scenario, "location" is defined by the FortiAP group configured on the FortiGate.
This enables you to confine mDNS traffic within designated areas of the network, specifically targeting the same SSID
and VLAN, on a per-AP or AP group level. For example, you can segregate your FortiAPs by zones such as floor1 or
floor2.
The following CLI command has been added:
config wireless-controller bonjour-profile
edit <name>
set micro-location {enable|disable}
end
In this example, there are four FortiAP devices located in two separate locations.
config radio-2
set band 802.11a 802.11n-5G 802.11ac-5G 802.11ax-5G
set channel-bonding 40MHz
set vap-all manual
set vaps "wifi.fap.01" "wifi.fap.02"
end
config radio-3
set mode disabled
end
next
end
3. Once the Bonjour profile is added to the FortiAP profile, the Bonjour function determines each FortiAP's location
based on the FortiAP group the device belongs to. Since this example has four FortiAP units located in two places,
you will need to create two FortiAP group to define each location.
config wireless-controller wtp-group
edit "Loc-1"
set wtps "FP231GTF23042734" "FP231GTF23045868"
next
edit "Loc-2"
set wtps "FP231GTF23046245" "FP231GTF23041369"
next
end
4. From the FortiGate, verify the configurations have been successful made.
FortiGate-201E (vdom1) (Interim)# diagnose wireless-controller wlac -c bjprof
BJPROF (001/001) vdom,name: vdom1, micro-loc
refcnt : 2 own(1) wtpprof(1)
deleted : no
Micro location : 1
policy list cnt : 1
policy id: 1 , from_vlan: 100, to_vlan: 200, service: airplay printers
chromecast
wtp cnt : 0
5. From the FortiAPs in each location, verify the configurations have been successful made.
l The output for FortiAP 1 and 2:
FAP-1 # cw_diag -c bonjour
Micro location status: Enabled
Micro location name : Loc-1
Bonjour Gateway: Controlled by AC
Configured Bonjour Vlans:
100 ==> 200 services 00002208 airplay printers googlecast
Total 1 Bonjour Vlans
Bonjour Gateway Election Info:
1/1 74:78:a6:98:d9:88 state=oper,305 live=323 age=1
---- 74:78:a6:97:51:c8 state=cap,326
FAP-1 # bjallow
#from_intf to_intf service_name1 service_name2 service_name3
br.100 br.200 tcp _airplay _appletv _raop _sleep-proxy _touch-able _dacp _http _ipp _
pdl-datastream _printer _googlecast _device-info
br.100 br.200 udp _services._dns-sd
micro_location Loc-1
This information is also available in the FortiWiFi and FortiAP 7.6 Configuration Guide:
l Custom RADIUS NAS-ID
This feature enables the FortiOS WiFi controller to push the RADIUS nas-id-type setting to a managed FortiAP. The
FortiAP can then forward the NAS-Identifier value in an Access-Request packet when authenticating a wireless client
with a remote RADIUS server.
For more information about configuring NAS-IDs, refer to Custom RADIUS NAS-ID in the FortiWiFi and FortiAP
Configuration Guide.
Example topology
1. From FortiOS, configure the RADIUS server with a NAS-ID. You can use custom or hostname NAS-IDs.
config user radius
edit "wifi-radius"
3. When the client connects to the SSID, the NAS-Identifier attribute you configured, AP-431F, will be sent in an
Access-Request packet.
This information is also available in the FortiWiFi and FortiAP 7.6 Configuration Guide:
l Wireless traffic packet sniffer
This release enhances the FortiAP sniffer with improved packet detection capabilities. When the FortiAP is set to sniffer
mode, it can capture all frame types, including data frames, across specified channel bandwidths ranging from 320 MHz
to 20 MHz.
The following CLI command has been added:
config wireless-controller wtp-profile
edit <name>
config <radio>
set mode sniffer
set ap-sniffer-chan-width [320MHz|160MHz|80MHz|...]
end
next
end
set ap-sniffer-chan- Set the channel bandwidth for sniffer. Bandwidth ranges from 320 MHz to 20MHz
width depending on the FortiAP model and radio.
In the following example, a FAP-234F unit is configure to work in sniffer mode to capture wireless frames from a third-
party AP SSID named "customer_usage". This SSID is operating in channel 153 with a channel width of 80MHz.
1. Configure a FortiAP profile to operate in sniffer mode on the designated channel and channel width.
config wireless-controller wtp-profile
edit "FAP234F-default"
config platform
set type 234F
set ddscan enable
end
set handoff-sta-thresh 55
set allowaccess https ssh snmp
set frequency-handoff enable
set ap-handoff enable
config radio-1
set mode disabled
end
config radio-2
set mode sniffer
set ap-sniffer-chan 153
set ap-sniffer-chan-width 80MHz
end
config radio-3
set mode monitor
end
next
end
3. From the FortiGate, verify that the settings have been applied to the FortiAP.
FortiGate-81E-POE (Interim)# diagnose wireless-controller wlac -c wtp FP234FTF21011491 |
grep Radio -A3
Radio 1 : Disabled
Radio 2 : Sniffer
bufsize : 16 MB
chan : 153
chan bandwidth : 2
--
Radio 3 : Monitor
ap scan passive: disabled
sensor mode : disabled
auto suppress : disabled
--
Radio 4 : Not Exist
Radio 5 : Not Exist
WAN/LAN stats :
: lan1 rx,tx bytes 2443934,120170937 packets 34954,165081 errors
0,0 dropped 318,0
WAN/LAN EXT stats :
The FortiGate diagnose output shows Radio 2 in sniffer mode with chan bandwidth set to 2 to represent the
80MHz band.
4. From the FortiAP, verify that the settings have been applied.
FAP1 # rcfg
Radio 0: Disabled
Radio 1: Sniffer
bufsize : 16 MB
chan : 153
chan width : 80MHz
addr : 00:00:00:00:00:00
filter : KEEP: ctl mgmt-beacon mgmt-probe mgmt-other data DROP:
Radio 2: Monitor
radio type : 2.4G 5G
sensor mode : disabled (applied promisc mode=disabled)
ap scan thresh : 0 dBm
ap scan passive: disabled
ap scan rpt tmr: 15s
spect analysis : scan only
ss chans loc : cnt=30
list=1,3,6,8,11,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,
149,153,157,161,165,
ss chans rem : cnt=0 list=
wids : disabled
r_ac scan list : all_2g5g_channel all_6g_channel
partial scan list : 1 2 3 4 5 6 7 8 9 10 11 36 40 44 48 52 56 60 64 100 104 108 112
116
120 124 128 132 136 140 144 149 153 157 161 165
full scan list : 1 2 3 4 5 6 7 8 9 10 11 36 40 44 48 52 56 60 64 100 104 108 112 116
120 124 128 132 136 140 144 149 153 157 161 165
fortipresence : disabled
5. After the FortiAP finishes the capture, export the capture file to a local TFTP server with the following command:
ftftp <tftp-server-ip> -m binary -c put /tmp/wl_sniff.cap <file-name>
6. Open the capture file with a packet analyzer tool and verify that the wireless control, management, and data packets
have been successfully captured.
This information is also available in the FortiWiFi and FortiAP 7.6 Configuration Guide:
l WPA2 and WPA3 Enterprise authentication
The FortiOS Wi-Fi controller has been enhanced to support RADSEC during the 802.1X authentication of wireless
clients. TCP and TLS protocols are now supported for direct RADIUS authentication over the WPA2/WPA3-Enterprise
SSID.
3. Confirm RADIUS request and responds packets are transported over TCP when the wireless client connects.
FortiGate-101F (vdom1) (Interim)# diagnose wireless-controller wlac -d sta online
vf=2 mpId=7 wtp=2 rId=1 wlan=wifi.fap.01 vlan_id=0 ip=192.168.81.2 ip6=::
mac=f8:e4:e3:d8:5e:af vci= host=WiFi-Client-2 user=print group=radius-tcp signal=-22
noise=-78 idle=7 bw=1 use=5 chan=149 radio_type=11AC_5G security=wpa2_only_enterprise
3. Confirm RADIUS request and responds packets are transported over TLS when the wireless client connects.
FortiGate-101F (vdom1) (Interim)# diagnose wireless-controller wlac -d sta online
vf=2 mpId=7 wtp=2 rId=1 wlan=wifi vlan_id=0 ip=10.30.80.2 ip6=::
mac=f8:e4:e3:d8:5e:af vci= host=WiFi-Client-2 user=tester group=radius-tls signal=-22
noise=-76 idle=4 bw=3 use=5 chan=149 radio_type=11AC_5G security=wpa3_only_enterprise
mpsk= encrypt=aes cp_authed=no l3r=1,0 G=0.0.0.0:0,0.0.0.0:0-0-0 -- 0.0.0.0:0 0,0
online=yes mimo=2
Add GUI support for configuring wireless data rates and sticky client thresholds
This information is also available in the FortiWiFi and FortiAP 7.6 Configuration Guide:
l Advanced SSID options
This release adds GUI support for configuring 802.11a and 802.11bg data rates, the 802.11n Modulation and Coding
Scheme (MCS), as well as sticky client removal thresholds. By disabling lower rates, you can conserve air time and allow
the channel to serve more users.
Once you enable Advanced Wireless Features from System > Feature Visibility, you can access the configuration
options from the SSID page.
1. Go to System > Feature Visibility and enable Advanced Wireless Features from System.
2. Click Apply.
3. Go to WiFi & Switch Controller > SSIDs and create or edit an SSID
4. Under Advanced Settings, the Sticky client removal and Advanced rate controls options are available.
By default, sticky client and all 802.11 a and 802.11bg rates are disabled. MCS rates are all unselected.
5. Enable Sticky client removal to configure the minimum threshold in dBM required for clients to be serviced by the
AP.
a. For each 802.11a and 802.11bg data rate option, you can select the following options:
l Mandatory: Clients must support this data rate in order to associate with an access point on the controller.
l Supported: Any associated clients that support this data rate may communicate with the access point
using that rate. However, the clients are not required to be able to use this rate in order to associate.
l Disabled: The clients specify the data rates used for communication.
b. For 802.11n MCS options, select the allowed data rate for each spatial stream.
Note: Only the following data rates are supported:
l 802.11a.
l 802.11b/g.
l 802.11n with 1 or 2 spatial streams.
l 802.11n with 3 or 4 spatial streams.
802.11ac, 802.11ax, and 802.11n with 4 streams are not supported in the GUI.
7. When you are finished, click OK.
This information is also available in the FortiWiFi and FortiAP 7.6 Configuration Guide:
l User self-registration of MPSKs through FortiGuest
This release enables users to generate Multi Pre-Shared Keys (MPSK) through the FortiGuest self-registration portal.
Users can self-register their devices through the portal, receiving a unique pre-shared key (MPSK) bound to their
device's MAC address. When they connect to the SSID, FortiGate sends the client's passphrase and MAC address to
FortiGuest during the 4-way handshake. Based the FortiGuest response, FortiGate authenticates or de-authenticates
the client.
The following CLI commands have been added:
config wireless-controller mpsk-profile
edit <name>
set mpsk-external-server-auth [enable|disable]
set mpsk-external-server {string}
next
end
Example Topology
2. Create an MPSK profile, enable MPSK external server authentication, and apply the external server you created.
config wireless-controller mpsk-profile
edit "wifi"
set mpsk-external-server-auth enable
set mpsk-external-server "fortiguest"
next
end
3. Check the WiFi event log and verify there is a log with the action as EXT-MPSK-auth-success, indicating that the 4-
way handshake is successful.
# exe log display
date=2024-03-13 time=09:02:06 eventtime=1710345725686198360 tz="-0700"
logid="0104043657" type="event" subtype="wireless" level="notice" vd="root"
logdesc="Wireless station association failed" sn="FP433GTY22001147"
ap="FP433GTY22001147" vap="wifi" ssid="FOS_QA_Starr_81F_3G_psk" radioid=1 user="N/A"
stamac="54:27:1e:b7:4a:95" signal=-45 snr=50 authserver="N/A" channel=11 security="WPA2
Personal" encryption="AES" action="EXT-MPSK-auth-success" reason="Reserved 0"
msg="External MPSK authentication was successful for client 54:27:1e:b7:4a:95"
This release adds support for IKEv2 when FortiAP establishes an IPsec VPN tunnel with FortiGate to encrypt CAPWAP
data traffic. IKEv2 improves on the now-deprecated IKEv1 and offers improved performance and security.
1. From the FortiAP profile, set the data channel DTLS policy to ipsec-vpn.
config wireless-controller wtp-profile
edit "FAP234F-default"
config platform
set type 234F
set ddscan enable
end
set dtls-policy ipsec-vpn
set handoff-sta-thresh 55
config radio-1
set band 802.11g 802.11n-2G 802.11ax-2G
end
config radio-2
set band 802.11a 802.11n-5G 802.11ac-5G 802.11ax-5G
set channel-bonding 40MHz
set vap1 "wifi.fap.01"
set vap2 "wifi.fap.02"
set vap3 "wifi.fap.03"
set vap4 "wifi.fap.01_6"
set vap5 "wifi.fap.02_6"
set vap6 "wifi.fap.03_6"
end
config radio-3
set mode monitor
end
next
end
set dhgrp 20
set transport auto
set peerid "WLC-0003.00"
set ipv4-start-ip 169.254.0.2
set ipv4-end-ip 169.254.0.254
set dns-mode auto
set psksecret ENC
set dpd-retryinterval 60
next
end
...
FortiAP-234F # opconf
# /tmp/ipsec.secrets - OpenSwan IPsec secrets file
: PSK "8c096b79fb25c92239fdd1014ab52b64"
# configuration
config setup
plutodebug=all
plutostderrlog=/tmp/openswan.tmp.log
nat_traversal=yes
#virtual_private=%v4:169.254.0.1/8,%v4:!192.168.100.1/24
conn wlc-user
authby=secret
leftupdown="ipsec _updown"
left=10.131.0.120
leftsubnet=0.0.0.0/32
[email protected]
right=10.131.0.1
# PHASE 1
# negothiation mode
ikev2=yes
...
This information is also available in the FortiWiFi and FortiAP 7.6 Configuration Guide:
l MPSK profiles
This release supports WPA3-SAE and WPA3-SAE Transition security modes on Multi Pre-Shared Keys (MPSK)
profiles, enabling the use of MPSK on Wi-Fi 6 and 7 SSIDs. For more information on WPA3 security modes, refer to
WPA3 and Other Wi-Fi 6/6E/7 Security Improvements in the WiFi 6 + 7 Design and Planning Guide.
The following CLI commands have been added:
config wireless-controller mpsk-profile
edit <name>
set mpsk-type [wpa2-personal|wpa3-sae|wpa3-sae-transition]
config mpsk-group
edit <name>
config mpsk-key
edit <name>
set key-type [wpa2-personal|wpa3-sae]
next
end
next
end
next
end
set mpsk-type Select the security type of keys for this profile.
set key-type Select the type of the key.
To configure an MPSK profile with WPA3 SAE Transition or WPA3 SAE security mode - GUI:
Note: If you selected WPA3-SAE Transition, you can create multiple MPSK keys with WPA2 Personal and WPA3
SAE security types.
8. When you are finished, click OK to save your MPSK profile configurations.
9. Go to WiFi & Switch Controller > SSIDs and select or create a new SSID.
10. Under Security Mode Settings, select the Security mode and SAE password that matches your MPSK profile.
a. If your security mode is WPA3 SAE:
i. Under Pre-shared Key, enable MPSK Profile and then select the WPA3 SAE MPSK profile you configured.
next
end
2. Apply the MPSK profile to a VAP with the security mode also set to WPA3 SAE:
config wireless-controller vap
edit "wifi"
set ssid "FOS_81F_WPA3_MPSK"
set security wpa3-sae
set pmf enable
set schedule "always"
set mpsk-profile "wifi"
set dynamic-vlan enable
set sae-password ENC
next
end
To configure an MPSK profile with WPA3 SAE Transition security mode - CLI:
2. Apply the MPSK profile to a VAP with the security mode also set to WPA3 SAE:
config wireless-controller vap
edit "wifi2"
set ssid "FOS_81F_WPA3_Transition"
set security wpa3-sae-transition
set pmf optional
set schedule "always"
set mpsk-profile "wifi2"
set dynamic-vlan enable
set sae-password ENC
next
end
This information is also available in the FortiWiFi and FortiAP 7.6.1 Configuration Guide:
l Wireless Intrusion Detection System
This release enhances the Wireless Intrusion Detection System (WIDS) profile with advanced options, improving the
detection and reporting of a wider range of security threats and intrusion attempts.
The following new WIDS categories have been added in the CLI:
Ad Hoc Network adhoc-network Detects ad hoc networks that are uncontrolled and can expose clients
Detection to viruses and other security vulnerabilities.
An Ad hoc network is a chain of wireless devices connected to each
other without the use of an AP.
Ad Hoc Network adhoc-valid- Detects unauthorized ad hoc networks mimicking a valid SSID that
Using a Valid SSID ssid try to trick your wireless clients into connecting.
Detection
AirJack Detection air-jack Detects AirJack attacks. AirJack is a suite of device drivers that can
force all users off an AP.
Beacon Frame bcn-flood Detects beacon frame flooding where an attacker floods the network
Flooding with a large amount of beacon frames to increase the amount of
processing needed on client operating systems.
Beacon Frame beacon-wrong- Detects spoofed beacon packets that are modified so that the
Spoofing channel channel is different from what's advertised in the beacon frame of the
AP.
*Block Ack Flood block_ack-flood Detects Block Ack Flood, which is when an attacker sends spoofed
Detection Add Block Acknowledgment (ADDBA) request frames to an AP
causing the AP to ignore valid traffic from clients.
*Invalid Client client-flood Detects Denial-of-Service (DoS) attacks to WIDS where an attacker
Flooding generates a large number of invalid clients to flood and overwhelm
the WIDS with fake information.
*CTS Flooding cts-flood Detects Clear to Send (CTS) flooding where attackers send CTS
Detection frames to flood the system and prevent channel access to legitimate
users.
Disassociation disassoc- Monitors authorized clients within the network for frequent
Broadcast Monitor broadcast associations and disassociations that may indicate potential network
dangers.
Disconnect Attack disconnect- Monitors station activity for frequent connects and disconnects that
Monitor station may indicate a disconnect attack.
EAPOL Key eapol-key- Detects EAPOL-Key packets with a key field length over the limit.
Overflow Detection overflow Malicious actors can overflow the key fields to trigger a DoS or to
execute code.
Fuzzed Beacon fuzzed-beacon Detects fuzzed beacon frames with malformed Information Elements
Detection (IE). When the modified frames are retransmitted, it can cause
devices to experience driver and operating system crashes, or stack-
based overflows. This can leave the affected system vulnerable to
arbitrary code executions.
Fuzzed Probe fuzzed-probe- Detects probe request frames with malformed IE's.
Request Detection request
Fuzzed Probe fuzzed-probe- Detects probe response frames with malformed IE's
Response Detection response
Hotspotter Attack hotspotter- Detects Hotspotter attacks which are a type of an evil-twin attack
Detection attack where attackers set up a fraudulent AP broadcasting an SSID similar
to a legitimate one to lure a client into connecting. Once a client
connects to the fraudulent AP, they can launch security attacks on
the client.
High Throughput ht-40mhz- Checks if a client has an 40MHz intolerance bit and is unable to
40MHz Intolerance intolerance participate in a 40 MHz BSS. The AP may have to use lower data
Check rates instead, which can impact network performance.
High Throughput ht-greenfield Checks if 802.11 client beacons are advertising High Throughput
Greenfield Check (HT) Greenfield mode as they cannot share the same channel as
other 802.11a/b/g clients or communicate with legacy devices. These
incompatibilities can cause collisions, errors, and retransmissions.
Invalid Address invalid-addr- Detects attacks were intruders use invalid broadcast or multicast
Combination combination MAC addresses in the source address field to make an AP transmit
Detection deauthentication and disassociation frames to its clients.
*NetStumbler netstumbler Detects devices using NetStumbler, a popular wardriving tool that
Detection scans for networks using the 802.11b, 802.11a and 802.11g WLAN
standards. It probes nearby networks and attempts to authenticate
and associate with unsecured APs
Omerta Detection omerta-attack Detects Omerta attacks. Omerta is an 802.11 DoS tool that sends
disassociation frames to all clients on a channel in response to data
frames.
*Probe Frame probe-flood A probe flood is when an attacker floods the network with a large
Flooding amount of probe requests frames to exhaust network resources.
*PS-Poll Flood pspoll-flood Detects PS-poll flood attacks. In a PS-poll attack, an attacker spoofs
Detection the MAC address of a wireless client and floods an AP with a large
number of PS-poll frames. The AP is tricked into thinking the actual
wireless client is in power save mode, so the AP starts buffering
frames destined to that client, which results in the client missing those
data frames and becoming partially disconnected from the network.
PS-Poll is the power save mode used in legacy IEEE 802.11
standards.
Power Save DoS pwsave-dos- Monitors the power save status of clients in order to validate their
Attack Detection attack state and check for abnormal behavior.
*Reassociation reassoc-flood A reassociation flood is a DoS attack where a large number of client
Frame Flooding association frames are sent to an AP, exhausting the AP's resources
and causing legitimate clients to not be able to associate with the AP.
Risky Encryption risky- Detects networks using WEP encryption, a retired security algorithm
Detection encryption that is considered risky and insecure.
*RTS Flooding rts-flood Detects Requests-To-Send (RTS) flood attacks, a type of DoS attack
Detection where an attacker sends RTS frames prevent channel access to
legitimate users.
Unencrypted Mode unencrypted- Detects if an authorized client is passing traffic in unencrypted mode.
Detection valid
Valid Client valid-client- Monitors valid (authorized) wireless clients for misassociation in the
Misassociation misassociation network. Misassociations occur when a valid client connects to an
unsafe AP such as a rogue, external, or honeypot AP.
Valid SSID Misuse valid-ssid- Detects if an unauthorized AP is using the same SSID as an
Detection misuse authorized network.
*Wellenreiter wellenreiter Detects devices using Wellenreiter, a wireless network discovery and
Detection auditing tool that probes nearby networks and reveals AP and client
information.
Windows Bridge windows-bridge Detects if a Windows Bridge occurs. A Windows Bridge is when a
Detection client associated to an AP is also connected to the wired network,
and has enabled bridging between these two interfaces.
Fast Transition wpa-ft-attack Detects Fast Transition (FT) attacks. An FT attack happens when an
Attack attacker intercepts the communication between a client and an AP
during the FT handshake. The attacker decrypts and forges packets
that are then sent back to the client.
*These options can be configured with a detection window period time and a threshold value.
Setting rts-flood-time to 5 and rts-flood-thresh to 10 means if the FortiGate WIDS detects RTS frames 10
times within 5 seconds, then that event is considered an rts-flood, or an RTS flood attack.
# rcfg
Radio 0: Disabled
Radio 1: AP
country : cfg=US oper=US
...
Radio 2: Monitor
...
wids : rts-flood
deauth-unknown-src
rts-flood: time=5, thresh=10
# cw_diag -c wids
index TA* RA types/DS dur chan live/s
age/s cnt seq rssi rId encrypt
Total 24 WIDS means FortiGate WIDS detected 24 different RTS entries, and of those entries, 5 of them were
detected 10 times in 5 seconds and were considered an rts_flood, or an RTS flood attack.
This information is also available in the FortiWiFi and FortiAP 7.6.1 Configuration Guide:
l Captive Portal Security
The FortiOS Wi-Fi controller now supports pushing RADIUS server settings using TCP or TLS protocols to FortiAPs
when broadcasting a Local-Bridge mode captive portal SSID. FortiAP can then use the specified transport protocol to
communicate with the RADIUS server to authenticate wireless clients connecting to the captive portal SSID. This
enhancement improves on the previous UDP-only support.
To configure a RADIUS server over TCP in a Local-Bridge mode captive portal SSID:
2. Apply the RADIUS server you configured to a Local-Bridge mode captive portal SSID.
config wireless-controller vap
edit "cap-br"
set ssid "FOS_80F_cap_br_fqdn"
set external-web "https://cpauth.fortinet.com/portal/index.php"
set passphrase *
set radius-server "radius-tcp"
set local-bridging enable
set captive-portal enable
set portal-type external-auth
set security-redirect-url "http://www.fortinet.com"
set auth-cert "portal_server"
3. Confirm RADIUS request and responds packets are transported over TCP between the FortiAP and RADIUS server
when the wireless client passes authentication.
FortiWiFi-80F-2R (Interim)# diagnose wireless-controller wlac -d sta online
vf=0 mpId=6 wtp=2 rId=2 wlan=cap-br vlan_id=0 ip=10.0.1.11 ip6=2001:192:168:10::1000
mac=54:27:1e:b7:4a:95 vci=MSFT 5.0 host=DESKTOP-05HBKE1 user=tester group=radius-tcp
signal=-62 noise=-95 idle=10 bw=0 use=6 chan=149 radio_type=11AC_5G security=wpa2_only_
personal+captive mpsk= encrypt=aes cp_authed=yes l3r=1,0 G=0.0.0.0:0,0.0.0.0:0-0-0 --
0.0.0.0:0 0,0 online=yes mimo=1
ip6=fe80::dc46:a41f:5546:f07f,65, *2001:192:168:10::1000,83
To configure a RADIUS server over TLS in a Local-Bridge mode captive portal SSID:
Note: When you are using TLS, you must first import a CA certificate of the RADIUS server on the FortiGate.
2. Apply the RADIUS server you configured to a Local-Bridge mode captive portal SSID.
config wireless-controller vap
edit "cap-br"
set ssid "FOS_80F_cap_br_fqdn"
set external-web "https://cpauth.fortinet.com/portal/index.php"
set passphrase ENC
set radius-server "radius-tls"
set local-bridging enable
set captive-portal enable
set portal-type external-auth
set security-redirect-url "http://www.fortinet.com"
set auth-cert "portal_server"
set auth-portal-addr "cppost.fortinet.com"
set schedule "always"
next
end
3. Confirm RADIUS request and responds packets are transported over TLS between the FortiAP and RADIUS server
when the wireless client passes authentication.
FortiWiFi-80F-2R (Interim)# diagnose wireless-controller wlac -d sta online
vf=0 mpId=6 wtp=2 rId=2 wlan=cap-br vlan_id=0 ip=10.0.1.11 ip6=2001:192:168:10::1000
mac=54:27:1e:b7:4a:95 vci=MSFT 5.0 host=DESKTOP-05HBKE1 user=tester group=radius-tls
signal=-64 noise=-95 idle=10 bw=21 use=6 chan=149 radio_type=11AC_5G security=wpa2_only_
This information is also available in the FortiWiFi and FortiAP 7.6.1 Configuration Guide:
l Configuring the RADIUS Called Station ID setting
This release adds a new RADIUS Called Station identifier setting in the FortiOS Wireless Controller. This setting
determines the type information sent to the RADIUS server from the FortiAP. You can specify either the FortiAP MAC
address, IP address, or AP Name in the RADIUS Access-Request packet.
The following CLI command has been added:
configure wireless-controller vap
edit <name>
set called-station-id-type [mac|ip|apname]
next
end
called-station-id-type Select the called station ID type you want to send to the RADIUS server:
l mac: Sends the FortiAP's board MAC address and SSID name using the
format.
l apname: Sends the FortiAP and SSID name using the APName:SSID
format.
2. Set an AP name.
config wireless-controller wtp
edit "FW81FD-WIFI0"
set name "FWF-81F-2R-LR"
next
end
To verify, check the RADIUS request packet. The called station ID is sent in the following format: FWF-81F-2R-
LR:FOS_81F_3G_ent.
This information is also available in the FortiWiFi and FortiAP 7.6.1 Configuration Guide:
l Remote TACACS user access for FortiAP management
FortiAP now supports console, SSH, and HTTPS login using remote user accounts from a third-party TACACS server.
The following CLI commands have been added:
config wireless-controller wtp-profile
edit <name>
set admin-auth-tacacs+ <tacacs server>
set admin-restrict-local [enable|disable]
next
end
(default).
l enable: Only TACACS accounts are allowed to log into FortiAP
1. Configure a TACACS+ user account and enter the server access information.
config user tacacs+
edit "tacacs1"
set server "172.16.200.148"
set key *
set authorization enable
set authen-type pap
next
end
Note: You can log into a FortiAP over SSH when you configure the TACACS server with different authen-types
including pap, chap, ascii, mschap, and auto.
2. Add the TACACS+ user account you created to a FortiAP profile, and then disable local admin access.
config wireless-controller wtp-profile
edit "433F"
set allowaccess https ssh
set admin-auth-tacacs+ "tacacs1"
set admin-restrict-local disable
next
end
FortiAP-433F # wcfg
WTP Configuration
name : FortiAP-433F
loc : N/A
…
TACACS+ server : server=172.16.200.148:49 authen-type=PAP admin-restrict-local=
disabled
console-login : enabled
frequency-handoff : disabled
ap-handoff : disabled
FortiAP-433F # exit
Connection to 10.233.80.24 closed.
This information is also available in the FortiWiFi and FortiAP 7.6.1 Configuration Guide:
l User self-registration of MPSKs through FortiGuest
FortiGate now generates accounting messages when wireless clients connect to an SSID using an MPSK created
through the FortiGuest self-registration portal. Accounting messages can be sent to the FortiAP, enhancing network
management and user accountability with key expiration and user limits.
1. From the FortiGate, configure a RADIUS server entry with a FortiGuest portal server.
config user radius
edit "fortiguest"
set server "172.16.200.117"
set secret ENC
config accounting-server
edit 1
set status enable
set server "172.16.200.55"
set secret xxxxxxxxx
next
end
next
end
2. Create an MPSK profile with mpsk-external-server-auth enabled and then set the mpsk-external-
server to the RADIUS server you created.
config wireless-controller mpsk-profile
edit "wifi"
set mpsk-external-server-auth enable
set mpsk-external-server "fortiguest"
next
end
4. To verify that a client is being authenticated with a FortiGuest passphrase, confirm the accounting messages can be
generated.
Example accounting message from an accounting server:
Wed Oct 2 17:57:13 2024
Acct-Status-Type = Start
Acct-Authentic = Local
User-Name = "F8-E4-E3-D8-5E-AF"
NAS-IP-Address = 0.0.0.0
NAS-Identifier = "172.16.200.9/25246-wifi"
Called-Station-Id = "E0-23-FF-B4-A1-70:FOS_81F_3G_psk"
NAS-Port-Type = Wireless-802.11
Service-Type = Framed-User
NAS-Port = 1
Fortinet-SSID = "FOS_81F_3G_psk"
Fortinet-AP-Name = "FP431F-LAB"
Calling-Station-Id = "F8-E4-E3-D8-5E-AF"
Connect-Info = "CONNECT 0/0Mbps(Tx/Rx) 11AX_5G"
Acct-Session-Id = "66FC4C2A00000026"
WLAN-Pairwise-Cipher = 1027076
WLAN-Group-Cipher = 1027076
WLAN-AKM-Suite = 1027074
Framed-IP-Address = 192.168.10.2
Fortinet-WirelessController-Device-MAC = 0xf8e4e3d85eaf
Fortinet-WirelessController-WTP-ID = "FP431FTF20012724"
Fortinet-WirelessController-Assoc-Time = "Oct 2 2024 17:57:13 PDT"
Event-Timestamp = "Oct 2 2024 17:57:13 PDT"
Acct-Delay-Time = 0
Acct-Unique-Session-Id = "ab4179d17f6271e78def7f7f483e11f9"
Timestamp = 1727917033
Switch controller
l 802.1X authentication and MAB authentication must be enabled before you can change
the priority of MAB and EAP 802.1X authentication.
l This feature requires FortiSwitchOS 7.2.1 or later.
l This feature is supported by both 802.1X port-based authentication and 802.1X MAC-
based authentication.
You can now use the CLI to change the priority of MAC authentication bypass (MAB) authentication and Extensible
Authentication Protocol (EAP) 802.1X authentication to fit your specific network security requirements.
l Before FortiOS 7.6.0, the managed switch tried EAP 802.1X authentication and MAB authentication in the order that
they were received with EAP 802.1X authentication having absolute priority. If authentication failed, users were
assigned to the auth-fail-vlanid VLAN if it had been configured. There was no time delay. Starting inFortiOS
7.6.0, use the set auth-priority legacy command to keep this priority. After an upgrade, auth-priority
is set to legacy by default.
l Starting in FortiOS 7.6.0, if you want the managed switch to try EAP 802.1X authentication first and then MAB
authentication if EAP 802.1X fails, use the set auth-priority dot1x-mab command. If MAB authentication
also fails, users are assigned to the auth-fail-vlanid VLAN if it is configured.
l Starting in FortiOS 7.6.0, if you want the managed switch to try MAB authentication first and then EAP 802.1X
authentication if MAB authentication fails, use the set auth-priority mab-dot1x command. If EAP 802.1X
authentication also fails, users are assigned to the auth-fail-vlanid VLAN if it is configured.
l Starting in FortiOS 7.6.0 with FortiSwitchOS 7.2.3, MAB-only authentication is supported. In this mode, the
managed FortiSwitch unit performs MAB authentication without performing EAP authentication. EAP packets are
not sent. To enable MAB-only authentication, set the auth-order command to mab.
The following flowchart shows the FortiSwitch 802.1X port-based authentication with MAB enabled and with an
authentication priority of auth-priority legacy:
The following flowchart shows the FortiSwitch 802.1X MAC-based authentication with MAB enabled and with an
authentication priority of auth-priority legacy:
In the following flowchart, the authentication priority is dot1x-mab. If both EAP 802.1X authentication and MAB
authentication fail, the user is assigned to the auth-fail-vlanid VLAN. If an EAPoL-Start packet is received after
MAB authentication, the switch changes to EAP 802.1X authentication.
In the following flowchart, the authentication priority is mab-dot1x. If MAB authentication fails, the switch attempts EAP
802.1X authentication. If an EAPoL-Start packet is received after MAB authentication, the switch attempts EAP 802.1X
authentication without any time delay or processing impact.
To configure the priority of MAB and EAP 802.1X authentication for managed switches:
Variable Description
auth-order mab This command is available only when the set mac-auth-bypass command is
enabled.
Use this command if you want to use the MAB-only authentication mode, where the
FortiSwitch unit performs MAB authentication without performing EAP authentication.
EAP packets are not sent.
auth-priority Select the priority of MAB authentication and EAP 802.1X authentication.
{legacy | dot1x- l legacy—The switch tries EAP 802.1X authentication and MAB authentication in
mab | mab-dot1x} the order that they are received with EAP 802.1X authentication having absolute
priority. If authentication fails, users are assigned to a guest VLAN if it has been
configured. There is no time delay involved. This is the default value.
l dot1x-mab—The switch tries EAP 802.1X authentication first and then MAB
authentication if EAP 802.1X fails. If MAB authentication also fails, users are
assigned to the auth-fail-vlanid VLAN if it is configured.
l mab-dot1x—The switch tries MAB authentication first and then EAP 802.1X
authentication if MAB authentication fails. If EAP 802.1X authentication also fails,
users are assigned to the auth-fail-vlanid VLAN if it is configured.
This command is available only when the set mac-auth-bypass command is
enabled.
For example:
config switch-controller security-policy 802-1X
edit "8021Xmabpolicy"
set security-mode 802.1X
set user-group "1X_RADIUS_GROUP"
set mac-auth-bypass enable
set auth-order mab-dot1x
set auth-priority mab-dot1x
next
end
You can now configure an SNMP trap so that you receive a message when a layer-2 MAC address has been added to,
moved from or to, or deleted from a managed FortiSwitch port. This SNMP trap allows network administrators to monitor
MAC address changes in real time, which strengthens overall network security.
This SNMP trap applies only to dynamic MAC addresses learned on the managed FortiSwitch
port. MAC events can be lost by the hardware or software.
1. Enable the SNMP trap for MAC address changes in a specific SNMP community.
By default, this SNMP trap is disabled.
config switch-controller snmp-community
edit <SNMP_community_identifier>
The FortiOS switch controller now supports QinQ. With QinQ, each client of a managed security service provider
(MSSP) can have a unique customer VLAN with a self-managed 4k VLAN range in its own virtual domain. QinQ allows
better segregation and control over network traffic.
QinQ allows you to have multiple VLAN headers in an Ethernet frame. The value of the EtherType field specifies where
the VLAN header is placed in the Ethernet frame.
Use the VLAN TPID profile to specify the value of the EtherType field. The FortiSwitch unit supports a maximum of four
VLAN TPID profiles, including the default (0x8100). Use the default (0x8100) VLAN TPID profile to reach layer 3. The
default VLAN TPID profile (0x8100) cannot be deleted or changed.
To see which FortiSwitch models support this feature, refer to the FortiSwitch feature matrix.
l DHCP snooping
l IGMP snooping
l IP source guard
l PVLAN
l STP
Settings under config QinQ are for customer VLANs (C-VLANs). Other settings such as
set allowed-vlans, set native-vlan, and set vlan-tpid are for service-provider
VLANs (S-VLANs).
1. Using the FortiOS CLI, create a separate VDOM for each customer.
2. Using the FortiOS CLI, create VLANs for each customer and assign the VLANs to the appropriate VDOM.
3. Using the FortiOS CLI, configure QinQ for the managed switch port that will be used by the customerʼs VLANs.
Use the FortiOS CLI to configure a separate VDOM for each customer. For example:
config vdom
edit root
next
edit vdom1
next
end
Use the FortiOS CLI to create VLANs foreach customer and assign the VLANs to the appropriate VDOM.
The S-VLAN must be configured on the same VDOM where the FortiLink interface is; for example, if the FortiLink
interface is on the root VDOM, all S-VLANs must be defined in the root VDOM.
In the following example, three VLANs are created and then assigned to the same VDOM:
config system interface
edit "c1.svlan999"
set vdom "root"
set device-identification enable
set role lan
set snmp-index 52
set interface "fortilink"
set vlanid 999
next
end
In the following example, three VLANs are created and then assigned to the root or vdom1 VDOM:
config system interface
edit "909824.1"
set vdom "vdom1"
set interface "fortilink"
set vlanid 3000
next
end
Use the FortiOS CLI to configure QinQ for the managed switch port that will be used by the customerʼs VLANs. In the
following example, QinQ is enabled on port10 of the managed switch:
config switch-controller managed-switch
edit "S248EPTF18001384"
config ports
edit "port10"
set qnq "909824.1"
set vlan "1.vlan1"
set allowed-vlans "1.vlan2"
next
end
next
end
If you enable the set allowed-vlans-all command when QinQ is enabled, all C-VLANs in that VDOM that have the
same parent interface as the set qnq VLAN are pushed. In the following example, all C-VLANs in the root VDOM with
svlan100 as the parent interface are pushed:
config switch-controller managed-switch
edit S548DN5018000532
config ports
edit "port16"
set vlan "cv_sv_50"
set allowed-vlans-all enable
set export-to "root"
set mac-addr 70:4c:a5:a5:9d:59
set qnq "svlan100"
next
end
next
end
Configuration example
In this example, there are two customers. Customer c1 is assigned a customer tag of 3000 and VLANs 1-4094.
Customer c2 is assigned a customer tag of 3001 and VLANs 1-4094.
1. Use the FortiOS CLI to create separate VDOMs for the two customers, c1 and c2.
config vdom
edit root
next
edit c1
next
edit c2
next
end
2. Use the FortiOS CLI to create VLANs for each customer and assign the VLANs to the appropriate VDOM. In this
example, you create three VLANs for customer c1 and three VLANs for customer c2.
config system interface
edit "fortilink"
set fortilink enable
next
edit "customer.c1"
set vdom "root"
set interface "fortilink"
set vlanid 3000
next
edit "customer.c2"
set vdom "root"
set interface "fortilink"
end
next
end
Starting in FortiOS 7.6.1 with FortiSwitchOS 7.6.1, the FortiOS switch controller supports VLAN pruning. VLAN pruning
prevents unnecessary traffic from unused VLANs by only allowing traffic from the VLANs required for the inter-switch link
(ISL) trunks. This process makes networks more efficient and preserves bandwidth. In addition, VLAN pruning
eliminates the time spent on manual VLAN pruning and reduces the chance of errors. By default, VLAN pruning is
disabled.
For example:
diagnose switch vlan-pruning dynamic-vlan list port10
Although FortiOS leverages the Generic VLAN Registration Protocol (GVRP) message format
to exchange internal control packets for the VLAN-pruning feature, the firmware is currently
not fully compliant with the IEEE 802.1r-based standard GVRP specification.
To display the received and transmitted counters with GVRP-formatted messages on a FortiSwitch unit:
For example:
FS1E48T422005187 # diagnose switch vlan-pruning protocol-packet stats
Receive(RX) and transmit(TX) counters for GVRP vlan states
RX: JE JI LE LI LA E
TX: JE JI LE LI LA E
JE: JoinEmpty JI: JoinIn LE: LeaveEmpty
LI: LeaveIn LA: LeaveAll E: Empty
Configuration example
1. Configure the native VLAN on the managed FortiSwitch port. FortiSwitch1 has vlan1 and vlan11, and FortiSwitch2
has vlan11
config switch interface
edit port21
set native-vlan vlan1
next
end
When you create a device NAC policy in the FortiOS GUI, FortiOS now suggests values when you select the hardware
vendor, device family, type, operating system, and host to match. For example, if you want the NAC policy to match a
device family, FortiOS suggests FortiSwitch, FortiGate, FortiAP, FortiFone, FortiCam, FortiRecorder, FortiManager,
FortiAnalyzer, Mac, iPhone, Galaxy, Virtual Machine, and Printer. These suggestions make it easier and quicker to
create a device NAC policy.
Starting in FortiOS 7.6.3 with FortiSwitchOS 7.2.3, you can use FortiLink to manage FortiSwitch units using IPv6
addresses. Previously, only IPv4 addresses were supported.
To use this feature, the following is required on the FortiGate device:
l FortiOS 7.6.3 or later
l You need to manually configure the IPv6 address for the FortiLink interface.
l You need to manually configure the DHCP pool.
To use this feature, the following is required on the managed FortiSwitch unit:
l FortiSwitchOS 7.2.3 or later
l You need to set the IPv4 mode for DHCP to static or to a similar setting because the DHCP IP acquisition for IPv4
occurs before IPv6. If the IPv6 DHCP IP address is acquired on an internal interface first, it takes precedence during
the discovery phase broadcast.
l You need to configure the IPv6 NTP server.
l In layer-3 mode, only the static AC discovery mode (under the config switch-controller global
command) is supported for IPv6.
FortiLink interfaces using IPv6 do not support zero-touch provisioning.
Use the IPv6 options for configuring the system interface with the config system interface command. For
example:
config system interface
edit "fortilink"
set vdom "root"
set fortilink enable
set ip 10.255.1.1 255.255.255.0
set allowaccess ping fabric
set type aggregate
set member "a" "b"
set lldp-reception enable
set lldp-transmission enable
set snmp-index 18
set auto-auth-extension-device enable
set fortilink-split-interface disable
set switch-controller-nac "fortilink"
You can configure a DHCP server using the config system dhcp6 server command. For example:
config system dhcp6 server
edit 1
set dns-service default
set subnet 2001:db8:d0c:1::/64
set interface "port5"
config ip-range
edit 1
set start-ip 2001:db8:d0c:1::a
set end-ip 2001:db8:d0c:1::f
next
end
next
end
When a FortiSwitch unit is discovered, the switch controller automatically creates VLANs for quarantined traffic, RSPAN
and ERSPAN mirrored traffic, voice devices, video devices, and NAC onboarding devices. You can use the CLI to
prevent the switch controller from automatically creating VLANs.
When you disable the automatic creation of VLANs, only the default VLAN is created. All VLANs are hidden, except for
the default VLAN. Features that use unassigned VLANs do not work unless you manually configure them.
This feature applies only to new FortiLink configurations that use FortiOS 7.6.3 and later. By default, the automatic
creation of VLANs is enabled.
FortiExtender
This enhancement ensures that FortiGate can swiftly recover data sessions in the event of a failover. You can set a
FortiExtender up with two sessions, Active and Standby, which are each associated with a primary and secondary
FortiGate.
Upon receiving a failover notification, FortiExtender switches the Standby session associated with the now primary
Access Controller (AC) to Active, and the Active session associated with the previous primary AC to Standby.
For more information about this feature, see Support fast failover for FortiExtender.
This information is also available in the FortiExtender (FGT-Managed) 7.6.1 Admin Guide:
l VLAN support for LAN-extension mode
This release adds support for VLANs over a FortiExtender configured as a LAN extension. VLAN support can be
configured on the FortiGate Access Controller via the GUI or CLI. Once you add the VLAN configurations to the LAN
extension profile, FortiGate then synchronizes the VLAN configurations to the FortiExtender and the FortiExtender
applies the VLAN configuration to the soft switch. Clients from a different port in the LAN switch can set a dedicated
VLAN ID and the FortiGate Access Controller can apply a dedicated firewall policy for each VLAN interface.
The following CLI commands have been added:
config extension-controller extender-profile
edit <FortiExtender Profile>
set extension lan-extension
config lan-extension
config downlinks
edit <id>
set type port
set port <port>
set pvid <vlanid>
next
end
end
next
end
Example topology
All FortiExtender LAN traffic is sent to the FortiGate Access Controller via a Layer 2 Tunnel.
1. From the FortiGate, go to Network > FortiExtenders and configure the FortiExtender to run in LAN extension mode.
2. Go to Network > Interfaces and add VLAN interfaces to the LAN extension interface.
DHCP servers are enabled in these VLAN interfaces and will provide IP and gateway addresses to clients behind
the FortiExtender.
3. Go to Network > FortiExtenders and edit the FortiExtender Profile.
4. Under LAN extension > FortiExtender downlink, click Create new to create a new downlink.
5.
6. Select the interface and enter the VLAN ID you want to bind to the FortiExtender LAN switch port.
9. When you are done configuring on the FortiGate Access Controller, you can check the FortiExtender device to see
the corresponding downlink configurations.
When a client connects to port4 of a FortiExtender LAN switch, it will get the DHCP allocation (21.21.21.100) from
FortiGate vlan201. Client traffic then goes through the firewall from vlan201 to port1.
1. When the FortiGate Access Controller detects a FortiExtender, it automatically generates an extender-profile
without a downlink.
config extension-controller extender-profile
edit "FX200F-lanext-default"
set id 0
set model FX200F
set extension lan-extension
config lan-extension
set link-loadbalance loadbalance
set ipsec-tunnel "fext-ipsec-QdzC"
set backhaul-interface "port3"
set backhaul-ip "1.1.1.10"
config backhaul
edit "1"
set port port1
next
edit "2"
set port port2
next
end
end
3. When the FortiExtender is authorized, the FortiGate will receive a LAN-extension interface.
config system interface
edit "FX0035919000000"
set vdom "root"
set ip 172.31.0.254 255.255.255.0
set allowaccess ping ssh
set type lan-extension
set role lan
set snmp-index 27
set ip-managed-by-fortiipam enable
set interface "fext-ipsec-QdzC"
next
end
4. Create VLAN interfaces based on the LAN-extension interface and enable DHCP servers on the VLAN interface.
config system interface
edit "v201"
set vdom "root"
set ip 21.21.21.99 255.255.255.0
set allowaccess ping
set device-identification enable
set role lan
set snmp-index 28
set ip-managed-by-fortiipam disable
set interface "FX0035919000000"
set vlanid 201
next
end
config system dhcp server
edit 4
set forticlient-on-net-status disable
set dns-service default
set default-gateway 21.21.21.99
set netmask 255.255.255.0
set interface "v201"
config ip-range
edit 1
set start-ip 21.21.21.100
set end-ip 21.21.21.120
next
end
next
end
6. After configuring the extension profile in the FortiGate, the settings are automatically synced to the FortiExtender.
No manual configuration is needed on the FortiExtender side.
Corresponding synced FortiExtender configurations:
config system switch-interface
edit le-switch
set vlan-support enable
config member
edit le-agg-link
set type aggregate
set port le-agg-link
set vids 201 401
next
edit port4
set type physical
set port port4
set vids
set pvid 201
next
edit port5
set type physical
set port port5
set vids
set pvid 401
next
end
set stp disable
set ts-mode disable
next
end
7. Configure firewall policies to manage client traffic on each dedicated FortiGate VLAN.
The following shows an example firewall policy for traffic on v201:
config firewall policy
edit 5
set name "v201"
set uuid 7ea5b28c-810c-51ef-1a44-f92a2c95d2d3
set srcintf "v201"
set dstintf "port1"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
set nat enable
next
end
This information is also available in the FortiExtender 7.6.1 Managed Administration Guide:
l Configure split tunneling in LAN extension mode
GUI support is available in FOS 7.6.3. For more information, see Add GUI support for split
tunneling in LAN extension mode 7.6.3 on page 514.
This release supports split tunneling when FortiExtender is configured in LAN extension mode. You can configure split
tunneling to specify which traffic gets routed to the central FortiGate for further inspection and which traffic can be sent
directly to their destination. This reduces the load on the central FortiGate by routing less traffic through the LAN
extension tunnel.
Example topology
When FortiGate authorizes a FortiExtender in LAN extension mode, it creates an IPsec tunnel between the
FortiExtender uplink port and the FortiGate. Client traffic is forwarded to the FortiGate via this tunnel. The name of the
tunnel can be found in the FortiGate LAN extension profile. You can specify which traffic is forwarded through this tunnel
to the FortiGate based on source/destination, IP/port number, and protocol type.
FortiExtender groups its wired and wireless clients into a soft-switch called le-switch. The traffic from these FortiExtender
clients are bridged into a default IPsec tunnel called le-agg-link to reach the central FortiGate.
1. From the FortiGate CLI, define the split tunnel in the FortiExtender LAN extension profile under config traffic-
split services.
config extension-controller extender-profile
edit "FXW51G-lanext-default"
config lan-extension
set ipsec-tunnel "fext-ipsec-mSI4"
set backhaul-interface "internal"
config backhaul
edit "1"
set port lte1
set role secondary
next
edit "2"
set port wan
set role primary
next
end
config traffic-split-services
edit "1"
set vsdb enable
set address ''
set service ''
next
edit "2"
set vsdb disable
set address "gmail.com"
set service "HTTPS"
next
edit "3"
set vsdb disable
set address "fortinet.com"
set service "HTTPS"
next
end
end
next
end
2. Once a FortiExtender is authorized with the LAN extension profile, a FortiGate LAN extension interface is created
(FX016S224000024).
"FX016S224000024" is an IPsec interface that corresponds with the tunnel "fext-ipsec-mSI4", which is created by
the FortiGate LAN extension profile.
config extension-controller extender
edit "FX016S224000024"
set id "FXW51GS224000024"
set authorized enable
set device-id 0
set extension-type lan-extension
set profile "FXW51G-lanext-default"
set override-allowaccess enable
set allowaccess ping telnet https
set override-login-password-change enable
next
end
3. A DHCP server is created on the FortiGate LAN extension interface "FX016S224000024" for FortiExtender LAN
clients.
config system dhcp server
edit 2
set forticlient-on-net-status disable
set ntp-service default
set default-gateway 192.168.0.254
set netmask 255.255.255.0
set interface "FX016S224000024"
config ip-range
edit 1
set start-ip 192.168.0.1
set end-ip 192.168.0.254
next
end
set dhcp-settings-from-fortiipam enable
config exclude-range
edit 1
set start-ip 192.168.0.254
set end-ip 192.168.0.254
next
end
set dns-server1 192.168.0.1
next
end
4. Configure a FortiGate firewall policy for traffic from the FortiExtender LAN clients to the IPsec
interface "FX016S224000024".
config firewall policy
edit 2
set name "Exclude-lanext"
set uuid ffaf4528-ef11-51ef-da97-83d777adbadc
set srcintf "FX016S224000024"
set dstintf "wan1"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
set nat enable
next
end
5. After you apply these configurations, they are automatically synched to the FortiExtender devices.
When you apply FortiExtender profile configurations from the FortiGate, they are automatically synched to the
FortiExtender. Note that these configurations are auto-generated and cannot be edited while in LAN extension mode.
1. Verify the synched profile configurations from the FortiExtender CLI. FortiExtender profile configurations from the
FortiGate are synched to the FortiExtender soft-switch (le-switch). The le-switch bridges LAN clients to the IPsec
tunnel (le-agg-link), and then to FortiGate "FX016S224000024". With split tunneling defined, the split traffic will be
sent out of IPsec tunnel.
config system switch-interface
...
edit le-switch
set vlan-support disable
config member
edit le-agg-link
set type aggregate
set port le-agg-link
set vids
next
edit port1
set type physical
set port port1
set vids
set pvid 1
next
edit port2
set type physical
set port port2
set vids
set pvid 1
next
edit port3
set type physical
set port port3
set vids
set pvid 1
next
edit 2G
set type vap
set vap 2G
set pvid 0
next
edit 5G
set type vap
set vap 5G
set pvid 0
next
end
set stp disable
set ts-mode include
config traffic-split
edit 1
set dst-mac 1a:44:f9:fd:72:94
set dst-addr le-ts-vsdb
set services
next
edit 2
set dst-mac 1a:44:f9:fd:72:94
set dst-addr le-ts-gmail.com
set services le-ts-HTTPS
next
edit 3
set dst-mac 1a:44:f9:fd:72:94
set dst-addr le-ts-fortinet.com
set services le-ts-HTTPS
next
end
next
end
2. Verify that splitted traffic is filtered with the following DHCP assigned address to LAN clients.
config network address
edit le-ts-le-switch
set type ipmask
set subnet 192.168.0.0/24
next
end
3. Verify that splitted traffic will be forwarded to FortiExtender WAN interface following the synched firewall policy.
config firewall policy
edit le-ts-le-switch
set srcintf any
set dstintf any
set srcaddr le-ts-le-switch
set dnat disable
set dstaddr all
set action accept
set status enable
set service ALL
set nat enable
next
end
4. Verify that the FortiExtender WAN interface has a default gateway to the Internet. In this example, it is wan.
FXW51GS224000024 # get router info routing-table all
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, P - PIM, A - Babel, N - NHRP,
> - selected route, * - FIB route
This information is also available in the FortiExtender 7.6.1 Managed Administration Guide:
l Multiple APNs in WAN-Extension mode
GUI support is available in FOS 7.6.3. For more information, see Add GUI support for multiple
APNs in WAN extension mode 7.6.3 on page 516.
This release supports adding multiple APNs when operating in WAN-Extension mode. Select FortiExtender models can
support multiple Access Point Names (APNs). By using different APNs to create multiple Packet Data Networks (PDNs),
FortiGate can establish up to four FortiExtender virtual interfaces from a single FortiExtender modem. These interfaces
provide users with more flexibility to customize data traffic steering, improving FortiGate connectivity and performance
through FortiExtender.
1. From the FortiExtender CLI, create multiple data plans with unique APNs.
config extension-controller dataplan
edit "plan1"
set apn "ltedata.apn"
set capacity 100
next
edit "plan2"
set apn "ltemobile.apn"
set capacity 200
next
end
2. In the FortiExtender profile, enable multiple-PDN and add your data plans.
config extension-controller extender-profile
edit "FXW51G-wanext-default"
set model FXW51G
config cellular
set dataplan "plan1"
config modem1
3. Authorize the FortiExtender and set your WAN-Extension PDN interfaces so that FortiGate obtains multiple virtual
interfaces with different PDNs.
config extension-controller extender
edit "FX016S224000024"
set id "FXW51GS224000024"
set authorized enable
set extension-type wan-extension
set profile "FXW51G-wanext-default"
config wan-extension
set modem1-pdn1-interface "fext1"
set modem1-pdn2-interface "fext2"
set modem1-pdn3-interface ''
set modem1-pdn4-interface ''
end
next
end
4. Configure firewall polices to steer different traffic flows to different FortiExtender interfaces based on PDNs.
config firewall policy
edit 3
set name "control-flow"
set uuid 6aaedd2a-f309-51ef-9fee-0ca8ef8f4206
set srcintf "wan1"
set dstintf "fext1"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "MMS"
set nat enable
next
edit 4
set name "data-flow"
set uuid 8a47bb70-f309-51ef-91a0-35e0e2bc5547
set srcintf "wan1"
set dstintf "fext2"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
set nat enable
next
end
This information is also available in the FortiExtender 7.6.1 Managed Administration Guide:
l Register with FortiCare
GUI support is available in FOS 7.6.3. For more information, see Add GUI support for
FortiCare registration for FortiExtender 7.6.3 on page 518.
This feature adds the option to register your authorized FortiExtender to FortiCare directly from the FortiGate CLI.
FortiCare enables you to manage security fabric devices such as FortiAP, FortiSwitch, and FortiExtender from a root
FortiGate device. Once your FortiExtender is registered with FortiCare, you gain access to more streamlined ticket
reporting and tracking services. You can also download historic and recent modem firmware and device images from
FortiCare.
2. Example registration:
# diag forticare direct-registration product-registration -N FX212FTQ22000746 -a
[email protected] -p LDAP -T "CA" -R "other" -e 1
Account info:
contract_number=[] account_id=[[email protected]] password=[***]
reseller_id=0 reseller=[other]
isGovernment=0
first_name=[] last_name=[] company=[]
title=[] address=[] city=[]
state=[] state_code=[] country_code=0
post_code=[] phone=[] fax=[]
industry=[] industry_id=0 orgsize=[] orgsize_id=0
version=0 SN=[FX212FTQ22000746] existing=1
Prepare to register product into this account.
Add GUI support for split tunneling in LAN extension mode - 7.6.3
Support for configuring split tunneling in LAN extension mode using the CLI was added in
FortiOS 7.6.1. FortiOS 7.6.3 adds GUI support. For more information, see Support split
tunneling in LAN extension mode 7.6.1 on page 506.
This release adds GUI support for configuring split tunneling. When FortiExtender is configured in LAN extension mode,
you can configure split tunneling to specify which traffic gets routed to the central FortiGate for further inspection and
which traffic can be sent directly to their destination. This reduces the load on the central FortiGate by routing less traffic
through the LAN extension tunnel.
1. From the FortiGate, go to Network > FortiExtenders > Managed FortiExtenders and locate the FortiExtender you
want to configure split tunneling for.
2. In the details column, you can find the name of the IPsec tunnel between the FortiExtender and FortiGate. In this
example, the tunnel name is fext-ipsec-mSI4.
3. Go to Network > FortiExtenders> Profiles and click Create new or edit an existing FortiExtender profile.
4. Under LAN extension, you can configure the IPsec tunnel (fext-ipsec-mSI4) between the FortiGate and
FortiExtender uplink port.
5. In Link role, select Uplink with split tunnel to select which traffic you want to exempt from being sent to the IPsec
tunnel. You can enable Popular video services or add specific addresses in services you want to exempt.
In the following example, popular video services, as well as https links to specific addresses are exempted from
being sent to the IPsec tunnel.
As defined in split tunneling mode, traffic will use this firewall policy to access the internet for initialization, DNS,
and etc.
9. Once the session is established, the split traffic will be sent to the FortiExtender WAN interface via the FortiExtender
firewall. This traffic will no longer use the IPsec tunnel.
l The FortiExtender firewall only accepts the traffic from FortiExtender LAN clients, which is defined as le-ts-le-
Add GUI support for multiple APNs in WAN extension mode - 7.6.3
Support for configuring multiple APNs in WAN extension mode using the CLI was added in
FortiOS 7.6.1. FortiOS 7.6.3 adds GUI support. For more information, see Support multiple
APNs in WAN extension mode 7.6.1 on page 511.
This release adds GUI support for configuring multiple APNs. When operating in WAN-Extension mode, select
FortiExtender models can support multiple Access Point Names (APNs). By using different APNs to create multiple
Packet Data Networks (PDNs), FortiGate can establish up to four FortiExtender virtual interfaces from a single
FortiExtender modem. These interfaces provide users with more flexibility to customize data traffic steering, improving
FortiGate connectivity and performance through FortiExtender.
1. From the FortiGate, go to Network > FortiExtenders > Data Plans and click Create new to create multiple data plans
with unique APNs.
Support for adding FortiExtenders to FortiCare using the CLI was added in FortiOS 7.6.1.
FortiOS 7.6.3 adds GUI support. For more information, see Support FortiCare registration for
FortiExtender 7.6.1 on page 513.
This release adds GUI support for registering your authorized FortiExtender to FortiCare directly from the FortiGate.
FortiCare enables you to manage security fabric devices such as FortiAP, FortiSwitch, and FortiExtender from a root
FortiGate device. Once your FortiExtender is registered with FortiCare, you gain access to more streamlined ticket
reporting and tracking services. You can also download historic and recent modem firmware and device images from
FortiCare.
System
General
This section includes information about general system related new features:
l Restrict local administrator logins through the console on page 521
l Configure TCP NPU session delay globally on page 523
l Object usage included in the print tablesize command output on page 525
l Simplified device registration for Security Fabric devices 7.6.1 on page 525
l Firmware upgrade report 7.6.1 on page 527
l Optimizations for physical FortiGate devices with 2 GB RAM 7.6.3 on page 531
FortiOS can now restrict local administrator logins using the console when FortiGate can reach the remote
authentication server. This enhancement provides more control over local administrator logins to improve system
security.
config system global
set admin-restrict-local {all | non-console-only | disable}
end
set admin-restrict-local Restrict local administrator logins when the remote authentication server is
{all | non-console- reachable.
only | disable}
l all: Enable local administrator authentication restriction, including the
console.
l non-console-only: Enable local administrator authentication restriction,
excluding the console.
l disable: Disable local administrator authentication restriction.
Example 1
In this example, the local administrator restriction is set to non-console-only. As a result, local administrators cannot
use non-console methods, such as SSH, to log in to FortiGate when the remote authentication server is reachable.
However, local administrators can use the console to log in to FortiGate.
3. Using the FortiGate console and the local administrator account, log in to FortiOS.
Login is allowed:
FGT login: admin
Password:
Welcome!
Example 2
In this example, the local administrator restriction is set to all. As a result, local administrators cannot use any method
to log in to FortiGate when the remote authentication server is reachable.
The TCP NPU session delay can be applied globally, eliminating the need to set this command for each firewall policy.
config system global
set delay-tcp-npu-session {enable | disable}
end
This global setting is disabled by default. When it is disabled, if the host interface is busy, it is possible that the third TCP
session establishment ACK received from the client is transmitted to the server after the data packets. When it is
enabled, the packet order of the three-way handshake is guaranteed.
A sniffer trace will display the following when the setting is disabled:
# diagnose sniffer packet port1 'tcp' 6 0 a
interfaces=[port1]
filters=[tcp]
2024-04-17 20:42:48.920621 port1 -- 172.16.200.55.45028 -> 10.1.100.11.80: syn 1844864123
0x0000 8439 8ff2 9c30 000c 2960 1955 0800 4500 .9...0..)`.U..E.
0x0010 003c 868a 4000 4006 d1dd ac10 c837 0a01 .<..@[email protected]..
0x0020 640b afe4 0050 6df6 647b 0000 0000 a002 d....Pm.d{......
0x0030 70bc 3f42 0000 0204 05a3 0402 080a 5026 p.?B..........P&
0x0040 e2f1 0000 0000 0103 0307 ..........
0x0020 640b afe4 0050 6df6 647c 90b0 97b7 8010 d....Pm.d|......
0x0030 00e2 772e 0000 0101 080a 5026 e2f1 5029 ..w.......P&..P)
0x0040 ee07 ..
A sniffer trace will display the following when the setting is enabled:
# diagnose sniffer packet port1 'tcp' 6 0 a
interfaces=[port1]
filters=[tcp]
2024-04-17 20:37:11.440240 port1 -- 172.16.200.55.43672 -> 10.1.100.11.80: syn 780932462
0x0000 8439 8ff2 9c30 000c 2960 1955 0800 4500 .9...0..)`.U..E.
0x0010 003c 8c31 4000 4006 cc36 ac10 c837 0a01 .<.1@[email protected]..
0x0020 640b aa98 0050 2e8c 156e 0000 0000 a002 d....P...n......
0x0030 70bc 1c99 0000 0204 05a3 0402 080a 5025 p.............P%
0x0040 995f 0000 0000 0103 0307 ._........
0x0010 0034 7a33 4000 3e06 e03c 0a01 640b ac10 .4z3@.>..<..d...
0x0020 c837 0050 aa98 c630 de45 2e8c 1608 8010 .7.P...0.E......
0x0030 00eb 2167 0000 0101 080a 5028 a476 5025 ..!g......P(.vP%
0x0040 995f
Object usage is now shown as the fourth column in the print tablesize command output. This can help
administrators to monitor limits and improve system management.
The four columns are:
l the maximum number allowed for the child-table in its parent entry
l the maximum number allowed per VDOM
l the system global limit
l the current object usage
# print tablesize
system.vdom: 0 0 10 3
system.datasource: 0 0 0 3
system.timezone: 0 0 0 597
system.accprofile: 0 0 10 5
system.np6xlite: 0 256 512 1
system.vdom-link: 0 0 0 3
...
This feature adds the option to register all of the Fortinet devices (FortiGates, FortiAPs, and FortiSwitches) that are in the
same Security Fabric to the same FortiCare account at the same time, as opposed to having to register each device
individually.
1. On the Fabric root FortiGate, go to System > Firmware & Registration. The Registration Status column shows
whether or not a device has been registered to FortiCare.
If the root FortiGate device is already registered, the Email address will already be set.
4. Click Register. A registration request for all of the selected devices is sent to FortiCare and the Device registration
summary table is shown.
5. Click Close. The Firmware & Registration page shows the updated registration statuses.
FortiOS now includes a firmware upgrade report that compares statistics and configurations before and after a firewall
upgrade. Automatic generation of the report is enabled by default, and the report enhances the upgrade process by
providing detailed assurance of successful upgrades.
The config system global command includes a new option:
config system global
set upgrade-report {enable | disable}
end
For FortiGates without disks, the report is stored on flash memory. All FortiGate models are
equipped with flash memory.
Example
1. After a successful upgrade, log in to the GUI, and view the Firmware Upgrade monitor in the bottom-right corner.
The following buttons are available:
l View reports <number>
The <number> indicates how many FortiGates have an available firmware upgrade report.
l View device list
2. Click the View reports <number> button or the document icon beside Done. A Firmware Upgrade Reports pane
opens to show the list of FortiGates with an available firmware upgrade report:
3. Double-click a FortiGate to display its firmware upgrade report. The firmware upgrade report contains the following
tabs: Statistics and Configuration diff.
l The Statistics tab displays general information at the top about Upgrade path, Upgrade time, and Initiated by.
Below the general section are categories of information from before and after the upgrade. The categories of
information depend on whether the FortiGate is part of a Security Fabric.
In this example, the FortiGate is not part of a Security Fabric, and the following categories of information are
displayed: FortiAPs, FortiSwitches, FortiExtenders, Endpoint Devices, Routing, Traffic, Connectivity, and
Resources.
l Click the Configuration diff tab to display a comparison of the current (green) and previous (red) configurations.
4. In the Firmware Upgrade monitor, click View device list to display the Firmware & Registration pane.
Fortinet has optimized memory usage on physical FortiGate devices with 2 GB of RAM to ensure smooth performance
and reliability by adjusting memory used by some GUI features. This change prioritizes device stability and reduces the
risk of performance issues.
Changes:
l Removed CLI Command: The gui-rest-api-cache command (under config system global) is no longer
available. This command was used to enable/disable REST API result caching on FortiGate.
l Streamlined GUI Pages: The following pages in the Security Fabric section have been removed:
l Physical Topology
l Logical Topology
l Security Rating
l Security Rating: With Security Rating page removed, security insights no longer show on pages, such as firewall
policy, interface, or address object. Security rating event logs are no longer generated. However, PSIRT advisory
warnings and critical vulnerability warnings are still visible in the GUI.
l Visibility in Security Fabric topologies: Since physical FortiGate devices with 2 GB RAM do not support topology
features, any downstream physical FortiGate with 2 GB RAM will not appear in the Physical Topology or Logical
Topology pages of the upstream root device’s GUI, even if the upstream device has more than 2 GB of RAM.
To verify the downstream device’s connection, use the following CLI on the upstream FortiGate instead:
# diagnose sys csf downstream
These changes apply exclusively to physical FortiGate devices with 2 GB of RAM, leaving
devices with higher memory unaffected. Specifically, the impacted models are:
l FortiGate/FortiWiFi 40F and 60F series and their variants
FortiGuard
The Internet assigned numbers authority (IANA) timezone database is downloadable from the FortiGuard server,
instead of being embedded within the FortiOS image. This allows the FortiGate to automatically refresh its timezone
database, eliminating the need to wait for the next image release to access new or updated timezones.
1. Go to System > FortiGuard and in the License Information table, expand the Firmware & General Updates section to
check the Timezone Database versions.
Subscriptions and FortiGuard settings are now organized into separate tabs with clear distinctions between licensed,
expired, and available-for-purchase subscriptions, providing customers with a more intuitive and informative layout.
Subscriptions
FortiGuard subscription information can be found in the System > FortiGuard > Subscriptions tab.
l Hovering over the version will display the date when the signature or engine was Last updated. For items that
are only updated once it has been enabled in a policy, Version details will be most up to date if item is used in a
policy will also be included in the update information.
l Clicking Update licenses & definitions now will trigger a database update from FortiGuard.
l Unregistered FortiGates are identified in the Basic Subscriptions > Support card. Click Register to proceed with
registering the FortiGate. Once it has been registered, access to FortiCloud and transfer services are included
under Support.
l Expired: Lists the subscriptions or services that have expired.
l Available for purchase: Lists available subscriptions in individual cards. Once an available subscription has been
purchased, it will appear in the Licensed page.
The registration code can be activated by clicking Activate subscription in the gutter.
FortiGuard settings
Configuration and management settings pertaining to FortiGuard can be found in the System > FortiGuard > FortiGuard
settings tab, including updates, filtering, and override servers.
A StateRamp FortiGate SKU entitles the FortiGate to use dedicated FortiGuard servers located in the United States. It
also entitles customers to access their support tickets through a dedicated FortiCare service located in the United
States.
When you purchase a StateRamp FortiGate, you will receive a FortiGate that automatically boots up in StateRamp
mode. It will contact the dedicated FortiGuard server to learn the rest of its entitlement.
All FortiGuard services that are supported by the StateRamp device are United States-based and use a specific FQDN.
The FortiGuard servers only support connections through Anycast. Any un-used cloud services are disabled on the
FortiGate.
When trying to enable services that are not supported on StateRamp devices, an error will be returned in the GUI and
CLI. Likewise, some features are hidden in the GUI if they are disabled for StateRamp devices.
In the following example, the user attempts to enable FortiAnalyzer on a StateRamp FortiGate which is an unsupported
service on StateRamp devices.
An error is displayed.
Fortinet Inc. now leverages AMQP (Advanced Message Queuing Protocol) to deliver real-time update notifications to
FortiGate devices. When enabled, this feature allows FortiGate to receive notifications directly from FortiGuard,
eliminating the need for polling or persistent HTTP connections. By leveraging Fortinet Inc.'s cloud infrastructure, AMQP
enables event-driven updates, reducing resource consumption and minimizing overhead. Notifications are pushed
instantly to devices, ensuring proactive management and swift response to critical updates.
The AMQP client daemon, fortimq, connects with the cloud server, fortimq-cloud. It works as a proxy for other
FortiOS daemons to receive real-time updates for Fortinet Inc.'s cloud infrastructure. Once FortiGuard or an account or
device-level contract is updated, fortimq-cloud publishes notifications to the FortiGate and triggers the update
procedure.
By default, fortimq stays idle until a feature explicitly subscribes to a topic, such as license alerts, database updates,
and so on. When a subscription is created, fortimq:
1. Connects to the cloud.
2. Delivers updates automatically.
CLI syntax
AMQP-powered subscription notifications for FortiGuard can be enabled and disabled in the CLI using the following
command:
config system fortiguard
set subscribe-update-notification {enable | disable}
end
Example
The following example demonstrates enabling AMQP-powered subscription notifications and reviewing the logs.
It will leave the idle state when a feature explicitly subscribes to a topic:
l Once a new contract is set in the FortiGate, fortimq will receive the following message from FortiGuard:
<227> 08 fortimq_handle_basic_deliver()-1044: receive msg:
delivery tag 1, channel 1 key FGD-LIC-UPDATE.TOKYO-APAC
{"version":"1.0","type":"device_contract","geoloca
...
handle_fortimq_lic_notify_packet[328]-version=1.0, type=device_contract
handle_fortimq_lic_notify_packet[375]-contracts[0]=[{ "serial_number":
"FG201E4QXXXXXXXX", "contract": [ "AVDB-1-06-20260711:0:1:1:0", "COMP-1-20-
20260711:0:1:1:0", "DLDB-1-06-20260711:0:1:1:0", "ENHN-1-20-20260711:0:1:1:0", "FAIS-
1-06-20260711:0:1:1:0", "FCSS-1-10-20260711:0:1:1:0", "FGSA-1-06-20260711:0:1:1:0",
"FMWR-1-06-20260711:0:1:1:0", "FRVS-1-06-20260711:0:1:1:0", "FURL-1-06-
20260711:0:1:1:0", "HDWR-1-05-20260711:0:1:1:0", "IOTH-1-06-20260711:0:1:1:0", "ISSS-
1-06-20260406:0:1:1:0", "NIDS-1-06-20260711:0:1:1:0", "SBCL-1-06-20180716:0:1:1:0",
"SPAM-1-06-20260711:0:1:1:0", "SPRT-1-20-20260711:0:1:1:0", "ZHVO-1-06-
20260711:0:1:1:0" ] }]
handle_fortimq_lic_notify_packet[404]-contract[0,12]=[ISSS-1-06-20260406:0:1:1:0]
l Once a new FortiGuard database is deployed, fortimq will receive the following message from FortiGuard:
3087> 08 fortimq_handle_basic_deliver()-1044: receive msg:
delivery tag 1, channel 2 key
{"version":"1.0","type":"package","geolocation":"T
handle_fortimq_obj_notify_packet[222]-version=1.0, type=package
handle_fortimq_obj_notify_packet[252]-version_string[0]=[07006000DBDB00100-
00003.01214]
High availability
To increase the number of HA virtual MAC addresses higher than the number HA group IDs, FortiGate supports three
methods of assigning virtual MAC addresses, in order of highest priority to lowest:
l Manual assignment per interface
l Automatic assignment
l Group ID based assignment (existing process)
Manual virtual MAC address assignment can be configured on a physical, EMAC, or FortiExtender interface. It will
override other virtual MAC address assignments on the interface.
Automatic virtual MAC address assignment can be configured on physical interfaces. It uses the hardware MAC address
of the primary device with the locally administered bit (U/L bit) changed to 1. For example, 00:xx:xx:xx:xx:xx
becomes 02:xx:xx:xx:xx:xx.
In a 48-bit MAC address, the U/L bit refers to the second least significant bit in the first octet of
the hexadecimal MAC address. When this bit is 0, it indicates that the MAC address is
Universal, meaning that it is assigned by a central authority. When this bit is 1, it indicates that
the MAC address is Local, meaning that it is assigned locally.
For example, the first octet of 00 represented in binary is 00000000, where the U/L bit is 0.
Whereas the first octet of 02 represented in binary is 00000010, where the U/L bit is set to 1.
config system ha
set auto-virtual-mac-interface <interface> [interface(s)]
end
config system ha
set group-id 20
set group-name "MMMMM"
set mode a-p
set hbdev "ha1" 50 "ha2" 100
set auto-virtual-mac-interface "wan1" "port1" "port2" "ha1" "ha2" "port3" "port4"
"port5" "port6" "port7" "port8" "dmz"
set upgrade-mode simultaneous
set override enable
set priority 200
end
The current hardware address (Current_HWaddr) is the automatically generated virtual MAC address. The permanent
hardware address (Permanent_HWaddr) is the physical MAC address.
A split-brain scenario can occur in an FGCP HA cluster when the heartbeat interface(s) go down between the FortiGate
units, and the secondary unit promotes itself to primary, resulting in both FortiGate units acting as primary units. Extreme
latency or congestion can also result in a split-brain scenario.
A new backup heartbeat interface is available to help prevent split-brain scenarios. The backup heartbeat is a dedicated
interface that is automatically used when a secondary unit detects no heartbeats from the primary unit through the
heartbeat interface(s). The backup heartbeat interface is no longer used when the secondary unit detects a heartbeat
again.
The config system ha command includes a new option:
config system ha
set backup-hbdev <interface(s)>
end
set backup-hbdev Backup heartbeat interfaces. Must be the same for all HA cluster members, but
<interface(s)> different from the heartbeat interface (hbdev). Supports a maximum of 32
interfaces.
In 7.6.1 and later, the backup heartbeat can be configured in the GUI on the System > HA page.
Consider the following when using a backup heartbeat interface:
l A split-brain happens specifically when the secondary unit cannot detect heartbeats from the primary unit, and it
promotes itself to primary. Therefore, the backup-hbdev is used only when the secondary unit cannot detect
heartbeats. When the backup-hbdev is in use, the setting cannot be changed.
l The backup heartbeat interface does not bind to the virtual port_ha interface. Its main purpose is to operate
efficiently to maintain the HA cluster and continue the flow of traffic. Therefore, some functions are not available by
design.
l Configuration changes are not synchronized to the secondary member in the HA cluster while the backup heartbeat
interface is in use.
l Without using session-sync-dev, the session-sync and session-pickup events will not occur.
Example
In this example, the FortiGate HA cluster consists of two FortiGates (FortiGate A and FortiGate B) connected by two
heartbeat interfaces (HA1 and HA2). A backup heartbeat interfaces (port2) is configured too.
Because a backup heartbeat interface is configured, the HA cluster continues to work when heartbeat interfaces HA1
and HA2 are down.
config system ha
set hbdev "HA1" 50 "HA2" 100
set backup-hbdev "port2"
end
To view the HA cluster status when both heartbeat interfaces are down:
bytes/packets/dropped/errors=1846379700/4140237/0/0, tx=1458035532/3809641/0/0
FG101FTK<number>(updated 2719 seconds ago):
ha1: physical/00, down, rx-bytes/packets/dropped/errors=0/0/0/0, tx=0/0/0/0
ha2: physical/1000auto, down, rx-
bytes/packets/dropped/errors=20229285/55544/0/0, tx=21798783/51360/0/0
number of member: 2
BB , FG101FTK<number>, HA cluster index = 1
AAAA , FG101FTK<number>, HA cluster index = 0
number of vcluster: 1
vcluster 1: standby 169.254.0.1
Secondary: FG101FTK<number>, HA operating index = 1
Primary: FG101FTK<number>, HA operating index = 0
3. View logs:
The following logs are recorded when a backup heartbeat is used:
# execute log display
RSSO (Radius Single Sign-On) authenticated user logon information is now synchronized between FortiGate peers
using FGSP (FortiGate Life Support Protocol), which ensures a consistent user experience across all FGSP peers.
Example
In this example, FGT-185 (peer 1) and FGT-184 (peer 2) are configured as FGSP stand-alone peers. See FGSP basic
peer setup for more information. RSSO authentication information is synchronized between the FGSP peers.
l Port 9:
config system interface
edit "port9"
set vdom "root"
set ip 172.16.200.7 255.255.255.0
set allowaccess ping https ssh http telnet
set type physical
set snmp-index 11
next
end
l Port 11:
config system interface
edit "port11"
set vdom "root"
set ip 10.10.10.1 255.255.255.0
set allowaccess ping
set type physical
set snmp-index 13
next
end
l FGSP configuration:
config system standalone-cluster
config cluster-peer
edit 1
set peerip 10.10.10.2
next
end
set standalone-group-id 1
set group-member-id 1
end
l Port 9:
config system interface
edit "port9"
set vdom "root"
set ip 172.16.200.5 255.255.255.0
set allowaccess ping https ssh http telnet
set type physical
set snmp-index 11
next
end
l Port 11:
config system interface
edit "port11"
set vdom "root"
set ip 10.10.10.2 255.255.255.0
set allowaccess ping
set type physical
set snmp-index 13
next
end
l FGSP configuration:
config system standalone-cluster
config cluster-peer
edit 1
set peerip 10.10.10.1
next
end
set standalone-group-id 1
set group-member-id 2
end
6. On each FGSP peer, verify RSSO session information is synchronized after traffic is sent from the client to an
FGSP peer.
Run the diagnose firewall auth list command on each FGSP peer to confirm that the same
RSSO session information is displayed on both devices.
In this example, traffic was sent from the client (10.1.100.188) to FGT-185 gateway:
# diagnose firewall auth list
10.1.100.188, test2
type: rsso, id: 0, duration: 694, idled: 146
flag(10): radius
server: root
packets: in 2869 out 3293, bytes: in 1488458 out 287365
group_id: 4
group_name: rsso-group1
The same RSSO session is in the firewall auth list for FGT-184, but the packet count is 0 because the traffic was
sent to the FGT-185 gateway:
# diagnose firewall auth list
10.1.100.188, test2
type: rsso, id: 0, duration: 520, idled: 520
flag(10): radius
server: root
Session failover is now supported for asymmetric traffic. FortiGate can continue sessions on the active FGSP peers if
the original FGSP peer, which initially received the session's first packet, becomes unavailable or unhealthy. It may go
into this state due to:
l Device shutdown or reboot
l A monitored interface is down
l A ping-server monitor goes down
When the original peer for a session is unavailable or unhealthy and other peers receive the asymmetric traffic, this
traffic does not bounce back to the original peer. Instead, it gets handled by the active FGSP peer. In the case of an
unhealthy peer due to failed monitored interface or ping-server monitor, it will share its not-ready status over FGSP
heartbeats so other peers will know not to bounce traffic back to it.
In the case of an unavailable peer, once the original FGSP peer is back online, it will perform session sync. While it is
syncing, it will share a not-ready status over FGSP so peers will not bounce traffic back to it. Once session sync is
complete, it will share a ready status and accept sessions to fail back to it.
UTM inspection will not occur during failover since the traffic must be scanned by the original
peer only. Furthermore, during failback of the session to the original FGSP peer, the session
will only be scanned if the policy is using flow-based inspection.
This enhancement ensures continuity and reliability of the network sessions, even if a device does not function as
expected.
There are two new options available in the config system standalone-cluster command on the CLI:
config system standalone-cluster
set monitor-interface <interface name>
set pingsvr-monitor-interface <interface name>
end
Example
In the following configurations, two peers are configured in FGSP, and a monitored interface and ping server monitor are
configured.
config system link-monitor
edit "1"
Traffic originally passes through UTM inspection over peer_1. The return traffic is routed to peer_2, where it will bounce
to peer_1, the original FGSP peer for inspection.
Upon peer_1 becoming unavailable or unhealthy, traffic no longer bounce back to peer_1. Instead, it is failed over to
peer_2 for processing.
Prior to this enhancement, FortiGate can continue sessions on the active FGSP peers if the original FGSP peer, which
initially received the session's first packet, becomes unavailable or unhealthy. It can determine this status due to
monitored interface or ping-server monitor failures. This is described in FGSP support for failover with asymmetric traffic
and UTM on page 552.
FGSP now supports another method for determining a FGSP peer as unhealthy, by monitoring the health of a routing
prefix from RIP, OSPF or BGP. Using this method, FortiGate can prevent network isolation and blackholing by
recognizing a critical data path is down. For instance, when peer 1’s path to a certain network no longer exists in the
routing table, it will share a not-ready status over FGSP heartbeats so other peers will know not to bounce traffic back to
it.
Multiple prefixes can be monitored. However, a bad health status on a prefix will trigger the
entire peer as not-ready, not only the specific path. Furthermore, if traffic is failed over to the
peer that is not the original owner of the session, then UTM inspection will not apply.
There are new configuration options available in the config system standalone-cluster command in the CLI:
config system standalone-cluster
config monitor-prefix
edit <ID>
set vdom <VDOM name>
set vrf <VRF ID>
set prefix <ip address and netmask>
next
end
end
Example
In the following configurations, two peers are configured in FGSP. Two routing prefixes are monitored. In the diagram
below, traffic travels asymmetrically, but is eventually bounced back to the peer (FGT_1) where the traffic was initiated.
This allows the traffic to continue its UTM inspection through the peer.
In the scenario that one of the peers (FGT_1) no longer sees a route to a prefix, disrupting the flow of traffic, instead of
causing network isolation and blackholing by bouncing the traffic back to the peer (FGT_1), traffic instead continues
through the healthy peer (FGT_2).
Note that in this case, traffic does not get scanned by UTM on the healthy peer (FGT_2).
edit 1
set vdom "root"
set prefix 192.168.2.0 255.255.255.0
next
edit 2
set vdom "root"
set prefix 20.1.1.0 255.255.255.0
next
end
end
2. Verification:
a. FGT_1 and FGT_2 both learn the network prefix of 20.1.1.0/24 over RIP from the upstream router.
FGT_1 # get rout info routing-table all
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
V - BGP VPNv4
* - candidate default
b. As such, the health status on peer_1 for both prefixes display healthy=1:
FGT_1 # diagnose test application sessionsync 1
HA is not enabled
sync context:
sync-enabled=0, sync-tcp=1, sync-nat=0
sync-other=1, sync-exp=1, standalone-sync=1, mtu=0
ipsec-tun-sync=1, encrypt-enabled=0
fgsp-peers-num=1, kernel-filters-num=1
fgsp-peers:
vdom=0, ip/port=10.2.2.2:708
fgsp_route_health=1
mon_prefix: vdom=root vrf=0, prefix=192.168.2.0(255.255.255.0) healthy=1
mon_prefix: vdom=root vrf=0, prefix=20.1.1.0(255.255.255.0) healthy=1
d. Traffic originally passes through UTM inspection over peer_1. The return traffic is routed to peer_2, where it will
bounce to peer_1, the original FGSP peer for inspection.
e. In the event that the network prefix 20.1.1.0/24 becomes unavailable from peer_1:
FGT_1 # get rout info routing-table all
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
V - BGP VPNv4
* - candidate default
Routing table for VRF=0
S* 0.0.0.0/0 [10/0] via 172.16.200.254, wan1, [1/0]
C 10.1.100.0/24 is directly connected, port1
C 10.2.2.0/24 is directly connected, ha1
C 172.16.200.0/24 is directly connected, wan1
C 192.168.2.0/24 is directly connected, mgmt
g. peer_2 also detects the not-ready status over the heartbeat packets (ready=0):
FGT_2 (Interim)# diagnose sys ha standalone-peers
Group=1, ID=2
Detected-peers=1
Peer ready bitmap=0000000000000000
Kernel standalone-peers: num=1.
peer0: vfid=0, peerip:port = 10.2.2.1:708, standalone_id=0, ready=0
session-type: send=0, recv=0
packet-type: send=0, recv=0
h. Upon peer_1 becoming unavailable or unhealthy, traffic no longer bounces back to peer_1. Instead, it is failed
over to peer_2 for processing.
FortiGate A-P HA cluster now supports sharing a single FortiGuard service license for both cluster units for the following
models:
l 40F and variants
l 60F and variants
l 70F and variants
Certificates
This section includes information about certificate system related new features:
l ACME External Account Binding support 7.6.3 on page 557
Support is added for ACME External Account Binding (EAB), as defined in RFC 8555 section 7.3.4.
EAB is a way to associate an ACME account with an existing non-ACME account, such as a CA customer database, by
adding additional information in newAccount requests. This additional information is used by the CA operating the ACME
server to verify domain ownership by the requester, without the need for human users to follow interactive, natural-
language instructions from the CA. Domain ownership verification is done when you register for EAB with your CA.
config vpn certificate local
edit < name>
set acme-eab-key-id <key>
set acme-eab-key-hmac <HMAC>
next
end
Command Description
acme-eab-key-id <key> External Account Binding Key ID (optional setting).
acme-eab-key-hmac <HMAC> External Account Binding HMAC Key (URL-encoded base64).
A user obtains EAB from ACME CA or creates it using their web account access provided by ACME CA. Note that this
feature is not supported by all CAs; for example, Let's Encrypt CA does not currently support EAB. Once created, EAB
can be utilized for ACME certificate enrollment. Some ACME CAs allow the use of EAB as an authentication method,
bypassing the standard online verification of domain ownership during the ACME certificate enrollment process via
HTTP.
Example
In this example, public ZeroSSL CA is used (zerossl.com) as it supports EAB and allows registered accounts to create
an EAB online. The server is an Azure VM with a public IP address and DNS.
e8:90:0e:9f:0b:b7:76:3b:76:42:1b:1a:7a:81:02:e6
Extensions:
Name: X509v3 Authority Key Identifier
Critical: no
Content:
C8:D9:78:68:A2:D9:19:68:D5:3D:72:DE:5F:0A:3E:DC:B5:86:86:A6
state : OK
range : global
source : user
source-ip : 0.0.0.0
ike-localid-type : asn1dn
enroll-protocol : acme2
acme-ca-url : https://acme.zerossl.com/v2/DV90
acme-domain : qa-fgt-acme-test-vkonddcbssww2.westus.cloudapp.azure.com
acme-email : [email protected]
acme-eab-key-id : ZSxXXXXXXXXXXXXXXXXXXXIjaRrw
acme-eab-key-hmac : DeGr0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXBFQSLNJw
acme-rsa-key-size : 2048
acme-renew-window : 30
If the certificate details are not shown, check the detailed status and error messages for the enrollment process:
# diagnose sys acme status-full <acme-domain>
Security
This section includes information about security system related new features:
l Encrypt configuration files in the eCryptfs file system on page 560
l Closed network VM license security enhancement on page 561
l OpenSSL FIPS provider installed globally at startup on page 563
l Enhance real-time file system integrity checking on page 564
l Use per-FortiGate generated random password for private-data-encryption 7.6.1 on page 564
l Enhanced administrator password security 7.6.1 on page 565
l BIOS security Low and High level classification 7.6.1 on page 568
Configuration files are encrypted in the eCryptfs file system when the system reboots or shuts down, and are decrypted
when the system boots up and has to load the configuration to CMDB.
If the device supports TPM, the 32 byte eCryptfs encryption key is randomly generated and stored in the TPM, like the
private-data-encryption key. If the device does not support TPM, the key is generated by the cryptographically secure
pseudorandom number generator (CSPRNG) and stored on the disk.
The CMS signature is now verified immediately after the license is loaded. This ensures that the license is from FortiCare
and confirms the authenticity of the license's contents and contracts, enhancing license integrity and customer trust.
If an offline license with a modified CMS signature is loaded the license is invalid and there is no
signature:
When the device is in FIPS-CC mode, the OpenSSL FIPS provider is installed globally at startup, ensuring that any
OpenSSL application is automatically compliant with FIPS regulations. An OpensSSL FIPS provider test (ossl-fips-
provider-test) is added, and the self-test runs automatically at startup. The TLSv1.1 KDF self-test is removed.
The system defaults to the more secure TLSv1.2 and TLSv1.3 protocols instead of SSL3.0 and TLS1.1, and only Diffie-
Hellman parameters of 2048 bits or higher are permitted, ensuring a robust security posture and aligning with industry
standards. The TLSv1.1 KDF self-test is removed.
When configuring a RADIUS server, Authentication method (auth-type) can only be set to PAP (password
authentication protocol), and transport-protocol can only be set to tls.
In this enhancement, a hash of all executable binary files and shared libraries are taken during image build time. The file
containing these hashes, called the executable hash, is also hashed. This new hash is signed together with other
important files like the FortiOS firmware, AV and IPS engine files. This hash will follow the BIOS-level signature and
integrity check during the boot process, to prevent any unauthorized changes from being loaded.
For more information about this feature, see Enhance real-time file system integrity checking.
When enabling private-data-encryption, instead of asking users to input a 32 digit hexadecimal string as the master-
encryption-password, the FortiGate will generate a random password itself. This increases security as the master-
encryption-password is not known and cannot be stolen or leaked.
As such, a configuration that is backed up while private-data-encryption is enabled cannot be restored when private-
data-encryption is disabled or when private-data-encryption is re-enabled with a different random key.
To enable private-data-encryption:
To disable private-data-encryption:
HA enhancement
HA will form when both units have the basic matching HA required settings, including the HA group and HA password,
regardless of whether private-data-encryption is enabled on both units before or after forming HA.
If private-data-encryption is enabled separately before forming HA, the FortiGates will first form HA and then
synchronize the private-data-encryption key after. Once both devices have the same private-data-encryption key,
configurations are synchronized from the primary to the secondary.
If private-data-encryption is enabled after the HA cluster is formed, then the primary unit will generate the random
master-encryption-password. The password is synchronized from the primary to the secondary immediately after it is
created.
The PBKDF2 hashing scheme with randomized salts is now used to store system administrator passwords on the
FortiGate to enhance security. Previously the SHA256 hashing algorithm was used.
With this change, a new command is available to maintain FortiOS downgrade:
config system password-policy
set login-lockout-upon-downgrade {enable | disable}
end
set login-lockout-upon- Enable/disable system administrator login lockout after downgrade to FortiOS
downgrade { enable | firmware that does not support safer passwords (default = disable).
disable}
When disabled, system administrator passwords with SHA256 hash are kept after
successfully converting to PBKDF2 hash. SHA256 hashed passwords are used
after downgrading to a firmware version that does not support PBKDF2 hashed
passwords.
When enabled, system administrator passwords that are converted to PBKDF2
hash will immediately remove the SHA256 hashed password. Upon downgrading
the FortiOS firmware to a lower version, where safer passwords are unsupported,
the administrators will be locked out.
When creating a new administrative user in FortiOS 7.6.1 or later, the PBKDF2 hashing scheme is used to store the
password. When displayed in the CLI, the password is encoded with a prefix of PB2:
# config system admin
(admin)# edit admin2
new entry 'admin2' added
(admin2)# set accprofile super_admin
Upgrade
To view system administrator passwords before and after upgrade to FortiOS 7.6.1:
1. Before upgrade to FortiOS 7.6.1 or later, view the encoded password. The encoded password shows a SH2 prefix
because it was hashed with the SHA256 algorithm:
# show system admin
config system admin
edit "admin1"
set accprofile "prof_admin"
set vdom "root"
set password ENC SH2RHqyB8gaEKC10dzpgU6lZg7YSpnb21wWLFOtqzMlpyKJZyyq3ISFYPyIL/s=
next
end
2. Upgrade to FortiOS 7.6.1 or later. Each system administrator password hashed with SHA256 is stored on FortiGate
until each system administrator successfully logs in to FortiOS.
If a system administrator does not log in to FortiGate after upgrading to FortiOS 7.6.1 or later, their password
remains saved as the SHA256 hashed password.
3. Log in to FortiOS. The password is converted to a PBKDF2 hashed password.
4. View the encoded password. The encoded password shows a PB2 prefix because it was hashed with the PBKDF2
algorithm:
FortiGate login: admin1
Password:
Verifying password...
$ show system admin
config system admin
edit "admin1"
set accprofile "prof_admin"
set vdom "root"
set password ENC
PB2a2X8D3DIt0gXbBXVdknLZb48BKrGTD50z//UrbpWAD5kpFdwqBKie0h8STxL6Db//wQ2ZWN/5FW3+DkX3+0nB
E1RNbeTKSVi18WcFmSPDQM=
next
end
Downgrade
To support downgrading to an older version that does not support the PBKDF2 hashed password, by default, the old
SHA256 hashed password is still stored in the system after being converted to PBKDF2. This is controlled by the
following setting that is disabled by default:
config system password-policy
set login-lockout-upon-downgrade disable
end
Downgrading will successfully restore the SHA256 hashed password and operations will continue uninterrupted.
If the login-lockout-upon-downgrade option is enabled:
config system password-policy
set login-lockout-upon-downgrade enable
end
The SHA256 hashed password will be removed from the system as soon as it is converted to a PBKDF2 hashed
password upon a successful login.
During a downgrade operation, the system will display the following warning:
# execute restore image ftp FGT_2601F-v7.6.0.F-build3401-FORTINET.out 172.16.106.105
username password
This operation will replace the current firmware version and reboot the system!
Do you want to continue? (y/n)y
Please wait...
Connect to ftp server 172.16.106.105 ...
Get image from ftp server OK.
Verifying the signature of the firmware image.
Image verification OK!
Warning: Installing image v7.6.0 from v7.6.1 is not a recommended upgrade path. Continuing
with the upgrade may result in loss of configuration. Do you want to proceed?
Do you want to continue? (y/n)y
…
You are downgrading to a version that does not support safer passwords.
After downgrade, some administrative user (e.g., admin1) no longer will be able to login.
Do you want to continue? (y/n)
After administrator passwords are converted to PBKDF2 hashed passwords, loading the
config file to an older version that does not support safer passwords will lock out the
administrators.
The BIOS security level has been updated from levels 0/1/2 to levels Low and High. Level High will correspond to
previous behaviors in level 2, and level Low will correspond to behaviors in level 1. A BIOS that still uses levels 0 will now
behave like level Low.
For more information about this feature, see BIOS security Low and High level classification.
SNMP
FortiOS supports the Ethernet Statistics Group for Remote Network Monitoring (RMON), which provides detailed
statistics about the traffic that passes through the Ethernet interface, such as drop events and collisions. This
enhancement enables comprehensive monitoring and management of network performance, helping to ensure optimal
operation and quickly identify any potential issues.
The Ethernet Statistics Group consists of the etherStatsTable .1.3.6.1.2.1.16.1.1 and can be leveraged using the
following:
config system snmp rmon-stat
edit 1
set source <data source of the Ethernet statistics entry>
set owner <owner of the Ethernet statistics entry>
next
end
Non-management VDOMs can now perform queries using SNMP v3. Previously only management VDOMs could
perform queries. By expanding query capabilities to non-management VDOMs, the system's versatility is improved.
The config system snmp sysinfo command includes a new option:
config system snmp sysinfo
set non-mgmt-vdom-query {enable | disable}
end
Example
In this example, PC1 connects to the port on FortiGate for the non-management VDOM, and SNMP v3 queries from non-
management VDOMs are enabled. PC5 connects to the port on FortiGate for the management VDOM. With this
configuration, SNMP queries are performed by both the non-management and the management VDOMs
SNMP clients can query the BIOS security level of a FortiGate using the OID 1.3.6.1.4.1.12356.101.4.1.38.
Security Fabric
This section includes information about Security Fabric related new features:
l Fabric settings and connectors on page 573
l Security ratings on page 592
l General on page 600
This section includes information about Security Fabric settings and Fabric connector related new features:
l Apply threat feed connectors as source addresses in central SNAT on page 573
l Automatic serial number retrieval from FortiManager on page 577
l Support multi-tenant FortiClient Cloud fabric connectors in the GUI 7.6.1 on page 577
l Generic connector for importing addresses 7.6.1 on page 579
l Support mTLS client certification for threat feed connections 7.6.1 on page 586
l GUI support for mTLS of threat feed connections 7.6.3 on page 587
l Enhancing FortiSandbox TLS security with CA and CN controls 7.6.3 on page 588
FortiOS allows an IP address threat feed to be applied as a source address in central SNAT. This enhancement allows
for more dynamic and responsive network security configuration.
The IP address threat feed can be applied in the GUI and the CLI:
l In the GUI, select a threat feed object from the IP Address Threat Feed section when creating and editing a policy.
l In the CLI, the IP address threat feed connector can be applied when configuring the central-snat-map.
Example
In the following example, an external IP list threat feed object will be created and used in a central SNAT map as the
source address.
2000:10:1:100::22
2000:10:1:100::41
3. Verify that the threat feed connector has been applied and taken effect:
# diagnose firewall iprope list 10000d
policy index=2 uuid_idx=8391 action=accept
flag (8041100): nat sport use_src pol_stats
flag3 (80): best-route
flag4 (200): port-preserve
schedule()
cos_fwd=0 cos_rev=0
group=0010000d av=00000000 au=00000000 split=00000000
host=0 chk_client_info=0x0 app_list=0 ips_view=0
misc=0
zone(1): 8 -> zone(1): 7
dest(1): 0.0.0.0-255.255.255.255, uuid_idx=8031,
source external ip pool(1): 8390
service(1):
[0:0x0:0/(0,65535)->(0,65535)] flags:0 helper:auto
[0:0x0:0/(0,65535)->(0,65535)] helper:auto
nat(0):
nat_64(0):
SNAT will take effect. The outgoing packet is SNAT'd to the IP address of the port1 interface.
b. Send packets from an IPv4 address that is not included in the IP list. In this example, the packets are sent from
10.1.100.11.
# diagnose sniffer packet any icmp 4
interfaces=[any]
filters=[icmp]
2.323329 port2 in 10.1.100.11 -> 172.16.200.55: icmp: echo request
2.323362 port1 out 10.1.100.11 -> 172.16.200.55: icmp: echo request
...
4 packets received by filter
0 packets dropped by kernel
[flowlabel 0x204d4]
2.105844 port1 out 2000:172:16:200::6 -> 2000:172:16:200::55: icmp6: echo request seq
1 [flowlabel 0x204d4]
2.105959 port1 in 2000:172:16:200::55 -> 2000:172:16:200::6: icmp6: echo reply seq 1
[flowlabel 0xebd44]
2.105971 port2 out 2000:172:16:200::55 -> 2000:10:1:100::41: icmp6: echo reply seq 1
[flowlabel 0xebd44]
...
8 packets received by filter
0 packets dropped by kernel
SNAT will take effect. The outgoing packet is SNAT'd to the IPv6 address of the port1 interface.
d. Send packets from an IPv6 address that is not included in the IP list. In this example, the packets are sent from
2000:10:1:100::11.
# diagnose sniffer packet any icmp6 4
interfaces=[any]
filters=[icmp6]
1.917946 port2 in 2000:10:1:100::11 -> 2000:172:16:200::55: icmp6: echo request seq 1
1.917979 port1 out 2000:10:1:100::11 -> 2000:172:16:200::55: icmp6: echo request seq
1
...
8 packets received by filter
0 packets dropped by kernel
Starting with version 7.6.0, FortiGate devices can now automatically retrieve the FortiManager serial number by
establishing a connection with FortiManager. This enhancement eliminates the need for manual serial number entry,
even when configuring with the CLI. This update ensures that CLI functionality is now aligned with the GUI, which
already supports automatic serial number retrieval.
For more information about this feature, see Automatic serial number retrieval from FortiManager.
FortiGate now supports connecting to a FortiClient Cloud instance registered under a FortiCloud sub-OU in the GUI.
This feature is an extension of a 7.4.4 CLI-based feature. See Support multi-tenant FortiClient
Cloud fabric connectors for more information on scope and troubleshooting.
Example
In this example, a FortiGate will connect to different FortiClient Cloud instances between the Global EMS connector, root
and vdom1.
1. Obtain the access by from FortiClient Cloud by going to FortiCloud > FortiClient Cloud.
2. Click Access Key and switch to the FortiGate Access Key tab.
3. Click Create New Key to generate a new key.
This features allows for seamless integration with any third-party database using a JSON based REST API. Each JSON
entry is converted into an address object on the FortiGate, which can be used in policies like any other address.
Each dynamic firewall address can parse up to 100,000 IP addresses and 3,000 MAC addresses. IPv6 addresses are
not supported.
When VDOMs are enabled, a generic connector that is created in the Global VDOM must have g- prepended to it's
name. The connector and imported addresses are synchronized to all VDOMs. A generic connector that is created in a
specific VDOM is not synchronized to other VDOMs, and the address objects are only imported to that VDOM.
When VDOMs are not enabled, generic connectors cannot use the g- prefix in their name.
In this example, the FortiGate pulls updates from an external resource: a REST API interface created using JSONBIN.io.
To create and test a generic connector that uses the external feed update method in the GUI:
1. On the FortiGate, go to Security Fabric > External Connectors and click Create New.
2. Enter a name for the connector, such as gen_obj_range.
3. Set Update method to External feed.
4. Set the URL of external resource to the Access URL copied from JSONBIN.io.
5. In the JSON Mapping, change the Path to address object to record.addresses.
6. Click OK.
The connector imports the IP and MAC addresses and automatically creates address objects on the FortiGate. The
address object names are a combination of the connector name and the name of the content, for example gen_obj_
range_ip_address.
7. Edit the address object then select View Matched Addresses from the right side bar, or hover over the object name
then select View Matched Addresses in the popup message.
To create a generic connector that uses the external feed update method in the CLI:
In this example, an external resource update is pushed to the FortiGate through the FortiGate's REST API. A Linux PC is
connected to the FortiGate and used as the external resource.
To create and test a generic connector that uses the push API update method in the GUI:
1. On the FortiGate, go to Security Fabric > External Connectors and click Create New.
2. Enter a name for the connector, such as gen_push_range.
3. Set Update method to Push API.
4. Click OK.
The External Feed Push API Information pane opens.
5. Copy the Sample cURL request and edit the entries, such as API key, IP Address, and son on.
In this example, the cURL request is:
curl -k -X POST -H 'Authorization: Bearer xxxxxxxxxxx' --data '{"mkey": "gen_push_
range", "data": {"addresses":[{"name":"ip_address","value":["172.16.200.1-
172.16.200.254","192.168.4.1-192.168.4.254"],"description":"generic object IP Address"},
{"name":"mac_address","value":
["00:0c:29:1b:40:c9","00:0c:29:f6:0d:49","00:0c:29:63:40:09"],"description":"generic
object MAC Address"}]}}' "https://172.16.116.210:48182/api/v2/monitor/system/external-
resource/generic-address"
6. Send the JSON request to the FortiGate through the Linux PC.
The connector imports the IP and MAC addresses and automatically creates address objects on the FortiGate. The
address object names are a combination of the connector name and the name of the content, for example gen_obj_
push_ip_address.
7. Edit the address object then select View Matched Addresses from the right side bar, or hover over the object name
then select View Matched Addresses in the popup message.
To create and test a generic connector that uses the push API update method in the CLI:
2. Send the JSON request to the FortiGate through the Linux client used in this example.
curl -k -X POST -H 'Authorization: Bearer xxxxxxxxxxx' --data '{"mkey": "gen_push_
range", "data": {"addresses":[{"name":"ip_address","value":["172.16.200.1-
172.16.200.254","192.168.4.1-192.168.4.254"],"description":"generic object IP Address"},
{"name":"mac_address","value":
["00:0c:29:1b:40:c9","00:0c:29:f6:0d:49","00:0c:29:63:40:09"],"description":"generic
object MAC Address"}]}}' "https://172.16.116.210:48182/api/v2/monitor/system/external-
resource/generic-address"
Administrators can configure and define a trusted client certificate for mutual TLS (mTLS) authentication in the CLI. This
enhances security for the threat feed server when connecting to an HTTPS external resource.
During configuration of external resources, a client certificate can be configured that is signed and trusted by a remote
mTLS server. When the server asks for client certification upon connection, FortiOS will use the configured client
certificate in the TLS handshake process and pass the mTLS authentication.
If FortiOS cannot provide the correct certificate, the server may choose to deny or accept the
connection based on its authentication protocol. Therefore, it is crucial to specify client
certificate authentication when connecting to an mTLS server. This requirement does not
apply if the server is not using mTLS.
Limitations
The client certificate must comply with standard mTLS certificate practice to properly configure the external resource.
Administrators can configure and define a trusted client certificate for mutual TLS (mTLS) authentication in the GUI.
This feature is in addition to a previous feature implemented in FortiOS 7.6.1 that focused on the CLI configuration of
mTLS authentication. For more information on the purpose of this feature, see Support mTLS client certification for
threat feed connections 7.6.1 on page 586.
If the mTLS client certificate has not yet been created, click Create and proceed with the
configuration.
7. Click OK.
Logs related to the mTLS client certificate authentication can be found in Log & Report > System Events > Logs.
FortiOS now supports controls for CA (Certificate Authority) and CN (Common Name) fields for FortiSandbox.
Previously, FortiSandbox could not verify certificates nor could it automatically retrieve CNs from remote FortiSandbox
units. Now, you can manually set a trusted CA and expected CN or enable automatic CN retrieval through serial number
verification to improve FortiSandbox TLS connection security.
Only Fortinet CA certificates are supported. Third-party certificates are not supported.
FortiOS uses the following methods with FortiSandbox: post transfer and inline. Certificate checks and verification have
only been implemented for the post-transfer method.
New commands are available:
config system fortisandbox
set ca <string>
set cn <string>
set certificate-verification {enable | disable}
end
Command Description
ca <string> Name of the CA used to sign remote FortiSandbox certificates. When set, the
remote FortiSandbox certificate must be signed by this CA certificate. When not
set, the CA is not checked.
cn <string> Case-sensitive name of the CN used for remote server certificates. When set, the
remote FortiSandbox certificate CN field must exactly match this value. When not
set, the CN is not checked.
certificate-verification Enable/disable identity verification of FortiSandbox by use of certificate (default =
{enable | disable} enabled).
Manual configuration of CA and CN values for FortiSandbox is only available from the CLI.
Automatic certificate verification for FortiSandbox is available from the CLI and GUI.
This example demonstrates the automatic certificate verification process, which is enabled by default. After the
IP address for FortiSandbox is configured in the fabric connector, FortiOS connects to FortiSandbox to retrieve and
display its serial number for verification. Once verified, FortiOS adds the serial number to the cn field.
2. After the message is displayed, type y to establish a connection and retrieve the FortiSandbox serial number:
In order to verify identity of FortiSandbox serial number is needed.
If serial number is not set, connection will be set as unverified and
access to local config and files will be accessible only with user name/password.
FortiGate can establish a connection to obtain the serial number now. Do you want to try
to connect now? (y/n)y
3. After FortiOS obtains the correct FortiSandbox serial number, type y to verify it:
Obtained serial number from X509 certificate of FortiSandbox is: FSA3KET321000049
Serial number from certificate MUST be the same as serial number observed in
FortiSandbox.
If these two serial numbers don't match, connection will be dropped.
Please make sure the serial numbers are matching.
Do you confirm that this is the correct serial number? (y/n)y
1. Go to Security Fabric > Fabric Connectors, and double-click the Sandbox card to open it.
2. Set the following options, and click OK:
l Set Status to Enabled.
l Set Server to the IP address of FortiSandbox.
A verification message is displayed.
In this example, you correctly configure the CN and CA fields for the FortiSandbox certificate and disable certificate
verification. After FortiOS connects to FortiSandbox, the certificate is used to verify the FortiSandbox identity, and the
status is reachable (CLI) and connected (GUI).
l In the CLI, run the following command to view the Reachable status:
# execute system fortisandbox test-connectivity
Reachable
l In the GUI, go to Security Fabric > Fabric Connectors, and double-click the Sandbox card to open it. The
Connection status is Connected.
Security ratings
This section includes information about security rating related new features:
l Enhanced security rating customization 7.6.1 on page 593
Security ratings tests that are not relevant can be hidden, streamlining the user experience by displaying only pertinent
information.
A Security Fabric is not required for this feature. If multiple FortiGates are in a Security Fabric, hidden security ratings
can be synchronized from the root FortiGate device to downstream FortiGate devices, or overridden locally on the
downstream devices.
3. Change the View to All to show the Unsecure Protocol - Telnet control in the table when Report Visibility is set to
Hide.
Variable Description
display-report {enable | Enable/disable displaying the Security Rating control in the default report (default
disable} = enable).
display-insight {enable | Enable/disable displaying the Security Rating control as an insight across the GUI
disable} (default = enable).
Security rating control names are hidden in the CLI until they are configured.
Variable Description
configuration-sync Configuration sync mode.
{default | local} l default: Synchronize configuration for IPAM, FortiAnalyzer, FortiSandbox,
When configuration-sync is set to local, the system security-rating settings command is not
available.
Virtual patching now includes OT virtual patching and IPS signatures. This allows IPS signatures to be used in OT/IoT
vulnerability lookup and response, covering additional threats and vulnerabilities.
Virtual patching works by:
1. Collecting device information on connected devices.
2. Performing a vulnerability query through FortiGuard for device-specific vulnerabilities.
3. Retrieving and caching application signatures and mitigation rules for the device.
4. Applying the application rules on matched device traffic.
In the second step, FortiGuard now returns additional signature IDs based on IPS database that can match
vulnerabilities on most IT devices, like Windows, Mac, and so on.
Examples
To demonstrate the flow of a virtual patching detection, an IPS signature (Eicar.Virus.Test.File (id=29844)) was added to
a demo FortiGuard Server. This can be observed in the following debug:
# diagnose ips share list otvp_cfgcache
10.1.100.11 f2:d7:39:5d:40:11 3 29844(ips) 10000673(n/a) 10000684
This cache output shows the cached response of an application rule that identifies the IPS signature 29844 matching the
source device 10.1.100.11.
Traffic originating from a device (10.1.100.11) that matches this signature (29844) will trigger either the virtual patching
profile, if enabled, or the IPS profile, if enabled. This use case demonstrates that an OT virtual profile can use an IPS
signature for matching, and will either drop or reset the connection.
Note that rule 29844 is not valid on the production server; it is only for testing and demonstration purposes.
Example 1
If only the virtual patch profile is enabled in the firewall policy, its configuration takes effect and a virtual patch log is
generated.
next
end
Example 2
If both the IPS sensor's and virtual patch profile's actions are set to block, the IPS sensor configuration takes effect and
an IPS log is generated.
Example 3
If the IPS sensor's action is pass and the virtual patch profile's action is block, the virtual patch profile configuration takes
effect and a virtual patch log is generated.
Example 4
If only the IPS sensor enabled, its configuration takes effect and an IPS log is generated.
General
This section includes information about general Security Fabric related new features:
l Enhanced security visibility for IoT/OT vulnerabilities 7.6.1 on page 600
Known Exploited Vulnerabilities (KEVs) information is added to IoT/OT vulnerabilities in the user/device store. KEV
counts and warnings are displayed in the Assets widget on the Asset & Identities dashboard, enhancing security
visibility.
To enable device detection for IoT/OT devices, device identification must be enabled on the
interface and utm-status must be enabled in firewall policy:
config system interface
edit <interface>
set device-identification enable
next
end
config firewall policy
edit <policy ID>
set utm-status enable
next
end
Example
When Ubuntu is updated and upgraded from an older version, like 18.04, using the sudo apt-get update && sudo
apt-get -y upgrade command, OT device information is logged in an appctrl log and sent to WAD:
1: date=2024-11-15 time=10:00:53 eventtime=1731621653528292983 tz="+1200" logid="1059028704"
type="utm" subtype="app-ctrl" eventtype="signature" level="information" vd="vd1"
appid=10000501 srcip=10.1.100.11 srccountry="Reserved" dstip=91.189.91.81 dstcountry="United
States" srcport=37186 dstport=80 srcintf="port2" srcintfrole="undefined" dstintf="port1"
dstintfrole="undefined" proto=6 service="HTTP" direction="outgoing" policyid=1
poluuid="b8a98718-dfc9-51ee-3aff-53c8c1b65d82" policytype="policy" sessionid=1469
applist="g-default" action="pass" appcat="OT" app="Canonical.Ubuntu"
hostname="ca.archive.ubuntu.com" incidentserialno=170919395
url="/ubuntu/dists/bionic/InRelease" agent="Debian APT-HTTP/1.3 (1.6.17)" httpmethod="GET"
msg="OT: Canonical.Ubuntu" clouddevice="Vendor=Canonical, Product=Ubuntu, Version=18.04"
apprisk="low"
WAD then sends a device query to FortiGuard to retrieve the vulnerability list for this OT device. The KEV information is
included in the vulnerability list and can be viewed in the GUI and CLI.
3. Hover over the device name. In the tooltip, a Known Exploited Vulnerabilities detected label is added when KEVs
are detected for IoT/OT:
4. Hover over the vulnerabilities. In the tooltip, the CVEs in KEV category field shows the number of potential KEVs
detected by the FortiGuard IoT/OT service:
5. In the tooltip, click View vulnerabilities to open the Asset Details pane on the Vulnerabilities tab and select IoT/OT.
A KEV label is shown as a critical severity label next to the CVE-ID in the Reference column, and a KEV column can
be added to show if a vulnerability has a KEV.
Record #1:
device_info
'ipv4_address' = '10.1.100.11'
'mac' = 'f2:d7:39:5d:40:11'
'hardware_type' = 'Unknown'
'vdom' = 'vd1'
'os_name' = 'Ubuntu'
'hostname' = 'PC01'
'last_seen' = '1731621105'
'host_src' = 'mwbs'
'unjoined_forticlient_endpoint' = 'false'
'is_online' = 'false'
'active_start_time' = '1731612432'
'is_fortiguard_src' = 'false'
'purdue_level' = '3'
'iot_vuln_count' = '200'
'iot_kev_count' = '1'
'max_vuln_level' = 'High'
'total_vuln_count' = '200'
'device_type' = 'OT'
'generation' = '16'
interface_info
'ipv4_address' = '10.1.100.11'
'mac' = 'f2:d7:39:5d:40:11'
'master_mac' = 'f2:d7:39:5d:40:11'
'detected_interface' = 'port2'
'last_seen' = '1731621105'
'is_master_device' = 'true'
'is_detected_interface_role_wan' = 'false'
'detected_interface_fortitelemetry' = 'false'
'is_online' = 'false'
'is_fortiguard_src' = 'false'
iot_info
'vendor' = 'Canonical'
'product' = 'Ubuntu'
'version-min' = '18.04'
'validity' = 'true'
'outdated' = 'false'
'db_date_updated' = '2024-11-14T20:40:07'
'kev_db_date_released' = '2024-11-14T18:00:41'
iot_vulnerability
'vulnerability_id' = '944608'
'severity' = '3'
'type' = 'Resource Management Errors'
'description' = 'It was discovered that a nft object or expression could
reference a nft set on a different nft table, leading to a use-after-free once that table
was deleted.'
'references' = 'CVE-2022-2586'
'kevs' = 'CVE-2022-2586'
'date_added' = '2024-01-15T09:00:30'
'date_updated' = '2024-01-15T09:00:30'
This section includes information about logging and reporting related new features:
l Logging on page 605
Logging
FortiOS logs MAC address flapping events when a device’s MAC address is learned on different interfaces within the
MAC address table in transparent mode. The log provides comprehensive details about the event, such as the specific
MAC address involved, the ports where the flapping occurred, and the exact time of the event. This enhancement assists
network administrators in quickly identifying and addressing related issues, thereby enhancing network stability and
performance.
Example
In this example, the end user initiates internet traffic from PC1, which has an authentic MAC address. Subsequently, the
user generates internet traffic from PC2 using a packet manipulation tool, such as Scapy, but with the spoofed MAC
address of PC1. This event is successfully identified and logged by FortiGate running in transparent (TP) mode.
36 logs found.
10 logs returned.
1: date=2024-03-26 time=14:05:33 eventtime=1711487133347757075 tz="-0700" logid="0100022970"
type="event" subtype="system" level="information" vd="vdom1" logdesc="MAC flapping"
service="kernel" mac="00:0c:29:90:21:c3" src_int="port1" msg="The incoming port of MAC
address 00:0c:29:90:21:c3 has been switched from port2 to port1"
FortiOS can now send logs from non-management VDOMs to both global and VDOM-override syslog servers.
Previously, configuring an override syslog server under a non-management VDOM would halt the transmission of logs to
the global syslog server. The new update ensures uninterrupted log transmission to the global server, enhancing the log
management experience.
The config log syslogd override-setting command includes a new option:
config log syslogd override-setting
set use-management-vdom {enable | disable}
end
set use-management-vdom Enable/disable use of management VDOM as source VDOM for logs sent to
{enable | disable} syslog server.
l enable: Send logs through the management VDOM.
Example
In this example, a global syslog server is enabled. For the root VDOM, an override syslog server is enabled with use-
management-vdom disabled. For the management VDOM, an override syslog server is enabled. With this
configuration, logs are sent to the following locations:
l All VDOMs, except the root and management VDOMs, send logs to the global syslog server (10.6.30.22).
l The root VDOM sends logs to its override syslog server at 192.168.5.44.
l The management VDOM sends logs to its override syslog server at 172.16.200.55.
2. For the root VDOM, enable an override syslog server and disable use-management-vdom:
config log syslogd override-setting
set status enable
set server "192.168.5.44"
set use-management-vdom disable
In this example, a global syslog server is enabled. For the root VDOM, an override syslog server and use-
management-vdom are enabled. For the management VDOM, two override syslog servers are enabled. With this
configuration, logs are sent to the following locations:
l All VDOMs, except root and management VDOMs, send logs to the global syslog server (10.6.30.22).
l The root VDOM cannot send logs to syslog servers because the servers are not reachable through the
management VDOM.
To send logs to 192.168.5.44, set use-management-vdom to disable for the root VDOM. Alternately, configure the
root VDOM to use an override syslog server that is reachable through the management VDOM.
l The management VDOM sends logs to the override syslog server at 172.16.200.55.
2. For the root VDOM, enable an override syslog server and enable use-management-vdom:
config log syslogd override-setting
set status enable
set server "192.168.5.44"
set use-management-vdom enable
In this example, a global syslog server is enabled. For the root VDOM, three override syslog servers are enabled with a
mix of use-management-vdom set to enabled and disabled. For the management VDOM, an override syslog
server is enabled. With this configuration, logs are sent from non-management VDOMs to both global and VDOM-
override syslog servers. The logs are sent to the following locations:
l All VDOMs, except the root and management VDOMs, send logs to the global syslog server (10.6.30.22).
l The root VDOM sends logs to the following syslog servers:
l For syslogd, logs are sent to the root VDOM override server at 192.168.5.44 because use-management-
vdom is disabled.
l For syslogd2, logs are sent through the management VDOM to the root VDOM override server at
172.16.200.55 and to the syslog server reachable by the management VDOM because use-management-
vdom is enabled.
l For syslogd3, logs are sent through the management VDOM to the root VDOM override syslog server at
10.6.30.22 and to the syslog server reachable by the management VDOM because use-management-vdom
is enabled.
l The management VDOM (vdom1) sends logs to the override syslog server at 172.16.200.55.
FortiOS can now log the message ID (messageid) field in UTM logs under the email filter, file filter, and DLP subtypes.
The message ID can be used with FortiMail to locate an undesired email. The message ID can also be used with
FortiAnalyzer to trace the email and locate the device that sent the undesired traffic.
3. Select the log, and click Details. The Message ID field is displayed.
Following are examples of the message ID (messageid) field in email filter, file filter, and DLP logs:
l Email filter logs:
1: date=2024-05-27 time=15:20:30 eventtime=1716848430551966694 tz="-0700"
logid="0512020481" type="utm" subtype="emailfilter" eventtype="email"
level="information" vd="vdom1" policyid=1 poluuid="12c1682e-18a5-51ef-dc3d-459a4231c9e6"
policytype="policy" sessionid=162 srcip=10.1.100.22 srcport=41344 srccountry="Reserved"
srcintf="port21" srcintfrole="undefined" srcuuid="f29a920a-18a4-51ef-4fca-8c6dc5db9e26"
dstip=172.16.200.55 dstport=25 dstcountry="Reserved" dstintf="port17"
dstintfrole="undefined" dstuuid="f29a920a-18a4-51ef-4fca-8c6dc5db9e26" proto=6
service="SMTP" profile="730866" action="log-only" from="[email protected]"
to="[email protected]" sender="[email protected]"
recipient="[email protected]" messageid="<20240527222030.000384@spam_pc1>"
direction="outgoing" msg="general email log" subject="testcase215001" size="246"
attachment="no"
l DLP logs:
1: date=2024-05-28 time=11:59:50 eventtime=1716922790136310107 tz="-0700"
logid="0954024576" type="utm" subtype="dlp" eventtype="dlp" level="warning" vd="vdom1"
ruleid=1 rulename="test_exe" dlpextra="Sensor 'test' matching any: ('Test-Dictionary'=1)
>= 1; match." filtertype="sensor" filtercat="message" severity="medium" policyid=1
poluuid="12c1682e-18a5-51ef-dc3d-459a4231c9e6" policytype="policy" sessionid=1976
epoch=1523674618 eventid=2 srcip=10.1.100.22 srcport=52998 srccountry="Reserved"
srcintf="port21" srcintfrole="undefined" srcuuid="f29a920a-18a4-51ef-4fca-8c6dc5db9e26"
dstip=172.16.200.55 dstport=25 dstcountry="Reserved" dstintf="port17"
dstintfrole="undefined" dstuuid="f29a920a-18a4-51ef-4fca-8c6dc5db9e26" proto=6
service="SMTP" filetype="N/A" direction="outgoing" action="block"
from="[email protected]" to="[email protected]"
sender="[email protected]" recipient="[email protected]"
messageid="<20240528185950.007871@spam_pc1>" subject="731047" attachment="no"
profile="testing"
Endpoint device data, including hostname and MAC address, have been incorporated in the web filter UTM logs.
Endpoint device data can be incorporated in the logs using the following:
config log setting
set extended-utm-log {enable | disable}
end
To incorporate endpoint device data in the web filter UTM logs, ensure a firewall policy with a
web filter profile is configured and Device detection is configured on the interfaces. Device
detection can be configured in Network > Interfaces and the CLI.
When this command is enabled, the srcmac and srcname fields are included in the web filter UTM logs:
1: date=2024-04-04 time=09:34:31 eventtime=1712248470720798942 tz="-0700" logid="0316013056"
type="utm" subtype="webfilter" eventtype="ftgd_blk" level="warning" vd="vdom1" policyid=1
poluuid="9f550138-ed67-51ee-b593-e4c9c3cd549f" policytype="policy" sessionid=20910
srcip=10.1.100.123 srcport=59705 srccountry="Reserved" srcintf="port2"
srcintfrole="undefined" srcuuid="04df25b6-ed67-51ee-3006-8c2d12813f90"
srcmac="00:0c:29:06:7e:5b" srcname="AVPC3" dstip=52.201.199.27 dstport=443
dstcountry="United States" dstintf="port1" dstintfrole="undefined" dstuuid="04df25b6-ed67-
51ee-3006-8c2d12813f90" proto=6 httpmethod="GET" service="HTTPS" hostname="www.httpbin.org"
agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KH" profile="webfilter"
action="blocked" reqtype="referral" url="https://www.httpbin.org/favicon.ico"
referralurl="https://www.httpbin.org/" sentbyte=2088 rcvdbyte=5709 direction="outgoing"
msg="URL belongs to a denied category in policy" ratemethod="domain" cat=52
catdesc="Information Technology"
Likewise, the Device column is populated with the endpoint hostname information in the Log & Report > Security Events
> Logs table:
When this command is disabled, the new fields are excluded from the web filter UTM logs and
the Device column does not display the client hostname information. The command is
disabled by default.
FortiOS supports setting the source interface when configuring syslog and NetFlow. This allows syslog and NetFlow to
utilize the IP address of the specified interface as the source when sending out the messages. It also simplifies changing
the source IP address when an interface IP address is updated or the IP address from a different interface is used. The
process becomes more efficient and less time consuming, especially when managing many remote locations.
config log syslogd setting
set status enable
set source-ip-interface <name>
end
config system netflow
config collectors
edit <id>
set source-ip-interface <name>
next
end
end
Command differences
The source-ip-interface, source-ip, and interface-select-method commands are similar, but perform different functions.
source-ip-interface Utilize the IP address of the specified interface as the source when sending out
<name> the syslog or NetFlow messages. Routing of the messages does not change
based on this setting.
The interface’s IP address must be in the same family (IPv4 or IPv6) as the syslog
server. For example, if a syslog server address is IPv6, source-ip-interface
cannot have an IPv4 address or both an IPv6 and IPv4 address.
If the FortiGate is in transparent VDOM mode, source-ip-interface is not
available for NetFlow or syslog configurations.
source-ip <ip address> Utilize the specified IP address as the source when sending out the syslog or
NetFlow messages. Routing of the messages does not change based on this
setting.
interface-select-method The routing of the syslog and NetFlow messages is determined by the selected
{auto | sdwan | method. If neither source-ip-interface nor source-ip is configured, then
specify}
the source address of the message is the IP address of the interface selected by
the interface select method.
See Local out traffic for details.
The source-ip-interface and source-ip commands are not available for syslog or NetFlow configurations if ha-direct is
enabled (see config system ha in the CLI Reference guide). They are also mutually exclusive; they cannot be used at the
same time, but one or the other can be used together with the interface-select-method command.
Examples
3. Using the migsock sniffer, note that traffic is routed out from the loop interface IP address: 10.10.10.2:
# diagnose sniffer migsock filter "service=udp dstip=172.16.200.55 dstport=514"
# diagnose sniffer migsock start
Tracing:
enabled: yes
ctx_id: 0x0000219366197668
pid: any
vdom: vdom1(1)
name: any
service: udp
dstip: 172.16.200.55
dstport: 514
srcip: any
srcport: any
unixpath: any
ssl trace: disabled
debug trace: disabled
timestamp: disabled
0x0000 3c31 3832 3e64 6174 653d 3230 3234 2d30 <182>date=2024-0
0x0010 342d 3132 2074 696d 653d 3131 3a30 303a 4-12.time=11:00:
0x0020 3531 2064 6576 6e61 6d65 3d22 4647 542d 51.devname="FGT-
0x0030 422d 4c4f 4722 2064 6576 6964 3d22 4647 B-LOG".devid="FG
0x0040 3130 3146 544b 3139 3030 3232 3131 2220 101FTK19002211".
0x0050 6576 656e 7474 696d 653d 3137 3132 3934 eventtime=171294
0x0060 3438 3530 3631 3737 3338 3333 3920 747a 4850617738339.tz
0x0070 3d22 2d30 3730 3022 206c 6f67 6964 3d22 ="-0700".logid="
0x0080 3031 3030 3034 3435 3436 2220 7479 7065 0100044546".type
0x0090 3d22 6576 656e 7422 2073 7562 7479 7065 ="event".subtype
0x00a0 3d22 7379 7374 656d 2220 6c65 7665 6c3d ="system".level=
0x00b0 2269 6e66 6f72 6d61 7469 6f6e 2220 7664 "information".vd
0x00c0 3d22 7664 6f6d 3122 206c 6f67 6465 7363 ="vdom1".logdesc
0x00d0 3d22 4174 7472 6962 7574 6520 636f 6e66 ="Attribute.conf
0x00e0 6967 7572 6564 2220 7573 6572 3d22 6164 igured".user="ad
0x00f0 6d69 6e22 2075 693d 2273 7368 2831 302e min".ui="ssh(10.
0x0100 362e 3330 2e32 3534 2922 2061 6374 696f 6.30.254)".actio
0x0110 6e3d 2245 6469 7422 2063 6667 7469 643d n="Edit".cfgtid=
0x0120 3538 3137 3633 3037 3520 6366 6770 6174 581763075.cfgpat
0x0130 683d 226c 6f67 2e73 6574 7469 6e67 2220 h="log.setting".
0x0140 6366 6761 7474 723d 2273 7973 6c6f 672d cfgattr="syslog-
0x0150 6f76 6572 7269 6465 5b65 6e61 626c 652d override[enable-
0x0160 3e64 6973 6162 6c65 5d22 206d 7367 3d22 >disable]".msg="
0x0170 4564 6974 206c 6f67 2e73 6574 7469 6e67 Edit.log.setting
0x0180 2022 ."
4. On the syslog server, verify that the source IP address is shown after the source IP interface is configured:
Apr 12 18:01:17 10.10.10.2 date=2024-04-12 time=11:01:16 devname="FGT-B-LOG"
devid="FG101FTK19002211" eventtime=1712944876777719599 tz="-0700" logid="0100044546"
type="event" subtype="system" level="information" vd="vdom2" logdesc="Attribute
configured" user="admin" ui="ssh(10.6.30.254)" action="Edit" cfgtid=581763079
cfgpath="log.setting" cfgattr="syslog-override[enable->disable]" msg="Edit log.setting "
____ vdom: vdom1, index=1, is master, collector: disabled (use global config) (mgmt
vdom)
|_ coll_ip:172.16.200.44:2055,src_ip:10.1.100.2,out_intf=0
|_ seq_num:275 pkts/time to next template: 16/16
|_ exported: Bytes:0, Packets:0, Sessions:0 Flows:0
|_ active_intf: 1
|____ interface:wan2 sample_direction:both device_index:8 snmp_index:4
3. Verify that traffic is forwarded to the Netflow agent through the designated source IP interface:
# diagnose sniffer packet any "host 172.16.200.44 and port 2055" 3
interfaces=[any]
filters=[host 172.16.200.44 and port 2055]
6.031971 10.1.100.2.1275 -> 172.16.200.44.2055: udp 60
0x0000 0000 0000 0000 e81c baf2 65b6 0800 4500 ..........e...E.
0x0010 0058 d133 0000 4011 c721 0a01 6402 ac10 .X.3..@..!..d...
0x0020 c82c 0c3c 0807 0044 f615 0009 0001 001a .,.<...D........
0x0030 1e04 6619 84c5 0000 0083 0000 0002 0100 ..f.............
0x0040 0028 0001 0000 0000 0000 0000 0000 0000 .(..............
0x0050 0000 0000 0000 0000 0000 0000 0708 000f ................
0x0060 0000 0001 0100 ......
When enabled, FortiOS can now log each detection of duplicate IPv4 addresses on physical interfaces and VLAN
interfaces in the event log under the new log ID 32701. Previously, detection of duplicate IPv4 addresses was not
logged. This feature also supports a new SNMP event and new diagnose commands.
The config system global command includes a new option:
FortiOS uses the following methods to detect duplicate IPv4 addresses, and can generate a log for each detection:
In addition, a packet can be sent to the SNMP host when the SNMP event is set to interface.
The config system snmp community command includes a new interface event:
config system snmp community
edit 1
set name "test"
config hosts
edit 1
set ip 172.18.71.107 255.255.255.0
next
end
config hosts6
edit 1
next
end
set events {interface}
next
end
diagnose test application Shows the cache for IPv4 address conflict detection.
miglogd 54
diagnose test application Executes a IPv4 address conflict detection.
miglogd 55
1. In FortiOS, go to Network > Interfaces, and double-click an interface, such as wan1, to open it for editing.
2. In the IP/Netmask box, change the IP address from 172.16.200.2/24 to 172.16.200.55/24. The following warning is
displayed: This IP address is already in use by device <MAC address>.
3. Go to Log & Report > System Events. A Duplicate IP address log entry is displayed.
1. On a client, change the interface. For example, change the interface from 192.168.5.44 to 192.168.5.100/24.
2. Go to Log & Report > System Events. A Duplicate IP address log entry is displayed.
Local traffic logging can be configured for each local-in policy. This enables more precise and targeted logging by
focusing on specific local-in policies that are most relevant to your needs.
Logging can be configured per local-in policy in the Log & Report > Log Settings page or by using the following
commands:
config log setting
set local-in-policy-log {enable | disable}
end
config firewall local-in-policy
edit <id>
set logtraffic {enable | disable}
next
end
config firewall local-in-policy6
edit <id>
set logtraffic {enable | disable}
next
end
If per policy local-in traffic logging is enabled, the allowed traffic, denied unicast traffic, and denied broadcast traffic
logging does not need to be configured for the log settings. When traffic logging is enabled for the local-in policy, the
denied unicast traffic and denied broadcast traffic logs will be included.
l For policies with the Action set to ACCEPT, enable Log allowed traffic.
l For policies with the Action set to DENY, enable Log violation traffic.
If traffic logging is enabled in the local-in policy, log denied unicast traffic and log denied broadcast traffic logs
will display in Log & Report > Local Traffic.
3. Review local logs. Traffic is logged for the local-in policies and denied unicast traffic and denied broadcast traffic
logs are included.
date=2024-04-17 time=12:32:02 eventtime=1713382322595245756 tz="-0700"
logid="0001000014" type="traffic" subtype="local" level="notice" vd="vdom1"
srcip=2000:10:1:100::11 identifier=28808 srcintf="port1" srcintfrole="undefined"
Global logging
Local-in traffic can also continue to be logged globally instead of per policy. To configure global local-in traffic logging in
the CLI, disable local-in-policy-log.
Log allowed traffic and Log violation traffic will be set to Custom and cannot be changed in the policy.
Logs generated when starting and stopping packet capture and TCP dump
operations
System event logs are generated when a packet capture is started or stopped in the GUI, and when a sniffer operation is
started or stopped in the CLI. This provides a clear audit trail of packet capture and TCP dump activities, improving
transparency and control.
In these examples, packet capture and then sniffer are started and stopped, and then the system event logs are checked
to see the logs generated by those events.
To generate system event logs when packet capture is started/stopped in the GUI:
1. Go to Network > Diagnostics, select the Packet capture tab, and click New packet capture.
2. Configure the capture. In this example, a filter is applied for IP address 172.16.200.250 and port 514 on port2.
To generate system event logs when the sniffer is started/stopped in the CLI:
1. In the CLI, start the sniffer. In this example, packets are sniffed without any filters on all interfaces.
# diagnose sniffer packet
interfaces=[any]
filters=[none]
0.841988 stp 802.1w, rapid stp, flags [forward], bridge-id 801e.00:0d:bb:33:ff:00.8809
0.850097 stp 802.1w, rapid stp, flags [forward], bridge-id 8014.00:0d:bb:33:ff:00.8817
0.913049 arp who-has 172.16.200.4 tell 172.16.200.44
1.046108 10.6.30.105.443 -> 10.6.30.254.50655: psh 1975442041 ack 3271831242
1.102052 10.6.30.254.50655 -> 10.6.30.105.443: ack 1975442092
1.756654 172.16.200.5.23608 -> 172.16.200.250.514: udp 343
2.046682 10.6.30.105.443 -> 10.6.30.254.50655: psh 1975442092 ack 3271831242
2.101271 10.6.30.254.50655 -> 10.6.30.105.443: ack 1975442203
2.846037 stp 802.1w, rapid stp, flags [forward], bridge-id 801e.00:0d:bb:33:ff:00.8809
2.854158 stp 802.1w, rapid stp, flags [forward], bridge-id 8014.00:0d:bb:33:ff:00.8817
3.047792 10.6.30.105.443 -> 10.6.30.254.50655: psh 1975442203 ack 3271831242
3.101855 10.6.30.254.50655 -> 10.6.30.105.443: ack 1975442275
3.440701 arp who-has 10.6.30.105 tell 10.6.30.254
3.440706 arp reply 10.6.30.105 is-at e8:11:bb:88:44:be
3.919708 arp who-has 172.16.200.4 tell 172.16.200.44
^C
25 packets received by filter
0 packets dropped by kernel
To apply the same filters to this sniffer as where used in the GUI example, enter the
following:
diagnose sniffer packet port2 "172.16.200.250 and udp and port 514"
Cloud
This section includes information about public and private cloud related new features:
l Azure SDN connector relay through FortiManager support on page 631
l IBM Cloud virtual network interface support on page 633
l GCP SDN connector relay through FortiManager support on page 633
l Support the AWS r8g instance family on page 633
l KVM Red Hat Enterprise Linux 9.4 support on page 633
l Azure SDN connector moves private IP address on trusted NIC during A-P HA failover 7.6.1 on page 633
l Support the OCI E5.Flex instance type 7.6.1 on page 634
l Azure SDN connector GraphQL bulk query support 7.6.1 on page 634
l AWS NitroTPM support 7.6.1 on page 634
l GCP C4 Intel instance support 7.6.1 on page 639
l FortiGate-VM GDC V support 7.6.1 on page 639
l OCI SDN connector IPv6 address object support 7.6.1 on page 648
l GCP SDN connector IPv6 address object support 7.6.1 on page 648
l Support for Azure upcoming MANA NIC 7.6.1 on page 648
l Azure SDN connector IPv6 address object support 7.6.1 on page 648
l FGT_VM64_KVM IPsec performance improvement through virtio and RPS 7.6.1 on page 649
l FGT_VM64_KVM IPsec performance through DPDK improvement 7.6.1 on page 649
l FortiGate-VM config system affinity-packet-redistribution optimization 7.6.1 on page 649
l OCI support for on-premise solutions 7.6.1 on page 649
l AliCloud GWLB support 7.6.1 on page 649
l AliCloud ecs.g8i instance type support 7.6.3 on page 649
FortiOS Azure SDN connector API calls can be relayed through a FortiManager proxy. FortiManager 7.6 supports this
feature.
end
config firewall address
edit "AZURE"
set type dynamic
set sdn "AZURE"
set filter "Vnet=VNET0"
set sdn-addr-type all
next
end
5. Go to Security Fabric > External Connectors and confirm that the connectors were created.
6. Compare the resolved IP address list between the FMG_proxy and AZURE connectors and verify that the list is
complete.
FortiGate-VM on IBM Cloud supports virtual network interfaces. This interface type is selected by default. See Deploying
FortiGate-VM on IBM Cloud.
FortiOS Azure SDN connector API calls can be relayed through a FortiManager proxy. FortiManager 7.6 supports this
feature. See Using FortiManager as a SDN proxy for GCP connectors.
FortiGate-VM supports the AWS r8g instance family. See Instance type support.
FortiGate-VM supports the AWS c8g instance family. See Instance type support.
Azure SDN connector moves private IP address on trusted NIC during A-P HA
failover - 7.6.1
This feature introduces a floating private IP address on the trusted NIC (port2).
For more information about this feature, see Azure SDN connector moves private IP address on trusted NIC during A-P
HA failover.
FortiGate-VM supports the OCI VM.Standard.E5.Flex instance type. See Instance type support.
In FortiOS 7.6.1 and later versions, Azure SDN connectors support GraphQL bulk queries.
FortiGate-VM supports the AWS Nitro Trusted Platform Module (NitroTPM) 2.0 specification. NitroTPM is a virtual device
that the AWS Nitro System provides that conforms to the TPM 2.0 specification. It securely stores artifacts such as
passwords, certificates, or encryption keys that are used to authenticate the instance. NitroTPM can generate keys and
use them for cryptographic functions such as hashing, signing, encryption, and decryption.
This feature is disabled by default on marketplace images. You must create your own image to use NitroTPM.
1. When deploying a FortiGate-VM on AWS using an Amazon machine image (AMI), ensure that the aws ec2
register-image command has the following options:
aws ec2 register-image \
--boot-mode uefi \
--tpm-support v2.0\
2. Verify that you can create a TPM 2.0 support-enabled AMI with the fgtaws.bin file:
[ec2-user@MY-AWSLINUX ~]$ ./uefi-aws-ondemand-TPM20-and-Secure-Boot.sh fortios-
fgtvm64-aws-payg-dut.qcow2 3433-v761-tpm20-pmdb31082-secureboot
[STEP 1]: Create rawfile from qcow2
[STEP 1]: DONE
...
[STEP 8]: create register
Creating AMI: ami-05ca9cdc344639f3a
[STEP 8]: done
[STEP 9]: modify for permissions
[STEP 9]: done
"State": "available",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/sda1",
"Ebs": {
"DeleteOnTermination": true,
"SnapshotId": "snap-040f7d9a04a20bcfd",
"VolumeSize": 2,
"VolumeType": "gp2",
"Encrypted": false
}
},
{
"DeviceName": "/dev/sdb",
"Ebs": {
"DeleteOnTermination": true,
"VolumeSize": 30,
"VolumeType": "gp2",
"Encrypted": false
}
}
],
"Description": "FortiGate-VM64-AWSONDEMAND build3433-v761-tpm20-
pmdb31082-secureboot-QA",
"EnaSupport": true,
"Hypervisor": "xen",
"Name": "FortiGate-VM64-AWSONDEMAND build3433-v761-tpm20-pmdb31082-
secureboot-QA",
"RootDeviceName": "/dev/sda1",
"RootDeviceType": "ebs",
"SriovNetSupport": "simple",
"VirtualizationType": "hvm",
"BootMode": "uefi",
"TpmSupport": "v2.0"
}
]
}
3. Verify that the FortiGate-VM supports TPM 2.0. For details, see TPM support for FortiGate-VM:
FGTAWSHZY4GDAGF8 (Interim)# get sys stat
Version: FortiGate-VM64-AWS v7.6.1,build3433,241007 (Interim)
TPM_PT_MEMORY:
=========================================================
Shared RAM: 0 CLEAR
Shared NV: 1 SET
Object Copied To Ram: 1 SET
TPM_PT_PERMANENT:
=========================================================
Owner Auth Set: 0 CLEAR
Sendorsement Auth Set: 0 CLEAR
Lockout Auth Set: 0 CLEAR
Disable Clear: 0 CLEAR
In Lockout: 0 CLEAR
TPM Generated EPS: 1 SET
Random value:
0x00000000: 0x7F 0x89 0xAF 0xFA
FGTAWSHZY4GDAGF8 (Interim)#
Please stand by while rebooting the system.
Restarting system
Please wait...
This operation will overwrite the current setting and could possibly reboot the
system!
Do you want to continue? (y/n)y
Please wait...
FortiGate-VM64-AWS (Interim)#
The system is going down NOW !!
4. If you enabled private data encryption, confirm that the FortiGate-VM configuration file has the private-
encryption-key field:
[ec2-user@MY-AWSLINUX ~]$ more FGTAWSHZY4GDAGF8_7-6_3433_202410081451.conf
#config-version=FGVMA6-7.6.1-FW-build3433-241007:opmode=0:vdom=0:user=admin
#conf_file_ver=346174364138168
#buildno=3433
#global_vdom=1
#private-encryption-key=Whoxar8K7iFQgA9TIt4sLq/wYeM=
config system global
set alias "FGTAWSHZY4GDAGF8"
set allow-traffic-redirect disable
set gui-auto-upgrade-setup-warning disable
set hostname "FGTAWSHZY4GDAGF8"
set ipv6-allow-traffic-redirect disable
set private-data-encryption enable
set timezone "US/Pacific"
end
FortiOS 7.6.1 and later versions support the GCP C4 Intel instance family. See Machine type support.
FortiGate-VM supports the Google Distributed Cloud Virtual (GDC V) environment. The example deploys a KVM build of
the FortiGate-VM into a GDC environment. The GDC V runs on a cluster of Ubuntu VMs.
The following diagram depicts traffic sent from the client through the FortiGate-VM to the internet:
1. Create four Ubuntu VMs as Plan for a basic installation on your hardware describes.
2. Create the admin and user clusters on top of the four VM nodes as Create basic clusters describes. The following
shows the example values for the information that you must gather before creating the clusters:
Name of the admin cluster you are creating. The location and naming of admincluster
cluster artifacts on the admin workstation are based on the cluster name. The
cluster namespace is derived from the cluster name.
Name of the user cluster you are creating. The location and naming of cluster usercluster
artifacts on the admin workstation are based on the cluster name. The cluster
namespace is derived from the cluster name.
Account information
Path to the SSH private key file on your admin workstation. By default, the path /home/aturner/.ssh/id_rsa
is /home/USERNAME/.ssh/id_rsa.
ID of the Google Cloud project that you want to use for connecting your cluster dev-project-001-166400
to Google Cloud and viewing logs and metrics. This project is also referred to
as the fleet host project.
The email address that is associated with your Google Cloud account. For [email protected]
example:[email protected].
One IP address for the admin cluster control plane node. 172.16.200.71
One IP address for the user cluster control plane node. 172.16.200.72
VIP addresses
VIP for the Kubernetes API server of the admin cluster. 172.16.200.74
VIP for the Kubernetes API server of the user cluster. 172.16.200.75
One VIP to use as the external address for the ingress proxy. 172.16.200.76
Range of ten IP addresses for use as external IP addresses for Services of 172.16.200.76-172.16.200.86
type LoadBalancer. Notice that this range includes the ingress VIP, which is
required by MetalLB. No other IP addresses can overlap this range.
Range of IP addresses in CIDR block notation for use by Pods on the admin 192.168.0.0/16
cluster. The recommended starting value, which is pre-filled in the generated
cluster configuration file is 192.168.0.0/16.
Range of IP addresses in CIDR block notation for use by Services on the 10.96.0.0/20
admin cluster. The recommended starting value, which is pre-filled in the
generated cluster configuration file is 10.96.0.0/20.
Range of IP addresses in CIDR block notation for use by Pods on the user 192.168.0.0/16
cluster. The recommended starting value, which is pre-filled in the generated
cluster configuration file and is the default value in the console is
192.168.0.0/16.
Range of IP addresses in CIDR block notation for use by Services on the user 10.96.0.0/20
cluster. The recommended starting value, which is pre-filled in the generated
cluster configuration file and is the default value in the console is 10.96.0.0/20.
3. In Google Cloud, go to Clusters. Select the clusters that you created and confirm that you can see the clusters
connected on Google Kubernetes Engine (GKE).
4. To enable multiple NICs for a pod or VM, you must enable it in usercluster.yaml as Configure multiple network
interfaces for Pods describes, specifically to include the following:
apiVersion: v1
multipleNetworkInterfaces: true
enableDataplaneV2: true
5. On the admin workstatin, run the following to enable vmruntime on the user cluster to allow VM virtualization:
bmctl enable vmruntime --kubeconfig bmctl-workspace/usercluster/usercluster-kubeconfig
6. Create a separate yaml file to create the NetworkAttachmentDefinition (NAD) based on the following yaml. This
creates a network definition that you can attach to pods or the FortiGate-VM so that they can communicate on the
same internal subnet:
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
name: test-bridge
spec:
config: '{ "cniVersion": "0.3.1", "type": "bridge", "bridge": "br0", "ipam": { "type":
"host-local", "subnet": "172.16.1.0/24" } }'
7. Create the DataVolume for the FortiGate-VM in a separate yaml file. You must download the qcow2 file from the
KVM FortiGate-VM image from the Fortinet Support site and place it in an accessible location for the image creation
to succeed:
apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:
name: "fgt-boot-dv"
spec:
source:
http:
url: "https://alextestbucket.s3.ap-southeast-1.amazonaws.com/fos3401.qcow2" # S3
or GCS
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: "5000Mi"
8. Create the FortiGate-VM for KVM instance using the boot disk created in step 7 and a secondary interface. The
interface configuration in this yaml file uses multus=test-bridge which is defined in step 6 for eth1 and a default
network name bridge, which is a system default and should not be changed in this configuration file.
apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
creationTimestamp: null
labels:
kubevirt/vm: fgt
name: fgt
namespace: default
spec:
compute:
cpu:
vcpus: 2
memory:
capacity: 4Gi
disks:
- boot: true
driver: virtio
virtualMachineDiskName: fgt-boot-dv
guestEnvironment: {}
interfaces:
- default: true
name: eth0
networkName: bridge
- name: eth1
networkName: multus=test-bridge
osType: Linux
status: {}
-p 30022
10. From the admin workstation instance, apply the created yaml files from step 6 through 9 using kubectl apply -
f example.yaml . Applying the yaml files creates the resources that the files define.
11. From the adminworkstation instance use kubectl get vmi to confirm that the VMs are visible and running, and
that you can reach them from the worker node through their pod-network IP address:
aturner@adminworkstation:~$ kubectl get vmi
NAME AGE PHASE IP NODENAME
ssh-pod 1/1 Running 0 8d
virt-launcher-fgt-6d5nh 2/2 Running 0 8d
The test environment uses an SSH session to access the SSH server pod or container and through that session, triggers
an EICAR test file download that flows through the FortiGate and triggers UTM processing via a firewall policy.
1. Upload a license to the FortiGate-VM:
FortiGate-VM64-KVM # execute restore vmlicense ftp workingfolder/FGVM08TM....lic
...86.126 **omitted**
This operation will overwrite the current VM license and reboot the system!
Do you want to continue? (y/n)y
Please wait...
2. The primary interface obtains its IP address using DHCP. Therefore, the NAD is the only address that you must
configure. Configure the IP address in FortiOS and on the Ubuntu pod using the IP address that the NAD provides:
kubectl describe vmi fgt
...
Ip Address: 172.16.1.250
Ip Addresses:
172.16.1.250
...
FGVM08TM24003117 (port2) # show
config system interface
edit "port2"
set vdom "root"
set ip 172.16.1.250 255.255.255.0
set allowaccess ping https ssh snmp http telnet fgfm radius-acct probe-response
fabric ftm speed-test
set type physical
set snmp-index 2
set mtu-override enable
next
end
FGVM08TM24003117 # get router info routing-table all
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
3. Configure a firewall policy with unified threat management (UTM) and an antivirus (AV) profile:
config firewall policy
edit 1
set uuid 2864e7e4-a6d7-51ef-cc59-2a9e5ff5a48e
set srcintf "port2"
set dstintf "port1"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
set utm-status enable
set av-profile "default"
set nat enable
next
end
4. Configure the Ubuntu server with the route pointing to the FortiGate port2 address. In the example, the server IP
address is ...86.126:
root@ssh-pod:~# ip route show
default via 192.168.3.33 dev eth0 mtu 1450
...86.126 via 172.16.1.250 dev net1
172.16.1.0/24 dev net1 proto kernel scope link src 172.16.1.253
192.168.3.33 dev eth0 scope link
root@ssh-pod:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen
1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: net1@if69: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group
default
link/ether 2a:a9:65:6f:1c:bc brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.16.1.253/24 brd 172.16.1.255 scope global net1
valid_lft forever preferred_lft forever
inet6 fe80::28a9:65ff:fe6f:1cbc/64 scope link
valid_lft forever preferred_lft forever
67: eth0@if68: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group
default qlen 1000
link/ether be:d5:28:86:c2:27 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.3.179/32 scope global eth0
valid_lft forever preferred_lft forever
5. To test the configuration, attempt to use cURL to download an Eicar file to the server. Confirm that the UTM and AV
features are active and block download of the Eicar file:
root@ssh-pod:~# curl http://...86.126/samplevirus/eicar.txt
<!DOCTYPE html>
<html lang="en">
**omitted**
<h1>High Security Alert</h1>
<p>You are not permitted to download the file "eicar.txt" because it is infected
with the virus "EICAR_TEST_FILE".</p>
<table><tbody>
<tr>
<td>URL</td>
<td>http://...86.126/samplevirus/eicar.txt</td>
</tr>
<tr>
<td>Quarantined File Name</td>
<td></td>
</tr>
<tr>
<td>Reference URL</td>
<td><a
href="https://fortiguard.com/encyclopedia/virus/2172">https://fortiguard.com/encyclopedi
a/virus/2172</A></td>
</tr>
</tbody></table>
</div></body>
</html>
FortiOS 7.6.1 supports the use of MLX5/4 and the upcoming MANA NIC on Azure Dv6/Ev6 instance types.
Improvements have been made for FGT_VM64_KVM IPsec performance by enhancing virtio and optimizing RPS.
Improvements have been made for FGT_VM64_KVM IPsec performance through DPDK.
config system affinity-packet-redistribution default setting for FortiGate-VM has been optimized to
simplify configuration procedure.
FortiOS 7.6.1 supports on-premise solutions for OCI that include the following:
l Dedicated Region (DRCC). See Dedicated Region.
l Cloud @ Customer and X9. See Oracle Private Cloud Appliance.
FortiOS supports AliCloud gateway load balancer (GWLB). See What is GWLB?.
FortiOS supports the ecs.g8i instance type on AliCloud. See Instance type support.
Operational Technology
This section includes information about Operational Technology related new features:
l System on page 650
System
This section includes information about system related Operational Technology new features:
l CLI to configure FGR-70F/FGR-70F-3G4G GPIO/DIO module alarm functionality 7.6.1 on page 650
l SNMP traps and automation-stitch notifications for DIO module alarm functionality 7.6.1 on page 652
l Support Ethernet layer protocols in the IPS engine 7.6.3 on page 654
FortiGate Rugged 70F and FortiGate Rugged 70F-3G4G include a general purpose input output (GPIO) module, also
known as a digital I/O (DIO) module. This module activates a digital output when triggered by a change in any digital
input. For example, the digital input can be connected to a cabinet door to monitor the open/close status or low/high
voltage status, and the output can be connected to a buzzer. When the DIO module detects a change from open to
closed or a voltage change from low to high, it triggers the buzzer.
New CLI for configuring DIO module alarms is available only on FortiGate Rugged 70F and FortiGate Rugged 70F-
3G4G devices.
A new config system digital-io command is available to configure the input status for the DIO module to
monitor:
config system digital-io
set input1-detection-mode {default | voltage}
set input2-detection-mode {default | voltage}
set output-keep-last-state {enable | disable}
end
l voltage: Detect change from low to high voltage or high to low voltage.
set output-keep-last- Enable/disable FortiGate to keep the alarm status after a reboot.
state {enable |
disable}
A new execute digital-io set-output command is available to configure the output mode when an alarm is
triggered, namely, the state of the normally closed to common (NC_COM) output and the normally open to common (NO_
COM) output:
# execute digital-io set-output
alternating Alternates between default and opposite.
A new diagnose sys digital-io state command is available to check the input and output status reported by
the DIO module:
# diagnose sys digital-io state
Input1: mode=default(open/closed) and state=open.
Input2: mode=voltage(low/high) and state=low.
Output: state=default, NO_COM=open, and NC_COM=closed.
output-keep-last-state: enable
New commands are also available to trigger SNMP traps and automation stitches for the DIO module. See SNMP traps
and automation-stitch notifications for DIO module alarm functionality 7.6.1 on page 652 for more information.
For more information about the DIO module, see the FortiGate Rugged 70F Series QuickStart Guide and the Technical
Tip: Overview of the Digital Input/Output (DIO) Module in FortiGate Rugged 70F Series community article.
Example
In this example, a FortiGate Rugged 70F is configured to monitor the open/close and low/high voltage status of a cabinet
door, and the output is connected to a buzzer. When the status of the cabinet door changes, FortiGate triggers the
buzzer
SNMP traps and automation-stitch notifications for DIO module alarm functionality -
7.6.1
FortiGate Rugged 70F and FortiGate Rugged 70F-3G4G include a general purpose input output (GPIO) module, also
known as a digital I/O (DIO) module. The module supports SNMP traps and automation-stitch notifications when DIO
module alarm functionality is activated. The DIO module triggers an alarm when it detects a change in any digital input,
and the digital output is activated. Notification support depends on previously configured config system digital-
io and execute digital-io set-output settings prior to event notification. See CLI to configure FGR-70F/FGR-
70F-3G4G GPIO/DIO module alarm functionality 7.6.1 on page 650 for more information.
New CLI for configuring SNMP traps and automation-stitch notifications is available only on FortiGate Rugged 70F and
FortiGate Rugged 70F-3G4G devices.
The config system automation-condition command includes new options:
config system automation-condition
edit <name>
set condition-type input
set input-state {open|close}
next
end
set condition-type input Configure the type of condition to input for the DIO module on the FortiGate 70F
series.
set input-state Configure the input state:
{open|close} l open: Input switch is open.
set events dio Configure the SNMP trap event for the DIO module of the FortiGate Rugged 70F
series. When enabled, system events are also logged.
For more information about the DIO module, see the FortiGate Rugged 70F Series QuickStart Guide and the Technical
Tip: Overview of the Digital Input/Output (DIO) Module in FortiGate Rugged 70F Series community article.
Example
In this example, a FortiGate Rugged 70F is configured to monitor the open/close status of a cabinet door, and the output
is connected to a buzzer. An automation stitch and SNMP trap are also configured.
When the status of the cabinet door changes from open to closed or closed to open, FortiGate triggers the buzzer,
automation stitch, and SNMP trap. A system event is also logged when SNMP traps are sent.
Before you configure automation stitches and SNMP traps for DIO module alarms, you must configure the alarms using
the config system digital-io and execute digital-io set-output settings. See CLI to configure FGR-
70F/FGR-70F-3G4G GPIO/DIO module alarm functionality 7.6.1 on page 650 for more information.
1. Configure an automation-stitch condition for when the DIO module detects an input state of open:
In this example, the condition type is set to input, and the input state is set to open.
config system automation-condition
edit "Cabinet-Open"
set description "Cabinet open"
set condition-type input
set input-state open
next
end
3. Configure a stitch to use the condition to trigger an action, such as an email notification:
In this example, the automation stitch uses the previously configured trigger (DIO-trigger) and condition (Cabinet-
Open) to trigger an email notification.
config system automation-stitch
edit "dio"
set description "DIO-stitch"
set trigger "DIO-trigger"
Results:
When the cabinet door being monitored by the DIO module opens unexpectedly, it triggers an SNMP event:
When the cabinet door is opened, it also triggers an email notification as configured by the automation stitch.
The IPS engine has been enhanced to detect industrial Ethernet protocols such as LLDP, GOOSE, EtherCAT, and
PROFINET RT. Device detection starts to detect and log the Ethernet devices through the L2 protocol. Additionally, the
IPS sensor detects the Ethernet protocol and logs the traffic.
Custom signature rules have been enhanced with three new rule options for ethertype, mac_src, and mac_dst.
The L2 protocol to be detected by the custom signature is specified by the administrator through the Ethertype
hexadecimal value for the ethertype option.
In Examples 2 and 3 below, the ethertype value of 0x88cc is used to detect LLDP protocol traffic.
The following examples are explored:
l Example 1: Ethernet protocol device detection on the interface on page 655
l Example 2: Ethernet protocol detection with custom IPS signatures on the interface policy on page 656
l Example 3: Ethernet protocol detection with custom IPS signatures on the sniffer policy on page 657
Device detection requires new signatures included in both the IoT Detection package and OT
Detection package, which will be available in future FortiGuard updates.
In this example, the IPS engine detects Ethernet devices, such as those using the LLDP protocol, which contains device
information.
1. Enable device detection and passive gathering of identity information about the host:
config system interface
edit "port15"
set vdom "root"
set type physical
set device-identification enable
set snmp-index 17
next
end
The ethertype field has been added in the device detection log. The src_mac and dst_mac log fields have been
added instead of the source and destination IP addresses. These three new fields are not included for regular
application control logs.
Example 2: Ethernet protocol detection with custom IPS signatures on the interface
policy
In this example, the IPS sensor is able to detect Ethernet protocols by matching signatures in the NIDS database or by
using custom-defined signatures.
To apply Ethernet protocol detection with custom IPS signatures on the interface policy:
1. Create a new custom signature for LLDP protocol with source MAC address and destination MAC address defined:
config ips custom
edit "LLDP-test"
set signature "F-SBID( --attack_id 6312; --name \"LLDP-test-mac\"; --default_
action drop; --ethertype 0x88cc; --mac_src 00:0c:29:c6:ae:bf; --mac_dst
e0:23:ff:83:2d:2d; --severity high; --status disable; )"
next
end
2. Create a new IPS sensor and allow the new custom signatures to pass:
config ips sensor
edit "l2-test"
config entries
edit 1
set rule 6312
set status enable
set action pass
next
end
next
end
Example 3: Ethernet protocol detection with custom IPS signatures on the sniffer
policy
Ethernet protocol detection is supported in sniffer policies. In this example, the software switch with spanning is set for
the sniffer detection.
To apply Ethernet protocol detection with custom IPS signatures on the sniffer policy:
1. Create a new software switch with the destination and source ports for spanning configured:
config system switch-interface
edit "test-sw"
set vdom "root"
set member "port2" "port15"
set span enable
set span-dest-port "port2"
set span-source-port "port15"
next
end
3. Create a new custom signature for LLDP protocol with source MAC address and destination MAC address defined:
config ips custom
edit "LLDP-test"
set signature "F-SBID( --attack_id 6312; --name \"LLDP-test-mac\"; --default_
action drop; --ethertype 0x88cc; --mac_src 00:0c:29:c6:ae:bf; --mac_dst
01:80:c2:00:00:0e; --severity high; --status disable; )"
next
end
Confirm that non-IP address packet sniffing is also enabled. If it is not enabled, L2 traffic
will not be detected.
The Ethernet protocol detection does not support traffic logging; only an IPS log will be generated if the sniffer policy
is matched.
The following index provides a list of all new features added to FortiOS 7.6. The index allows you to quickly identify the
version where the feature first became available in FortiOS.
Select a version number to navigate in the index to the new features available for that patch:
l 7.6.0 on page 660
l 7.6.1 on page 664
l 7.6.3 on page 668
7.6.0
GUI
Network
IPv6 l Recursive resolution of BGP routes using IPv6 prefix with on-link flag from
route aggregation on page 154
l DHCPv6 enhancements on page 151
SD-WAN
Service rules l Allow SD-WAN rules to steer IPv6 multicast traffic on page 236
Security posture and l Share ZTNA information through the EMS connector on page 283
EMS connector
Security Profiles
Antivirus l Sanitize Microsoft OneNote files through content disarm and reconstruction
on page 319
l Stream-based antivirus scanning for HTML and Javascript files on page 321
Others l Support the Zstandard compression algorithm for web content on page 348
l DNS filtering in proxy policies on page 351
l DNS translation support for Service records over the DNS Filter profile on
page 354
l Control TLS connections that utilize Encrypted Client Hello on page 358
VPN
IPsec and SSL VPN l Automatic selection of IPsec tunneling protocol on page 376
l Security posture tag match enforced before dial-up IPsec VPN connection on
page 381
LAN Edge
l Support IKEv2 for FortiAP IPsec data channel management on page 463
l Support WPA3-SAE and WPA3-SAE Transition security modes in MPSK
profiles on page 466
Switch Controller l Change the priority of MAB and EAP 802.1X authentication on page 483
l Send SNMP traps for MAC address changes on page 488
System
General l Restrict local administrator logins through the console on page 521
l Configure TCP NPU session delay globally on page 523
l Object usage included in the print tablesize command output on page 525
High availability l Manual and automatic HA virtual MAC address assignment on page 543
l Backup heartbeat interface mitigates split-brain scenarios on page 545
l RSSO authenticated user logon information synchronized between FGSP
peers on page 547
l FGSP support for failover with asymmetric traffic and UTM on page 552
Security l Encrypt configuration files in the eCryptfs file system on page 560
l Closed network VM license security enhancement on page 561
l OpenSSL FIPS provider installed globally at startup on page 563
Security Fabric
Fabric settings and connectors l Apply threat feed connectors as source addresses in central SNAT on page
573
l Automatic serial number retrieval from FortiManager on page 577
l Set the source interface for syslog and NetFlow settings on page 613
l Logging detection of duplicate IPv4 addresses on page 616
l Logging local traffic per local-in policy on page 621
l Logs generated when starting and stopping packet capture and TCP dump
operations on page 627
Cloud
Public and private cloud l Azure SDN connector relay through FortiManager support on page 631
l IBM Cloud virtual network interface support on page 633
l GCP SDN connector relay through FortiManager support on page 633
l Support the AWS r8g instance family on page 633
l Support the AWS c8g instance family on page 633
l KVM Red Hat Enterprise Linux 9.4 support on page 633
7.6.1
GUI
General usability enhancements l GUI support for security posture tags in dial-up IPsec VPN tunnels 7.6.1 on
page 59
l CLI diagnostic shortcuts in the GUI 7.6.1 on page 60
l Asset Details pane 7.6.1 on page 61
Network
General l Extended VRF ID range for enhanced network scalability 7.6.1 on page 109
l Enhanced PIM support for VRFs 7.6.1 on page 109
l Including denied multicast sessions in the session table 7.6.1 on page 111
l Support specific VRF ID for local-out traffic 7.6.1 on page 112
l Support source IP interface for system DNS 7.6.1 on page 118
l Improvements to IPsec monitoring 7.6.1 on page 119
Explicit and transparent proxy l Specifying outgoing interface and VRF for a web proxy forward server or
isolator server 7.6.1 on page 163
l Isolator servers in proxy policies 7.6.1 on page 165
SD-WAN
Overlays and underlays l ADVPN 2.0 overlay placeholders for shortcuts between spokes 7.6.1 on
page 177
l SD-WAN Setup wizard for guided configuration 7.6.1 on page 185
Performance SLA l Map SD-WAN member priorities to BGP MED attribute when spoke
advertises routes using iBGP to hub 7.6.1 on page 220
l FortiGuard SLA database for SD-WAN performance SLA 7.6.1 on page 226
l Passive monitoring of TCP metrics 7.6.1 on page 230
Service rules l Specify SD-WAN zones in some policies 7.6.1 on page 242
Policies l Support for randomized port selection in IP pool mechanisms 7.6.1 on page
266
l Enhanced security with default local-in policy 7.6.1 on page 268
l DHCP-PD support for MAP-E 7.6.1 on page 271
Application gateway l ZTNA agentless web-based application access 7.6.1 on page 283
Security Profiles
Web filter l Introduce URL risk-scores in determining policy action 7.6.1 on page 323
VPN
IPsec and SSL VPN l Enhancing security with Post-Quantum Cryptography for IPsec key
exchange 7.6.1 on page 385
LAN Edge
Switch Controller l Support QinQ with the switch controller 7.6.1 on page 489
l Enhance network performance with VLAN pruning 7.6.1 on page 494
FortiExtender l Support VLAN over FortiExtender LAN-extension mode 7.6.1 on page 498
l Support split tunneling in LAN extension mode 7.6.1 on page 506
l Support multiple APNs in WAN extension mode 7.6.1 on page 511
l Support FortiCare registration for FortiExtender 7.6.1 on page 513
System
General l Simplified device registration for Security Fabric devices 7.6.1 on page 525
l Firmware upgrade report 7.6.1 on page 527
High availability l Monitor routing prefix for FGSP session failover 7.6.1 on page 553
l Single FortiGuard license for FortiGate A-P HA cluster 7.6.1 on page 556
Security Fabric
Fabric settings and connectors l Support multi-tenant FortiClient Cloud fabric connectors in the GUI 7.6.1 on
page 577
General l Enhanced security visibility for IoT/OT vulnerabilities 7.6.1 on page 600
Cloud
Public and private cloud l Azure SDN connector moves private IP address on trusted NIC during A-P
HA failover 7.6.1 on page 633
l Support the OCI E5.Flex instance type 7.6.1 on page 634
l Azure SDN connector GraphQL bulk query support 7.6.1 on page 634
l AWS NitroTPM support 7.6.1 on page 634
l AWS SDN connector IPv6 address object support 7.6.1 on page 639
l GCP C4 Intel instance support 7.6.1 on page 639
l FortiGate-VM GDC V support 7.6.1 on page 639
l OCI SDN connector IPv6 address object support 7.6.1 on page 648
l GCP SDN connector IPv6 address object support 7.6.1 on page 648
l Support for Azure upcoming MANA NIC 7.6.1 on page 648
l Azure SDN connector IPv6 address object support 7.6.1 on page 648
l FGT_VM64_KVM IPsec performance improvement through virtio and RPS
7.6.1 on page 649
l FGT_VM64_KVM IPsec performance through DPDK improvement 7.6.1 on
page 649
l FortiGate-VM config system affinity-packet-redistribution optimization 7.6.1
on page 649
l OCI support for on-premise solutions 7.6.1 on page 649
l AliCloud GWLB support 7.6.1 on page 649
Operational Technology
7.6.3
GUI
General usability enhancements l GUI access for global search 7.6.3 on page 68
l GUI warnings for IKE-TCP port conflicts 7.6.3 on page 70
l GUI improvements of PIM support for VRFs 7.6.3 on page 72
Network
General l Connectivity Fault Management (CFM) now available for FG-80F-POE and
FG-20xF models 7.6.3 on page 123
l Application and network performance monitoring with FortiTelemetry 7.6.3
on page 123
l Fortinet Support Tool for capturing incidents on page 145
Explicit and transparent proxy l GUI support of isolator servers for proxy policies 7.6.3 on page 168
SD-WAN
Overlays and underlays l Fabric Overlay Orchestrator Topology dashboard widget for hub FortiGates
7.6.3 on page 193
Performance SLA l Enhanced passive monitoring of TCP metrics 7.6.3 on page 234
Security Profiles
Others l Control TLS connections that utilize Encrypted Client Hello in flow mode
7.6.3 on page 361
l Inline CASB security profile to support control factors in exchanged JSON
data for custom SaaS applications 7.6.3 on page 368
VPN
IPsec and Agentless VPN l Migration from SSL VPN tunnel mode to IPsec VPN 7.6.3 on page 392
l Agentless VPN 7.6.3 on page 413
l Configure FortiClient SIA for IPsec VPN tunnels 7.6.3 on page 413
l Support Quantum Key Distribution and Digital Signature Algorithm Post-
Quantum Cryptography 7.6.3 on page 417
LAN Edge
Switch Controller l Provide an enhanced GUI for NAC policies 7.6.3 on page 495
l Support IPv6 addresses for managed FortiSwitch units 7.6.3 on page 496
l Prevent automatically created VLANs 7.6.3 on page 497
FortiExtender l Add GUI support for split tunneling in LAN extension mode 7.6.3 on page 514
l Add GUI support for multiple APNs in WAN extension mode 7.6.3 on page
516
l Add GUI support for FortiCare registration for FortiExtender 7.6.3 on page
518
System
General l Optimizations for physical FortiGate devices with 2 GB RAM 7.6.3 on page
531
Security Fabric
Fabric settings and connectors l GUI support for mTLS of threat feed connections 7.6.3 on page 587
l Enhancing FortiSandbox TLS security with CA and CN controls 7.6.3 on
page 588
Cloud
Public and private cloud l AliCloud ecs.g8i instance type support 7.6.3 on page 649
Operational Technology
System l Support Ethernet layer protocols in the IPS engine 7.6.3 on page 654
Copyright© 2025 Fortinet, Inc. All rights reserved. Fortinet®, FortiGate®, FortiCare® and FortiGuard®, and certain other marks are registered trademarks of Fortinet, Inc., and other Fortinet names herein
may also be registered and/or common law trademarks of Fortinet. All other product or company names may be trademarks of their respective owners. Performance and other metrics contained herein were
attained in internal lab tests under ideal conditions, and actual performance and other results may vary. Network variables, different network environments and other conditions may affect performance
results. Nothing herein represents any binding commitment by Fortinet, and Fortinet disclaims all warranties, whether express or implied, except to the extent Fortinet enters a binding written contract,
signed by Fortinet’s Chief Legal Officer, with a purchaser that expressly warrants that the identified product will perform according to certain expressly-identified performance metrics and, in such event, only
the specific performance metrics expressly identified in such binding written contract shall be binding on Fortinet. For absolute clarity, any such warranty will be limited to performance in the same ideal
conditions as in Fortinet’s internal lab tests. Fortinet disclaims in full any covenants, representations, and guarantees pursuant hereto, whether express or implied. Fortinet reserves the right to change,
modify, transfer, or otherwise revise this publication without notice, and the most current version of the publication shall be applicable.