Here's a link in using the packet capture tool or sniffer in a FortiGate firewall.
To perform packet
capture in FortiGate, select a VDOM: internet
> Network > Diagnostics > select Interface: Internet (wan) > Packet
Capture.
You can optionally
enable/toggle Filters to narrow down Host, Port and Protocol number.
I've used the switch SVI to perform ping test from the "inside" LAN.
SW01#show ip
interface brief
Interface IP-Address OK? Method Status Protocol
Vlan1 unassigned YES NVRAM
up up
Vlan300 172.x.x.5 YES manual up up
FastEthernet0/1 unassigned YES unset
up up
<OUTPUT TRUNCATED>
SW01#ping
8.8.8.8 source 172.x.x.5
Type escape sequence
to abort.
Sending 5, 100-byte
ICMP Echos to 8.8.8.8, timeout is 2 seconds:
Packet sent with a
source address of 172.x.x.5
!!!!!
Success rate is 100
percent (5/5), round-trip min/avg/max = 1/5/9 ms
Enable/toggle Filters > select Filtering syntax:
Basic (default) > type Host: 172.x.x.5 > click Start Capture.
You can observe the
Packet Capture in FortiGate web GUI or click Save
as pcap for offline analysis.
The .pcap file will be saved under Downloads folder (in Windows).
To
view the current FortiGate IP sessions (5-tuple), go to Dashboard > FortiView Sessions.
To view in CLI, you
can use the get system session list
command. Use grep to filter the command output.
FG-FW01_PRI #
config vdom
FG-FW01_PRI
(vdom) # edit internet
current
vf=internet:4
FG-FW01_PRI
(internet) # get system session list | grep
172.x.x.5
tcp 3576
172.x.x.5:49269 202.x.x.30:49269 54.151.118.105:443 -
tcp 3599
172.x.x..5:43013 202.x.x.30:43013 104.82.75.211:80 -
icmp 29
172.x.x.5:10
202.x.x.30:60426 8.8.8.8:8
-
tcp 3564
172.x.x.5:29031 202.x.x.30:29031 54.151.118.105:443
Here's a link in using the debug flow tool in a FortiGate firewall.
There's no
equivalent packet-tracer command in
FortiGate which generates a virtual packet to verify routing, ACL and
NAT similar to Cisco ASA firewall. To find the matching Firewall Policy rule,
use Debug Flow or diagnose debug flow CLI command:
Go to VDOM: internet
> Network > Diagnostics > Debug flow tab.
Type
the number of packets (count): 100 (default) > enable/toggle Filters >
select Filter type: Basic (default) > select IP type: IPv4 (default) >
type IP address: 8.8.8.8 > select Protocol: ICMP.
Click
Start debug flow.
Generate packets to capture. Click Stop debug
flow when finished.
SW01#ping
8.8.8.8 source 172.x.x.5 repeat 100
Type escape sequence
to abort.
Sending 100,
100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:
Packet sent with a
source address of 172.x.x.5
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100
percent (100/100), round-trip min/avg/max = 1/4/9 ms
You
can view offline or save as CSV file.
Notice
policy-2 is matched and SNAT (Source
NAT) is used.
Below are the diagnose debug CLI commands:
diagnose debug
reset // CLEAR ALL DIAGNOSE SETTINGS
diagnose debug flow
filter addr <SOURCE OR DESTINATION IP>
// BY DEFAULT THERE'S NO FILTER, DEFINE OR NARROW DOWN SPECIFIC IP
diagnose flow trace
start <PACKET COUNT>
diagnose debug
enable // TURN ON DEBUG
diagnose debug
disable // TURN OFF DEBUG, SIMILAR TO
CISCO'S undebug all
FG-FW01_PRI #
config vdom // GO TO A VDOM
FW01_PRI
(vdom) # edit internet
current
vf=internet:4
FW01_PRI
(internet) # diagnose debug reset
FW01_PRI
(internet) # diagnose debug flow
filter Trace packet with filter.
filter6 Trace packet with IPv6 filter.
trace Start/stop trace.
show Enable/disable display of trace on
console.
FW01_PRI
(internet) # diagnose debug flow filter
clear Clear filter.
vd Index of virtual domain.
vd-name Name of virtual domain.
proto Protocol number.
addr IP address.
saddr Source IP address.
daddr Destination IP address.
port port
sport Source port.
dport Destination port.
negate Inverse filter.
FW01_PRI
(internet) # diagnose debug flow filter addr
<xxx.xxx.xxx.xxx> Host IP (ip1/from).
FW01_PRI
(internet) # diagnose debug flow filter addr 8.8.8.8
FW01_PRI
(internet) # diagnose debug flow trace
start Start trace.
stop Stop trace.
start6 Start IPv6 trace.
stop6 Stop IPv6 trace.
FW01_PRI
(internet) # diagnose debug flow trace start
<xxx> Repeat number.
FW01_PRI
(internet) # diagnose debug flow trace start 100
FW01_PRI
(internet) # diagnose debug enable
FW01_PRI
(internet) # id=65308 trace_id=5 func=print_pkt_detail line=5868 msg="vd-internet:0 received a packet(proto=1, 172.x.x.5:13->8.8.8.8:2048)
tun_id=0.0.0.0 from LAG1-INSIDE. type=8, code=0, id=13, seq=0."
id=65308 trace_id=5
func=init_ip_session_common line=6049 msg="allocate a new
session-0026c30d, tun_id=0.0.0.0"
id=65308 trace_id=5
func=vf_ip_route_input_common line=2605 msg="find a route: flag=04000000
gw-202.x.x.1 via wan"
id=65308 trace_id=5
func=__iprope_tree_check line=524 msg="gnum-100004, use int hash, slot=53,
len=3"
id=65308 trace_id=5
func=get_new_addr line=1228 msg="find SNAT:
IP-202.x.x.30(from IPPOOL), port-60429"
id=65308 trace_id=5
func=fw_forward_handler line=922 msg="Allowed
by Policy-2: SNAT"
id=65308 trace_id=5
func=ids_receive line=428 msg="send to ips"
id=65308 trace_id=5
func=__ip_session_run_tuple line=3485 msg="SNAT
172.x.x.5->202.x.x.30:60429"
id=65308 trace_id=6
func=print_pkt_detail line=5868 msg="vd-internet:0 received a
packet(proto=1, 8.8.8.8:60429->202.x.x.30:0) tun_id=0.0.0.0 from wan.
type=0, code=0, id=60429, seq=0."
id=65308 trace_id=6
func=resolve_ip_tuple_fast line=5956 msg="Find an existing session,
id-0026c30d, reply direction"
id=65308 trace_id=6
func=__ip_session_run_tuple line=3498 msg="DNAT
202.x.x.30:0->172.x.x.5:13"
id=65308 trace_id=6
func=vf_ip_route_input_common line=2605 msg="find a route: flag=00000000
gw-172.x.x.5 via LAG1-INSIDE"
id=65308 trace_id=6
func=npu_handle_session44 line=1199 msg="Trying to offloading session from
wan to LAG1-INSIDE, skb.npu_flag=00000000 ses.state=00010204
ses.npu_state=0x04001008"
id=65308 trace_id=6
func=fw_forward_dirty_handler line=414 msg="state=00010204,
state2=00000001, npu_state=04001008"
id=65308 trace_id=7
func=print_pkt_detail line=5868 msg="vd-internet:0 received a
packet(proto=1, 172.x.x.5:13->8.8.8.8:2048) tun_id=0.0.0.0 from
LAG1-INSIDE. type=8, code=0, id=13, seq=1."
id=65308 trace_id=7
func=resolve_ip_tuple_fast line=5956 msg="Find an existing session,
id-0026c30d, original direction"
id=65308 trace_id=7
func=npu_handle_session44 line=1199 msg="Trying to offloading session from
LAG1-INSIDE to wan, skb.npu_flag=00000400 ses.state=00010204
ses.npu_state=0x04001008"
id=65308 trace_id=7
func=ip_session_install_npu_session line=358 msg="npu session installation
succeeded"
id=65308 trace_id=7
func=fw_forward_dirty_handler line=414 msg="state=00010204,
state2=00000001, npu_state=04001408"
id=65308 trace_id=7
func=__ip_session_run_tuple line=3485 msg="SNAT
172.x.x.5->202.x.x.30:60429"
id=65308 trace_id=8
func=print_pkt_detail line=5868 msg="vd-internet:0 received a
packet(proto=1, 8.8.8.8:60429->202.x.x.30:0) tun_id=0.0.0.0 from wan.
type=0, code=0, id=60429, seq=1."
id=65308 trace_id=8
func=resolve_ip_tuple_fast line=5956 msg="Find an existing session,
id-0026c30d, reply direction"
id=65308 trace_id=8
func=__ip_session_run_tuple line=3498 msg="DNAT
202.x.x.30:0->172.x.x.5:13"
id=65308 trace_id=8
func=npu_handle_session44 line=1199 msg="Trying to offloading session from
wan to LAG1-INSIDE, skb.npu_flag=00000400 ses.state=00010204
ses.npu_state=0x04001408"
id=65308 trace_id=8
func=ip_session_install_npu_session line=358 msg="npu session installation
succeeded"
id=65308 trace_id=8
func=fw_forward_dirty_handler line=414 msg="state=00010204,
state2=00000001, npu_state=04001c08"
FW01_PRI
(internet) # diagnose debug disable
You can use the Policy lookup tool (with magnifying glass
icon) under Firewall Policy.
Select
Incoming Interface: LAG1-INSIDE > select IP Version (IPv4 by default) >
select Protocol: TCP (default) > type Source: 172.x.x.5 > type
Destination: 8.8.8.8 > type Destination Port: 8 (ICMP request) > click
Search.
The
matching Firewall Policy will be selected/highlighted in red.