Navigation & Grundbefehle
FortiOS CLI kennt zwei Ebenen: die globale Ebene und den Konfigurations-Kontext. Mit config betritt man einen Kontext, mit end verlässt man ihn und wendet Änderungen an. next wechselt zum nächsten Objekt innerhalb eines Kontexts.
# Konfiguration anzeigen show full-configuration show firewall policy show system interface # In Kontext wechseln config system interface config firewall policy # Objekt bearbeiten edit "wan" # Interface nach Name edit 1 # Policy nach ID edit 0 # Neues Objekt anlegen # Werte setzen set ip 192.168.1.1 255.255.255.0 set allowaccess ping https ssh # Werte löschen unset allowaccess # Objekt abschließen next # Kontext verlassen + anwenden end # Einzelnes Objekt löschen config firewall policy delete 5 end
| Command | Beschreibung |
|---|---|
| get system status | FortiOS-Version, Hostname, Seriennummer, Uptime |
| get system performance status | CPU, RAM, Sessions — Live-Auslastung |
| show full-configuration | Gesamte Konfiguration ausgeben |
| show | grep -f wan | Konfiguration nach Begriff filtern |
| execute backup config tftp DATEI IP | Konfiguration per TFTP sichern |
| execute restore config tftp DATEI IP | Konfiguration per TFTP wiederherstellen |
| execute factoryreset | Werkseinstellungen (Vorsicht!) |
Interfaces konfigurieren
config system interface edit "wan" set mode dhcp # oder: static, pppoe set allowaccess ping https set role wan next edit "lan" set ip 192.168.1.99 255.255.255.0 set allowaccess ping https ssh set role lan next end # VLAN-Subinterface config system interface edit "lan.10" set vdom root set interface "lan" set vlanid 10 set ip 192.168.10.1 255.255.255.0 set allowaccess ping next end
| Command | Beschreibung |
|---|---|
| get system interface physical | Physische Interfaces mit Status + IP |
| get system interface | Alle Interfaces inkl. VLANs |
| diagnose ip address list | IP-Adressen aller Interfaces |
| diagnose hardware deviceinfo nic wan | Physische NIC-Details (Speed, Duplex, Fehler) |
Statisches Routing
config router static edit 1 set gateway 192.168.68.1 set device "wan" next edit 2 set dst 10.10.0.0 255.255.0.0 set gateway 192.168.1.2 set device "lan" next end
| Command | Beschreibung |
|---|---|
| get router info routing-table all | Komplette Routing-Tabelle |
| get router info routing-table static | Nur statische Routen |
| get router info routing-table connected | Direkt verbundene Netze |
| diagnose ip route list | Kernel-Routing-Tabelle (FIB) |
| execute ping-options source wan | Ping-Quell-Interface setzen |
| execute ping 8.8.8.8 | Ping (nach ping-options) |
| execute traceroute 8.8.8.8 | Traceroute |
Policies anlegen & verwalten
Policies werden in Reihenfolge abgearbeitet — erste Match gewinnt. Policy-ID 0 beim edit legt eine neue Policy an und vergibt automatisch die nächste freie ID.
config firewall policy edit 0 set name "LAN-to-WAN" set srcintf "lan" set dstintf "wan" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "ALL" set nat enable set logtraffic all next end # Policy für VIP (eingehend) — NAT aus! config firewall policy edit 0 set name "HTTPS-to-Nginx" set srcintf "wan" set dstintf "lan" set srcaddr "all" set dstaddr "VIP-HTTPS" # VIP-Objekt set action accept set service "HTTPS" set nat disable # ← wichtig bei VIPs! next end
| Command | Beschreibung |
|---|---|
| show firewall policy | Alle Policies |
| diagnose firewall iprope show 100004 0 | Policy-Hitcount anzeigen |
| diagnose netlink brctl name host lan | Bridge-Einträge (Layer 2) |
Policies werden von oben nach unten abgearbeitet — die erste passende Policy gewinnt.
Spezifische Policies müssen vor allgemeinen stehen.
Reihenfolge ändern: config firewall policy →
move 5 before 3 → end.
Virtual IPs & Port-Forwarding
config firewall vip edit "VIP-HTTPS" set extip 192.168.68.81 # WAN-IP der FortiGate set extintf "wan" # ← NICHT "wan1" beim 30E! set portforward enable set protocol tcp set extport 443 set mappedip 192.168.1.71 # Ziel-IP intern set mappedport 443 next end # IP-Range VIP (ohne Port-Forwarding) config firewall vip edit "VIP-Range" set extip 192.168.68.81 set extintf "wan" set mappedip "192.168.1.71-192.168.1.71" next end # Adressobjekt anlegen config firewall address edit "Server1" set subnet 192.168.1.71 255.255.255.255 next end # Adressgruppe config firewall addrgrp edit "Server-Gruppe" set member "Server1" "Server2" next end
| Command | Beschreibung |
|---|---|
| show firewall vip | Alle VIPs anzeigen |
| show firewall address | Alle Adressobjekte |
| show firewall addrgrp | Adressgruppen |
| show firewall service custom | Eigene Service-Objekte |
DHCP-Server & Reservierungen
config system dhcp server edit 1 set interface "lan" set default-gateway 192.168.1.99 set netmask 255.255.255.0 set dns-server1 192.168.1.99 set dns-server2 9.9.9.9 config ip-range edit 1 set start-ip 192.168.1.10 set end-ip 192.168.1.200 next end config reserved-address edit 1 set ip 192.168.1.71 set mac aa:bb:cc:dd:ee:01 set description "Server1" next end next end
| Command | Beschreibung |
|---|---|
| get system dhcp lease list | Aktive DHCP-Leases mit MAC + IP |
| execute dhcp lease-clear all | Alle Leases löschen (Vorsicht!) |
IPsec & SSL-VPN
# SSL-VPN Settings config vpn ssl settings set servercert "self-sign" set tunnel-ip-pools "SSLVPN_TUNNEL_ADDR1" set port 443 set source-interface "wan" set source-address "all" set default-portal "tunnel-access" end # SSL-VPN Firewall Policy config firewall policy edit 0 set name "SSL-VPN-Access" set srcintf "ssl.root" set dstintf "lan" set srcaddr "all" set dstaddr "all" set action accept set service "ALL" next end
| Command | Beschreibung |
|---|---|
| get vpn ssl monitor | Aktive SSL-VPN Sessions |
| get vpn ipsec tunnel summary | IPsec-Tunnel Status |
| diagnose vpn tunnel list | IPsec-Tunnel Detail |
| execute vpn sslvpn del-tunnel all | Alle SSL-VPN Sessions trennen |
Status & Diagnose-Befehle
| Command | Beschreibung |
|---|---|
| diagnose sys session list | Aktive Sessions (Firewall State Table) |
| diagnose sys session filter dport 443 | Sessions nach Ziel-Port filtern |
| diagnose sys session filter src 192.168.1.71 | Sessions nach Quell-IP filtern |
| diagnose sys session clear | Session-Table leeren (Vorsicht!) |
| diagnose hardware sysinfo memory | RAM-Auslastung |
| diagnose hardware sysinfo cpu | CPU-Auslastung |
| get system arp | ARP-Tabelle |
| diagnose netlink brctl host fdb | MAC-Adresstabelle |
| execute log display | Logs anzeigen (letzte Einträge) |
| execute log filter category 1 | Log-Filter setzen (1 = Traffic) |
Flow Trace — Traffic debuggen
Der Flow Trace ist das mächtigste Debugging-Tool auf der FortiGate — er zeigt in Echtzeit wie die FortiGate einzelne Pakete verarbeitet: welche Policy greift, ob NAT angewendet wird, warum ein Paket geblockt wird.
# 1. Filter setzen (Quell-IP des Clients) diagnose debug flow filter addr 192.168.68.100 # Optional: nach Ziel-Port filtern diagnose debug flow filter dport 443 # 2. Trace starten (20 Pakete) diagnose debug flow trace start 20 # 3. Debug aktivieren diagnose debug enable # 4. Traffic auslösen (z.B. Browser aufrufen) # Ausgabe erscheint in der CLI # 5. Debug stoppen diagnose debug disable diagnose debug reset diagnose debug flow filter clear
iprope_in_check() check failed → Policy fehlt oder blockiert
Allowed by Policy-X → Policy X greift
DNAT → VIP-Übersetzung wurde angewendet
SNAT → Source-NAT wurde angewendet
reverse path check fail → Routing-Problem (kein Rückweg)
# DHCP debuggen diagnose debug application dhcpd -1 diagnose debug enable # DNS debuggen diagnose debug application dnsproxy -1 diagnose debug enable # SSL-VPN debuggen diagnose debug application sslvpn -1 diagnose debug enable # Immer aufräumen: diagnose debug disable diagnose debug reset
Was schiefgehen kann
wan, nicht wan1. Im VIP-Objekt muss set extintf "wan" stehen. Mit dem falschen Interface-Namen wird die VIP still ignoriert. Prüfen: show firewall vip und extintf checken.show firewall policy — oder Flow Trace aktivieren um zu sehen welche Policy tatsächlich greift.set nat disable gesetzt sein. Mit aktiviertem NAT übersetzt die FortiGate die Quell-IP auf ihre eigene LAN-IP — der Server sieht nicht den echten Client.diagnose debug flow filter clear löschen und neu setzen.end am Schluss eines config-Blocks werden Änderungen nicht gespeichert. Die CLI zeigt kein Warnsignal. Immer mit show prüfen ob die Änderung übernommen wurde.