Technical Tip: Troubleshooting FortiGate traffic drops caused by dirty session handler and policy 0
| Description | This article describes how to troubleshoot FortiGate traffic drops when debug flow shows dirty-session-related behavior or messages such as Denied by forward policy check (policy 0). A dirty session means FortiGate is revalidating an already-established session after a relevant change, while policy 0 indicates that the packet did not match any valid forward policy under the current conditions.
Common triggers include firewall policy changes, routing changes, interface/path changes, captive portal handling, and VIP/service mismatches |
| Scope | FortiGate/FortiOS. |
| Solution | Symptoms. One or more of the following symptoms may be observed.
Root Cause. This behavior is commonly caused by one of the following conditions.
Background. Dirty session. A dirty session is an existing session that FortiGate revalidates after a relevant change, such as a policy update, route change, or interface or path change. Policy 0. Policy 0 is the implicit deny. It indicates that the packet did not match any valid forward policy under the current conditions. These two conditions may appear together. A session can be marked dirty, revalidated, and then dropped if it no longer matches a valid policy.
Solution. Capture flow debug. Run flow debug for the affected traffic.
diagnose debug reset
Stop debugging after reproducing the issue.
diagnose debug disable
Check the session table.
diagnose sys session list
Verify the following values.
Verify routing.
get router info routing-table details
Confirm that the destination is still resolved through the expected egress path.
Verify policy and VIP match.
show firewall policy show firewall vip
Confirm that traffic matches the intended source interface, destination interface, source address, destination address, schedule, service, and NAT or VIP behavior.
Test by clearing the affected session.
diagnose sys session filter src
Use caution when clearing sessions in production. If traffic works after clearing the session, the issue is likely related to session revalidation or stale session state.
Review dirty-session handling.
config system settings
Relevant setting.
config system settings
This setting controls how FortiGate handles existing sessions after policy or routing changes.
Review strict dirty-session validation.
config system global
If strict dirty-session validation is contributing to the drop, review whether the revalidated session still matches the original policy and NAT expectations.
Example adjustment.
config system global
Only change this setting after validating the design impact.
Debug Interpretation: Denied by forward policy check (policy 0). No active matching forward policy was found for the packet. Review the interface pair, address objects, schedule, service, NAT or VIP handling, and authentication state.
Dirty-session-related messages. An existing session is being revalidated. Compare the current route, interface path, and policy match with the original session state.
Existing sessions fail, new sessions work. This usually indicates stale or dirty session behavior rather than a basic firewall policy mismatch.
Expected result. After correcting the route, policy, interface path, VIP definition, or session-handling condition, the following result is expected.
CLI Reference.
diagnose debug reset |
