User Tools

Site Tools


informatique:fortinet:start

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:fortinet:start [2017/07/25 14:56] – [Métrologie/supervision] pteuinformatique:fortinet:start [2024/02/28 14:55] (current) – [Interfaces] MTU / TCP-MSS pteu
Line 1: Line 1:
 ======Fortinet====== ======Fortinet======
  
-FIXME+{{:informatique:fortinet:fortinet_logo.png |}} 
 + 
 +[[http://www.fortinet.com/|Fortinet]] est une marque américaine créée en 2000 qui conçoit des équipements de sécurité réseau. Elle est notamment connue pour ses appliances FortiGate, des firewalls tout-en-un ayant des fonctionnalités de prévention d'intrusion, routage, proxy, filtrage web et mail, VPN.
  
 ======Système====== ======Système======
  
-En sortie d'usine, le compte **admin** a un mot de passe vide.+En sortie d'usine, le compte **admin** a un mot de passe vide. La configuration du port CONsole est "9600/8-N-1 hardware flow control disabled" ; on peut se connecter aussi au port mgmt(1) qui a son DHCPd (192.168.99.O/24) activé par défaut, mais attention à ne pas le brancher sur le réseau de prod sous peine de préempter les attributions d'IP du DHCPd légitime ! 
 + 
 +On peut lister toutes les commandes disponibles avec la commande ''tree'', et filtrer l'affichage en CLI avec '' | grep'' comme sur un terminal Linux.
  
 <code bash> <code bash>
-récupérer les informations du système+afficher les informations du système
 get system status get system status
 +# d'autres informations notamment sur le logging
 +get mgmt-data status
  
-# récupérer la charge du sytème et son uptime +# récupérer la charge du système et son uptime 
-get system performance status+(global) get system performance status
  
 # affiche les informations des processus les plus consommateurs en CPU/mem # affiche les informations des processus les plus consommateurs en CPU/mem
Line 21: Line 27:
 # - première ligne : U — % user CPU, S - % system CPU, I — % CPU idle, T — Total memory in kB, F — free memory in kB # - 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) # - desc des colonnes : process name, pid, running status, CPU usage, memory usage. (Sleeping, Running, Zombie, < - High priority, N — Low priority)
 +# on peut classer par CPU usage (Shift+P) ou par mem usage (Shift+M)
  
-# version plus user-friendly+# version plus user-friendly (-h pour afficher l'aide)
 diagnose sys top-summary diagnose sys top-summary
    CPU [|                                         4.5%    CPU [|                                         4.5%
Line 32: Line 39:
 diagnose sys kill 11 <PID> diagnose sys kill 11 <PID>
 </code> </code>
 +
 +=====Redémarrage=====
  
 Pour redémarrer ou éteindre le système : Pour redémarrer ou éteindre le système :
Line 39: Line 48:
 </code> </code>
  
-Ordre de traitement d'un paquet sur un Fortigate :+Il n'est pas possible de planifier un redémarrage automatique ! La seule possibilité est de programmer un reboot quotidien : 
 +<code bash> 
 +config global 
 +  config sys global 
 +    set daily-restart enable 
 +    set restart-time 04:13 
 +  end 
 +</code> 
 +Attention, il redémarrera donc tous les jours à 4h13 ! 
 + 
 +Autre possibilité : configurer une authentification SSH par clé ([[informatique:fortinet:start#sauvegarde_en_scp|comme indiqué ici]]) puis ajouter une tâche at ou cron qui fait : 
 +<code bash> 
 +ssh admin@firewall "config global 
 +> execute reboot 
 +> y" 
 +</code> 
 + 
 + 
 +=====Ordre de traitement des paquets===== 
 <code bash> <code bash>
 Step #1 - Ingress Step #1 - Ingress
Line 78: Line 106:
 3. Routing 3. Routing
 </code> </code>
 +
 +MAJ d'après la doc officielle Fortinet : [[https://docs.fortinet.com/d/life-of-a-packet-56|Parallel Path Processing (Life of a Packet) v5.6.6]]
 +
 +{{:informatique:fortinet:life-of-a-packet_fortios-5.6.6.png? |}}
  
 =====Hardware===== =====Hardware=====
Line 89: Line 121:
 # partitionnement du disque dur (au sens Linux, càd bas niveau) # partitionnement du disque dur (au sens Linux, càd bas niveau)
 diagnose hardware deviceinfo disk diagnose hardware deviceinfo disk
-# lister les partitions au sens Forti (gestion des images de fortiOS)+# lister les partitions (gestion des images de fortiOS)
 diagnose sys flash list 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) # info sur les CPU (~ /proc/cpuinfo)
Line 99: Line 129:
 # ~lspci # ~lspci
 diagnose hardware pciconfig diagnose hardware pciconfig
 +
 +# allocation de la mémoire
 +diagnose hardware sysinfo memory
 +
 +# afficher l'allocation des slabs (espaces mémoire pré-alloué pour les sessions par ex)
 +diagnose hardware sysinfo slab
 +
 +# afficher l'utilisation de la mémoire partagée (SHM)
 +diagnose hardware sysinfo shm
 +</code>
 +
 +====Power/alimentation====
 +
 +Information sur les alimentations :
 +<code bash>
 +diagnose hardware deviceinfo psu
 +PSU 01:
 + Product Manufacturer  : Murata-PS
 + Product Name          : D1U54P-W-450-12-HA4C
 + Product Version       : RJ
 + Product Serial        : X00001
 + Product Extra         : Pri f/w rev: 9151001909-13-01
 + Product Extra         : Sec f/w rev: 9157001909-13-01
 +PSU 02:
 + Product Manufacturer  : Murata-PS
 + Product Name          : D1U54P-W-450-12-HA4C
 + Product Version       : RJ
 + Product Serial        : X00002
 + Product Extra         : Pri f/w rev: 9151001909-13-01
 + Product Extra         : Sec f/w rev: 9157001909-13-01
 +!
 +execute sensor detail
 </code> </code>
  
Line 122: Line 184:
       set mtu-override enable       set mtu-override enable
       set mtu 9000       set mtu 9000
 +   next
 +# modifier la TCP MSS (doit être = MTU - 40 (20 d'entêtes IP et 20 d'entêtes TCP))
 +config system interface
 +   edit "port1"
 +      set tcp-mss 8960
 +   next
 +</code>
 +<WRAP center round tip 80%>
 +Rappel: la MTU IP est de 1500 octets par défaut. Pour la vérifier entre 2 machines, il faut lancer un PING en interdisant la fragmentation (bit "don't fragment" = 1) et en spécifiant sa taille. Pour une MTU par défaut on peut envoyer des PINGs de taille max 1472 (1500 moins les entêtes IP (20) et ICMP (8)), un seul octet de plus (1473) et on ne pourra plus l'envoyer sans fragmenter, donc cela génèrera une erreur.
 +</WRAP>
 +
 +<code bash>
 +# Sous Linux:
 +ping -M do -s 1473 10.10.10.10
 +> ping: local error: Message too long, mtu=1500
 +# Sous Windows:
 +ping -f -l 1473
 +> Le paquet doit être fragmenté mais paramétré DF.
 +# Sous FortiOS :
 +execute ping-options df-bit yes
 +execute ping-options data-size 1473
 +execute ping 10.10.10.10
 +> sendto failed
 +</code>
 +//A noter que les erreurs affichées ci-dessus sont locales car détectées directement par ma machine cliente, dans la mesure ou l'on dépasse sa propre MTU. En général ce test est réalisé pour détecter la MTU sur le réseau entre 2 machines distantes quand on suspecte une MTU réduite (< 1500).//
 +
 +Afficher les caractéristiques des modules GBIC/SFP* connectés et reconnus :
 +<code bash>
 +get sys interface transceiver port13
 +Interface port13 - SFP/SFP+
 +  Vendor Name  :            Intel Corp
 +  Part No.     :            FTLX8571D3BCVIT
 +  Serial No.   :            XYZ
 +  Measurement  Unit         Value        High Alarm   High Warning Low Warning  Low Alarm
 +  ------------ ------------ ------------ ------------ ------------ ------------ ------------
 +  Temperature  (Celsius)     42.6         78.0         73.0         -8.0        -13.0
 +  Voltage      (Volts)       3.32         3.70         3.60         3.00         2.90
 +  Tx Bias      (mA)          8.07        13.20        12.60         3.00         2.00
 +  Tx Power     (dBm)         -2.0          0.0         -1.0         -7.0         -8.0
 +  Rx Power     (dBm)         -1.9          0.0         -1.0        -18.0        -20.0
 +    ++ : high alarm, + : high warning, - : low warning, -- : low alarm, ? : suspect.
 +</code>
 +
 +===Port d'admin dédié===
 +
 +Cette fonctionnalité, qui est pré-configurée pour les firewalls disposant de port nommés ''mgmt*'', permet de dédier une interface au management du Fortigate. Cela a pour effet d'interdire la création de règle de sécurité les incluant, de créer une route "connected" dans la table de routage, et d'ajouter un menu permettant de filtrer les IPs pouvant se connecter dessus (ce qui outrepasse les directives //trusted host// définies dans les comptes utilisateur).
 +
 +Il est conseillé de ne pas router de trafic utilisateur par ces interfaces.
 +<code  bash>
 +config system interface
 +  edit "mgmt2" 
 +    set dedicated-to management
 +  end
 +end
 </code> </code>
  
Line 146: Line 262:
 attention les paramètres de l'agrégat doivent concorder avec la configuration de l'équipement d'en face ! attention les paramètres de l'agrégat doivent concorder avec la configuration de l'équipement d'en face !
 </WRAP> </WRAP>
 +
 +===Création d'un switch logique===
 +
 +Pour créer un bridge (un switch logique) entre plusieurs ports d'un Fortigate :
 +<code bash>
 +config system switch-interface
 +   edit mon-switch-soft
 +   set members port1 port2 port3 port4
 +end
 +</code>
 +
 +NB :
 +  * ces interfaces doivent être vierges de toute configuration ;
 +  * certaines fonctionnalités seront limitées sur ces interfaces
 +  * des performances moindres sont également à prévoir
  
 ====Accélération hardware (NP)==== ====Accélération hardware (NP)====
Line 198: Line 329:
 # lister les utilisateurs connectés # lister les utilisateurs connectés
 get system info admin status get system info admin status
 +# même commande, mais affiche les index
 +execute disconnect-admin-session ?
 +
 +# pour déconnecter un utilisateur, par ex la session de l'utilisateur toto :
 +execute disconnect-admin-session ?
 +INDEX USERNAME        TYPE    VDOM     PROFILE      FROM             TIME
 +    0 admin           ssh                           10.1.1.24        Wed Apr 10 14:09:14 2019
 +    1 toto            ssh              RO_access    10.1.2.201       Mon Apr  8 14:19:59 2019
 +
 +execute disconnect-admin-session 1
 </code> </code>
  
Line 203: Line 344:
 <code bash> <code bash>
 diagnose test auth ldap <server_name> <username> <password> diagnose test auth ldap <server_name> <username> <password>
 +</code>
 +
 +Pour debugguer le LDAP :
 +<code bash>
 +diagnose debug appl authd 99
 +diagnose debug enable
 </code> </code>
  
Line 211: Line 358:
       edit admin       edit admin
          set password <new-password>          set password <new-password>
-         end+      end
 </code> </code>
  
Line 240: Line 387:
 </code> </code>
  
 +Pour lister les IPs/logins bloqués (en quarantaine) : dans la GUI, "Monitor> Quarantaine Monitor" ; en CLI :
 +<code bash>
 +diagnose user quarantine list
 +</code>
 +
 +Et pour débloquer un blocage :
 +<code bash>
 +diagnose user quarantine delete src4 x.x.x.x
 +</code>
 +
 +====Configurer un serveur Radius====
 +
 +Pour centraliser les comptes/mots de passe on peut configurer un serveur Radius qui sera interrogé pour authentifier les administrateurs du Forti. Cela se fait en plusieurs étapes :
 +
 +1) déclarer le serveur Radius sur le VDOM de management (root par défaut) : en GUI c'est dans "User & Authentication > RADIUS servers" ; on précise son nom, son IP et son secret (mot de passe pour s'y connecter, défini dans le clients.conf du serveur Radius) ; en CLI :
 +<code bash>
 +config user radius
 +    edit "rad-srv"
 +        set server "10.0.4.88"
 +        set secret blablabla
 +    next
 +end
 +</code>
 +
 +2) créer le groupe "Admin fortis" dans "User & Authentification > User Groups", nouveau groupe de type "Firewall", et ajouter le serveur RADIUS dans "Remote Groups" :
 +<code bash>
 +config user group
 +    edit "Admin fortis"
 +        set member "rad-srv"
 +    next
 +end
 +</code>
 +
 +3) Créer chaque login en mode global : créer le login dans "System > Administrators", et cocher "Match a user in a remote serveur group", "Admin fortis" dans cet exemple.
 +<code bash>
 +config system admin
 +     edit "admtoto"
 +         set remote-auth enable
 +         set accprofile "super_admin"
 +         set vdom "root"
 +         set remote-group "Admin fortis"
 +         set password ENC MASCARADE
 +     next
 +end
 +</code>
 +
 +NB : on pourra définir un mot de passe de secours pour chaque compte, en cas d'inaccessibilité du serveur RADIUS.
 +
 +Diagnostique :
 +<code bash>
 +diagnose test auth radius pap <user> <mot de passe>
 +</code>
 ======Configuration====== ======Configuration======
  
Line 248: Line 447:
 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 : 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 :
 <code bash> <code bash>
 +# désactiver les "more"
 # équivalent d'un "terminal length 0" chez Cisco # équivalent d'un "terminal length 0" chez Cisco
 config system console config system console
Line 307: Line 507:
 <code bash> <code bash>
 config system global config system global
-   set hostname mon_forti+ set hostname mon_forti 
 + set timezone 28 
 +#28    (GMT+1:00) Brussels, Copenhagen, Madrid, Paris
  
-   config system admin + config system admin 
-      edit admin +    edit admin 
-      set password <new-admin-password> +    set password <new-admin-password> 
-   end+ end 
 + 
 + config system ntp 
 +    set ntpsync enable 
 +    set type custom 
 +    set syncinterval 60 
 +        config ntpserver 
 +            edit 1 
 +                set server "pool.ntp.org" 
 +            next 
 +        end 
 +    set source-ip 10.10.10.10 
 + end
 end end
 </code> </code>
Line 355: Line 569:
 ======Routage====== ======Routage======
  
-Afficher la table de routage courante : 
 <code bash> <code bash>
 +# lister toutes les adresses IP du firewall
 +diag ip address list
 +IP=192.168.1.99->192.168.1.99/255.255.255.0 index=4 devname=mgmt1
 +[..]
 +
 +# lister les IPs virtuelles : VIPs et NAT-pools
 +diag firewall iplist list
 +
 +# Afficher la table de routage :
 get router info routing-table details get router info routing-table details
  
Line 381: Line 603:
 diagnose ip arp list diagnose ip arp list
  
-# afficher les règle de policy-based routing ("policy routes")+# afficher les règles de policy-based routing ("policy routes" ou PBR)
 diagnose firewall proute list diagnose firewall proute list
 +
 +# afficher le cache de routage
 +diag ip rtcache list
 </code> </code>
  
Line 391: Line 616:
 </code> </code>
  
 +En webUI on peut voir la table de routage dans le "Routing Monitor" ; depuis la version 6 il faut aller dans "Dashboard> Network", passer le curseur sur le widget "Routing" et cliquer sur "Expand to fullscreen". Pour créer un raccourci direct (à la suite des liens FortView préexistants dans le menu Dashboard), cliquer sur "Save as monitor" (bouton en haut de la fenêtre lorsqu'il est en FullScreen).
 +
 +{{ :informatique:fortinet:routing_monitor_reduc.png?nolink&600 |}}
  
 =====Static===== =====Static=====
Line 409: Line 637:
 >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). >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 : [[http://kb.fortinet.com/kb/viewContent.do?externalId=FD32103|Routing behavior depending on distance and priority for static routes, and Policy Based Routes]] chez kb.fortinet.com source : [[http://kb.fortinet.com/kb/viewContent.do?externalId=FD32103|Routing behavior depending on distance and priority for static routes, and Policy Based Routes]] chez kb.fortinet.com
 +
 =====OSPF===== =====OSPF=====
  
Line 446: Line 675:
         config redistribute "isis"         config redistribute "isis"
         end         end
-    set router-id 1.0.0.15+    set router-id 10.0.0.15 
 +    set passive-interface "ico-untrust" 
 +    # annoncer sa route statique par défaut dans l'OSPF, et en tant que external 1 
 +    set default-information-originate enable 
 +    set default-information-metric-type 1
 end end
 </code> </code>
Line 452: Line 685:
 Diag : Diag :
 <code bash> <code bash>
 +# affiche le status de tous les protocoles de routage dynamiques de ce forti :
 get router info protocols get router info protocols
 +
 +get router info ospf status
 get router info ospf neighbor get router info ospf neighbor
 get router info ospf interface get router info ospf interface
 +
 +# afficher le LSDB (LSAs type 1 et 2) :
 +get router info ospf database brief
 +# afficher les détails de chaque LSA
 +get router info ospf database router lsa
 +# affiche les LSAs envoyés par ce Fortigate :
 +get router info ospf database self-originate
 +
 get router ospf get router ospf
 show router ospf show router ospf
  
 +#
 +# Logging (à partir de la version 5.4+)
 +#
 +config router ospf
 +set log-neighbour-changes enable
 +
 +#
 # Debug # Debug
 +#
 +#diagnose ip router ospf packet hello enable
 diagnose ip router ospf all enable diagnose ip router ospf all enable
 +diagnose ip router ospf level info
 +diagnose debug cli 0
 +diagnose debug console timestamp enable
 diagnose debug enable diagnose debug enable
 +# nettoyage du debug
 +diagnose ip router ospf all disable
 +diagnose debug disable
  
-clear route +redémarrer le processus OSPF 
-exec router clear ospf [process x]+execute router clear ospf [process x]
 </code> </code>
  
Line 473: Line 732:
 </code> </code>
  
 +====Agrégation de routes====
 +
 +Pour simplifier les tables de routage, on peut agréger les routes sur les ABR (Area Border Router) ou les ASBR (Autonomous System Border Router). Cela consiste, sur ledit routeur, à fusionner plusieurs annonces en une seule, de préfixe plus court (par exemple 10.0.0.0/24 et 10.0.1.0/24 => 10.0.0.0**/23**). En réduisant les annonces on simplifie la table de routage de tous les routeurs, on diminue la charge CPU lors des changements de topologie, et on diminue la charge sur le réseau.
 +
 +L'agrégation se configure de 2 façons, suivant qu'il s'agisse d'ABR (LSA de type 3) ou d'ASBR (LSA de type 5) :
 +  * sur un ABR, pour agréger des routes apprises de l'aire 1 (c'est un exemple) :
 +<code bash>
 +config router ospf
 +  config area
 +    edit 0.0.0.1
 +      config range
 +        edit 0
 +          set prefix 10.0.0.0 255.255.254.0
 +        end
 +    end
 +end    
 +</code>
 +
 +  * sur un ASBR, pour agréger des routes redistribuées (connected, statiques, etc..) dans l'OSPF :
 +<code bash>
 +config router ospf
 +  config summary-address
 +    edit 0
 +      set prefix 10.0.0.0 255.255.254.0
 +    end
 +end
 +</code>
 +
 +Ces routes sont visibles dans la table de routage de l'ABR/ASBR sous la forme :
 +<code bash>
 +get router info routing-table ospf
 +[..]
 +O       10.0.0.0/23 [110/0] is a summary, Null, 00:02:21
 +</code>
 +
 +On voit les réseaux dans la database :
 +<code bash>
 +get router info ospf database brief
 +[..]
 +                Summary Link States (Area 0.0.0.0)
 +
 +Link ID         ADV Router      Age  Seq#     CkSum Flag Route
 +10.0.0.0        10.0.10.1       154  80000092 2570  0031 10.0.0.0/23
 +[..]
 +
 +
 +get router info ospf database summary lsa 10.0.0.0
 +[..]
 +                Summary Link States (Area 0.0.0.0)
 +
 +  LS age: 309
 +  Options: 0x2 (*|-|-|-|-|-|E|-)
 +  LS Type: summary-LSA
 +  Link State ID: 10.0.0.0 (summary Network Number)
 +  Advertising Router: 10.0.10.1
 +  LS Seq Number: 800002df
 +  Checksum: 0x60e2
 +  Length: 28
 +  Network Mask: /23
 +        TOS: 0  Metric: 11
 +</code>
 +
 +sources :
 +  * [[http://kb.fortinet.com/kb/documentLink.do?externalID=FD30329|OSPF route summarization for LSAs Type3 (on ABR) and Type5 (on ASBR)]]
 +  * https://community.fortinet.com/t5/FortiGate/Technical-Note-OSPF-route-summarization-for-LSAs-Type3-on-ABR/ta-p/198559
 +
 +====Redistribution de route====
 +
 +On peut activer la redistribution de __toutes__ les routes statiques dans l'OSPF en activant ''config redistribute "static"'' ; cependant si on veut n'annoncer que certains préfixes il faut filtrer les annonces. On utilise pour cela :
 +  * une **access-list** (ou **ACL**) qui sélectionne des réseaux
 +  * une **route-map** qui associe une action à une ACL
 +
 +Exemple de redistribution de 2 (parmi d'autres que l'on ne veut pas annoncer) routes statiques dans l'OSPF :
 +<code bash>
 +# définition de l'access-list pour matcher 10.1 et 10.2 /16
 +# exact-match permet de ne sélectionner que le préfixe exact (pas ses sous-réseaux)
 +config router access-list
 +    edit "acl_static-to-ospf"
 +        set comments "définition d'une liste de réseaux"
 +        config rule
 +            edit 1
 +                set prefix 10.1.0.0 255.255.0.0
 +                set exact-match disable
 +            next
 +            edit 2
 +                set prefix 10.2.0.0 255.255.0.0
 +                set exact-match disable
 +            next
 +        end
 +
 +# définition de la route-map
 +# préciser l'action "permit" est facultatif car c'est celle par défaut
 +config router route-map
 +    edit "rm_static-to-ospf"
 +        config rule
 +            edit 1
 +                set match-ip-address "acl_static-to-ospf"
 +                set action permit
 +            next
 +        end
 +
 +# activation de la redistribution des routes statiques dans l'OSPF
 +# et filtrage des annonces
 +config router ospf
 +    config redistribute "static"
 +        set status enable
 +        set routemap "rm_static-to-ospf"
 +    end
 +end
 +</code>
 +=====BGP=====
 +
 +Exemple de configuration BGP basique :
 +<code bash>
 +# NB : les numéros d'AS 64512 et 64513 sont privés
 +config router bgp
 +    set as 64512
 +    set router-id 10.0.255.2
 +        config neighbor
 +            edit "10.0.200.94"
 +                set remote-as 64513
 +            next
 +        end
 +        
 +# déclaration des réseaux annoncés
 +        config network
 +            edit 1
 +                set prefix 10.0.255.2 255.255.255.255
 +            next
 +            edit 2
 +                set prefix 10.0.200.94 255.255.255.254
 +            next
 +            edit 3
 +                set prefix 10.143.8.0 255.255.255.248
 +            next
 +        end
 +end
 +</code>
 +
 +Diagnostique :
 +<code bash>
 +# afficher les routes apprises en BGP
 +show bgp routes all
 +get router info protocols
 +get router info bgp neighbor
 +get router bgp
 +
 +# afficher la configuration
 +show router bgp
 +</code>
 +
 +Debug :
 +<code bash>
 +diagnose ip router bgp all
 +diagnose debug enable
 +
 +# clearer toutes les connexions BGP
 +execute router clear bgp all
 +</code>
 +
 +Article plus détaillé : [[informatique:fortinet:bgp|Fortigate BGP]]
 =====PBR===== =====PBR=====
  
Line 499: Line 919:
 external IP range = l'IP (ou les IPs) de substitution external IP range = l'IP (ou les IPs) de substitution
 </code> </code>
-=======Firewall======+ 
 + 
 +=======Sessions====== 
 + 
 +Le terme de session s'applique à chaque connexion traversant ou s'arrêtant au Fortigate, quel que soit le protocole (TCP évidemment mais aussi UDP, ICMP, etc...). Comme c'est un firewall //stateful// le sens d'ouverture des sessions est important, et les retours sont implicitement permis (à la différence des ACLs en général que l'on doit déclarer dans les 2 sens).
  
 <code bash> <code bash>
-afficher la politique de sécurité +compter les connexions dans le VDOM 
-show firewall policy+get system session status
  
-# liste concise des sessions (1/ligne) - équivalent d'un netstat+# liste concise des sessions (1/ligne) - affiche les DNAT et SNAT
 get system session list get system session list
 +</code>
  
-To examine the firewall session list in the CLI+Pour afficher plus de détails on utilise ''diagnose sys session'' ; cette commande étant très verbeuse elle s'utilise presque exclusivement en appliquant un filtre pour avoir un résultat lisible. 
 +<code bash> 
 +pour afficher les sessions HTTP ouvertes depuis la machine 10.0.0.2 
 +diagnose sys session filter proto 6
 diagnose sys session filter src 10.0.0.2 diagnose sys session filter src 10.0.0.2
 +diagnose sys session filter dport 80
 diagnose sys session list diagnose sys session list
 +
 # en plus verbeux : # en plus verbeux :
 diagnose sys session full-stat diagnose sys session full-stat
 diagnose sys session stat diagnose sys session stat
  
-To clear all sessions+pour afficher les filtres en place 
 +diagnose sys session filter 
 + 
 +# pour supprimer toutes les sessions **matchant le filtre courant**
 diagnose sys session clear diagnose sys session clear
-To clear all sessions corresponding to a filter +! inutile de préciser qu'on flush toutes les sessions si on n'utilise pas de filtre ! 
-diagnose sys session filter dst 192.168.2.10 +</code> 
-diagnose sys session filter dport 80 + 
-diagnose sys session clear +Les flags : 
--> va clearer uniquement les sessions matchant le filtre !+  * ''may_dirty'' indique qu'une session a ouverte car acceptée par la politique de sécurité ; si cette dernière vient à être modifiée, toutes les sessions ''may_dirty'' sont également flagguées ''dirty'' ce qui signifie qu'elles doivent être revalidées par la nouvelle politiqueC'est ce que fera le firewall lorsqu'il recevra le prochain paquet de la session : 
 +    * si celle-ci est toujours valide, il supprime le flag ''dirty'' 
 +    * sinon il la flag ''block'', ce qui provoque le drop de tous les prochains paquetsLes sessions ''block'' restent dans la table de sessions jusqu'à leur expiration (leur timeout est diminué)
 + 
 +Pour modifier les timeouts par défaut (3600 secondes = 1 heure par défaut) : 
 +<code bash> 
 +config system session-ttl 
 +    set default 1800 
 +end 
 +</code> 
 + 
 +Modifier le timeout d'un type de session, par exemple des flux HTTP : 
 +<code bash> 
 +config system session-ttl 
 +    config port 
 +        edit 80 
 +            set protocol 6 
 +            set start-port 80 
 +            set end-port 80 
 +            set timeout 1800 
 +        next 
 +    end 
 +end 
 +</code> 
 + 
 +Enfin, il est aussi possible de personnaliser le TTL de sessions dans les objets service du firewall (ici ports tcp/80 et 8080) : 
 +<code bash> 
 +config firewall service custom 
 +    edit "HTTP_custom" 
 +        set tcp-portrange 80 8080 
 +        set session-ttl 1800 
 +    next 
 +end 
 +</code> 
 +=======Firewall====== 
 + 
 +<code bash> 
 +# afficher la politique de sécurité 
 +show firewall policy
  
 # stats sur le filtrage de paquets # stats sur le filtrage de paquets
Line 529: Line 1000:
 =====Identity-based policy===== =====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.+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 en HTTPx.
  
-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é.+Pour cela il faut d'abord définir un groupe d'utilisateurs (dans User & Device > User > User Groups), puis l'ajouter en "Source" dans une une règle classique de la politique de sécurité 
 +<code bash> 
 +config user group 
 +   edit "wifi-users" 
 +      set member "toto" "tata" 
 +   end 
 +config firewall policy 
 +   edit "<ID_RULE>" 
 +      set groups "wifi-users" 
 +   end 
 +</code>
  
 Les pré-requis pour cela : 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.   * 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   * 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é +  * le portail captif (HTTP) est hébergé par défaut 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...).+  * 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.+Une fois authentifié, un utilisateur peut "utiliser" les règles comprenant son groupe (même sur d'autres interfaces source/dest) sans re-saisir son login/mdp.
  
-On peut personnaliser la mire d'authentification dans le menu "System / Config / Replacement Messages".+====Utiliser un certificat spécifique====
  
-Dans la règle de sécurité on peut +Pour utiliser un certificat spécifique pour la page d'authentification 
-  * rediriger l'authentification vers une page spécifique avec la directive ''set auth-redirect-addr <URL>''  +  * faire que l'IP du portail captif du Fortigate résolve (par exemple 10.0.0.1 <-> wifi.intra.domaine.com) 
-  * 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"+  * créer un certificat matchant ce nom (wifi.intra.domaine.com) 
 +  * rediriger l'authentification vers cette URL et préciser le certificat à utiliser (il faudra au préalable l'ajouter dans la liste des certificats disponibles sur le Fortigate, ce qui se fait dans "System / Certificates") : 
 +<code bash> 
 +config firewall policy 
 +   edit 36 
 +      set auth-redirect-addr "wifi.intra.domaine.com" 
 +      set auth-cert cert-wifi.intra 
 +   end 
 +</code>
  
-doc utile : [[http://help.fortinet.com/fos50hlp/52data/Content/FortiOS/fortigate-firewall-52/Security%20Policies/Identity%20Based%20Policies.htm|Identity-based policies]] sur help.fortinet.com+Enfin, il faut passer la page d'authentification en HTTPS (par défaut elle est servie HTTP) : 
 +<code bash> 
 +config user setting 
 +   set auth-secure-http enable 
 +end 
 +</code> 
 + 
 +doc utile : 
 +  * [[http://help.fortinet.com/fos50hlp/52data/Content/FortiOS/fortigate-firewall-52/Security%20Policies/Identity%20Based%20Policies.htm|Identity-based policies]] sur help.fortinet.com 
 +  * [[http://kb.fortinet.com/kb/viewContent.do?externalId=FD30760|Using secure authentication (HTTPS) on a FortiGate and redirecting the authentication page]] 
 + 
 +On peut personnaliser la mire d'authentification dans le menu "System / Config / Replacement Messages"
 + 
 +Changer le port par défaut (par défaut c'est le 1000) : 
 +<code bash> 
 +config system global 
 +   set auth-https-port 1001 
 +end 
 +</code>
  
 Pour lister les utilisateurs authentifiés ainsi que diverses infos y ayant attrait : Pour lister les utilisateurs authentifiés ainsi que diverses infos y ayant attrait :
 <code bash> <code bash>
 diagnose firewall auth list diagnose firewall auth list
- +(remplacer "list" par filter/clear pour filtrer ou supprimer des sessions)
-# remplacer "list" par filter/clear pour filtrer ou supprimer des sessions+
 </code> </code>
  
Line 620: Line 1126:
 Pour créer un nouveau VDOM il suffit de faire ''edit <nom_du_nouveau_vdom>''. 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 :+====Interconnecter 2 VDOMs==== 
 + 
 +On peut relier 2 VDOMs via un équipement externe ou via des vdom-links, des interconnexions internes au Fortigate (qui transitent par le "fond de panier logiciel" du châssis). On les créer comme on créer une interface classique, mais pour les supprimer on doit passer par la CLI :
 <code bash> <code bash>
 config global config global
Line 627: Line 1135:
       end       end
 </code> </code>
-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.+Les vdom-link **npuX-vlink**créés automatiquement quand on active la prise en charge des VDOMssont 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. 
 + 
 +====Supprimer un VDOM==== 
 + 
 +Pour supprimer un VDOM, comme pour tout objet dans FortiOS, il faut d'abord supprimer les références à cet objet. Pour lister les références à un VDOM, aller dans Global > System > VDOM et cliquer sur le nombre de référence affiché pour les lister. En CLI on peut les lister ainsi (exemple pour un VDOM nommé "vpn") : 
 +<code bash> 
 +diagnose sys checkused system.vdom.name vpn 
 + entry used by table system.interface:name 'ssl.vpn' 
 + entry used by table system.vdom-property:name 'vpn' 
 +</code> 
 + 
 +On ne peut supprimer le VDOM que lorsqu'il ne reste plus que les 2 références sus-citées (qui sont générées et supprimées automatiquement avec le VDOM). Une fois cette condition remplie : Global > System > VDOM, clic droit puis Supprimer ; ou en CLI : 
 +<code bash> 
 +config vdom 
 +   delete <VDOM_NAME> 
 +end 
 +</code> 
 + 
  
  
Line 712: Line 1238:
  
 En webUI, la configuration se réalise dans "Log & Report > Log Config > Log Settings" (en Global). En webUI, la configuration se réalise dans "Log & Report > Log Config > Log Settings" (en Global).
 +<WRAP center round info 80%>
 +Apparemment depuis les versions FortiOS 5.6, le log sur les disques SSD n'est plus activé/activable pour des raisons d'usure prématurée du SSD. Dans les "Log & Report > Log settings" on n'a donc plus de choix pour l'option "Display Logs From", et il est affiché "Selected log location is currently disabled."
 +</WRAP>
  
 Pour consulter les logs en CLI : Pour consulter les logs en CLI :
Line 796: Line 1325:
 # générer des messages de log pour test : # générer des messages de log pour test :
 diagnose log test diagnose log test
 +</code>
 +
 +Pour debugguer le process de gestion des logs, miglogd :
 +<code bash>
 +diagnose debug application miglogd -1
 +diagnose debug enable
 </code> </code>
  
Line 802: Line 1337:
 diagnose debug config-error-log read diagnose debug config-error-log read
 </code> </code>
 +
 +
 +======Mail d'alerte======
 +
 +Le Fortigate peux envoyer des mails d'alerte par rapport à un niveau (Emergency, Alert, Critical, Error, Warning, etc...) ou une catégorie ; cela se configure dans "Log & Report > Alert E-mail".
 +
 +Le serveur de mail à utiliser est personnalisable dans "System > Advanced > Email Service".
 +
 +Pour tester l'envoi de mail, en CLI : ''diagnose log alertmail test''
 +
 ======Services réseau====== ======Services réseau======
  
Line 828: Line 1373:
 # vider les attributions d'adresses # vider les attributions d'adresses
 execute dhcp lease-clear <@ IP | all> execute dhcp lease-clear <@ IP | all>
 +
 +# debug
 +diagnose debug console timestamp enable
 +diagnose debug app dhcps 7
 +diagnose debug enable
 </code> </code>
  
  
 +=====NTP=====
 +
 +Le NTP client (pour MAJ l'heure du firewall) se configure via le Dashboard global, dans le panneau "System Information" : il faut cliquer sur le lien de la ligne de la date et l'heure. Depuis la version 5.6, un encart "System Time" a été ajouté dans "System / Settings", ce qui est plus logique...
 +
 +En CLI on peut affiner les réglages NTP, notamment ajouter plus d'un serveur de temps, configurer l'interface source, etc... Exemple de configuration :
 +<code bash>
 +config global
 +  config system ntp
 +    set ntpsync enable
 +    set type custom
 +    config ntpserver
 +        edit 1
 +            set server "10.0.1.1"
 +        next
 +        edit 2
 +            set server "10.0.2.2"
 +        next
 +    end
 +    set source-ip 10.0.0.1
 +  end
 +end
 +</code>
 +
 +Pour vérifier l'état de la synchronisation de temps, et si les serveurs sont joignables :
 +<code bash>
 +diagnose sys ntp status 
 +synchronized: yes, ntpsync: enabled, server-mode: disabled
 +
 +ipv4 server(10.0.1.1) 10.0.1.1 -- reachable(0xf1) S:1 T:5 selected 
 + server-version=4, stratum=4
 + reference time is debbeaed.145d3c58 -- UTC Fri Jun  1 15:55:25 2018
 + clock offset is -0.004431 sec, root delay is 0.001755 sec
 + root dispersion is 0.074173 sec, peer dispersion is 53 msec
 +</code>
 +
 +
 +====Activer le serveur NTP du FTG====
 +
 +Le Fortigate peut faire office à son tour de serveur NTP pour un réseau local ; il faut pour cela l'activer sur chaque interface individuellement ; cela se configure 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").
 ======Services sécurité====== ======Services sécurité======
  
Line 872: Line 1461:
 </code> </code>
  
 +=====update via webproxy=====
  
 +Pour les Fortigate qui n'ont pas un accès direct à Internet, on peut configurer l'usage d'un proxy web :
 +<code bash>
 +config system autoupdate tunneling
 +    set status enable
 +    set address "10.0.178.10"
 +    set port 3128
 +end
 +# éventuellement, spécifier l'IP source à utiliser pour cela :
 +config system fortiguard
 +    set source-ip 10.0.178.1
 +end
 +</code>
 +src: https://kb.fortinet.com/kb/documentLink.do?externalID=FD36587
 +
 +Si le Fortiguard ne se met pas à jour, on peut diagnostiquer avec :
 +<code bash>
 +# depuis le VDOM d'admin (root par defaut)
 +execute ping update.fortiguard.net
 +
 +diagnose test update info
 +
 +diagnose debug enable
 +diagnose debug application update 255
 +execute update-ase
 +execute update-av
 +execute update-ips
 +</code>
 ======Diagnostique et debug====== ======Diagnostique et debug======
  
Line 884: Line 1501:
 # ~get tech : diagnostique complet à envoyer au support aussi # ~get tech : diagnostique complet à envoyer au support aussi
 diagnose debug report diagnose debug report
 +execute tac report
 +
 +# debugguer une fonction (~un process)
 +# <debug_lvl> varie selon l'appli concernée, mais le max est toujours -1
 +diagnose debug application <daemon> <debug_lvl>
 +
 +# pour réinitialiser le niveau de debug
 +diagnose debug reset
 +
 +# activer le log dans la console
 +diagnose debug comlog enable
 +# lire les logs
 +diagnose debug comlog read
 +# reset les logs console
 +diagnose debug comlog clear
 +diagnose debug comlog info
 </code> </code>
 +
 +Sur certains modèles on ne peut pas consulter les logs de debug à postériori ; dans ce cas si on sait reproduire le problème, ouvrir une console sur le Fortigate, logguer la session puis :
 +<code bash>
 +diagnose debug kernel level 7
 +diagnose debug console timestamp enable
 +diagnose debug enable
 +</code>
 +
 +En cas d'ultime recourt il existe une image de firmware (HQIP pour Hardware Quick Inspection Package) pour passer des tests hardware poussés : [[https://kb.fortinet.com/kb/microsites/search.do?cmd=displayKC&docType=kc&externalId=FD34745|RMA Note: HQIP - Hardware Quick Inspection Package]].
  
 =====ping et cie===== =====ping et cie=====
Line 921: Line 1563:
 diagnose debug cli 0 diagnose debug cli 0
 diagnose debug flow show console enable diagnose debug flow show console enable
 +# bonus: encore plus verbeux
 +diagnose debug flow show function-name enable
 +diagnose debug flow show iprope enable
  
 # filtrer sur une adresse (source, dest) # filtrer sur une adresse (source, dest)
Line 935: Line 1580:
 diagnose debug flow trace stop diagnose debug flow trace stop
 diagnose debug disable diagnose debug disable
- 
-# bonus 
-diagnose debug flow show function-name enable 
-diagnose debug flow show iprope enable 
 </code> </code>
  
Line 979: Line 1620:
 =====sniffer packet===== =====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 :+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 :
 <code bash> <code bash>
 diagnose sniffer packet any '' 4 0 l diagnose sniffer packet any '' 4 0 l
Line 995: Line 1636:
  
 <WRAP center round info 80%> <WRAP center round info 80%>
-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 [[informatique:fortinet:start#acceleration_hardware_np|désactiver l'accélération matérielle]] sur le flux qu'on veut sniffer.+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, excepter les ouvertures de sessions. Pour sniffer tous ces paquets, il faut au préalable [[informatique:fortinet:start#acceleration_hardware_np|désactiver l'accélération matérielle]] sur le flux qu'on veut sniffer mais cela aura un impact sur les performances.
 </WRAP> </WRAP>
  
Line 1034: Line 1675:
  
 diagnose debug app hatalk 255 diagnose debug app hatalk 255
 +
 +# Afficher les paquets ICMP de type 3 code 4
 +# (fragmentation nécessaire mais impossible à cause du drapeau (flag) DF)
 +diagnose sniffer packet any 'icmp[0] = 3 and icmp[1] = 4' 4 0 l
 +# alternative :
 +diagnose sniffer packet any 'icmp[0:2] = 0x0304' 4 0 l
 </code> </code>
  
 +
 +=====Packet capture=====
 +
 +On peut capturer des paquets au format pcap pour pouvoir interpréter la trace avec Wireshark. Pour cela, il suffit de se rendre dans le menu "Network > Packet capture".
 +
 +{{:informatique:fortinet:packet_capture_5.2.png?nolink |}}
 +
 +<WRAP center round important 60%>
 +Si le menu n'apparait pas, on peut s'y rendre avec l'URL : https://[management-IP]/ng/page/p/firewall/sniffer/
 +</WRAP>
 +<WRAP center round alert 60%>
 +Si l'on tombe sur une "Error 403: Access denied." avec l'astuce précédente, c'est que la fonction n'est pas disponible. Cela arrive si le Fortigate n'a pas de disque dur interne, ou s'il est configuré en mode "WAN Optimization" au lieu  de "Disk logging" (ce mode se configure dans "Global > System > Advanced", puis "Disk settings", et nécessite un reboot du Forti + formatage du disque si on le modifie.
 +</WRAP>
 +
 +=====iperf=====
 +
 +Les fortigates intègrent un client iperf (accessible à partir du mode global), qui permet de réaliser des tests de débit entre 2 interfaces du même forti, ou avec un serveur externe.
 +<code bash>
 +conf global
 +# test avec un serveur iperf externe
 +diagnose traffictest client-intf wan1
 +diagnose traffictest port 5201
 +diagnose traffictest run -c 10.0.1.24
 +
 +# test entre l'interfaces wan1 et wan2 du même forti
 +diagnose traffictest client-intf wan1
 +diagnose traffictest server-intf wan2
 +diagnose traffictest run
 +</code>
 +Malheureusement il n'est pas possible de l'utiliser en mode serveur à partir d'autres clients que celui local.
 +
 +La plupart des options classiques d'iperf sont disponibles, on peut les afficher avec ''diagnose traffictest run -h''
 +
 +
 +=====Mécanismes de protection=====
 +
 +====Conserve mode====
 +
 +Le **conserve mode** est un mécanisme de protection qui est enclenché lorsque le système n'a plus assez de mémoire partagée disponible. Cela a pour conséquence de désactiver l'AV et les changements de configuration, afin de consommer moins de ressources. Il peut être invoqué également si la mémoire libre passe en dessous d'un seuil critique (red threshhold=88% par défaut). Si le seuil extrême est atteint (extrem threshold=95%) le firewall bloque les nouvelles sessions. Ce mécanisme se désactive lorsque l'on passe en dessous du seuil vert (green threshold=82%).
 +
 +On peut configurer l'action à faire avec l'antivirus:
 +<code bash>
 +config system global
 +set av-failopen {off | pass | one-shot | idledrop}
 +</code>
 +  * off : les sessions ouvertes continent mais les nouvelles sont bloquées ; si une session ouverte nécessite l'AV-proxy elle sera bloquée car toute nouvelle allocation de ressource est bloquée
 +  * pass : bypass l'AV-proxy (default)
 +  * one-shot : pareil que "pass" mais l'AV-proxy est définitievement désactivé pour les sessions ouvertes PENDANT le conserve mode.
 +  * idledrop : le forti va chercher a libérer de la mémoire en coupant les sessions du host qui en a le plus d'ouvertes, jusqu'à sortir du conserve mode. C'est utile en cas de malware par ex, mais pas si le forti est à genoux par du trafic légitime.
 +
 +====Session removal====
 +
 +Le **session removal** est un mode qui s'enclenche lorsque le kernel ne peut plus allouer de mémoire il va couper les sessions les plus anciennes. Ce mode plus critique arrive après le passage en conserve mode. Le nombre de sessions coupées est visible dans le paramètre "memory_tension".
 +
 +Commandes de debug:
 +<code bash>
 +diagnose hardware sysinfo shm
 +SHM counter:      9237843
 +SHM allocated:   29618182
 +SHM total:     1337155584
 +conservemode:           2 # <- 0=OK ; 1=conserve mode ; 2=kernel session fail mode
 +shm last entered:     n/a
 +system last entered:  Tue Dec  1 11:48:23 2020
 +SHM FS total:  1368051712
 +SHM FS free:   1337192448
 +SHM FS avail:  1337192448
 +SHM FS alloc:    30859264
 +
 +get sys perf stat | grep Memory
 +Memory states: 86% used         # <- raison du conserve mode
 +
 +diag sys top
 +
 +diag hardware sysinfo memory
 +</code>
 +
 +Tuning pour optimiser la mémoire :
 +  * [[https://www.cyrill-gremaud.ch/fortigate-conserve-mode-investigations/|cyrill-gremaud.ch / Conserve mode investigations]]
 +  * [[https://help.fortinet.com/fos50hlp/52data/Content/FortiOS/fortigate-troubleshooting-52/Common_questions.htm?Highlight=Conserve%20mode#How3|Help Fortinet : How to check CPU and memory resources]]
 +<code>
 +config system global
 +set tcp-halfclose-timer 60   --> default 120 s
 +set tcp-halfopen-timer 5     --> default 10 s
 +set tcp-timewait-timer 0     --> default 1 s
 +set udp-idle-timer 60        --> default 180 s
 +!
 +config ips global
 +set socket-size 4            --> default 32 MB
 +set engine count 2           --> default 0 = infinite
 +!
 +config system dns
 +set dns-cache-limit 300      --> default 1800 s
 +!
 +config system session-ttl
 +set default 300              --> default 3600 s
 +</code>
 ======MAJ du firmware====== ======MAJ du firmware======
 +
 +=====Choisir le bon=====
 +
 +Ces quelques lignes non contractuelles vous donnerons des pistes pour déterminer la bonne version à installer dans votre environnement.
 +
 +Il est globalement recommandé, en 2022+, de mettre à jour régulièrement les équipements sensibles comme les firewalls, afin qu'ils intègrent tous les correctifs de sécurité des failles connues. "Tant que ça marche, on n'y touche pas" est un raisonnement désuet aujourd'hui sur ce type de matériel connecté.
 +
 +A la différence d'autres constructeurs, Fortinet ne publie pas (à ma connaissance) de liste de versions recommandées par modèle. Globalement, toutes les versions de FortiOS sont portées sur tous les modèles (récents).
 +
 +Plus une version (majeure = les 2 premier chiffres dans le numéro de version, par exemple 7.2) est récente, plus elle dispose de fonctionnalités mais plus elle risque de comporter des bugs. De ce fait il est officieusement recommandé de ne pas installer en production des versions "trop jeunes", c'est à dire parues il y a moins de 6 mois et/ou avant la publication des 3-4 premières versions mineures (appelées "New Feature Releases"), ceci afin d'attendre la correction des plus gros bugs.
 +
 +Pour accéder aux outils Fortinet, on se log sur le portail [[https://support.fortinet.com]] ;
 +
 +  * "Support > Ressources" ; puis "Product Life cycle" permet de connaitre les dates de fin de vente / développement / support des produits Fortinet, autant le hardware (appliances) que le software (firmwares FortiOS).
 +
 +  * "Support > Firmware Download" donne accès aux release notes et aux images de firmware. Le premier onglet indique les release notes des dernières versions supportées ; sur le second, "Download", on a l'historique de toutes les versions de FortiOS parues ; le 3ème onglet, "Upgrade Path", est un outil qui permet, à partir d'un modèle, de sa version actuelle et de la version cible, de connaitre la liste des versions intermédiaires à installer. C'est à suivre à la lettre pour éviter les mauvaises surprises comme la perte de configuration...
 +
 +Les versions **NPI** (New Product Integration) possèdent  des numéros de build différents de la majorité des autres images ; elles correspondent aux développements d'une version à un nouveau modèle qui vient de sortir. Toutes les versions ne sont pas adaptées aux nouveau modèles, et celles-ci sont moins stables que les builds courants.
 +
 +Depuis la version 7.2, les versions même mineures sont tagguées en **Feature ou Mature release** ; ces flags sont indiqués dans le nom de l'image, juste après le numéro de version (par ex: FGT_100F-v7.0.7.__**F**__-build0367-FORTINET.out) et sont un indicateur de nouveautés fonctionnelles ou stabilité de la version.
 +
 +Une fois la bonne version trouvée, jetez un œil aux release notes de celle-ci afin d'être sûrs qu'aucun bug ne touche votre modèle ou une des fonctionnalité que vous utilisez. Elles comportent parfois des contre-indications pour certaines configurations.
 +
 +
 +=====Mise en œuvre=====
  
 On peut récupérer la version courante en mode global : On peut récupérer la version courante en mode global :
Line 1064: Line 1832:
 execute backup config ftp <FILENAME> <ftp server> execute backup config ftp <FILENAME> <ftp server>
 </code> </code>
 +
 +NB : il n'est (à priori) pas/plus possible, dans les dernières versions de firmware (5.x et +), d'uploader une image sur le Fortigate sans l'activer : le firewall reboot systématiquement à chaque upload de firmware.
 +
 +
 +=====Rollback=====
 +
 +Si une version de firmware ne fonctionne pas comme prévu, on peut faire un rollback c'est-à-dire un retour sur la précédente version :
 +<code bash>
 +# lister les partitions (gestion des images de fortiOS)
 +diagnose sys flash list
 + FGT800xxxxxxxxxx # diagnose sys flash list
 + Partition  Image                                     TotalSize(KB)  Used(KB)  Use%  Active
 +          FGT800-4.00-FW-build694-161108                    27541     22537   82%  Yes
 +          FGT800-4.00-FW-build689-140731                    27541     22537   82%  No
 + Image build at Aug  1 2014 02:49:11 for b0689
 +
 +# ensuite on peut configurer l'image (1 ou 2, primary ou secondary) à charger par défaut au prochain reboot :
 +execute set-next-reboot secondary
 + Default image is changed to image# 2.
 +
 +# rebooter
 +execute reboot
 + This operation will reboot the system !
 + Do you want to continue? (y/n)y
 +</code>
 +
  
 =====USB auto-install===== =====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 : 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+  * un fichier **fgt_system.conf**, il chargera ce fichier de configuration au boot
   * une image **image.out** il chargera ce firmware au boot   * une image **image.out** il chargera ce firmware au boot
  
-Ces noms de fichiers sont configurables en webUI dans "System > Config > Advanced".+Ces noms de fichiers sont configurables en webUI dans "System > Config > Advanced" ou en CLI : 
 +<code bash> 
 +config global 
 +  config system auto-install 
 +    set auto-install-config enable 
 +    set auto-install-image enable 
 +    set default-config-file "fgt_system.conf" 
 +    set default-image-file "image.out" 
 +  end 
 +end 
 +</code>
  
 +La clé doit être formatée en FAT pour être lisible par le Fortigate ; pour le vérifier :
 +<code bash>
 +diagnose hardware deviceinfo disk
 + [..]
 + Disk USB-7(user-usb) ref:  32  28.8GiB    type: USB [Kingston DataTraveler 3.0] dev: /dev/sdc
 +  partition ref:  33  28.8GiB,  28.8GiB free  mounted: Y  label:  dev: /dev/sdc1 start: 0
  
 +execute usb-disk list
 + 2019-07-23 16:07:14   43664535 image.out
 +</code>
 +
 +Et, si la conf/l'image n'est pas chargée au démarrage, il est toujours possible de la charger en CLI :
 +<code bash>
 +execute restore image usb <filename>
 +execute restore config usb <filename>
 +</code>
 ======Métrologie/supervision====== ======Métrologie/supervision======
  
Line 1105: Line 1924:
 .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.4.2.1.2.3 % CPU (Core #) 5 min
 .1.3.6.1.4.1.12356.101.4.1.4.0 memoire (%) ? .1.3.6.1.4.1.12356.101.4.1.4.0 memoire (%) ?
 +.1.3.6.1.2.1.1.1 Description SNMP
 .1.3.6.1.2.1.1.3 uptime .1.3.6.1.2.1.1.3 uptime
 +.1.3.6.1.2.1.1.4 Contact SNMP
 +.1.3.6.1.2.1.1.5 hostname + local domain name
 +.1.3.6.1.2.1.1.6 Location SNMP
 # sensors # sensors
 .1.3.6.1.4.1.12356.101.4.3.1.0 Hardware Sensor count .1.3.6.1.4.1.12356.101.4.3.1.0 Hardware Sensor count
Line 1123: Line 1946:
 .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.6 IF-MIB::ifHCInOctets (Counter64)
 .1.3.6.1.2.1.31.1.1.1.10 IF-MIB::ifHCOutOctets (Counter64) .1.3.6.1.2.1.31.1.1.1.10 IF-MIB::ifHCOutOctets (Counter64)
 +# table ARP/correspondance adresse IP -> MAC
 +.1.3.6.1.2.1.4.22.1.2                   IP-MIB::ipNetToMediaPhysAddress
 +#(utilisation : <OID>.<ID_ITF>.<adresse IP>, par ex :
 +#IP-MIB::ipNetToMediaPhysAddress.3.10.0.0.1 pour obtenir la MAC de l'IP 10.0.0.1 sur le port3 du Fortigate)
 # policy # 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.1.1 fgFwPolID (index des # des règles)
Line 1179: Line 2006:
 =====fnsysctl===== =====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.+**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>). <del>Cette commande n'est plus disponible à partir de la version FortiOS 5.4.</del>
  
 <code bash> <code bash>
Line 1194: Line 2021:
  RX bytes:1702617951232 (1585.7 GB)  TX bytes:2084883916597 (1941.7 GB)   RX bytes:1702617951232 (1585.7 GB)  TX bytes:2084883916597 (1941.7 GB) 
  Interrupt:19 Base address:0x6000 Memory:e7800000-0  Interrupt:19 Base address:0x6000 Memory:e7800000-0
 +</code>
 +<code bash>
 +FGT (global) # fnsysctl cat /proc/net/dev
 +Inter-|   Receive                                                |  Transmit
 + face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
 +ort13: 428296577505964 392502799967    0 4301196  0         141523980618022 265213255572    0           0
 </code> </code>
  
Line 1244: Line 2077:
 source : [[http://kb.fortinet.com/kb/documentLink.do?externalID=FD34502|KB FD34502]] source : [[http://kb.fortinet.com/kb/documentLink.do?externalID=FD34502|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===== =====Route statique inactive=====
Line 1274: Line 2104:
    set gui-allow-unamed-policy enable    set gui-allow-unamed-policy enable
 </code> </code>
 +
 +Cela peut également se configurer en webUI dans System > Features Visibility, puis cocher "Allow unnamed policies"
 +=====Configuration d'une CRL=====
 +
 +Pour utiliser une liste de révocation (récupération en HTTP) et la mettre à jour périodiquement (toutes les 3600s = 1h) :
 +<code bash>
 +config global
 +  config certificate crl
 +    edit "G_CRL_1"
 +        set http-url "http://10.0.0.2/path_to_the_crl_file/crl.pem"
 +        set source-ip 10.0.0.1
 +        set update-interval 3600
 +    next
 +  end
 +end
 +</code>
 +''source-ip'' permet naturellement de spécifier l'adresse à partir de laquelle le Fortigate enverra sa requête HTTP.
 +
 +Pour forcer la MAJ de la CRL "G_CRL_1" manuellement, lancer en mode global la commande :
 +<code bash>
 +execute vpn certificate crl import auto G_CRL_1
 +</code>
 +
 +=====Where used ?=====
 +
 +Pour pouvoir supprimer un objet (adresse, interface, VDOM, etc...) il faut que toutes ses références, dans d'autres objets, soient supprimées.
 +
 +Par exemple pour supprimer une interface, il faut au préalable supprimer les routes statiques, les tunnels, les objets addresse, etc... qui en font mention. Cela peut se faire en webUI, dans le menu "Network > Interfaces" en affichant la colonne ''Ref.'' :
 +{{ :informatique:fortinet:forti_refs_col.png?600 |}}
 +
 +On peut aussi lister les objets utilisés directement en CLI, avec la (nouvelle) commande :
 +<code bash>
 +fgt600e (global) # diagnose sys cmdb refcnt show system.interface:name ico_extranet
 +entry used by table system.interface:name 'VISIO'
 +entry used by table system.interface:name 'WIFI'
 +</code>
 +
 +Si tout semble propre mais que l'objet ne peut pas être supprimé (la webUI affiche ''Entry is used''), essayer de le supprimer en CLI : le message d'erreur sera plus verbeux. Par exemple, une interface sans référence ne pouvait pas être supprimée ; en CLI il est affiché :
 +<code bash>
 +fgt600e (interface) # delete LAN-centre
 +Error: IP address 10.41.1.1 is configured as source-ip for communications to NTP server
 +command_cli_delete:5774 delete table entry LAN-centre unset oper error ret=-23
 +Command fail. Return code -23
 +</code>
 +=====VPN protocols relaying=====
 +
 +Pour mettre en place un concentrateur VPN on créer une interface virtuelle "dialup", en attente de connexion IKE/IPSec entrante. Une fois le VPN établit, pour laisser passer les requêtes broadcastées à travers le routage de l'interface, il faut les transférer en unicast vers les serveurs spécifiés avec les commandes suivantes :
 +<code bash>
 +config system interface
 +   edit dialup
 +      # pour le DHCP (dans ce cas, DHCP over IPSec)
 +      set dhcp-relay-service enable
 +      set dhcp-relay-ip "10.1.1.24"
 +      set dhcp-relay-type ipsec
 +      # pour le NetBIOS
 +      set netbios-forward enable
 +      set wins-ip 10.1.16.253
 +   next
 +</code>
 +
 +Pour rappel le DHCP permet la découverte et l'attribution des paramètres réseau pour le client VPN (son IP, masque réseau, passerelle, DNS, NTP et serveurs WINs) et le NetBIOS permet de faire passer les flux vers les serveurs WINS. Cela permet par exemple un ersatzt de DNS dynamique car les clients Windows s'annoncent auprès des WINS quand ils se connectent en VPN, ou, dans certains cas, de débloquer le changement de mot de passe sur un domaine.
 +
 +=====Auto filesystem check=====
 +
 +Après une coupure électrique les Fortigate affichent un message d'alerte invitant l'utilisateur à rebooter et réaliser un filesystem check pour contrôler l'intégrité du système de fichier. Depuis les version 6 il est possible de réaliser automatiquement ce check au démarrage , via le menu : System> Settings> Start Up, "Auto file system check" ; ou en CLI:
 +<code bash>
 +config system global
 +   set autorun-log-fsck enable
 +end
 +</code>
 +
 +C'est toutefois non-recommander car 1) ça prend du temps donc il vaut mieux le planifier en heure non ouvrée et 2) en cas d'incident électrique le courant peut ne pas être stable et donc recouper le Forti pendant son check -> dangereux.
 +
 +=====SSH sortant impossible=====
 +
 +Contexte : Utiliser le client SSH de la CLI du Forti pour se connecter sur un autre équipement, dont les paramètres SSH ne sont pas compatibles car jugés pas assez sécurisés. Depuis le forti :
 +<code bash>
 +forti (root) # execute ssh admin@10.0.0.1
 +Unable to negotiate with 10.0.0.1: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512
 +</code>
 +
 +Cela signifie que l’équipement cible propose des paramètres SSH non acceptés par le Forti, et que donc la connexion SSH ne peut s'établir. Il faut donc agir sur l'un ou l'autre des équipement, dans cet exemple on va assouplir le Forti en lui permettant d'accepter l'algo **diffie-hellman-group14-sha1** réclamé par l’équipement distant.
 +
 +Pour modifier les paramètres SSH acceptés par le forti, qui ont été durcis avec certaines versions :
 +<code bash>
 +config global
 +   config system global
 +      set strong-crypto disable
 +      append ssh-kex-algo diffie-hellman-group14-sha1
 +   end
 +end
 +</code>
 +Cela permet d'assouplir les paramètres négociés à l'établissement de la connexion SSH, ce n'est pas recommandé sans bonne raison.
 +
 +<WRAP center round important 60%>
 +NB : tuner ces paramètres impacte les protocoles chiffrés : HTTPS/SSH/TLS/SSL
 +</WRAP>
 +
 ======Liens utiles====== ======Liens utiles======
  
   * [[http://docs-legacy.fortinet.com/cb/html/index.html#page/FOS_Cookbook/Install_advanced/cb_enhance_security.html|Enhancing FortiGate Security (fortinet.com)]]   * [[http://docs-legacy.fortinet.com/cb/html/index.html#page/FOS_Cookbook/Install_advanced/cb_enhance_security.html|Enhancing FortiGate Security (fortinet.com)]]
informatique/fortinet/start.1500994603.txt.gz · Last modified: 2017/07/25 14:56 (external edit)