Review the settings that matter before the next password-spray campaign or SSL VPN advisory: patches, MFA, portal access, lockouts, certificates, timeouts, management access and logs.
Direct answer: Harden FortiGate SSL VPN by installing a supported FortiOS release, requiring MFA, limiting source addresses, using group-based portals, setting login and session limits, installing a trusted certificate, protecting administrator access, and centralizing VPN logs. Disable SSL VPN when it is not needed. On FortiOS 7.6.3 and later, tunnel mode is gone, so migrate those users to IPsec VPN first.
After those free controls, test the free 200-entry threat-feed sample, with no signup, to block known attacker sources at the edge.
The paths and commands below are verified against Fortinet's FortiOS 7.4 documentation. Check the CLI reference for your exact maintenance release before changing production. On FortiOS 7.4.1 and later, the VPN > SSL-VPN menus can be hidden; enable them under System > Feature Visibility.
| Item | Where (GUI/CLI) | Why | Priority |
|---|---|---|---|
| Patch FortiOS and review PSIRT | Fortinet Upgrade Path Tool and PSIRT advisories | SSL VPN vulnerabilities have included unauthenticated remote-code-execution flaws. | Critical |
| MFA for every VPN user | User & Authentication > User Definition; or SAML/RADIUS configuration | A stolen password alone should not complete authentication. | Critical |
| Restrict public source addresses | VPN > SSL-VPN Settings > Restrict Access; source-address |
Removes unnecessary exposure before authentication. | High |
| Map groups to least-privilege portals | VPN > SSL-VPN Settings > Authentication/Portal Mapping | Each group receives only the portal and internal resources it needs. | High |
| Remove unused local and test users | User & Authentication > User Definition and User Groups | Reduces forgotten credentials and unintended group membership. | High |
| Set login limits | config vpn ssl settings |
Temporarily blocks a source after repeated failed SSL VPN logins. | High |
| Set firewall user authentication lockout | config user setting |
Locks out repeated firewall user authentication failures (for example, captive portal). Separate from the SSL VPN source block. | High |
| Use a trusted server certificate | System > Certificates; VPN > SSL-VPN Settings > Server Certificate | Lets clients validate the intended VPN hostname. | Critical |
| Require TLS 1.2 or later | ssl-min-proto-ver and algorithm |
Removes older protocol versions and limits weaker cipher classes. | High |
| Review idle and authentication timeouts | idle-timeout and auth-timeout |
Closes inactive sessions and forces periodic reauthentication. | High |
| Disable web mode when unused | config system global → sslvpn-web-mode disable |
Removes browser-based portal functions that users do not require. | High |
| Review split tunnel and DNS | VPN > SSL-VPN Portals | Defines which traffic and DNS queries enter the corporate tunnel. | Review |
| Protect FortiGate administration | Network > Interfaces; System > Administrators | Keeps HTTPS and SSH management off untrusted WAN access. | Critical |
| Centralize and alert on VPN logs | Log & Report > Log Settings; System Events > VPN Events | Preserves evidence and exposes login-failure spikes. | High |
| Block known attacker sources | Threat feed in a local-in policy | Rejects listed IPv4 sources before they reach the VPN service. | Additional layer |
Use Fortinet's Upgrade Path Tool to select a supported target and upgrade sequence for your model. Then search the Fortinet PSIRT advisories for FortiOS and SSL-VPN. Do not assume that access controls compensate for an unpatched network-facing service.
These advisories illustrate the reason:
Apply MFA to every interactive VPN account, including contractors and emergency accounts.
For a FortiOS-managed LDAP user, go to User & Authentication > User Definition, create or edit the remote LDAP user, enable Two-factor Authentication, choose FortiToken, and assign the token. Fortinet warns that MFA for remote LDAP and RADIUS users can be bypassed if the typed username case does not match the user definition, so disable username sensitivity on each such user. This is a CLI-only setting.
config user local
edit "<vpn-user>"
set type ldap
set ldap-server "<ldap-server>"
set email-to "<user-email>"
set username-sensitivity disable
set two-factor fortitoken
set fortitoken "<token-serial>"
next
end
Fortinet documents FortiGate as the SAML service provider and Microsoft Entra ID or Okta as the identity provider. Enforce MFA and access policy at the IdP, place the SAML object in a FortiGate user group, then map that group under VPN > SSL-VPN Settings > Authentication/Portal Mapping. Microsoft Authenticator is an MFA method managed by Entra ID, not a separate FortiGate token type.
Fortinet documents LDAP users paired with FortiToken and RADIUS with FortiAuthenticator/FortiToken Mobile push. Email two-factor authentication is also documented. SMS and email codes are available FortiOS options, but use the strongest method your identity system and recovery process support.
Inventory User & Authentication > User Definition and User Groups. Remove unused test accounts and stale memberships. Map each approved group to a portal. Do not grant every authenticated user the broadest portal. Fortinet recommends pointing the default portal (All Other Users/Groups) at a custom portal with tunnel and web modes disabled. It also recommends enabling Limit Users to One SSL-VPN Connection at a Time under VPN > SSL-VPN Portals (set limit-user-logins enable).
config vpn ssl settings
set default-portal "<no-access-portal>"
config authentication-rule
edit 1
set groups "<approved-vpn-group>"
set portal "<least-privilege-portal>"
next
end
end
On FortiOS 7.4.1 and later, web mode is disabled by default after a factory reset. Keep it disabled when users only need tunnel access. If SSL VPN is not used at all, disable the service at VPN > SSL-VPN Settings > Enable SSL-VPN.
config system global
set sslvpn-web-mode disable
end
config vpn ssl settings
set status disable
end
Do not apply the second block if you still require SSL VPN. On FortiOS 7.6.3, plan around IPsec VPN and the Agentless VPN support available on your model.
These values are FortiOS 7.4 defaults and ranges. Choose production values that your support and identity teams can operate safely.
In FortiOS 7.4, login-attempt-limit defaults to 2 failed attempts and login-block-time defaults to 60 seconds. Fortinet's technical tip gives ranges of 0–10 attempts and 0–86400 seconds, but the 7.4 CLI reference lists a wider range, so check the accepted values on your release. Setting either to zero disables the block. login-timeout (10–180 seconds, default 30) is the time FortiClient has to set up the tunnel after a successful login. It is not a lockout timer.
config vpn ssl settings
set login-attempt-limit <attempts>
set login-block-time <seconds>
set login-timeout <10-180>
end
The block time is also the window in which failures are considered consecutive. Fortinet notes that this method does not apply to SAML groups because the IdP handles the username and password entries.
Fortinet documents config user setting lockout for firewall user authentication, such as captive portal logins. It is separate from the SSL VPN source block above. In FortiOS 7.4.6, auth-lockout-threshold accepts 1–10 and defaults to 3, and auth-lockout-duration accepts 0–4294967295 seconds and defaults to 0. A Fortinet technical tip says a duration of 0 applies a 60-second lockout. Set an explicit duration and test it.
config user setting
set auth-lockout-threshold <1-10>
set auth-lockout-duration <seconds>
end
A lockout policy can itself be abused to deny access to known usernames. Combine it with MFA, source restrictions and monitoring. See account lockout prevention and password spraying against VPNs.
In FortiOS 7.4.1, go to VPN > SSL-VPN Settings > Restrict Access, select Limit access to specific hosts, and choose the permitted address objects or groups. Geography address objects can also be used when the business has a defensible country requirement.
config vpn ssl settings
set source-interface "<internet-facing-interface>"
set source-address "<approved-source-object>"
set source-address-negate disable
end
A local-in policy controls traffic destined for the FortiGate itself, including VPN services. It can match interface, source, destination, schedule and service. Use it for explicit trusted networks, geographic restrictions or a threat-feed deny rule. Validate rule order and preserve an approved management path before enforcement.
For the threat-feed configuration, use the separate FortiGate brute-force protection guide. This hardening checklist does not duplicate those setup steps.
Import a certificate for the VPN hostname under System > Certificates. Select it at VPN > SSL-VPN Settings > Server Certificate. Fortinet describes its factory self-signed certificates as installation and testing aids and recommends a server certificate signed by a trusted CA.
config vpn ssl settings
set servercert "<trusted-vpn-server-certificate>"
end
In the FortiOS 7.4 CLI reference, ssl-min-proto-ver defaults to tls1-2 and algorithm defaults to high. Confirm that neither was lowered for old clients, and test all supported FortiClient versions before raising the minimum to TLS 1.3.
config vpn ssl settings
set ssl-min-proto-ver tls1-2
set algorithm high
end
The ciphersuite setting controls TLS 1.3 cipher suites. Fortinet notes that strong-crypto does not control the SSL VPN encryption level.
In FortiOS 7.4, idle-timeout defaults to 300 seconds and may be set to zero to disable it. auth-timeout defaults to 28800 seconds and accepts 0–259200 seconds. A zero authentication timeout means no forced reauthentication.
config vpn ssl settings
set idle-timeout <seconds>
set auth-timeout <seconds>
end
Fortinet recommends considering DTLS for SSL VPN throughput because it avoids TCP-in-TCP retransmission behavior. Treat it as a performance and compatibility decision, not an authentication control.
config vpn ssl settings
set dtls-tunnel enable
end
The FortiOS 7.4 CLI reference lists dtls-tunnel as enabled by default, so this only matters if someone turned it off.
For FortiOS 7.4 tunnel portals, go to VPN > SSL-VPN Portals. Disabling split tunneling sends all client traffic through the VPN. Enabling it routes only selected destinations through the tunnel. Configure the DNS servers and split-DNS domains that match that routing design.
config vpn ssl web portal
edit "<portal-name>"
set split-tunneling {enable | disable}
set split-tunneling-routing-address "<corporate-networks>"
set dns-server1 <internal-dns-ip>
next
end
Fortinet's hardening guide says external WAN access to administrative ports is generally not recommended. Use a trusted management interface or an out-of-band path. If public access is unavoidable, restrict it with trusted hosts or a local-in policy.
Go to System > Administrators, edit each administrator, define trusted hosts, and enable two-factor authentication. FortiOS supports FortiToken, FortiToken Cloud, email and SMS for administrator MFA. Fortinet recommends creating a second recoverable administrator before enabling MFA on the main account.
config system admin
edit "<administrator>"
set trusthost1 <management-subnet> <netmask>
set two-factor fortitoken
set fortitoken "<token-serial>"
next
end
When every administrator has trusted hosts, FortiOS restricts administrative access to those sources, except for ping. Fortinet's hardening guide also recommends changing the default administrative ports and the default admin username to non-standard values. The SSL VPN security best practices recommend a custom SSL VPN listening port instead of the default 10443.
Use Log & Report > Log Settings to record event logs and configure FortiAnalyzer, FortiAnalyzer Cloud, FortiGate Cloud or syslog storage. Review SSL VPN records at Log & Report > System Events > VPN Events. The VPN Events view is available when VPN is enabled under Feature Visibility.
config log fortianalyzer setting
set status enable
set server <fortianalyzer-ip>
end
config log syslogd setting
set status enable
set server <syslog-ip>
end
Alert on repeated SSL VPN login failures, sudden increases in distinct source addresses, disabled logging, authentication changes and administrator changes. FortiAnalyzer's predefined VPN event handler includes SSL VPN login failures and is disabled by default, so review and enable an appropriate handler explicitly. See how to investigate FortiGate SSL VPN failed login attempts.
After patching, MFA and access controls, an external IP threat feed can reject known sources in a FortiGate local-in policy before they reach the VPN listener. ThreatListPro covers 5.4M+ IPv4 addresses, is checked for new attackers every 6 hours, and is built from real attacks on live production Palo Alto GlobalProtect VPN portals in the US.
The feed is plain text with one IPv4 address or CIDR per line; single addresses are written as /32. Configure an hourly refresh, or the closest vendor-supported option. The subscriber URL is:
https://api.threatlistpro.com/v1/YOUR_API_KEY/blocklist.txt
Use the FortiGate threat-feed and local-in policy guide for the exact setup. Check FortiGate external connector limits before adding multiple feeds.
Print this page or copy the list into a change record.
| Control | Known vulnerable FortiOS flaw | Stolen valid password | Repeated failures from one IP | Distributed password spray | Excessive user access |
|---|---|---|---|---|---|
| Patch or disable SSL VPN | Primary control | No | No | No | No |
| MFA | No | Primary control | Limits account compromise | Limits account compromise | No |
| Login attempt limit | No | No | Temporarily blocks the source | Limited value across many IPs | No |
| Source restriction | No | Only outside allowed sources | Outside allowed sources | Outside allowed sources | No |
| Group portal mapping | No | Limits resulting access | No | No | Primary control |
| Threat feed | No | Only for listed sources | For listed sources | For listed sources | No |
| Central logging and alerts | Detection only | Detection support | Detection support | Detection support | Audit support |
Install a Fortinet-supported FortiOS release, review PSIRT advisories, require MFA, use a trusted server certificate, restrict source addresses, map groups to least-privilege portals, set login limits and timeouts, protect management access, and send VPN event logs to centralized storage. Disable SSL VPN entirely when it is not required.
Fortinet documents FortiToken Mobile, email tokens, LDAP or RADIUS users with MFA, SAML identity providers such as Microsoft Entra ID and Okta, and certificate-based authentication. Microsoft Authenticator can be used when Microsoft Entra ID enforces MFA. Apply MFA to every VPN user and test an emergency access procedure before deployment.
In FortiOS 7.4, login-attempt-limit under config vpn ssl settings defaults to 2 failed attempts and login-block-time defaults to 60 seconds. A zero value disables the corresponding protection. These settings operate on repeated attempts from a source IP and do not count password failures handled by a SAML identity provider.
Yes, if users do not require web mode. On FortiOS 7.4.1 and later, web mode is disabled by default on a factory-reset device and can be disabled with set sslvpn-web-mode disable under config system global. If no SSL VPN service is required, disable SSL VPN itself instead.
Only partly. FortiOS 7.6.3 removes SSL VPN tunnel mode from every FortiGate model and replaces it with IPsec VPN; existing tunnel-mode settings are not upgraded. SSL VPN web mode remains as Agentless VPN, except on models Fortinet lists as unsupported, including the FortiGate 40F, 60F and 90G series. Migrate tunnel users before upgrading and apply the applicable identity, certificate, logging and management controls to the replacement design.
No. A block list can block known source addresses before they reach the portal, but a new IP address can still make its first attempt. Residential proxies can rotate, and the feed is IPv4 only. Use it as an additional edge control after patching, MFA, access restriction and logging.
ThreatListPro is checked for new attackers every 6 hours. Start with the free vendor controls above, then add the feed as another layer.
Start a 14-day free trial 14 days free, no card needed, then $9.99/month · Or test 200 entries freeThreatListPro provides a standard plain-text IP blocklist for firewalls that support external lists.
Continue with the configuration and investigation guides relevant to your environment.