Fortigate Debugging - Objekt Referenzen
Im zweiten Teil meiner Fortigate Debugging Reihe befassen wir uns damit, wie man über die CLI herausfindet, welche Teile der Konfiguration ein bestimmtes Objekt referenzieren.
Objekte, wie zum Beispiel Adressen oder Interfaces, lassen sich auf der CLI mit Hilfe des delete
Befehls löschen. Damit das Kommando allerdings wie gewünscht funktioniert, müssen
zuvor alle Referenzen gelöscht werden, die auf das entsprechende Element verweisen. Versucht man ein noch referenziertes Objekt zu löschen, bricht der Befehl mit einer Fehlermeldung ab.
Dies ist in folgendem Beispiel zu sehen, in welchem ich versuche, das Addressobjekt all
zu entfernen:
FortiGate-VM64 (VDOM) # config firewall address FortiGate-VM64 (address) # delete all The entry is used by other 2 entries Command fail. Return code -23
Die Meldung gibt an, wie viele Referenzen noch auf das zu löschende Objekt zeigen. Wo genau das Objekt verwendet wird, gibt der Fehler dagegen nicht an. Hierzu ist das separate Kommando
diagnose sys cmdb refcnt show
zu verwenden. Der folgende Block zeigt den Befehl in Aktion. Dabei lasse ich mir alle Referenzen anzeigen, welche auf das Addressobjekt all
verweisen.
FortiGate-VM64 (VDOM) # diagnose sys cmdb refcnt show firewall.address.name all entry used by child table dstaddr:name 'all' of table firewall.policy:policyid '43' entry used by child table dstaddr:name 'all' of table firewall.policy:policyid '44'
Dem Kommando sind zwei Parameter zu übergeben. Der erste Teil ist im Beispiel grün markiert und gibt an, um was für eine Art von Objekt es sich handelt. Der Aufbau dieses Parameters
orientiert sich an der Struktur einer Fortigate Konfiguration. Im Beispiel suche ich alle Verweise auf ein bestimmtes Adressobjekt. Diese werden über die CLI mittels dem
config firewall address
Befehl konfiguriert. Den config
Teil können wir ignorieren, weshalb der Parameter mit firewall.address
beginnt. Den Suffix .name
müssen wir anhängen,
da wir das Objekt anhand seines Namens identifizieren. Dieser Name ist der zweite Parameter und im Beispiel orange eingefärbt.
Auch die Ausgabe des Kommandos ist nach diesem Konzept aufgebaut. firewall.policy
gibt an, dass die Adresse von einer Policy referenziert wird. Diese lassen sich mit dem show firewall policy
Befehl einsehen. Der policyid 43
Part identifiziert mittels der ID die genau Regel, welche das Objekt verwendet.
FortiGate-VM64 (VDOM) # show firewall policy 43
config firewall policy
edit 43
set name "Lena"
set uuid 183c9bf8-7b2c-51eb-f1f1-70cc3adbac2e
set srcintf "any"
# Tatsächlich ist als Destination Adresse "all" gesetzt
set dstintf "any"
set srcaddr "H.192.168.178.1"
set dstaddr "all"
set action accept
set schedule "always"
set service "HTTP" "HTTPS"
set logtraffic all
set comments "Web Traffic erlauben"
next
end
Da das Kommando nicht besonders intuitiv ist, zeige ich nachfolgend ein weiteres Beispiel. In diesem Fall möchte ich herausfinden, welche Referenzen auf das Interface mit dem Namen aggr1
existieren.
Interfaces lassen sich über die CLI mit dem config system interface
Befehl konfigurieren und ich möchte das Objekt erneut über seinen Namen identifizieren. Daraus ergibt sich system.interface.name
als erster Parameter:
FortiGate-VM64 (VDOM) # diagnose sys cmdb refcnt show system.interface.name aggr1 entry used by table system.interface:name 'aggr1.vlan127' entry used by table system.interface:name 'aggr1.vlan409' FortiGate-VM64 (VDOM) # show system interface aggr1.vlan127 config system interface edit "aggr1.vlan127" set vdom "VDOM" set allowaccess ping set description "Server Netzwerk" set snmp-index 127 set interface "aggr1" set vlanid 127 next end
Sobald alle Referenzen aufgelöst sind, sollte sich das gewünschte Objekt normal löschen lassen.
⚠️ Achtung: Anhand der Ausgabe ist es nicht immer direkt ersichtlich, welche Konfiguration genau editiert werden muss, um die Referenz aufzulösen. In solch einem Fall ist es hilfreich,
die gesamte Konfiguration nach dem Namen zu durchsuchen. Diese Suche sollte jedoch immer auf einem vollständigen Konfigurationsbackup durchgeführt werden. Das CLI Kommando
show full-configuration | grep
sollte dagegen explizit vermieden werden. Fortigate Konfigurationen besitzen diverse versteckte Menüs, welche selbst bei einem show full-configuration
nicht
angezeigt werden. Dementsprechend liefert grep in solchen Fällen keine Ergebnisse zurück. In einem Konfigurationsbackup sind dagegen alle Menüs vorhanden.