FORTIGATE - SAML Debug: Difference between revisions
No edit summary |
No edit summary |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 9: | Line 9: | ||
Enable timestamps before collecting any debug output to simplify correlation with client and identity provider logs. | Enable timestamps before collecting any debug output to simplify correlation with client and identity provider logs. | ||
<nowiki> | <nowiki> | ||
diagnose debug console timestamp enable | diagnose debug console timestamp enable | ||
diagnose debug reset | diagnose debug reset | ||
| Line 20: | Line 20: | ||
Always disable debugging after troubleshooting to avoid unnecessary CPU usage and excessive log generation. | Always disable debugging after troubleshooting to avoid unnecessary CPU usage and excessive log generation. | ||
<nowiki> | <nowiki> | ||
diagnose debug disable | diagnose debug disable | ||
diagnose debug reset</nowiki> | diagnose debug reset</nowiki> | ||
| Line 28: | Line 28: | ||
Check that SAML daemon is actually processing authentication requests. | Check that SAML daemon is actually processing authentication requests. | ||
<nowiki> | <nowiki> | ||
diagnose sys process pidof samld | diagnose sys process pidof samld | ||
diagnose sys top</nowiki> | diagnose sys top</nowiki> | ||
| Line 36: | Line 36: | ||
=== Display current SAML sessions === | === Display current SAML sessions === | ||
<nowiki> | <nowiki> | ||
diagnose vpn ssl saml-session list</nowiki> | diagnose vpn ssl saml-session list</nowiki> | ||
Example: | Example: | ||
<nowiki> | <nowiki> | ||
Session ID : 9 | Session ID : 9 | ||
User : john.doe | User : john.doe | ||
| Line 51: | Line 51: | ||
=== Display authenticated users === | === Display authenticated users === | ||
<nowiki> | <nowiki> | ||
diagnose firewall auth list</nowiki> | diagnose firewall auth list</nowiki> | ||
=== Display session table === | === Display session table === | ||
<nowiki> | <nowiki> | ||
diagnose sys session list</nowiki> | diagnose sys session list</nowiki> | ||
| Line 63: | Line 63: | ||
=== Enable SSL VPN debug === | === Enable SSL VPN debug === | ||
<nowiki> | <nowiki> | ||
diagnose debug application sslvpn -1 | diagnose debug application sslvpn -1 | ||
diagnose debug enable</nowiki> | diagnose debug enable</nowiki> | ||
| Line 69: | Line 69: | ||
=== View SSL VPN sessions === | === View SSL VPN sessions === | ||
<nowiki> | <nowiki> | ||
get vpn ssl monitor</nowiki> | get vpn ssl monitor</nowiki> | ||
=== SSL VPN configuration check === | === SSL VPN configuration check === | ||
<nowiki> | <nowiki> | ||
show vpn ssl settings</nowiki> | show vpn ssl settings</nowiki> | ||
| Line 85: | Line 85: | ||
Authentication is handled by fnbamd (same as SAML group mapping logic). | Authentication is handled by fnbamd (same as SAML group mapping logic). | ||
<nowiki> | <nowiki> | ||
diagnose debug application fnbamd -1 | diagnose debug application fnbamd -1 | ||
diagnose debug application ike -1 | diagnose debug application ike -1 | ||
diagnose debug enable</nowiki> | diagnose debug enable</nowiki> | ||
== The IPsec Case == | |||
=== IKE Gateway State (Primary Equivalent) === | |||
This is the closest equivalent to “who is connected” in IPsec. | |||
<nowiki> | |||
diagnose vpn ike gateway list</nowiki> | |||
Provides: | |||
* Peer IP address | |||
* Authentication method (PSK / certificate / EAP) | |||
* IKE SA state (up/down) | |||
* Negotiation status | |||
* Lifetime information | |||
Use this as the primary “session-like” view for IPsec. | |||
=== IPsec Tunnel State (Data Plane View) === | |||
Shows active encrypted tunnels and traffic selectors. | |||
<nowiki> | |||
diagnose vpn tunnel list</nowiki> | |||
Provides: | |||
* Active Phase 2 SAs | |||
* Encryption domains (subnets) | |||
* SPI values | |||
* Traffic counters | |||
* Tunnel up/down state | |||
This is equivalent to “active VPN data sessions”. | |||
=== Summary View === | |||
Quick overview of active IPsec tunnels: | |||
<nowiki> | |||
get vpn ipsec tunnel summary</nowiki> | |||
Provides: | |||
* Tunnel name | |||
* Status (up/down) | |||
* Quick health visibility | |||
=== User Identity in IPsec (When It Exists) === | |||
IPsec only shows user identity when authentication is user-based. | |||
==== EAP / RADIUS / LDAP authentication ==== | |||
In this case, identity is handled by fnbamd: | |||
<nowiki> | |||
diagnose firewall auth list</nowiki> | |||
or deeper inspection: | |||
<nowiki> | |||
diagnose debug application fnbamd -1</nowiki> | |||
This may show: | |||
* Username | |||
* Group membership | |||
* Authentication source | |||
* Authorization result | |||
=== IPsec tunnel negotiation debugging === | === IPsec tunnel negotiation debugging === | ||
<nowiki> | <nowiki> | ||
diagnose debug application ike -1 | diagnose debug application ike -1 | ||
diagnose vpn ike gateway list | diagnose vpn ike gateway list | ||
| Line 99: | Line 167: | ||
=== Live IKE negotiation trace === | === Live IKE negotiation trace === | ||
<nowiki> | <nowiki> | ||
diagnose debug console timestamp enable | diagnose debug console timestamp enable | ||
diagnose debug reset | diagnose debug reset | ||
| Line 107: | Line 175: | ||
Filter by peer IP: | Filter by peer IP: | ||
<nowiki> | <nowiki> | ||
diagnose vpn ike log-filter addr <peer_ip></nowiki> | diagnose vpn ike log-filter addr <peer_ip></nowiki> | ||
Stop debug: | Stop debug: | ||
<nowiki> | <nowiki> | ||
diagnose debug disable | diagnose debug disable | ||
diagnose debug reset</nowiki> | diagnose debug reset</nowiki> | ||
| Line 134: | Line 202: | ||
== Web authentication (shared backend) == | == Web authentication (shared backend) == | ||
<nowiki> | <nowiki> | ||
diagnose debug application fnbamd -1 | diagnose debug application fnbamd -1 | ||
diagnose debug enable</nowiki> | diagnose debug enable</nowiki> | ||
| Line 146: | Line 214: | ||
== Certificates validation == | == Certificates validation == | ||
<nowiki> | <nowiki> | ||
show full-configuration vpn certificate local | show full-configuration vpn certificate local | ||
show full-configuration vpn certificate ca</nowiki> | show full-configuration vpn certificate ca</nowiki> | ||
| Line 152: | Line 220: | ||
== Time synchronization (critical for SAML) == | == Time synchronization (critical for SAML) == | ||
<nowiki> | <nowiki> | ||
get system status | get system status | ||
diagnose sys ntp status</nowiki> | diagnose sys ntp status</nowiki> | ||
| Line 160: | Line 228: | ||
=== SAML / HTTPS === | === SAML / HTTPS === | ||
<nowiki> | <nowiki> | ||
diagnose sniffer packet any "host <idp_ip>" 4 0 a</nowiki> | diagnose sniffer packet any "host <idp_ip>" 4 0 a</nowiki> | ||
=== IPsec IKE === | === IPsec IKE === | ||
<nowiki> | <nowiki> | ||
diagnose sniffer packet any "udp port 500 or udp port 4500" 4 0 a</nowiki> | diagnose sniffer packet any "udp port 500 or udp port 4500" 4 0 a</nowiki> | ||
== Flow debugging (authentication path) == | == Flow debugging (authentication path) == | ||
<nowiki> | <nowiki> | ||
diagnose debug reset | diagnose debug reset | ||
diagnose debug flow filter clear | diagnose debug flow filter clear | ||
| Line 179: | Line 247: | ||
Filter: | Filter: | ||
<nowiki> | <nowiki> | ||
diagnose debug flow filter addr <client_ip></nowiki> | diagnose debug flow filter addr <client_ip></nowiki> | ||
Stop: | Stop: | ||
<nowiki> | <nowiki> | ||
diagnose debug disable | diagnose debug disable | ||
diagnose debug reset</nowiki> | diagnose debug reset</nowiki> | ||
Latest revision as of 06:56, 6 July 2026
Debug SAML Authentication
Enable timestamped debugging
Enable timestamps before collecting any debug output to simplify correlation with client and identity provider logs.
diagnose debug console timestamp enable diagnose debug reset diagnose debug application samld -1 diagnose debug application fnbamd -1 diagnose debug enable
Disable debugging
Always disable debugging after troubleshooting to avoid unnecessary CPU usage and excessive log generation.
diagnose debug disable diagnose debug reset
Verify SAML daemon activity
Check that SAML daemon is actually processing authentication requests.
diagnose sys process pidof samld diagnose sys top
SAML Runtime Information
Display current SAML sessions
diagnose vpn ssl saml-session list
Example:
Session ID : 9 User : john.doe Group : VPN_Users Portal : full-access IdP : AzureAD Login time : 2026-07-04 09:54:13
Display authenticated users
diagnose firewall auth list
Display session table
diagnose sys session list
SSL VPN Debugging (SAML + non-SAML)
Enable SSL VPN debug
diagnose debug application sslvpn -1 diagnose debug enable
View SSL VPN sessions
get vpn ssl monitor
SSL VPN configuration check
show vpn ssl settings
IPsec SAML / authentication context (important)
SAML is typically used for SSL-VPN, but in IPsec environments authentication depends on mode:
IPsec with username/password (FNBAMD path)
Authentication is handled by fnbamd (same as SAML group mapping logic).
diagnose debug application fnbamd -1 diagnose debug application ike -1 diagnose debug enable
The IPsec Case
IKE Gateway State (Primary Equivalent)
This is the closest equivalent to “who is connected” in IPsec.
diagnose vpn ike gateway list
Provides:
- Peer IP address
- Authentication method (PSK / certificate / EAP)
- IKE SA state (up/down)
- Negotiation status
- Lifetime information
Use this as the primary “session-like” view for IPsec.
IPsec Tunnel State (Data Plane View)
Shows active encrypted tunnels and traffic selectors.
diagnose vpn tunnel list
Provides:
- Active Phase 2 SAs
- Encryption domains (subnets)
- SPI values
- Traffic counters
- Tunnel up/down state
This is equivalent to “active VPN data sessions”.
Summary View
Quick overview of active IPsec tunnels:
get vpn ipsec tunnel summary
Provides:
- Tunnel name
- Status (up/down)
- Quick health visibility
User Identity in IPsec (When It Exists)
IPsec only shows user identity when authentication is user-based.
EAP / RADIUS / LDAP authentication
In this case, identity is handled by fnbamd:
diagnose firewall auth list
or deeper inspection:
diagnose debug application fnbamd -1
This may show:
- Username
- Group membership
- Authentication source
- Authorization result
IPsec tunnel negotiation debugging
diagnose debug application ike -1 diagnose vpn ike gateway list diagnose vpn tunnel list
Live IKE negotiation trace
diagnose debug console timestamp enable diagnose debug reset diagnose debug application ike -1 diagnose debug enable
Filter by peer IP:
diagnose vpn ike log-filter addr <peer_ip>
Stop debug:
diagnose debug disable diagnose debug reset
IPsec + SAML reality check
SAML is NOT directly used in classic IPsec tunnels.
Instead:
- SSL-VPN → SAML supported natively
- IPsec dialup → usually LDAP/RADIUS or local users
- IPsec + external auth → goes through fnbamd, not samld
So when troubleshooting IPsec login issues, focus on:
- ike daemon
- fnbamd daemon
- user/group mapping
Web authentication (shared backend)
diagnose debug application fnbamd -1 diagnose debug enable
Useful for:
- SAML group mapping
- LDAP / RADIUS fallback
- user identity resolution
Certificates validation
show full-configuration vpn certificate local show full-configuration vpn certificate ca
Time synchronization (critical for SAML)
get system status diagnose sys ntp status
Packet capture (SAML / IPsec)
SAML / HTTPS
diagnose sniffer packet any "host <idp_ip>" 4 0 a
IPsec IKE
diagnose sniffer packet any "udp port 500 or udp port 4500" 4 0 a
Flow debugging (authentication path)
diagnose debug reset diagnose debug flow filter clear diagnose debug flow show function-name enable diagnose debug flow trace start 100 diagnose debug enable
Filter:
diagnose debug flow filter addr <client_ip>
Stop:
diagnose debug disable diagnose debug reset
Common failures
SAML login loop
- wrong ACS URL
- cookie blocked
- time drift
- wrong entity-id
IPsec authentication fails
- wrong group mapping
- fnbamd rejection
- phase1 mismatch
- PSK mismatch (non-SAML case)
SAML works but no VPN access
- firewall policy missing
- group not mapped
- portal mismatch
No debug output
- forgot enable
- wrong daemon targeted
- authentication not triggered
Security concepts
Assertion integrity
SAML must be signed and validated.
Trust chain
Only trusted IdP certificates allowed.
Time validation
NTP drift breaks authentication.
Least privilege
Map only required groups to VPN access.
Useful links
- https://docs.fortinet.com/
- https://community.fortinet.com/
- https://docs.fortinet.com/document/fortigate/latest/administration-guide
- https://docs.fortinet.com/document/fortigate/latest/cli-reference
- https://learn.microsoft.com/entra/identity/
- https://wiki.oasis-open.org/security/saml
