This is an old revision of the document!
Table of Contents
Fortinet
Système
En sortie d'usine, le compte admin a un mot de passe vide.
# récupérer les informations du système get system status # récupérer la charge du sytème et son uptime get system performance status # affiche les informations des processus les plus consommateurs en CPU/mem # équivalent de : get system performance top diagnose sys top # on peut préciser X et Y qui sont le délais de refresh et le nombre de ligne affiché, par ex : diagnose sys top 1 20 # - première ligne : U — % user CPU, S - % system CPU, I — % CPU idle, T — Total memory in kB, F — free memory in kB # - desc des colonnes : process name, pid, running status, CPU usage, memory usage. (Sleeping, Running, Zombie, < - High priority, N — Low priority) # version plus user-friendly diagnose sys top-summary CPU [| ] 4.5% Mem [||||||||||||||||||||||||| ] 63.0% 2494M/3954M Processes: 20 (running=1 sleeping=99) [..] # et quand un processus plante, prend trop de CPU ou de mémoire, on peut le killer : diagnose sys kill 11 <PID>
Pour redémarrer ou éteindre le système :
execute reboot execute shutdown
Ordre de traitement d'un paquet sur un Fortigate :
Step #1 - Ingress 1. Denial of Service Sensor 2. IP integrity header checking 3. IPsec connection check 4. Destination NAT 5. Routing Step #2 - Stateful inspection engine 1. Session Helpers 2. Management Traffic 3. SSL VPN 4. User Authentication 5. Traffic Shaping 6. Session Tracking 7. Policy lookup Step #3 - Security profiles scanning process 1. Flow-based Inspection Engine 2. IPS 3. Application Control 4. Data Leak Prevention 5. Email Filter 6. Web Filter 7. Anti-virus 8. Proxy-based Inspection Engine 9. VoIP Inspection 10. Data Leak Prevention 11. Email Filter 12. Web Filter 13. Anti-virus 14. ICAP Step #4 - Egress 1. IPsec 2. Source NAT 3. Routing
Hardware
# information sur le matériel
get hardware status
# partitionnement du disque dur (au sens Linux, càd bas niveau) diagnose hardware deviceinfo disk # lister les partitions au sens Forti (gestion des images de fortiOS) diagnose sys flash list # ensuite on peut configurer l'image à charger par défaut au prochain reboot : execute set-next-reboot 1/2 # info sur les CPU (~ /proc/cpuinfo) diagnose hardware sysinfo cpu # ~lspci diagnose hardware pciconfig
Interfaces
# affiche le tableau des compteurs d'interface (bytes, packets, errs, drop, etc...) diagnose netlink device list # affichage des infos "bas niveau" d'une interface (port1 ici) : #(notamment les compteurs d'interface, la MTU, son adresse MAC, etc...) diagnose netlink interface list port1 # pour clearer les compteurs d'interface ("bas niveau", ça ne met pas à jour les compteur de la première commande d'en haut !) : diagnose netlink interface clear port1 # informations détaillées sur un port (en mode global) # équivaut à : get hardware nic <port> diagnose hardware deviceinfo nic <port> # modifier la MTU d'une interface config system interface edit "port1" set mtu-override enable set mtu 9000
Création d'un agrégat
En webUI il suffit de créer une nouvelle interface de type “802.3ad Aggregate”, qui correspond à un agrégat de type LACP en mode active / slow avec une répartition “L4” (hash de l'adresse IP et du port).
Exemple de configuration en CLI avec les ports physiques 13 et 14 :
config system interface edit "ag-extra" set type aggregate set member "port13" "port14" next end # en CLI on a accès aux paramètres avancés suivants : set lacp-mode active | passive | static set lacp-speed slow | fast set algorithm L2 | L3 | L4
attention les paramètres de l'agrégat doivent concorder avec la configuration de l'équipement d'en face !
Accélération hardware (NP)
Certains modèles de Fortigate sont équipés de network processors (NP) qui prennent en charge matériellement certaines fonctionnalités. Cela permet d'alléger la charge CPU et d'accélérer le temps de traitement (pour le chiffrement de tunnels IPSec par exemple).
Pour lister les ports qui sont accélérés :
diagnose npu np1 list # ou "get hardware .."
diagnose npu np2 list
diagnose npu np4 list
diagnose npu np6 port-list
La liste des ports retournés indique les ports pris en charge par le NPx. Les ports de management n'y sont pas.
Il existe donc plusieurs type de NP : le NP4 par exemple, qui est intégré sur certains des modèles “c” (600c, 800c) :
- il gère les sessions (fastpath acceleration)
- au début la session est remontée à la CPU pour rechercher un match avec une policy
- puis le NP4 intercepte le trafic et le gère ce qui décharge la CPU
- le NP4 gère aussi l'accélération IPsec VPN (encryption/decryption)
- le NP4 a une capacité de 10 Gbps ingress et 10 Gbps egress ; passée cette limite les sessions sont envoyées à la CPU
- les NP4lite sont comme les NP4 en 2x moins puissants
voir un comparatif succinct des performances des différentes générations de NPx.
Pour désactiver l'accélération matérielle sur un flux, il faut créer une règle dans la politique de sécurité et saisir la commande suivante :
config firewall policy
edit X
set auto-asic-offload disable
Bypass ports
Certains modèles de Fortigate (les 800C par exemple) possèdent 2 paires de ports ayant une fonction de accelerated bypass. Celle-ci permet, lorsque l'unité fonctionne en mode transparent, de laisser passer le trafic entre les 2 ports si l'unité est en manque d'énergie ou pendant un reboot (fail-open). Aucun traitement ne sera réalisé par le Fortigate pendant le reboot, mais cela évite de couper les flux.
Dans le cas du 800C il s'agit des ports wan1 ↔ port1
et wan2 ↔ port2
(chaque paire fonctionne individuellement) ; si la fonction est activé la diode “BYPS LED” (ou fail-open) sera allumée en rouge.
Pour activer cette fonction (elle ne l'est pas par défaut) :
config system bypass set bypass-watchdog enable set poweroff-bypass enable end
Utilisateurs
# lister les utilisateurs connectés
get system info admin status
Interroger (pour test) le serveur LDAP :
diagnose test auth ldap <server_name> <username> <password>
Changer le mot de passe du compte admin :
config global config system admin edit admin set password <new-password> end
Modifier globalement les paramètres de login des utilisateurs (peut se configurer en global via config system global
pour l'administration ou par VDOM via config user setting
) :
- Dans “config system global”
admin-lockout-duration Lockout duration (sec) for firewall administration. admin-lockout-threshold Lockout threshold for firewall administration. admin-login-max Maximum number admin users logged in at one time (1 - 100). admin-ssh-grace-time Admin access login grace time (10 - 3600 sec). admintimeout Idle time-out for firewall administration.
- Dans “config user setting”
auth-type Allowed firewall policy authentication methods (http | https | ftp | telnet) auth-cert HTTPS server certificate for policy authentication. auth-timeout Firewall user authentication time-out. auth-timeout-type Authenticated policy expiration behavior (idle-timeout | hard-timeout | new-session) # blacklistage d'IP source du client auth-blackout-time Authentication blackout time (0 - 3600 s). auth-invalid-max Number of invalid auth tries allowed before blackout. # désactivation temporaire d'un compte utilisateur auth-lockout-threshold Maximum number of failed login attempts before lockout (1 - 10). auth-lockout-duration Lockout period in seconds after too many login failures.
Configuration
Pour lister les lignes de conf on utilise show
; pour afficher l'état du forti on utilise get
ou même diagnose
.
Modificateur d'affichage
Par défaut l'affichage se fait page par page, et il faut appuyer sur entrée
pour afficher la ligne suivante, et espace
pour la page suivante. Pour afficher l'intégralité du résultat dans le terminal :
# équivalent d'un "terminal length 0" chez Cisco config system console set output standard end
# afficher la configuration avec toutes les valeurs (mêmes celles par défaut) show full-configuration # afficher toutes les lignes de configuration contenant le motif show | grep 10.0.1.51 set ip 10.0.1.51 255.255.255.0 # afficher les lignes et leur contexte show | grep -f 10.0.1.51 config system interface edit "port3" set vdom "root" set ip 10.0.1.51 255.255.255.0 <--- set allowaccess ping https ssh snmp set vlanforward enable set type physical set description "vlan 1" set alias "LAN clampins" set snmp-index 3 next end
Utilisation du grep
Les différentes options possibles du grep à la sauce fortiOS v5 sont :
Usage: grep [-invfcABC] PATTERN Options: -i Ignore case distinctions -n Print line number with output lines -v Select non-matching lines -f Print fortinet config context -c Only print count of matching lines -A Print NUM lines of trailing context -B Print NUM lines of leading context -C Print NUM lines of output context
On peut utiliser une expression régulière en encadrant le motif d'apostrophes (ou de guillemets) :
# on recherche dans la table ARP les IPs se terminant par .201 ou .202 # NB : il faut protéger le caractère "|" diagnose ip arp list | grep "\.201 \|\.202 " index=9 ifname=port3 10.0.2.201 00:01:02:03:04:05 state=00000002 use=0 confirm=0 update=14927 ref=6 index=9 ifname=port3 10.0.8.202 00:01:02:03:04:06 state=00000004 use=22317 confirm=22317 update=8015 ref=1
Config de base
Le système :
config system global set hostname mon_forti config system admin edit admin set password <new-admin-password> end end
Le réseau :
# attribution d'un IP sur l'interface mgmt1 config system interface edit "mgmt1" set ip 10.104.42.248 255.255.255.128 set allowaccess ping https ssh # protocoles permis pour administrer cette interface set type physical end # route par défaut config router static edit 1 set device "mgmt1" set gateway 10.104.42.254 next end
Sauvegarde
Il existe 3 modes de sauvegarde la conf :
automatic
: (celui par défaut) la configuration est sauvée à chaque fois qu'on saisit mot-clé “end” à la fin d'une sectionmanual
si on veut forcer la sauvegarde manuellerevert
on peut programmer un rollback (reboot + restauration de la conf) automatique du firewall au bout d'un timeout défini ; c'est utile si la modification risque de nous faire perdre la main et que le firewall est sur un site distant. Exemple de mise en place
config global config system global set cfg-save revert # | automatic | manual set cfg-revert-timeout 300 # on définit le timeout pour le rollback end
il faut bien penser à désactiver le mode revert après la maintenance sinon il redémarrera à chaque modif (et ne la prendra pas en compte) !
Routage
Afficher la table de routage courante :
get router info routing-table details # ou filtrer sur un adresse IP : get router info routing-table details 10.102.38.12 Routing entry for 10.102.38.0/23 Known via "bgp", distance 20, metric 0, best Last update 02w6d19h ago * 10.161.201.43 (recursive via 10.161.201.52) # analyse bas niveau de la table de routage # équivalent à : get router info kernel # les "scope=0" sont les routes statiques configurées diagnose ip route list tab=254 vf=1 scope=0 type=1 proto=11 prio=0 0.0.0.0/0.0.0.0/0->10.105.191.225/32 pref=0.0.0.0 gwy=10.161.201.52 dev=36(HUB-LAN) tab=254 vf=1 scope=0 type=1 proto=11 prio=0 0.0.0.0/0.0.0.0/0->10.105.191.226/32 pref=0.0.0.0 gwy=10.161.201.52 dev=36(HUB-LAN) [..] # afficher la table de correspondance IP <-> adresse MAC <-> interface get system arp # la même, en plus détaillée : diagnose ip arp list # afficher les règle de policy-based routing ("policy routes") diagnose firewall proute list
Vider le cache de routage :
config router policy purge
Static
Le routage statique possède une distance administrative par d“faut de 10, donc inférieure aux protocoles de routages dynamiques (ce qui veux dite qu'il est prioritaire !). Lorsqu'on déclare une route statique dans un Fortigate, on peut modifier la distance et/ou la priorité d'une route que l'on déclare.
La différence entre la distance (administrative) et la priorité d'une route est la suivante :
- le Fortigate n'insère dans sa table de routage que la route dont la distance est la plus petite ; c'est la métrique “prioritaire” ;
- lorsque 2 routes ont 2 distances identiques, alors :
- elles sont toutes 2 ajoutées à la table de routage mais seule celle dont la priorité est la plus petite sera utilisée pour router les paquets (donc en sortie du forti). En revanche l'autre acceptera les paquets entrants, et ne provoquera donc pas d'erreur de RPF (Reverse Path Forwarding c'est-à-dire routage asymétrique ; NB : pour désactiver le RPF (non conseillé) il suffit de saisir la commande
set asymroute enable
en config system) - si elles ont la même priorité, alors on est en situation d'ECMP (Equal Cost Multi-Path) ce qui veut dire répartition de charge sur les 2 next-hop (un paquet de chaque côté, en Round-Robin)
Indépendamment de cela, il faut noter que :
- les policy routes sont prises en compte en premier lieu, quelles que soient les autres paramètres
- les préfixes (la longueur des masques réseau des routes) sont ensuite pris en compte, AVANT les métriques
Pour résumer :
the “priority” parameter is used in situation where a static route needs to be present in order to accept incoming traffic and pass the RPF check (anti-spoofing).
source : Routing behavior depending on distance and priority for static routes, and Policy Based Routes chez kb.fortinet.com
OSPF
Exemple de configuration OSPF (à c/c avec des pincettes) :
config router ospf config area edit 0.0.0.0 next end config network edit 1 set prefix 172.16.15.0 255.255.255.252 next end config ospf-interface edit "OSPF_SRV" set authentication md5 set cost 10 set dead-interval 3 set hello-interval 1 set interface "SRV-iVDOM" set ip 172.16.15.2 set md5-key 1 "totopwet" set priority 0 next end config redistribute "connected" end config redistribute "static" set status enable end config redistribute "rip" end config redistribute "bgp" end config redistribute "isis" end set router-id 1.0.0.15 end
Diag :
get router info ospf neighbor get router ospf show router ospf # clear route exec router clear ospf [process x]
# pour vider l'état du routage
config router policy
purge
end
PBR
Policy-Based Routing, PBR ou router policy : fonctionnalit qui permet de bypasser la table de routage en définissant des règles d'exception (suivant l'adresse source, l'interface source, le protocole ou d'autres critères).
Dans la mesure ou ce sont des verrues réseau, l'utilisation de PBR est à proscrire au maximum.
NAT
La translation d'adresse (NAT) se configure dans une règle de la politique de sécurité (cocher “Enable NAT”). Plusieurs types de NAT sont possibles :
- Static NAT : on faire correspondre à une IP interne une IP externe virtuelle (une VIP). C'est utile pour masquer l'IP réelle d'un serveur accessible sur Internet par exemple. On créer un objet “Virtual IP” (dans le menu “Policy & Objects > Objects > Virtual IPs”), que l'on doit juste renseigner en adresse destination dans une règle de sécurité entrante (internet vers réseau local).
Configuration d'un objet VIP : external IP = l'IP publique de remplacement (virtuelle) mapped IP = l'IP réelle du serveur (inconnue des clients sur le réseau externe)
C'est du NAT 1-pour-1 c'est-à-dire que les ports ne sont pas translatés et que même les flux sortant initiés par le serveur seront translatés avec la VIP.
- Dynamic NAT : on attribue un pool d'adresses IPs externes (“Policy & Objects > Objects > IP Pool”), la première qui est libre sera utilisée pour translater la ou les IPs internes.
- overloading : forme de NAT dynamique qui consiste à translater les ports pour mapper plusieurs IPs internes sur une seule IP virtuelle externe. On peut soit utiliser un “IP Pool” d'une seule IP (on fera alors du PAT (Port Adresse Translation), translation de ports clients), soit utiliser l'IP de l'interface de sortie du firewall (masquerading, c'est ce qui est utilisé sur les box des FAIs). Cependant cette dernière méthode n'est pas recommandée car elle mélange les flux du firewall et des clients NATtés.
- overlapping : lorsque 2 réseaux ayant le même adressage doivent se parler (par exemple dans la cas d'un VPN entre 2 entreprises). Dans ce cas on fait correspondre aux 2 réseaux une nouvelle plage d'adresses qui ne se recoupe plus.
Configuration d'un objet IP Pool : external IP range = l'IP (ou les IPs) de substitution
Firewall
# afficher la politique de sécurité show firewall policy # liste concise des sessions (1/ligne) - équivalent d'un netstat get system session list # To examine the firewall session list in the CLI diagnose sys session filter src 10.0.0.2 diagnose sys session list # en plus verbeux : diagnose sys session full-stat diagnose sys session stat # To clear all sessions diagnose sys session clear # To clear all sessions corresponding to a filter diagnose sys session filter dst 192.168.2.10 diagnose sys session filter dport 80 diagnose sys session clear # -> va clearer uniquement les sessions matchant le filtre ! # stats sur le filtrage de paquets get sys performance firewall statistics
Identity-based policy
Depuis la version 5.2 on peut créer des règles de sécurité qui, si elles matchent un flux, agissent comme un portail captif et invitent l'utilisateur à s'authentifier.
Pour cela il faut d'abord définir un groupe d'utilisateurs (dans User & Device > User > User Groups), puis l'ajouter en “Source User(s)” dans une une règle classique de la politique de sécurité.
Les pré-requis pour cela :
- il faut qu'au moins un des services suivants soit inclus dans les services permis de la règle : HTTP, HTTPs, TELNET ou FTP.
- Pour que le client génère un flux que le firewall redirige vers son portail d'authentification, celui-ci doit résoudre les noms donc il doit avoir un DNS qui répond
- le portail captif (HTTP) est hébergé sur le port tcp/1000 du firewall donc, en cas de firewalls chainés, il faut que ce service ne soit pas bloqué
- si une règle plus large existe, même en-dessous de la règle d'identité, celle-ci matchera en priorité donc aucune authentification ne sera réalisée (constatation empirique…).
Une fois authentifié, un utilisateur peut “utiliser” les règles comprenant son groupe (même sur d'autres interfaces source/dest) sans resaisir son login/mdp.
On peut personnaliser la mire d'authentification dans le menu “System / Config / Replacement Messages”.
Dans la règle de sécurité on peut :
- rediriger l'authentification vers une page spécifique avec la directive
set auth-redirect-addr <URL>
- préciser le certificat TLS utilisé avec la directive
set auth-cert <NOM_CERT>
(il faudra au préalable l'ajouter dans la liste des certificats disponibles sur le Fortigate, ce qui se fait dans “System / Certificates”
doc utile : Identity-based policies sur help.fortinet.com
Session-helper
Ce terme défini la fonction d'un ALG (Application-Level Gateway), un firewall capable d'ouvrir des connexions dynamiquement en interprétant des protocoles de niveau 7 OSI (applications). C'est nécessaire pour certains protocoles comme le H323 par exemple, qui ouvre une connexion tcp/1720 classique, puis initie une connexion data/VoIP sur un port non connu à l'avance, dynamiquement négocié entre le client et le serveur.
On peut lister la configuration du Fortigate uniquement en CLI, en mode global :
config global config system session-helper show # exemple pour le H323 # indique que ce service utilise initialement une connexion # sur le port 1720 en TCP (proto 6 ; 17 si UDP) edit 2 set name h323 set protocol 6 set port 1720 next
Seuls certains protocoles sont interprétés par le Fortigate, la liste est consultable en créant une nouvelle entrée :
config system session-helper edit 0 set name ? ftp ftp tftp tftp ras ras h323 h323 h245O H245 call-out. h245I H245 call-in. tns tns mms mms sip sip pptp pptp rtsp rtsp dns-udp dns-udp dns-tcp dns-tcp pmap pmap rsh rsh dcerpc dcerpc mgcp mgcp
VDOM
Les VDOM sont aux Fortigate ce que les VR sont aux Cisco : des équipements virtuels dotés de tables de routage étanches les unes des autres, permettant de créer virtuellement plusieurs firewalls. Pour activer le support des VDOMs (10 max avec un licence de base), c'est soit dans le dashboard en webUI soit en CLI :
config system global set vdom-admin enable end
NB : attention on est déconnecté après l'activation.
Une fois le support des VDOMs activés, celui par défaut sera le root et il faudra préciser à chaque fois sur lequel on se connecte (ici le root) ou si on veut se connecter en global (pour les commandes… globales : management, HA, etc) :
config global
# ou
config vdom
edit root
end
Pour créer un nouveau VDOM il suffit de faire edit <nom_du_nouveau_vdom>
.
On peut relier 2 VDOMs via un équipement externe ou via des vdom-links, des interconnexion interne au Fortigate (qui transitent par le “fond de panier” du châssis). On les créer comme on créer une interface classique, mais pour les supprimer on doit passer par la CLI :
config global config system vdom-link delete <nom du vlink> end
Les vdom-link npuX-vlink créés automatiquement quand on active la prise en charge des VDOMs sont offloadés (accélérés matériellement). Le nombre de liens créé est fonction du nombre de Network Processor (NPU) ; par exemple sur les 800c il y en a un (NP4). On ne peut pas les supprimer, même si on ne s'en sert pas.
Cluster HA
Configuration
Exemple de configuration (CLI) :
config system ha set group-name "ha-pri" set mode a-p set hbdev "port21" 50 "port22" 50 set session-pickup enable set ha-mgmt-status enable set ha-mgmt-interface "mgmt2" set ha-mgmt-interface-gateway 10.0.7.254 set override disable set priority 150 set monitor "port23" "port24" end
Normalement l'IP de management du master devient l'IP virtuelle d'admin du cluster et le backup n'est pas administrable ; pour se connecter sur le backup il fait se connecter au master d'abord, puis saisir :
# se connecter sur le membre d'id=1 du HA à partir du master execute ha manage 1
On peut forcer la création d'une seconde interface de management pour accéder directement au backup :
config system ha set ha-mgmt-status enable set ha-mgmt-interface "mgmt2" set ha-mgmt-interface-gateway 10.0.7.253 end
La mgmt2 ainsi créée permet de joindre le backup en SSH mais pas en SNMP, c'est une limitation de la bidouille. Pour contourner cette limitation, on peut :
- soit utiliser la communauté suffixée par ”-numéro_de_série_du_membre“
- soit (en CLI) activer le “ha-direct” pour chaque host en permit
config global config system snmp community edit 1 config hosts edit 1 set ip 10.0.7.87 255.255.255.255 set ha-direct enable end
Vérifications
# activer/désactiver le HA execute ha synchro stop execute ha synchro start # reset l'âge des membres d'un cluster (pour palier certains vieux bug..) diagnose sys ha reset-uptime
Diagnostique :
# état du HA get system ha status # informations détaillées get system ha # cmdes avancées (tshoot) diagnose sys ha status diagnose sys ha dump 1 diagnose sys ha dump 2 diagnose sys ha dump 3 diagnose sys ha showcsum diagnose sys ha showcsum 1 diagnose sys ha showcsum 2 diagnose sys ha showcsum 3
Log / Syslog
En webUI, la configuration se réalise dans “Log & Report > Log Config > Log Settings” (en Global).
Pour consulter les logs en CLI :
# configuration par défaut en v5.2.3 : config log setting set resolve-ip disable set resolve-port enable set log-user-in-upper disable set fwpolicy-implicit-log disable # règle balais implicite de la policy ("deny de fin") set fwpolicy6-implicit-log disable set log-invalid-packet disable set local-in-allow enable set local-in-deny-unicast enable set local-in-deny-broadcast enable # à désactiver pour éviter le flood de log de broadcast (netbios, etc) set local-out enable # trafic initié par le firewall set daemon-log disable set neighbor-event disable set brief-traffic-format disable set user-anonymize disable end # filtrer sur une certaine catégorie execute log filter category event # on peut aussi filtrer sur le contenu du message de log : execute log filter field msg Heartbeat # défini le nb de ligne affichées execute log filter view-lines 50 # en fonction de la date execute log filter field date 2014-05-06 2014-05-07 # voir les filtres execute log filter dump # afficher les logs : execute log display # afficher les buffers de log get log memory global-setting # afficher l'utilisation de l'espace disque par les logs diagnose sys logdisk usage # limiter le nb de log par seconde pour éviter les surcharges CPU set security log event-rate 1000
Configurer l'export syslog vers un serveur distant : en webUI on ne peut configurer qu'un seul serveur distant, en CLI on peut en saisir jusqu'à 3
# configurer un serveur syslog distant : config log syslogd setting set status enable set csv {disable | enable} set facility <facility_name> set port <port_integer> set reliable {disable | enable} set server <ip_address> end config log syslogd2 setting <blabla> end # filtrer les logs à envoyer : config log syslogd filter set traffic {enable | disable} set web {enable | disable} set url-filter {enable | disable} set severity notification end # pour désactiver l'envoi de certains logs vers le (r)syslog : config log memory filter set extended-traffic-log disable end config log fortianalyzer filter set extended-traffic-log disable end config log disk filter set extended-traffic-log disable end
Envoyer un message de log pour tester :
# générer des messages de log pour test : diagnose log test
Afficher les logs d'erreur de configuration (lors de l'import d'un fichier par ex.) :
diagnose debug config-error-log read
Services réseau
DHCP
Le DHCP server se définit depuis la version 5 dans une interface en GUI et ainsi en CLI :
config system dhcp server edit 1 set default-gateway 10.204.12.1 set netmask 255.255.254.0 set interface "paie" config ip-range edit 1 set start-ip 10.204.12.2 set end-ip 10.204.13.253 next end set timezone-option default set dns-server1 10.204.0.4 set dns-server2 10.204.0.3 next # lister les attributions d'adresses execute dhcp lease-list # vider les attributions d'adresses execute dhcp lease-clear <@ IP | all>
Services sécurité
Antivirus
Via la GUI on peut vérifier son état dans : “System > Config > Fortiguard > AntiVirus and IPS Options”.
# forcer l'update de la base
execute update-now
L'antivirus est géré par le processus scanunitd ; on peut voir sa consommation avec un diag sys top
.
Pour aller plus loin :
- (regarder les logs système)
- regarder les logs de sécurité Antivirus (Log & Report > Security Log > AntiVirus)
- lancer un debug en CLI :
# pour afficher les erreurs uniquement # "-1" est plus verbeux, mais à lancer avec parcimonie pour ne pas saturer le Forti diagnose debug application scanunit 4 diagnose debug enable diagnose debug disable
IPS
diagnose test app ipsmonitor <#> # avec # = 1: Display IPS engine information 2: Toggle IPS engine enable/disable status 3: Display restart log 4: Clear restart log 5: Toggle bypass status 97: Start all IPS engines 98: Stop all IPS engines 99: Restart all IPS engines and monitor
Diagnostique et debug
# afficher les logs de crash diagnose debug crashlog read # crashinfo à envoyer au support :) diagnose debug crashlog get # ~get tech : diagnostique complet à envoyer au support aussi diagnose debug report
ping et cie
Permet de lancer des commandes de diagnostique telles le ping, traceroute, etc…
execute ping 10.10.10.10 execute ping6 | traceroute | tracert6 # pour lancer un PING étendu (bit df, taille, adresse source, etc...) execute ping-options view-settings
Ces commandes sont lancées depuis le VDOM courant et avec l'IP de management ou celle de l'interface de sortie, selon le routage. On peut influer sur ces paramètres :
# lancer un PING depuis le VDOM EXTRA (si votre login dispose des droits de management sur ce VDOM) : # sélectionner le VDOM EXTRA execute enter EXTRA current vdom=EXTRA:1 # puis lancer le PING ping 8.8.8.8 # modifier l'IP source du Fortigate pour lancer le PING : execute ping-options source 10.0.0.1 execute ping 8.8.8.8
debug flow
Pour débugguer un flux :
diagnose debug info diagnose debug enable diagnose debug console timestamp en diagnose debug cli 0 diagnose debug flow show console enable # filtrer sur une adresse (source, dest) diagnose debug flow filter saddr 10.104.219.3 diagnose debug flow filter daddr 10.212.179.5 # démarrer la prise de trace # on peut la limiter aux x premiers paquet en ajoutant x à la fin diagnose debug flow trace start # à la fin de la prise de trace, pas de ctrl+C sous peine d'être déconnecté ! # pour stopper la prise de trace diagnose debug flow filter clear diagnose debug flow trace stop diagnose debug disable # bonus diagnose debug flow show function-name enable
Messages d'erreur courants
Denied by forward policy check
- le flux ne matche aucune règle donc droppé par la règle balais (rule ID=0)
- le flux matche une règle DENY spécifique (rule ID=x)
- le flux matche une règle PERMIT MAIS disclaimer est activé (= l'utilisateur doit accepter le disclaimer affiché par le FW pour passer)
iprope_in_check() check failed, drop
- le protocole d'accès n'est pas permis sur le port de mgmt (PING, SSH, HTTPS)
- l'IP src ne fait pas partie des “trusted hosts” (dans System > Admin > Administrators)
- quand on {PING, ssh, etc} une itf(2) du FW en arrivant par une autre itf(1) ET qu'il n'existe aucune règle de sécurité depuis itf1 vers itf2 (NB : l'interface “any” ne compte pas !)
ex : PING WAN2 quand on arrive par itf DMZ et qu'il n'y a pas de politique entre DMZ → WAN2
diagnose firewall iprope flush # permet de rafraichir la table de routage
reverse path check fail, drop
- antispoofing = l'IP source est connue sur une autre interface (loopback interne, route statique, autre zone, etc)
Pour désactiver l'antispoofing :
config system settings set asymroute enable end
cmdb add entry failed
- plus assez de mémoire libre ! ⇒ il faut soit killer un/des processus, soit rebooter le forti
action=ip-conn
Des flux semblent bloqués par le Fortigate (on ne voit pas sortir les paquets avec un diag sniff paquet …
), et ressortent dans les logs avec l'action ip-conn
(au lieu de accept ou deny). Ces flux sont pourtant permis par la politique de sécurité, mais le Fortigate ne reçoit pas de réponse de la destination, à cause :
- de la présence d'un firewall applicatif bloquant sur la destination
- d'un problème de manque de ressources sur ce dernier ; dans ce cas, la KB FD39321 recommande de vérifier les ressources du Fortigate :
diagnose hardware sysinfo memory get system performance status get system performance top
sniffer packet
C'est une implémentation de tcpdump ; la syntaxe basique est : diagnose sniffer packet <interface> '<filter>' <verbose> <count> <time-format>
, par exemple pour sniffer TOUT le trafic :
diagnose sniffer packet any '' 4 0 l # avec time-format = # "a" affiche le timestamp absolu (UTC) # "l" affiche le timestamp local #Verbose levels in detail: # 1: print header of packets # 2: print header and data from IP of packets # 3: print header and data from Ethernet of packets # 4: print header of packets with interface name # 5: print header and data from IP of packets with interface name # 6: print header and data from Ethernet of packets with interface name
Il est important de noter que les paquets accélérés par les Network Processors (NP1, 2 etc…) ne sont pas capturés par cette commande. Pour sniffer ces paquets, il faut au préalable désactiver l'accélération matérielle sur le flux qu'on veut sniffer.
Différents exemples de captures intéressantes :
# Match TTL = 1 (on lit le 9eme octet dans IP) diagnose sniffer packet port2 "ip[8:1] = 0x01" # Match Source IP address = 192.168.1.2: (on lit les 4 27eme octets d'ethernet) diagnose sniffer packet internal "(ether[26:4]=0xc0a80102)" # Match Source MAC = 00:09:0f:89:10:ea diagnose sniffer packet internal "(ether[6:4]=0x00090f89) and (ether[10:2]=0x10ea)" # Match Destination MAC = 00:09:0f:89:10:ea diagnose sniffer packet internal "(ether[0:4]=0x00090f89) and (ether[4:2]=0x10ea)" # Match ARP packets only diagnose sniffer packet internal "ether proto 0x0806" diagnose sniffer packet internal "arp" # Match IPv6 packets only diagnose sniffer packet internal "ether proto 0x86dd" diagnose sniffer packet internal "ip6" # Match packets with RST flag set: diagnose sniffer packet internal "tcp[13] & 4 != 0" # Match packets with SYN flag set: diagnose sniffer packet internal "tcp[13] & 2 != 0" # Match packets with SYN-ACK flag set: diagnose sniffer packet internal "tcp[13] = 18" # Match packets with SYN and no ACK flags set: diagnose sniffer packet internal "tcp[13] & 18 == 2" diagnose debug app hatalk 255
MAJ du firmware
On peut récupérer la version courante en mode global :
get system status | grep Version: Version: FortiGate-800C v5.2.3,build0670,150318 (GA)
La pluspart du temps c'est plus simple de lancer les mises à jour via la webUI (à partir du dashboard), mais on peut aussi le faire en CLI :
# sauvegarde de la conf execute backup config usb <file.conf> execute backup full-config usb <file_full.conf> # sauvegarde des logs execute backup memory alllogs tftp <tftp server> [text|compact] # sauvegarder les signatures IPS execute backup ipsuserdefsig tftp <filename> <tftp server> # upgrade-downgrade en CLI : execute restore image tftp <filename> <tftp_ipv4> # ou au redémarrage lorsqu'apparait ce message en console : "Press any key to display configuration menu.........." # restorer la conf execute backup config ftp <FILENAME> <ftp server>
USB auto-install
Une fonctionnalité intéressante des Fortigate est d'utiliser une clé USB pour faire booter le firewall dessus. Si ce dernier trouve :
- un ficheir fgt_system.conf, il chargera ce fichier de configuration au boot
- une image image.out il chargera ce firmware au boot
Ces noms de fichiers sont configurables en webUI dans “System > Config > Advanced”.
Métrologie/supervision
En vrac, les OIDs intéressants :
// OIDs fortigate (en v3) # OID desc # system .1.3.6.1.4.1.12356.1.2.0 SN .1.3.6.1.4.1.12356.1.100.6.1.2.1 SN .1.3.6.1.4.1.12356.1.3.0 version fortiOS .1.3.6.1.4.1.12356.1.8.0 gauge CPU (%) .1.3.6.1.4.1.12356.1.9.0 gauge mémoire (%) # network .1.3.6.1.4.1.12356.1.10.0 nb de session .1.3.6.1.4.1.12356.101.12.1.1.0 nb de tunnel vpn IPSec up // OIDs v4-v5 # system .1.3.6.1.2.1.1.1.0 .1.3.6.1.4.1.12356.101.4.1.1.0 version de fortiOS .1.3.6.1.4.1.12356.101.4.1.3.0 CPU (%) .1.3.6.1.4.1.12356.101.4.4.2.1.2.2 % CPU (Core #) 1 min .1.3.6.1.4.1.12356.101.4.4.2.1.2.3 % CPU (Core #) 5 min .1.3.6.1.4.1.12356.101.4.1.4.0 memoire (%) ? # network (IF-MIB) .1.3.6.1.4.1.12356.101.4.1.8.0 nb sessions .1.3.6.1.4.1.12356.101.4.1.11 fgSysSesRate1 .1.3.6.1.4.1.12356.101.4.1.12 fgSysSesRate10 .1.3.6.1.4.1.12356.101.4.1.13 fgSysSesRate30 .1.3.6.1.4.1.12356.101.4.1.14 fgSysSesRate60 .1.3.6.1.2.1.2.2.1.2 liste des interfaces .1.3.6.1.2.1.2.2.1.10 IF-MIB::ifInOctets (Counter32) .1.3.6.1.2.1.2.2.1.16 IF-MIB::ifOutOctets .1.3.6.1.2.1.31.1.1.1.6 IF-MIB::ifHCInOctets (Counter64) .1.3.6.1.2.1.31.1.1.1.10 IF-MIB::ifHCOutOctets (Counter64) # policy .1.3.6.1.4.1.12356.101.5.1.2.1.1.1.1 fgFwPolID (index des # des règles) .1.3.6.1.4.1.12356.101.5.1.2.1.1.2.1.1 fgFwPolPktCount .1.3.6.1.4.1.12356.101.5.1.2.1.1.1.1 fgFwPolByteCount # securite / UTM .1.3.6.1.4.1.12356.101.8.2.1.1.1 fgAvVirusDetected .1.3.6.1.4.1.12356.101.8.2.1.1.3 fgAvHTTPVirusDetected .1.3.6.1.4.1.12356.101.8.2.1.1.5 fgAvSMTPVirusDetected .1.3.6.1.4.1.12356.101.8.2.1.1.7 fgAvPOP3VirusDetected .1.3.6.1.4.1.12356.101.8.2.1.1.9 fgAvIMAPVirusDetected .1.3.6.1.4.1.12356.101.8.2.1.1.11 fgAvFTPVirusDetected .1.3.6.1.4.1.12356.101.8.2.1.1.13 fgAvIMVirusDetected .1.3.6.1.4.1.12356.101.8.2.1.1.15 fgAvNNTPVirusDetected # IPS .1.3.6.1.4.1.12356.101.9.2.1.1.2.1 # HA .1.3.6.1.4.1.12356.101.13.2.1.1.1 fnHaStatsIndex .1.3.6.1.4.1.12356.101.13.2.1.1.2 fnHaStatsSerial .1.3.6.1.4.1.12356.101.13.2.1.1.3 fnHaStatsCpuUsage .1.3.6.1.4.1.12356.101.13.2.1.1.4 ifnHaStatsMemUsage .1.3.6.1.4.1.12356.101.13.2.1.1.5 fnHaStatsNetUsage .1.3.6.1.4.1.12356.101.13.2.1.1.6 fnHaStatsSesCount .1.3.6.1.4.1.12356.101.13.2.1.1.7 fnHaStatsPktCount .1.3.6.1.4.1.12356.101.13.2.1.1.8 fnHaStatsByteCount .1.3.6.1.4.1.12356.101.13.2.1.1.9 fnHaStatsIdsCount .1.3.6.1.4.1.12356.101.13.2.1.1.10 fnHaStatsAvCount .1.3.6.1.4.1.12356.101.13.2.1.1.11 fnHaStatsHostname
Références :
Divers tips
Password recovery
- démarrer le firewall en étant connecté au port console
- dans les 30s qui suivent l'affichage du prompt de login, se logguer en :
login: maintainer Password: bcpbFG800CXXXXXX ("bcpb" suivi du n° de série du firewall)
Attention ce mode ne permet pas de créer des utilisateurs, juste d'en modifier des existants.
Reset factory
execute factoryreset
Il existe également la commande execute factoryreset2
qui permet de garder les routes et les adresses IPs des interfaces.
fnsysctl
fnsysctl est une commande qui permet de lancer certaines commandes du système Linux sous-jacent. Comme elle est cachée, elle n'est ni auto-complétée dans le prompt, ni documentée (<TAB>). Cette commande n'est plus disponible à partir de la version FortiOS 5.4.
FGT (global) # fnsysctl cat /proc/version Linux version 2.4.37 (root@build192) #3 Tue Mar 17 19:52:27 PDT 2015 FGT (global) # fnsysctl ifconfig amc-dw1/1 amc-dw1/1 Link encap:Ethernet HWaddr 00:09:0F:91:00:D4 inet addr:10.1.1.52 Bcast:10.1.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1 RX packets:3099621200 errors:0 dropped:0 overruns:0 frame:4 TX packets:3359661545 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:1702617951232 (1585.7 GB) TX bytes:2084883916597 (1941.7 GB) Interrupt:19 Base address:0x6000 Memory:e7800000-0
Sauvegarde en SCP
Pour sauvegarder les configuration sur un serveur centralisé et en SCP (src : http://kb.fortinet.com/kb/documentLink.do?externalID=12002 )
- vérifier que le SSH est bien activé et permis sur l'interface d'admin
- copier la clé SSH publique du serveur sur les Fortigate :
config system admin edit admin set ssh-public-key1 "ssh-rsa AAAAB3NzaC1[blabla...]onL7eow== adminsys@zeus" end
Maintenant on peut se connecter en SSH depuis le serveur sans saisir de mot de passe :)
- activer le SCP sur les Fortigate :
config system global set admin-scp enable end
Maintenant on peut sauvegarder toute la smala avec un script de ce genre :
for FW in "forti1 forti2 etc" do scp adminsys@$FW:sys_config /save/forti/$FW.conf done
config global user
Avec l'interface web, lorsqu'on veut créer un utilisateur on ne peut que lui accorder des droits RO ou RW sur un (ou des) VDOM(s) particulier(s), mais on ne peut pas configurer l'accès à la partie configuration globale. La seule manière de donner l'accès à un utilisateur à ce menu, c'est de l'ajouter dans le profil super_user et donc de lui donner tous les droits, ce qui n'est pas toujours souhaitable.
Pour créer un utilisateur qui ait les droits de lecture du menu global, il faut passer par la ligne de commande suivante :
- pour aller plus vite :
- créer en webUI le profil prof_RO avec tous les droits en RO
- créer un utilisateur utilisant ce profil
- puis, en CLI :
config global
config system accprofile
edit prof_diag
set scope global
end
En passant en CLI, on a accès à l'option “scope” qui permet d'activer la vue sur la partie config global
du Fortigate (et en lecture seule).
source : KB FD34502
Activer le serveur NTP
On peut activer le serveur NTP du Fortigate sur chaque interface particulièrement ; cela s'active via la configuration NTP cliente du Fortigate : dans le Dashboard > Status, puis System Information > System time, cliquer sur [change] et enfin cocher la case “Enable NTP Server”, et ajouter les interfaces sur lesquelles l'activer (“Listen on Interfaces”).
Route statique inactive
Lorsqu'on ajoute une route statique via la webUI, elle peut être inactive et ne pas apparaitre dans le “Routing monitor”. Si c'est le cas, vérifier en CLI :
Router # get router info routing-table details 192.168.18.0 Routing entry for 192.168.18.0/24 Known via "static", distance 10, metric 0 10.0.140.2, via port5 inactive
Cela arrive le plus souvent lorsque le next-hop déclaré n'est pas atteignable via ce port. En gros vous avez fait une faute de frappe dans la déclaration de la route statique OU vous avez un routage incohérent. Dans l'exemple ci-dessus, le next-hop 10.0.140.2 n'est pas joignable via le port5 mais via le port3 :
Router # get router info routing-table details 10.0.140.2 Routing entry for 10.0.140.0/24 Known via "connected", distance 0, metric 0, best * is directly connected, port3