{"id":7,"date":"2019-09-04T12:45:51","date_gmt":"2019-09-04T10:45:51","guid":{"rendered":"https:\/\/whatifsecu.tech\/?page_id=7"},"modified":"2020-08-25T12:01:28","modified_gmt":"2020-08-25T10:01:28","slug":"fortinet","status":"publish","type":"page","link":"https:\/\/whatifsecu.tech\/?page_id=7","title":{"rendered":"Fortinet"},"content":{"rendered":"\n<figure class=\"wp-block-image is-resized\"><a href=\"http:\/\/pteu.fr\/lib\/exe\/detail.php?id=informatique%3Afortinet%3Astart&amp;media=informatique:fortinet:fortinet_logo.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/pteu.fr\/lib\/exe\/fetch.php?media=informatique:fortinet:fortinet_logo.png\" alt=\"\" width=\"119\" height=\"119\"\/><\/a><\/figure>\n\n\n\n<p><a href=\"http:\/\/www.fortinet.com\/\">Fortinet<\/a>&nbsp;est une marque am\u00e9ricaine cr\u00e9\u00e9e en 2000 qui con\u00e7oit des \u00e9quipements de s\u00e9curit\u00e9 r\u00e9seau. Elle est notamment connue pour ses appliances FortiGate, des firewalls tout-en-un ayant des fonctionnalit\u00e9s de pr\u00e9vention d&#8217;intrusion, routage, proxy, filtrage web et mail, VPN.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"systeme\">Syst\u00e8me<\/h2>\n\n\n\n<p>En sortie d&#8217;usine, le compte&nbsp;<strong>admin<\/strong>&nbsp;a un mot de passe vide.<\/p>\n\n\n\n<p>A partir des versions FortiOS 6.2+, il est obligatoire de configurer un mot de passe \u00e0 la connexion.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># afficher les informations du syst\u00e8me<\/em>\nget system status\n<em># d'autres informations notamment sur le logging<\/em>\nget mgmt-data status\n&nbsp;\n<em># r\u00e9cup\u00e9rer la charge du syst\u00e8me et son uptime<\/em>\nget system performance status\n&nbsp;\n<em># affiche les informations des processus les plus consommateurs en CPU\/mem<\/em>\n<em># \u00e9quivalent de : get system performance top<\/em>\ndiagnose sys top\n<em># on peut pr\u00e9ciser X et Y qui sont le d\u00e9lais de refresh et le nombre de ligne affich\u00e9, par ex :<\/em>\ndiagnose sys top 1 20\n<em># - premi\u00e8re ligne : U \u2014 % user CPU, S - % system CPU, I \u2014 % CPU idle, T \u2014 Total memory in kB, F \u2014 free memory in kB<\/em>\n<em># - desc des colonnes : process name, pid, running status, CPU usage, memory usage. (Sleeping, Running, Zombie, &lt; - High priority, N \u2014 Low priority)<\/em>\n<em># on peut classer par CPU usage (Shift+P) ou par mem usage (Shift+M)<\/em>\n&nbsp;\n<em># version plus user-friendly (-h pour afficher l'aide)<\/em>\ndiagnose sys top-summary\n   CPU [|                                       ]   4.5%\n   Mem [|||||||||||||||||||||||||               ]  63.0%  2494M\/3954M\n   Processes: 20 (running=1 sleeping=99)\n   [..]\n&nbsp;\n<em># et quand un processus plante, prend trop de CPU ou de m\u00e9moire, on peut le killer :<\/em>\ndiagnose sys <strong>kill<\/strong> 11 &lt;PID&gt;<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"systeme\">Syst\u00e8me<\/h1>\n\n\n\n<p>En sortie d&#8217;usine, le compte&nbsp;<strong>admin<\/strong>&nbsp;a un mot de passe vide.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># afficher les informations du syst\u00e8me<\/em>\nget system status\n<em># d'autres informations notamment sur le logging<\/em>\nget mgmt-data status\n&nbsp;\n<em># r\u00e9cup\u00e9rer la charge du syst\u00e8me et son uptime<\/em>\nget system performance status\n&nbsp;\n<em># affiche les informations des processus les plus consommateurs en CPU\/mem<\/em>\n<em># \u00e9quivalent de : get system performance top<\/em>\ndiagnose sys top\n<em># on peut pr\u00e9ciser X et Y qui sont le d\u00e9lais de refresh et le nombre de ligne affich\u00e9, par ex :<\/em>\ndiagnose sys top 1 20\n<em># - premi\u00e8re ligne : U \u2014 % user CPU, S - % system CPU, I \u2014 % CPU idle, T \u2014 Total memory in kB, F \u2014 free memory in kB<\/em>\n<em># - desc des colonnes : process name, pid, running status, CPU usage, memory usage. (Sleeping, Running, Zombie, &lt; - High priority, N \u2014 Low priority)<\/em>\n<em># on peut classer par CPU usage (Shift+P) ou par mem usage (Shift+M)<\/em>\n&nbsp;\n<em># version plus user-friendly (-h pour afficher l'aide)<\/em>\ndiagnose sys top-summary\n   CPU [|                                       ]   4.5%\n   Mem [|||||||||||||||||||||||||               ]  63.0%  2494M\/3954M\n   Processes: 20 (running=1 sleeping=99)\n   [..]\n&nbsp;\n<em># et quand un processus plante, prend trop de CPU ou de m\u00e9moire, on peut le killer :<\/em>\ndiagnose sys <strong>kill<\/strong> 11 &lt;PID&gt;<\/pre>\n\n\n\n<p>Pour red\u00e9marrer ou \u00e9teindre le syst\u00e8me :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">execute reboot\nexecute shutdown<\/pre>\n\n\n\n<p>Ordre de traitement d&#8217;un paquet sur un Fortigate :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Step <em>#1 - Ingress<\/em>\n1. Denial of Service Sensor\n2. IP integrity header checking\n3. IPsec connection check\n4. Destination NAT\n5. Routing\n&nbsp;\nStep <em>#2 - Stateful inspection engine<\/em>\n1. Session Helpers\n2. Management Traffic\n3. SSL VPN\n4. User Authentication\n5. Traffic Shaping\n6. Session Tracking\n7. Policy lookup\n&nbsp;\nStep <em>#3 - Security profiles scanning process<\/em>\n1. Flow-based Inspection Engine\n2. IPS\n3. Application Control\n4. Data Leak Prevention\n5. Email Filter\n6. Web Filter\n7. Anti-virus\n8. Proxy-based Inspection Engine\n9. VoIP Inspection\n10. Data Leak Prevention\n11. Email Filter\n12. Web Filter\n13. Anti-virus\n14. ICAP\n&nbsp;\nStep <em>#4 - Egress<\/em>\n1. IPsec\n2. Source NAT\n3. Routing<\/pre>\n\n\n\n<p>MAJ d&#8217;apr\u00e8s la doc officielle Fortinet :&nbsp;<a href=\"https:\/\/docs.fortinet.com\/d\/life-of-a-packet-56\">Parallel Path Processing (Life of a Packet) v5.6.6<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/pteu.fr\/lib\/exe\/detail.php?id=informatique%3Afortinet%3Astart&amp;media=informatique:fortinet:life-of-a-packet_fortios-5.6.6.png\"><img decoding=\"async\" src=\"http:\/\/pteu.fr\/lib\/exe\/fetch.php?media=informatique:fortinet:life-of-a-packet_fortios-5.6.6.png\" alt=\"\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hardware\">Hardware<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># information sur le mat\u00e9riel<\/em>\nget hardware status<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># partitionnement du disque dur (au sens Linux, c\u00e0d bas niveau)<\/em>\ndiagnose hardware deviceinfo disk\n<em># lister les partitions (gestion des images de fortiOS)<\/em>\ndiagnose sys flash list\n&nbsp;\n<em># info sur les CPU (~ \/proc\/cpuinfo)<\/em>\ndiagnose hardware sysinfo cpu\n&nbsp;\n<em># ~lspci<\/em>\ndiagnose hardware pciconfig\n&nbsp;\n<em># allocation de la m\u00e9moire<\/em>\ndiagnose hardware sysinfo memory\n&nbsp;\n<em># afficher l'allocation des slabs (espaces m\u00e9moire pr\u00e9-allou\u00e9 pour les sessions par ex)<\/em>\ndiagnose hardware sysinfo slab\n&nbsp;\n<em># afficher l'utilisation de la m\u00e9moire partag\u00e9e (SHM)<\/em>\ndiagnose hardware sysinfo shm<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"interfaces\">Interfaces<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># affiche le tableau des compteurs d'interface (bytes, packets, errs, drop, etc...)<\/em>\ndiagnose netlink device list\n&nbsp;\n<em># affichage des infos \"bas niveau\" d'une interface (port1 ici) :<\/em>\n<em>#(notamment les compteurs d'interface, la MTU, son adresse MAC, etc...)<\/em>\ndiagnose netlink interface list port1\n<em># pour clearer les compteurs d'interface (\"bas niveau\", \u00e7a ne met pas \u00e0 jour les compteur de la premi\u00e8re commande d'en haut !) :<\/em>\ndiagnose netlink interface <strong>clear<\/strong> port1\n&nbsp;\n<em># informations d\u00e9taill\u00e9es sur un port (en mode global)<\/em>\n<em># \u00e9quivaut \u00e0 : get hardware nic &lt;port&gt;<\/em>\ndiagnose hardware deviceinfo nic &lt;port&gt;\n&nbsp;\n<em># modifier la MTU d'une interface<\/em>\nconfig system interface\n   edit \"port1\"\n      set mtu-override enable\n      set mtu 9000<\/pre>\n\n\n\n<p>Afficher les caract\u00e9ristiques des modules GBIC\/SFP* connect\u00e9s et reconnus :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">get sys interface transceiver port13\nInterface port13 - SFP\/SFP+\n  Vendor Name  :            Intel Corp\n  Part No.     :            FTLX8571D3BCVIT\n  Serial No.   :            XYZ\n  Measurement  Unit         Value        High Alarm   High Warning Low Warning  Low Alarm\n  ------------ ------------ ------------ ------------ ------------ ------------ ------------\n  Temperature  (Celsius)     42.6         78.0         73.0         -8.0        -13.0\n  Voltage      (Volts)       3.32         3.70         3.60         3.00         2.90\n  Tx Bias      (mA)          8.07        13.20        12.60         3.00         2.00\n  Tx Power     (dBm)         -2.0          0.0         -1.0         -7.0         -8.0\n  Rx Power     (dBm)         -1.9          0.0         -1.0        -18.0        -20.0\n    ++ : high alarm, + : high warning, - : low warning, -- : low alarm, ? : suspect.<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"port_d_admin_dedie\">Port d&#8217;admin d\u00e9di\u00e9<\/h4>\n\n\n\n<p>Cette fonctionnalit\u00e9, qui est pr\u00e9-configur\u00e9e pour les firewalls disposant de port nomm\u00e9s&nbsp;<code>mgmt*<\/code>, permet de d\u00e9dier une interface au management du Fortigate. Cela a pour effet d&#8217;interdire la cr\u00e9ation de r\u00e8gle de s\u00e9curit\u00e9 les incluant, de cr\u00e9er une route \u201cconnected\u201d dans la table de routage, et d&#8217;ajouter un menu permettant de filtrer les IPs pouvant se connecter dessus (ce qui outrepasse les directives&nbsp;<em>trusted host<\/em>&nbsp;d\u00e9finies dans les comptes utilisateur).<\/p>\n\n\n\n<p>Il est conseill\u00e9 de ne pas router de trafic utilisateur par ces interfaces.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system interface\n  edit \"mgmt2\" \n    set dedicated-to management\n  end\nend<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"creation_d_un_agregat\">Cr\u00e9ation d&#8217;un agr\u00e9gat<\/h4>\n\n\n\n<p>En webUI il suffit de cr\u00e9er une nouvelle interface de type \u201c802.3ad Aggregate\u201d, qui correspond \u00e0 un agr\u00e9gat de type LACP en mode active \/ slow avec une r\u00e9partition \u201cL4\u201d (hash de l&#8217;adresse IP et du port).<\/p>\n\n\n\n<p>Exemple de configuration en CLI avec les ports physiques 13 et 14 :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system interface\n    edit \"ag-extra\"\n        set type aggregate\n        set member \"port13\" \"port14\"\n    next\nend\n&nbsp;\n<em># en CLI on a acc\u00e8s aux param\u00e8tres avanc\u00e9s suivants :<\/em>\nset lacp-mode active | passive | static\nset lacp-speed slow | fast\nset algorithm L2 | L3 | L4<\/pre>\n\n\n\n<p>attention les param\u00e8tres de l&#8217;agr\u00e9gat doivent concorder avec la configuration de l&#8217;\u00e9quipement d&#8217;en face !<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"creation_d_un_switch_logique\">Cr\u00e9ation d&#8217;un switch logique<\/h4>\n\n\n\n<p>Pour cr\u00e9er un bridge (un switch logique) entre plusieurs ports d&#8217;un Fortigate :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system switch-interface\n   edit mon-switch-soft\n   set members port1 port2 port3 port4\nend<\/pre>\n\n\n\n<p>NB :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>ces interfaces doivent \u00eatre vierges de toute configuration ;<\/li><li>certaines fonctionnalit\u00e9s seront limit\u00e9es sur ces interfaces<\/li><li>des performances moindres sont \u00e9galement \u00e0 pr\u00e9voir<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"acceleration_hardware_np\">Acc\u00e9l\u00e9ration hardware (NP)<\/h3>\n\n\n\n<p>Certains mod\u00e8les de Fortigate sont \u00e9quip\u00e9s de&nbsp;<strong>n<\/strong>etwork&nbsp;<strong>p<\/strong>rocessors (NP) qui prennent en charge mat\u00e9riellement certaines fonctionnalit\u00e9s. Cela permet d&#8217;all\u00e9ger la charge CPU et d&#8217;acc\u00e9l\u00e9rer le temps de traitement (pour le chiffrement de tunnels IPSec par exemple).<\/p>\n\n\n\n<p>Pour lister les ports qui sont acc\u00e9l\u00e9r\u00e9s :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose npu np1 list      <em># ou \"get hardware ..\"<\/em>\ndiagnose npu np2 list\ndiagnose npu np4 list\ndiagnose npu np6 port-list<\/pre>\n\n\n\n<p>La liste des ports retourn\u00e9s indique les ports pris en charge par le NPx. Les ports de management n&#8217;y sont pas.<\/p>\n\n\n\n<p>Il existe donc plusieurs type de NP : le&nbsp;<strong>NP4<\/strong>&nbsp;par exemple, qui est int\u00e9gr\u00e9 sur certains des mod\u00e8les \u201cc\u201d (600c, 800c) :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>il g\u00e8re les sessions (fastpath acceleration)<ul><li>au d\u00e9but la session est remont\u00e9e \u00e0 la CPU pour rechercher un match avec une policy<\/li><li>puis le NP4 intercepte le trafic et le g\u00e8re ce qui d\u00e9charge la CPU<\/li><\/ul><\/li><li>le NP4 g\u00e8re aussi l&#8217;<a href=\"http:\/\/docs-legacy.fortinet.com\/fos50hlp\/50\/index.html#page\/FortiOS%25205.0%2520Help\/NP4.077.10.html\">acc\u00e9l\u00e9ration IPsec VPN<\/a>&nbsp;(encryption\/decryption)<\/li><li>le NP4 a une capacit\u00e9 de 10 Gbps ingress et 10 Gbps egress ; pass\u00e9e cette limite les sessions sont envoy\u00e9es \u00e0 la CPU<\/li><li>les&nbsp;<strong>NP4lite<\/strong>&nbsp;sont comme les NP4 en 2x moins puissants<\/li><li><a href=\"http:\/\/docs-legacy.fortinet.com\/fos50hlp\/50\/index.html#page\/FortiOS%25205.0%2520Help\/NP4.077.05.html\">NP4 session fast path requirements<\/a><\/li><\/ul>\n\n\n\n<p><a href=\"http:\/\/pteu.fr\/doku.php?id=informatique:fortinet:fortigate\">voir un comparatif succinct des performances des diff\u00e9rentes g\u00e9n\u00e9rations de NPx.<\/a><\/p>\n\n\n\n<p>Pour d\u00e9sactiver l&#8217;acc\u00e9l\u00e9ration mat\u00e9rielle sur un flux, il faut cr\u00e9er une r\u00e8gle dans la politique de s\u00e9curit\u00e9 et saisir la commande suivante :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config firewall policy\n   edit X\n      set auto-asic-offload disable<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"bypass_ports\">Bypass ports<\/h3>\n\n\n\n<p>Certains mod\u00e8les de Fortigate (les 800C par exemple) poss\u00e8dent 2 paires de ports ayant une fonction de&nbsp;<em>accelerated bypass<\/em>. Celle-ci permet, lorsque l&#8217;unit\u00e9 fonctionne en mode transparent, de laisser passer le trafic entre les 2 ports si l&#8217;unit\u00e9 est en manque d&#8217;\u00e9nergie ou pendant un reboot (<strong>fail-open<\/strong>). Aucun traitement ne sera r\u00e9alis\u00e9 par le Fortigate pendant le reboot, mais cela \u00e9vite de couper les flux.<\/p>\n\n\n\n<p>Dans le cas du 800C il s&#8217;agit des ports&nbsp;<code>wan1 \u2194 port1<\/code>&nbsp;et&nbsp;<code>wan2 \u2194 port2<\/code>&nbsp;(chaque paire fonctionne individuellement) ; si la fonction est activ\u00e9 la diode \u201cBYPS LED\u201d (ou fail-open) sera allum\u00e9e en rouge.<\/p>\n\n\n\n<p>Pour activer cette fonction (elle ne l&#8217;est pas par d\u00e9faut) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system bypass\n  set bypass-watchdog enable\n  set poweroff-bypass enable\nend<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"utilisateurs\">Utilisateurs<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># lister les utilisateurs connect\u00e9s<\/em>\nget system info admin status\n<em># m\u00eame commande, mais affiche les index<\/em>\nexecute disconnect-admin-session ?\n&nbsp;\n<em># pour d\u00e9connecter un utilisateur, par ex la session de l'utilisateur toto :<\/em>\nexecute disconnect-admin-session ?\nINDEX USERNAME        TYPE    VDOM     PROFILE      FROM             TIME\n    0 admin           <strong>ssh<\/strong>                           10.1.1.24        Wed Apr 10 14:09:14 2019\n    1 toto            <strong>ssh<\/strong>              RO_access    10.1.2.201       Mon Apr  8 14:19:59 2019\n&nbsp;\nexecute disconnect-admin-session 1<\/pre>\n\n\n\n<p>Interroger (pour test) le serveur LDAP :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose test auth ldap &lt;server_name&gt; &lt;username&gt; &lt;password&gt;<\/pre>\n\n\n\n<p>Pour debugguer le LDAP :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose debug appl authd 99\ndiagnose debug enable<\/pre>\n\n\n\n<p>Changer le mot de passe du compte admin :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config global\n   config system admin\n      edit admin\n         set password &lt;new-password&gt;\n         end<\/pre>\n\n\n\n<p>Modifier globalement les param\u00e8tres de login des utilisateurs (peut se configurer en global via&nbsp;<code>config system global<\/code>&nbsp;pour l&#8217;administration ou par VDOM via&nbsp;<code>config user setting<\/code>) :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Dans \u201cconfig system global\u201d<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">admin-lockout-duration    Lockout duration (sec) for firewall administration.\nadmin-lockout-threshold   Lockout threshold for firewall administration.\nadmin-login-max           Maximum number admin <strong>users<\/strong> logged in at one time (1 - 100).\nadmin-ssh-grace-time      Admin access <strong>login<\/strong> grace time (10 - 3600 sec).\nadmintimeout              Idle time-out for firewall administration.<\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Dans \u201cconfig user setting\u201d<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">auth-type                 Allowed firewall policy authentication methods (http | https | <strong>ftp<\/strong> | telnet)\nauth-cert                 HTTPS server certificate for policy authentication.\nauth-timeout              Firewall user authentication time-out.\nauth-timeout-type         Authenticated policy expiration behavior (idle-timeout | hard-timeout | new-session)\n&nbsp;\n<em># blacklistage d'IP source du client<\/em>\nauth-blackout-time        Authentication blackout time (0 - 3600 s).\nauth-invalid-max          Number of invalid auth tries allowed before blackout.\n&nbsp;\n<em># d\u00e9sactivation temporaire d'un compte utilisateur<\/em>\nauth-lockout-threshold    Maximum number of failed <strong>login<\/strong> attempts before lockout (1 - 10).\nauth-lockout-duration     Lockout period in seconds after too many <strong>login<\/strong> failures.<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"configuration\">Configuration<\/h1>\n\n\n\n<p>Pour lister les lignes de conf on utilise&nbsp;<code>show<\/code>&nbsp;; pour afficher l&#8217;\u00e9tat du forti on utilise&nbsp;<code>get<\/code>&nbsp;ou m\u00eame&nbsp;<code>diagnose<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"modificateur_d_affichage\">Modificateur d&#8217;affichage<\/h2>\n\n\n\n<p>Par d\u00e9faut l&#8217;affichage se fait page par page, et il faut appuyer sur&nbsp;<code>entr\u00e9e<\/code>&nbsp;pour afficher la ligne suivante, et&nbsp;<code>espace<\/code>&nbsp;pour la page suivante. Pour afficher l&#8217;int\u00e9gralit\u00e9 du r\u00e9sultat dans le terminal :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># d\u00e9sactiver les \"more\"<\/em>\n<em># \u00e9quivalent d'un \"terminal length 0\" chez Cisco<\/em>\nconfig system console\n   set output standard\nend<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># afficher la configuration avec toutes les valeurs (m\u00eames celles par d\u00e9faut)<\/em>\nshow full-configuration\n&nbsp;\n<em># afficher toutes les lignes de configuration contenant le motif<\/em>\nshow | <strong>grep<\/strong> 10.0.1.51\n        set <strong>ip<\/strong> 10.0.1.51 255.255.255.0\n&nbsp;\n<em># afficher les lignes et leur contexte<\/em>\nshow | <strong>grep<\/strong> -f 10.0.1.51\nconfig system interface\n    edit \"port3\"\n        set vdom \"root\"\n        set <strong>ip<\/strong> 10.0.1.51 255.255.255.0 &lt;---\n        set allowaccess <strong>ping<\/strong> https <strong>ssh<\/strong> snmp\n        set vlanforward enable\n        set type physical\n        set description \"vlan 1\"\n        set alias \"LAN clampins\"\n        set snmp-index 3\n    next\nend<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"utilisation_du_grep\">Utilisation du grep<\/h2>\n\n\n\n<p>Les diff\u00e9rentes options possibles du grep \u00e0 la sauce fortiOS v5 sont :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Usage: <strong>grep<\/strong> [-invfcABC] PATTERN\nOptions:\n\t-i\tIgnore case distinctions\n\t-n\tPrint line number with output lines\n\t-v\tSelect non-matching lines\n\t-f\tPrint fortinet config context\n\t-c\tOnly print count of matching lines\n\t-A\tPrint NUM lines of trailing context\n\t-B\tPrint NUM lines of leading context\n\t-C\tPrint NUM lines of output context<\/pre>\n\n\n\n<p>On peut utiliser une expression r\u00e9guli\u00e8re en encadrant le motif d&#8217;apostrophes (ou de guillemets) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># on recherche dans la table ARP les IPs se terminant par .201 ou .202<\/em>\n<em># NB : il faut prot\u00e9ger le caract\u00e8re \"|\"<\/em>\ndiagnose <strong>ip<\/strong> arp list | <strong>grep<\/strong> \"\\.201 \\|\\.202 \"\nindex=9 ifname=port3 10.0.2.201 00:01:02:03:04:05 state=00000002 use=0 confirm=0 update=14927 ref=6\nindex=9 ifname=port3 10.0.8.202 00:01:02:03:04:06 state=00000004 use=22317 confirm=22317 update=8015 ref=1<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"config_de_base\">Config de base<\/h2>\n\n\n\n<p>Le syst\u00e8me :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system global\n set <strong>hostname<\/strong> mon_forti\n&nbsp;\n config system admin\n    edit admin\n    set password &lt;new-admin-password&gt;\n end\n&nbsp;\n config system ntp\n    set ntpsync enable\n    set type custom\n    set syncinterval 60\n        config ntpserver\n            edit 1\n                set server \"pool.ntp.org\"\n            next\n        end\n    set source-ip 10.10.10.10\n end\nend<\/pre>\n\n\n\n<p>Le r\u00e9seau :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># attribution d'un IP sur l'interface mgmt1<\/em>\nconfig system interface\n   edit \"mgmt1\"\n      set <strong>ip<\/strong> 10.104.42.248 255.255.255.128\n      set allowaccess <strong>ping<\/strong> https <strong>ssh<\/strong>         <em># protocoles permis pour administrer cette interface<\/em>\n      set type physical\n   end\n&nbsp;\n<em># route par d\u00e9faut<\/em>\nconfig router static\n   edit 1\n      set device \"mgmt1\"\n      set gateway 10.104.42.254\n   next\nend<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sauvegarde\">Sauvegarde<\/h2>\n\n\n\n<p>Il existe 3 modes de sauvegarde la conf :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><code>automatic<\/code>&nbsp;: (celui par d\u00e9faut) la configuration est sauv\u00e9e \u00e0 chaque fois qu&#8217;on saisit mot-cl\u00e9 \u201cend\u201d \u00e0 la fin d&#8217;une section<\/li><li><code>manual<\/code>&nbsp;si on veut forcer la sauvegarde manuelle<\/li><li><code>revert<\/code>&nbsp;on peut programmer un rollback (reboot + restauration de la conf) automatique du firewall au bout d&#8217;un timeout d\u00e9fini ; c&#8217;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<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">config global\n   config system global\n      set cfg-save revert                            <em># | automatic | manual<\/em>\n      set cfg-revert-timeout 300                     <em># on d\u00e9finit le timeout pour le rollback<\/em>\n      end<\/pre>\n\n\n\n<p>il faut bien penser \u00e0 d\u00e9sactiver le mode revert apr\u00e8s la maintenance sinon il red\u00e9marrera \u00e0 chaque modif (et ne la prendra pas en compte) !<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"routage\">Routage<\/h1>\n\n\n\n<p>Afficher la table de routage courante :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">get router info routing-table details\n&nbsp;\n<em># ou filtrer sur un adresse IP :<\/em>\nget router info routing-table details 10.102.38.12\nRouting entry for 10.102.38.0\/23\n  Known via \"bgp\", distance 20, metric 0, best\n  Last update 02w6d19h ago\n  * 10.161.201.43 (recursive via 10.161.201.52)\n&nbsp;\n<em># analyse bas niveau de la table de routage<\/em>\n<em># \u00e9quivalent \u00e0 : get router info kernel<\/em>\n<em># les \"scope=0\" sont les routes statiques configur\u00e9es<\/em>\ndiagnose <strong>ip route<\/strong> list\ntab=254 vf=1 scope=0 type=1 proto=11 prio=0 0.0.0.0\/0.0.0.0\/0-&gt;10.105.191.225\/32\npref=0.0.0.0 gwy=10.161.201.52 dev=36(HUB-LAN)\ntab=254 vf=1 scope=0 type=1 proto=11 prio=0 0.0.0.0\/0.0.0.0\/0-&gt;10.105.191.226\/32\npref=0.0.0.0 gwy=10.161.201.52 dev=36(HUB-LAN)\n[..]\n&nbsp;\n<em># afficher la table de correspondance IP &lt;-&gt; adresse MAC &lt;-&gt; interface<\/em>\nget system arp\n<em># la m\u00eame, en plus d\u00e9taill\u00e9e :<\/em>\ndiagnose <strong>ip<\/strong> arp list\n&nbsp;\n<em># afficher les r\u00e8gles de policy-based routing (\"policy routes\" ou PBR)<\/em>\ndiagnose firewall proute list\n&nbsp;\n<em># afficher le cache de routage<\/em>\ndiag <strong>ip<\/strong> rtcache list<\/pre>\n\n\n\n<p>Vider le cache de routage :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config router policy\n  purge<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"static\">Static<\/h2>\n\n\n\n<p>Le routage statique poss\u00e8de une distance administrative par d\u201cfaut de 10, donc inf\u00e9rieure aux protocoles de routages dynamiques (ce qui veux dite qu&#8217;il est prioritaire !). Lorsqu&#8217;on d\u00e9clare une route statique dans un Fortigate, on peut modifier la distance et\/ou la priorit\u00e9 d&#8217;une route que l&#8217;on d\u00e9clare.<\/p>\n\n\n\n<p>La diff\u00e9rence entre la&nbsp;<strong>distance (administrative)<\/strong>&nbsp;et la&nbsp;<strong>priorit\u00e9<\/strong>&nbsp;d&#8217;une route est la suivante :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>le Fortigate n&#8217;ins\u00e8re dans sa table de routage que la route dont la distance est la plus petite ; c&#8217;est la m\u00e9trique \u201cprioritaire\u201d ;<\/li><li>lorsque 2 routes ont 2 distances identiques, alors :<ul><li>elles sont toutes 2 ajout\u00e9es \u00e0 la table de routage mais seule celle dont la priorit\u00e9 est la plus petite sera utilis\u00e9e pour router les paquets (donc en sortie du forti). En revanche l&#8217;autre acceptera les paquets entrants, et ne provoquera donc pas d&#8217;erreur de&nbsp;<strong>RPF<\/strong>&nbsp;(Reverse Path Forwarding c&#8217;est-\u00e0-dire routage asym\u00e9trique ; NB : pour d\u00e9sactiver le RPF (non conseill\u00e9) il suffit de saisir la commande&nbsp;<code>set asymroute enable<\/code>&nbsp;en config system)<\/li><li>si elles ont la m\u00eame priorit\u00e9, alors on est en situation d&#8217;<strong>ECMP<\/strong>&nbsp;(Equal Cost Multi-Path) ce qui veut dire r\u00e9partition de charge sur les 2 next-hop (un paquet de chaque c\u00f4t\u00e9, en Round-Robin)<\/li><\/ul><\/li><\/ul>\n\n\n\n<p>Ind\u00e9pendamment de cela, il faut noter que :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>les&nbsp;<strong>policy routes<\/strong>&nbsp;sont prises en compte en premier lieu, quelles que soient les autres param\u00e8tres<\/li><li>les&nbsp;<strong>pr\u00e9fixes<\/strong>&nbsp;(la longueur des masques r\u00e9seau des routes) sont ensuite pris en compte, AVANT les m\u00e9triques<\/li><\/ul>\n\n\n\n<p>Pour r\u00e9sumer :the \u201cpriority\u201d 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).<\/p>\n\n\n\n<p>source :&nbsp;<a href=\"http:\/\/kb.fortinet.com\/kb\/viewContent.do?externalId=FD32103\">Routing behavior depending on distance and priority for static routes, and Policy Based Routes<\/a>&nbsp;chez kb.fortinet.com<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ospf\">OSPF<\/h2>\n\n\n\n<p>Exemple de configuration OSPF (\u00e0 c\/c avec des pincettes) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config router ospf\n        config area\n            edit 0.0.0.0\n            next\n        end\n        config network\n            edit 1\n                set prefix 172.16.15.0 255.255.255.252\n            next\n        end\n        config ospf-interface\n            edit \"OSPF_SRV\"\n                set authentication md5\n                set cost 10\n                set dead-interval 3\n                set hello-interval 1\n                set interface \"SRV-iVDOM\"\n                set <strong>ip<\/strong> 172.16.15.2\n                set md5-key 1 \"totopwet\"\n                set priority 0\n            next\n        end\n        config redistribute \"connected\"\n        end\n        config redistribute \"static\"\n            set status enable\n        end\n        config redistribute \"rip\"\n        end\n        config redistribute \"bgp\"\n        end\n        config redistribute \"isis\"\n        end\n    set router-id 10.0.0.15\n    set passive-interface \"ico-untrust\"\nend<\/pre>\n\n\n\n<p>Diag :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># affiche le status de tous les protocoles de routage dynamiques de ce forti :<\/em>\nget router info protocols\n&nbsp;\nget router info ospf status\nget router info ospf neighbor\nget router info ospf interface\n&nbsp;\n<em># afficher le LSDB (LSAs type 1 et 2) :<\/em>\nget router info ospf database brief\n<em># afficher les d\u00e9tails de chaque LSA<\/em>\nget router info ospf database router lsa\n<em># affiche les LSAs envoy\u00e9s par ce Fortigate :<\/em>\nget router info ospf database self-originate\n&nbsp;\nget router ospf\nshow router ospf\n&nbsp;\n<em>#<\/em>\n<em># Logging (\u00e0 partir de la version 5.4+)<\/em>\n<em>#<\/em>\nconfig router ospf\nset log-neighbour-changes enable\n&nbsp;\n<em>#<\/em>\n<em># Debug<\/em>\n<em>#<\/em>\ndiagnose <strong>ip<\/strong> router ospf all enable\ndiagnose <strong>ip<\/strong> router ospf level info\ndiagnose debug enable\n<em># nettoyage du debug<\/em>\ndiagnose <strong>ip<\/strong> router ospf all disable\n&nbsp;\n<em># red\u00e9marrer le processus OSPF<\/em>\nexecute router <strong>clear<\/strong> ospf [process x]<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># pour vider l'\u00e9tat du routage<\/em>\nconfig router policy\n   purge\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"agregation_de_routes\">Agr\u00e9gation de routes<\/h3>\n\n\n\n<p>Pour simplifier les tables de routage, on peut agr\u00e9ger les routes sur les ABR (Area Border Router) ou les routeurs ASBR (Autonomous System Border Router). Cela consiste, sur ledit routeur, \u00e0 fusionner plusieurs annonces en une seule, de pr\u00e9fixe plus court (par exemple 10.0.0.0\/24 et 10.0.1.0\/24 \u21d2 10.0.0.0<strong>\/23<\/strong>). En r\u00e9duisant 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\u00e9seau.<\/p>\n\n\n\n<p>L&#8217;agr\u00e9gation se configure de 2 fa\u00e7ons, suivant s&#8217;il s&#8217;agit d&#8217;ABR (LSA de type 3) ou d&#8217;ASBR (LSA de type 5) :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>sur un ABR, pour agr\u00e9ger des routes apprises de l&#8217;aire 1 (c&#8217;est un exemple) :<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">config router ospf\n    config area\n        edit 0.0.0.1\n            config range\n                edit 1\n                    set prefix 10.0.0.0 255.255.254.0\n            end\n        end\nend    <\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>sur un ASBR, pour agr\u00e9ger des routes statiques redistribu\u00e9es dans l&#8217;OSPF :<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">config router ospf\n    config summary-address\n        edit 1\n            set prefix 10.0.0.0 255.255.254.0\n        end\nend<\/pre>\n\n\n\n<p>Ces routes sont visibles dans la table de routage sous la forme :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">get router info routing-table ospf\n[..]\nO       10.0.0.0\/23 [110\/0] is a summary, Null, 00:02:21<\/pre>\n\n\n\n<p>source :&nbsp;<a href=\"http:\/\/kb.fortinet.com\/kb\/documentLink.do?externalID=FD30329\">OSPF route summarization for LSAs Type3 (on ABR) and Type5 (on ASBR)<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"redistribution_de_route\">Redistribution de route<\/h3>\n\n\n\n<p>On peut activer la redistribution de&nbsp;<em>toutes<\/em>&nbsp;les routes statiques dans l&#8217;OSPF en activant&nbsp;<code>config redistribute \u201cstatic\u201d<\/code>&nbsp;; cependant si on veut n&#8217;annoncer que certains pr\u00e9fixes il faut filtrer les annonces. On utilise pour cela :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>une&nbsp;<strong>access-list<\/strong>&nbsp;(ou&nbsp;<strong><abbr title=\"Access Control List\">ACL<\/abbr><\/strong>) qui s\u00e9lectionne des r\u00e9seaux<\/li><li>une&nbsp;<strong>route-map<\/strong>&nbsp;qui associe une action \u00e0 une&nbsp;<abbr title=\"Access Control List\">ACL<\/abbr><\/li><\/ul>\n\n\n\n<p>Exemple de redistribution de 2 (parmi d&#8217;autres que l&#8217;on ne veut pas annoncer) routes statiques dans l&#8217;OSPF :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># d\u00e9finition de l'access-list pour matcher 10.1 et 10.2 \/16<\/em>\n<em># exact-match permet de ne s\u00e9lectionner que le pr\u00e9fixe exact (pas ses sous-r\u00e9seaux)<\/em>\nconfig router access-list\n    edit \"acl_static-to-ospf\"\n        set comments \"d\u00e9finition d'une liste de r\u00e9seaux\"\n        config rule\n            edit 1\n                set prefix 10.1.0.0 255.255.0.0\n                set exact-match disable\n            next\n            edit 2\n                set prefix 10.2.0.0 255.255.0.0\n                set exact-match disable\n            next\n        end\n&nbsp;\n<em># d\u00e9finition de la route-map<\/em>\n<em># pr\u00e9ciser l'action \"permit\" est facultatif car c'est celle par d\u00e9faut<\/em>\nconfig router route-map\n    edit \"static-to-ospf\"\n    next\n    edit \"rm_static-to-ospf\"\n        config rule\n            edit 1\n                set match-ip-address \"acl_static-to-ospf\"\n                set action permit\n            next\n        end\n&nbsp;\n<em># activation de la redistribution des routes statiques dans l'OSPF<\/em>\n<em># et filtrage des annonces<\/em>\nconfig router ospf\n    config redistribute \"static\"\n        set status enable\n        set routemap \"rm_static-to-ospf\"\n    end\nend<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"bgp\">BGP<\/h2>\n\n\n\n<p>Exemple de configuration BGP basique :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># NB : les num\u00e9ros d'AS 64512 et 64513 sont priv\u00e9s<\/em>\nconfig router bgp\n    set <strong>as<\/strong> 64512\n    set router-id 10.0.255.2\n        config neighbor\n            edit \"10.0.200.94\"\n                set remote-as 64513\n            next\n        end\n&nbsp;\n<em># d\u00e9claration des r\u00e9seaux annonc\u00e9s<\/em>\n        config network\n            edit 1\n                set prefix 10.0.255.2 255.255.255.255\n            next\n            edit 2\n                set prefix 10.0.200.94 255.255.255.254\n            next\n            edit 3\n                set prefix 10.143.8.0 255.255.255.248\n            next\n        end\nend<\/pre>\n\n\n\n<p>Diagnostique :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># afficher les routes apprises en BGP<\/em>\nshow bgp routes all\nget router info protocols\nget router info bgp neighbor\nget router bgp\n&nbsp;\n<em># afficher la configuration<\/em>\nshow router bgp<\/pre>\n\n\n\n<p>Debug :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose <strong>ip<\/strong> router bgp all\ndiagnose debug enable\n&nbsp;\n<em># r\u00e9-\u00e9tablir l'adjacence BGP avec un voisin<\/em>\nconfigure bgp neighbor 10.0.200.92 soft-reset in\n<em># clearer toutes les connexions BGP<\/em>\nexecute router <strong>clear<\/strong> bgp all<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pbr\">PBR<\/h2>\n\n\n\n<p><strong>Policy-Based Routing<\/strong>,&nbsp;<strong>PBR<\/strong>&nbsp;ou&nbsp;<strong>router policy<\/strong>&nbsp;: fonctionnalit qui permet de bypasser la table de routage en d\u00e9finissant des r\u00e8gles d&#8217;exception (suivant l&#8217;adresse source, l&#8217;interface source, le protocole ou d&#8217;autres crit\u00e8res).<\/p>\n\n\n\n<p>Dans la mesure ou ce sont des verrues r\u00e9seau, l&#8217;utilisation de PBR est \u00e0 proscrire au maximum.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"nat\">NAT<\/h2>\n\n\n\n<p>La translation d&#8217;adresse (NAT) se configure dans une r\u00e8gle de la politique de s\u00e9curit\u00e9 (cocher \u201cEnable NAT\u201d). Plusieurs types de NAT sont possibles :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Static NAT<\/strong>&nbsp;: on faire correspondre \u00e0 une IP interne une IP externe virtuelle (une VIP). C&#8217;est utile pour masquer l&#8217;IP r\u00e9elle d&#8217;un serveur accessible sur Internet par exemple. On cr\u00e9er un objet \u201cVirtual IP\u201d (dans le menu \u201cPolicy &amp; Objects &gt; Objects &gt; Virtual IPs\u201d), que l&#8217;on doit juste renseigner en adresse destination dans une r\u00e8gle de s\u00e9curit\u00e9 entrante (internet vers r\u00e9seau local).<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">   Configuration d'un objet VIP :\nexternal IP = l'IP publique de remplacement (virtuelle)\nmapped IP = l'IP r\u00e9elle du serveur (inconnue des clients sur le r\u00e9seau externe)<\/pre>\n\n\n\n<p>C&#8217;est du NAT 1-pour-1 c&#8217;est-\u00e0-dire que les ports ne sont pas translat\u00e9s et que m\u00eame les flux sortant initi\u00e9s par le serveur seront translat\u00e9s avec la VIP.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Dynamic NAT<\/strong>&nbsp;: on attribue un pool d&#8217;adresses IPs externes (\u201cPolicy &amp; Objects &gt; Objects &gt; IP Pool\u201d), la premi\u00e8re qui est libre sera utilis\u00e9e pour translater la ou les IPs internes.<ul><li><strong>overloading<\/strong>&nbsp;: forme de NAT dynamique qui consiste \u00e0 translater les ports pour mapper plusieurs IPs internes sur une seule IP virtuelle externe. On peut soit utiliser un \u201cIP Pool\u201d d&#8217;une seule IP (on fera alors du&nbsp;<strong>PAT<\/strong>&nbsp;(Port Adresse Translation), translation de ports clients), soit utiliser l&#8217;IP de l&#8217;interface de sortie du firewall (<strong>masquerading<\/strong>, c&#8217;est ce qui est utilis\u00e9 sur les box des FAIs). Cependant cette derni\u00e8re m\u00e9thode n&#8217;est pas recommand\u00e9e car elle m\u00e9lange les flux du firewall et des clients NATt\u00e9s.<\/li><li><strong>overlapping<\/strong>&nbsp;: lorsque 2 r\u00e9seaux ayant le m\u00eame adressage doivent se parler (par exemple dans la cas d&#8217;un VPN entre 2 entreprises). Dans ce cas on fait correspondre aux 2 r\u00e9seaux une nouvelle plage d&#8217;adresses qui ne se recoupe plus.<\/li><\/ul><\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">   Configuration d'un objet IP Pool :\nexternal IP range = l'IP (ou les IPs) de substitution<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"sessions\">Sessions<\/h1>\n\n\n\n<p>Le terme de session s&#8217;applique \u00e0 chaque connexion traversant ou s&#8217;arr\u00eatant au Fortigate, quel que soit le protocole (TCP \u00e9videmment mais aussi UDP, ICMP, etc\u2026). Comme c&#8217;est un firewall stateful le sens d&#8217;ouverture des sessions est important, et les retour sont implicitement permis (\u00e0 la diff\u00e9rence des ACLs en g\u00e9n\u00e9ral que l&#8217;on doit ouvrir dans les 2 sens).<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># compter les connexions dans le VDOM<\/em>\nget system session status\n&nbsp;\n<em># liste concise des sessions (1\/ligne) - affiche les DNAT et SNAT<\/em>\nget system session list<\/pre>\n\n\n\n<p>Pour afficher plus de d\u00e9tails on utilise&nbsp;<code>diagnose sys session<\/code>&nbsp;; cette commande \u00e9tant tr\u00e8s verbeuse elle s&#8217;utilise presque exclusivement en appliquant un filtre pour avoir un r\u00e9sultat lisible.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># pour afficher les sessions HTTP ouvertes depuis la machine 10.0.0.2<\/em>\ndiagnose sys session filter src 10.0.0.2\ndiagnose sys session filter dport 80\ndiagnose sys session list\n&nbsp;\n<em># en plus verbeux :<\/em>\ndiagnose sys session full-stat\ndiagnose sys session <strong>stat<\/strong>\n&nbsp;\n<em># pour afficher les filtres en place<\/em>\ndiagnose sys session filter\n&nbsp;\n<em># pour supprimer toutes les sessions **matchant notre filtre**<\/em>\ndiagnose sys session <strong>clear<\/strong>\n<em># ! inutile de pr\u00e9ciser qu'on p\u00e8te tout si on n'utilise pas de filtre !<\/em><\/pre>\n\n\n\n<p>Les flags :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><code>may_dirty<\/code>&nbsp;indique qu&#8217;une session a ouverte car accept\u00e9e par la politique de s\u00e9curit\u00e9 ; si cette derni\u00e8re vient \u00e0 \u00eatre modifi\u00e9e, toutes les sessions&nbsp;<code>may_dirty<\/code>&nbsp;sont \u00e9galement flaggu\u00e9es&nbsp;<code>dirty<\/code>&nbsp;ce qui signifit qu&#8217;elles doivent \u00eatre revalid\u00e9es par la nouvelle politique. C&#8217;est ce que fera le firewall lorsqu&#8217;il recevra le prochain paquet de la session :<ul><li>si celle-ci est toujours valide, il supprime le flag&nbsp;<code>dirty<\/code><\/li><li>sinon il la flag&nbsp;<code>block<\/code>, ce qui provoque le drop de tous les prochains paquets. Les sessions&nbsp;<code>block<\/code>&nbsp;restent dans la table de sessions jusqu&#8217;\u00e0 leur expiration (leur timeout est diminu\u00e9).<\/li><\/ul><\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"firewall\">Firewall<\/h1>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># afficher la politique de s\u00e9curit\u00e9<\/em>\nshow firewall policy\n&nbsp;\n<em># stats sur le filtrage de paquets<\/em>\nget sys performance firewall statistics<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"identity-based_policy\">Identity-based policy<\/h2>\n\n\n\n<p>Depuis la version 5.2 on peut cr\u00e9er des r\u00e8gles de s\u00e9curit\u00e9 qui, si elles matchent un flux, agissent comme un portail captif et invitent l&#8217;utilisateur \u00e0 s&#8217;authentifier en HTTPx.<\/p>\n\n\n\n<p>Pour cela il faut d&#8217;abord d\u00e9finir un groupe d&#8217;utilisateurs (dans User &amp; Device &gt; User &gt; User Groups), puis l&#8217;ajouter en \u201cSource\u201d dans une une r\u00e8gle classique de la politique de s\u00e9curit\u00e9 :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config user group\n   edit \"wifi-users\"\n      set member \"toto\" \"tata\"\n   end\nconfig firewall policy\n   edit \"&lt;ID_RULE&gt;\"\n      set <strong>groups<\/strong> \"wifi-users\"\n   end<\/pre>\n\n\n\n<p>Les pr\u00e9-requis pour cela :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>il faut qu&#8217;au moins un des services suivants soit inclus dans les services permis de la r\u00e8gle : HTTP, HTTPs, TELNET ou&nbsp;<abbr title=\"File Transfer Protocol\">FTP<\/abbr>.<\/li><li>Pour que le client g\u00e9n\u00e8re un flux que le firewall redirige vers son portail d&#8217;authentification, celui-ci doit r\u00e9soudre les noms donc il doit avoir un&nbsp;<abbr title=\"Domain Name System\">DNS<\/abbr>&nbsp;qui r\u00e9pond<\/li><li>le portail captif (HTTP) est h\u00e9berg\u00e9 par d\u00e9faut sur le port tcp\/1000 du firewall donc, en cas de firewalls chain\u00e9s, il faut que ce service ne soit pas bloqu\u00e9<\/li><li>si une r\u00e8gle plus large existe, m\u00eame en-dessous de la r\u00e8gle d&#8217;identit\u00e9, celle-ci matchera en priorit\u00e9 donc aucune authentification ne sera r\u00e9alis\u00e9e (constatation empirique !..).<\/li><\/ul>\n\n\n\n<p>Une fois authentifi\u00e9, un utilisateur peut \u201cutiliser\u201d les r\u00e8gles comprenant son groupe (m\u00eame sur d&#8217;autres interfaces source\/dest) sans re-saisir son login\/mdp.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"utiliser_un_certificat_specifique\">Utiliser un certificat sp\u00e9cifique<\/h3>\n\n\n\n<p>Pour utiliser un certificat sp\u00e9cifique pour la page d&#8217;authentification :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>faire que l&#8217;IP du portail captif du Fortigate r\u00e9solve (par exemple 10.0.0.1 \u2194 wifi.intra.domaine.com)<\/li><li>cr\u00e9er un certificat matchant ce nom (wifi.intra.domaine.com)<\/li><li>rediriger l&#8217;authentification vers cette&nbsp;<abbr title=\"Uniform Resource Locator\">URL<\/abbr>&nbsp;et pr\u00e9ciser le certificat \u00e0 utiliser (il faudra au pr\u00e9alable l&#8217;ajouter dans la liste des certificats disponibles sur le Fortigate, ce qui se fait dans \u201cSystem \/ Certificates\u201d) :<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">config firewall policy\n   edit 36\n      set auth-redirect-addr \"wifi.intra.domaine.com\"\n      set auth-cert cert-wifi.intra\n   end<\/pre>\n\n\n\n<p>Enfin, il faut passer la page d&#8217;authentification en HTTPS (par d\u00e9faut elle est servie HTTP) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config user setting\n   set auth-secure-http enable\nend<\/pre>\n\n\n\n<p>doc utile :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"http:\/\/help.fortinet.com\/fos50hlp\/52data\/Content\/FortiOS\/fortigate-firewall-52\/Security%20Policies\/Identity%20Based%20Policies.htm\">Identity-based policies<\/a>&nbsp;sur help.fortinet.com<\/li><li><a href=\"http:\/\/kb.fortinet.com\/kb\/viewContent.do?externalId=FD30760\">Using secure authentication (HTTPS) on a FortiGate and redirecting the authentication page<\/a><\/li><\/ul>\n\n\n\n<p>On peut personnaliser la mire d&#8217;authentification dans le menu \u201cSystem \/ Config \/ Replacement Messages\u201d.<\/p>\n\n\n\n<p>Changer le port par d\u00e9faut (par d\u00e9faut c&#8217;est le 1000) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system global\n   set auth-https-port 1001\nend<\/pre>\n\n\n\n<p>Pour lister les utilisateurs authentifi\u00e9s ainsi que diverses infos y ayant attrait :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose firewall auth list\n<em># (remplacer \"list\" par filter\/clear pour filtrer ou supprimer des sessions)<\/em><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"session-helper\">Session-helper<\/h2>\n\n\n\n<p>Ce terme d\u00e9fini la fonction d&#8217;un&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Application-level_gateway\">ALG (Application-Level Gateway)<\/a>, un firewall capable d&#8217;ouvrir des connexions dynamiquement en interpr\u00e9tant des protocoles de niveau 7 OSI (applications). C&#8217;est n\u00e9cessaire 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 \u00e0 l&#8217;avance, dynamiquement n\u00e9goci\u00e9 entre le client et le serveur.<\/p>\n\n\n\n<p>On peut lister la configuration du Fortigate uniquement en CLI, en mode global :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config global \n    config system session-helper \n        show\n&nbsp;\n<em># exemple pour le H323<\/em>\n<em># indique que ce service utilise initialement une connexion<\/em>\n<em># sur le port 1720 en TCP (proto 6 ; 17 si UDP)<\/em>\n    edit 2\n        set name h323\n        set protocol 6\n        set port 1720\n    next<\/pre>\n\n\n\n<p>Seuls certains protocoles sont interpr\u00e9t\u00e9s par le Fortigate, la liste est consultable en cr\u00e9ant une nouvelle entr\u00e9e :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system session-helper\n    edit 0\n        set name ?\n<strong>ftp<\/strong>        <strong>ftp<\/strong>\ntftp       tftp\nras        ras\nh323       h323\nh245O      H245 call-out.\nh245I      H245 call-in.\ntns        tns\nmms        mms\nsip        sip\npptp       pptp\nrtsp       rtsp\ndns-udp    dns-udp\ndns-tcp    dns-tcp\npmap       pmap\n<strong>rsh<\/strong>        <strong>rsh<\/strong>\ndcerpc     dcerpc\nmgcp       mgcp<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"vdom\">VDOM<\/h1>\n\n\n\n<p>Les VDOM sont aux Fortigate ce que les VR sont aux Cisco : des \u00e9quipements virtuels dot\u00e9s de tables de routage \u00e9tanches les unes des autres, permettant de cr\u00e9er virtuellement plusieurs firewalls. Pour activer le support des VDOMs (10 max avec un licence de base), c&#8217;est soit dans le dashboard en webUI soit en CLI :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system global\n   set vdom-admin enable\n   end<\/pre>\n\n\n\n<p>NB : attention on est d\u00e9connect\u00e9 apr\u00e8s l&#8217;activation.<\/p>\n\n\n\n<p>Une fois le support des VDOMs activ\u00e9s, celui par d\u00e9faut sera le root et il faudra pr\u00e9ciser \u00e0 chaque fois sur lequel on se connecte (ici le root) ou si on veut se connecter en global (pour les commandes\u2026 globales : management, HA, etc) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config global\n<em># ou<\/em>\nconfig vdom\n   edit root\n   end<\/pre>\n\n\n\n<p>Pour cr\u00e9er un nouveau VDOM il suffit de faire&nbsp;<code>edit &lt;nom_du_nouveau_vdom&gt;<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"interconnecter_2_vdoms\">Interconnecter 2 VDOMs<\/h3>\n\n\n\n<p>On peut relier 2 VDOMs via un \u00e9quipement externe ou via des vdom-links, des interconnexions internes au Fortigate (qui transitent par le \u201cfond de panier logiciel\u201d du ch\u00e2ssis). On les cr\u00e9er comme on cr\u00e9er une interface classique, mais pour les supprimer on doit passer par la CLI :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config global\n   config system vdom-link\n      delete &lt;nom <strong>du<\/strong> vlink&gt;\n      end<\/pre>\n\n\n\n<p>Les vdom-link&nbsp;<strong>npuX-vlink<\/strong>, cr\u00e9\u00e9s automatiquement quand on active la prise en charge des VDOMs, sont offload\u00e9s (acc\u00e9l\u00e9r\u00e9s mat\u00e9riellement). Le nombre de liens cr\u00e9\u00e9 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\u00eame si on ne s&#8217;en sert pas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"supprimer_un_vdom\">Supprimer un VDOM<\/h3>\n\n\n\n<p>Pour supprimer un VDOM, comme pour tout objet dans FortiOS, il faut d&#8217;abord supprimer les r\u00e9f\u00e9rences \u00e0 cet objet. Pour lister les r\u00e9f\u00e9rences \u00e0 un VDOM, aller dans Global &gt; System &gt; VDOM et cliquer sur le nombre de r\u00e9f\u00e9rence affich\u00e9 pour les lister. En CLI on peut les lister ainsi (exemple pour un VDOM nomm\u00e9 \u201cvpn\u201d) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose sys checkused system.vdom.name vpn\n entry used by table system.interface:name 'ssl.vpn'\n entry used by table system.vdom-property:name 'vpn'<\/pre>\n\n\n\n<p>On ne peut supprimer le VDOM que lorsqu&#8217;il ne reste plus que les 2 r\u00e9f\u00e9rences sus-cit\u00e9es (qui sont g\u00e9n\u00e9r\u00e9es et supprim\u00e9es automatiquement avec le VDOM). Une fois cette condition remplie : Global &gt; System &gt; VDOM, clic droit puis Supprimer ; ou en CLI :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config vdom\n   delete &lt;VDOM_NAME&gt;\nend<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"cluster_ha\">Cluster HA<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configuration1\">Configuration<\/h2>\n\n\n\n<p>Exemple de configuration (CLI) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system ha\n    set group-name \"ha-pri\"\n    set mode a-p\n    set hbdev \"port21\" 50 \"port22\" 50\n    set session-pickup enable\n    set ha-mgmt-status enable\n    set ha-mgmt-interface \"mgmt2\"\n    set ha-mgmt-interface-gateway 10.0.7.254\n    set override disable\n    set priority 150\n    set monitor \"port23\" \"port24\"\nend<\/pre>\n\n\n\n<p>Normalement l&#8217;IP de management du master devient l&#8217;IP virtuelle d&#8217;admin du cluster et le backup n&#8217;est pas administrable ; pour se connecter sur le backup il fait se connecter au master d&#8217;abord, puis saisir :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># se connecter sur le membre d'id=1 du HA \u00e0 partir du master<\/em>\nexecute ha manage 1<\/pre>\n\n\n\n<p>On peut forcer la cr\u00e9ation d&#8217;une seconde interface de management pour acc\u00e9der directement au backup :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system ha\n    set ha-mgmt-status enable\n    set ha-mgmt-interface \"mgmt2\"\n    set ha-mgmt-interface-gateway 10.0.7.253\nend<\/pre>\n\n\n\n<p>La mgmt2 ainsi cr\u00e9\u00e9e permet de joindre le backup en SSH mais pas en SNMP, c&#8217;est une limitation de la bidouille. Pour contourner cette limitation, on peut :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>soit utiliser la communaut\u00e9 suffix\u00e9e par \u201d-num\u00e9ro_de_s\u00e9rie_du_membre\u201c<\/li><li>soit (en CLI) activer le \u201cha-direct\u201d pour chaque host en permit<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">config global\n  config system snmp community\n    edit 1\n      config hosts\n        edit 1\n          set <strong>ip<\/strong> 10.0.7.87 255.255.255.255\n          set ha-direct enable\n          end<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"verifications\">V\u00e9rifications<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># activer\/d\u00e9sactiver le HA<\/em>\nexecute ha synchro stop\nexecute ha synchro start\n&nbsp;\n<em># reset l'\u00e2ge des membres d'un cluster (pour palier certains vieux bug..)<\/em>\ndiagnose sys ha reset-uptime<\/pre>\n\n\n\n<p>Diagnostique :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># \u00e9tat du HA<\/em>\nget system ha status\n<em># informations d\u00e9taill\u00e9es<\/em>\nget system ha\n&nbsp;\n<em># cmdes avanc\u00e9es (tshoot)<\/em>\ndiagnose sys ha status\n&nbsp;\ndiagnose sys ha dump 1\ndiagnose sys ha dump 2\ndiagnose sys ha dump 3\ndiagnose sys ha showcsum\ndiagnose sys ha showcsum 1\ndiagnose sys ha showcsum 2\ndiagnose sys ha showcsum 3<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"log_syslog\">Log \/ Syslog<\/h1>\n\n\n\n<p>En webUI, la configuration se r\u00e9alise dans \u201cLog &amp; Report &gt; Log Config &gt; Log Settings\u201d (en Global).<\/p>\n\n\n\n<p>Apparemment depuis les versions FortiOS 5.6, le log sur les disques SSD n&#8217;est plus activ\u00e9\/activable pour des raisons d&#8217;usure pr\u00e9matur\u00e9e du SSD. Dans les \u201cLog &amp; Report &gt; Log settings\u201d on n&#8217;a donc plus de choix pour l&#8217;option \u201cDisplay Logs From\u201d, et il est affich\u00e9 \u201cSelected log location is currently disabled.\u201d<\/p>\n\n\n\n<p>Pour consulter les logs en CLI :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># configuration par d\u00e9faut en v5.2.3 :<\/em>\nconfig log setting\n    set resolve-ip disable\n    set resolve-port enable\n    set log-user-in-upper disable\n    set fwpolicy-implicit-log disable            <em># r\u00e8gle balais implicite de la policy (\"deny de fin\")<\/em>\n    set fwpolicy6-implicit-log disable\n    set log-invalid-packet disable\n    set local-in-allow enable\n    set local-in-deny-unicast enable\n    set local-in-deny-broadcast enable           <em># \u00e0 d\u00e9sactiver pour \u00e9viter le flood de log de broadcast (netbios, etc)<\/em>\n    set local-out enable                         <em># trafic initi\u00e9 par le firewall<\/em>\n    set daemon-log disable\n    set neighbor-event disable\n    set brief-traffic-format disable\n    set user-anonymize disable\nend\n&nbsp;\n<em># filtrer sur une certaine cat\u00e9gorie<\/em>\nexecute log filter category event\n<em># on peut aussi filtrer sur le contenu du message de log :<\/em>\nexecute log filter field msg Heartbeat\n<em># d\u00e9fini le nb de ligne affich\u00e9es<\/em>\nexecute log filter view-lines 50\n<em># en fonction de la date<\/em>\nexecute log filter field <strong>date<\/strong> 2014-05-06 2014-05-07\n<em># voir les filtres<\/em>\nexecute log filter dump\n&nbsp;\n<em># afficher les logs :<\/em>\nexecute log display\n&nbsp;\n<em># afficher les buffers de log<\/em>\nget log memory global-setting\n&nbsp;\n<em># afficher l'utilisation de l'espace disque par les logs<\/em>\ndiagnose sys logdisk usage\n&nbsp;\n<em># limiter le nb de log par seconde pour \u00e9viter les surcharges CPU<\/em>\nset security log event-rate 1000<\/pre>\n\n\n\n<p>Configurer l&#8217;export syslog vers un serveur distant : en webUI on ne peut configurer qu&#8217;un seul serveur distant, en CLI on peut en saisir jusqu&#8217;\u00e0 3<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># configurer un serveur syslog distant :<\/em>\nconfig log syslogd setting\n\tset status enable\n\tset csv {disable | enable}\n\tset facility &lt;facility_name&gt;\n\tset port &lt;port_integer&gt;\n\tset reliable {disable | enable}\n\tset server &lt;ip_address&gt;\nend\nconfig log syslogd2 setting\n&lt;blabla&gt;\nend\n&nbsp;\n<em># filtrer les logs \u00e0 envoyer :<\/em>\nconfig log syslogd filter\n\tset traffic {enable | disable}\n\tset web {enable | disable}\n\tset url-filter {enable | disable}\n\tset severity notification\nend\n&nbsp;\n<em># pour d\u00e9sactiver l'envoi de certains logs vers le (r)syslog :<\/em>\nconfig log memory filter\n   set extended-traffic-log disable\n   end\nconfig log fortianalyzer filter\n   set extended-traffic-log disable\n   end\nconfig log disk filter\n   set extended-traffic-log disable\n   end<\/pre>\n\n\n\n<p>Envoyer un message de log pour tester :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># g\u00e9n\u00e9rer des messages de log pour test :<\/em>\ndiagnose log test<\/pre>\n\n\n\n<p>Afficher les logs d&#8217;erreur de configuration (lors de l&#8217;import d&#8217;un fichier par ex.) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose debug config-error-log <strong>read<\/strong><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"mail_d_alerte\">Mail d&#8217;alerte<\/h1>\n\n\n\n<p>Le Fortigate peux envoyer des mails d&#8217;alerte par rapport \u00e0 un niveau (Emergency, Alert, Critical, Error, Warning, etc\u2026) ou une cat\u00e9gorie ; cela se configure dans \u201cLog &amp; Report &gt; Alert E-mail\u201d.<\/p>\n\n\n\n<p>Le serveur de mail \u00e0 utiliser est personnalisable dans \u201cSystem &gt; Advanced &gt; Email Service\u201d.<\/p>\n\n\n\n<p>Pour tester l&#8217;envoi de mail, en CLI :&nbsp;<code>diagnose log alertmail test<\/code><\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"services_reseau\">Services r\u00e9seau<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"dhcp\">DHCP<\/h2>\n\n\n\n<p>Le DHCP server se d\u00e9finit depuis la version 5 dans une interface en&nbsp;<abbr title=\"Graphical User Interface\">GUI<\/abbr>&nbsp;et ainsi en CLI :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system dhcp server\n  edit 1\n    set default-gateway 10.204.12.1\n    set netmask 255.255.254.0\n    set interface \"paie\"\n      config ip-range\n        edit 1\n          set start-ip 10.204.12.2\n          set end-ip 10.204.13.253\n        next\n      end\n    set timezone-option default\n    set dns-server1 10.204.0.4\n    set dns-server2 10.204.0.3\n  next\n&nbsp;\n<em># lister les attributions d'adresses<\/em>\nexecute dhcp lease-list\n<em># vider les attributions d'adresses<\/em>\nexecute dhcp lease-clear &lt;@ IP | all&gt;\n&nbsp;\n<em># debug<\/em>\ndiagnose debug console timestamp enable\ndiagnose debug app dhcps 7\ndiagnose debug enable<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ntp\">NTP<\/h2>\n\n\n\n<p>Le NTP client (pour MAJ l&#8217;heure du firewall) se configure via le Dashboard global, dans le panneau \u201cSystem Information\u201d : il faut cliquer sur le lien de la ligne de la date et l&#8217;heure. Depuis la version 5.6, un encart \u201cSystem Time\u201d a \u00e9t\u00e9 ajout\u00e9 dans \u201cSystem \/ Settings\u201d, ce qui est plus logique\u2026<\/p>\n\n\n\n<p>En CLI on peut affiner les r\u00e9glages NTP, notamment ajouter plus d&#8217;un serveur de temps, configurer l&#8217;interface source, etc\u2026 Exemple de configuration :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config global\n  config system ntp\n    set ntpsync enable\n    set type custom\n    config ntpserver\n        edit 1\n            set server \"10.0.1.1\"\n        next\n        edit 2\n            set server \"10.0.2.2\"\n        next\n    end\n    set source-ip 10.0.0.1\n  end\nend<\/pre>\n\n\n\n<p>Pour v\u00e9rifier l&#8217;\u00e9tat de la synchronisation de temps, et si les serveurs sont joignables :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose sys ntp status \nsynchronized: <strong>yes<\/strong>, ntpsync: enabled, server-mode: disabled\n&nbsp;\nipv4 server(10.0.1.1) 10.0.1.1 -- reachable(0xf1) S:1 T:5 selected \n\tserver-version=4, stratum=4\n\treference time is debbeaed.145d3c58 -- UTC Fri Jun  1 15:55:25 2018\n\tclock offset is -0.004431 sec, root delay is 0.001755 sec\n\troot dispersion is 0.074173 sec, peer dispersion is 53 msec<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"activer_le_serveur_ntp_du_ftg\">Activer le serveur NTP du FTG<\/h3>\n\n\n\n<p>Le Fortigate peut faire office \u00e0 son tour de serveur NTP pour un r\u00e9seau local ; il faut pour cela l&#8217;activer sur chaque interface individuellement ; cela se configure via la configuration NTP cliente du Fortigate : dans le Dashboard &gt; Status, puis System Information &gt; System time, cliquer sur [change] et enfin cocher la case \u201cEnable NTP Server\u201d, et ajouter les interfaces sur lesquelles l&#8217;activer (\u201cListen on Interfaces\u201d).<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"services_securite\">Services s\u00e9curit\u00e9<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"antivirus\">Antivirus<\/h2>\n\n\n\n<p>Via la&nbsp;<abbr title=\"Graphical User Interface\">GUI<\/abbr>&nbsp;on peut v\u00e9rifier son \u00e9tat dans : \u201cSystem &gt; Config &gt; Fortiguard &gt; AntiVirus and IPS Options\u201d.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># forcer l'update de la base<\/em>\nexecute update-now<\/pre>\n\n\n\n<p>L&#8217;antivirus est g\u00e9r\u00e9 par le processus&nbsp;<em>scanunitd<\/em>&nbsp;; on peut voir sa consommation avec un&nbsp;<code>diag sys top<\/code>.<\/p>\n\n\n\n<p>Pour aller plus loin :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>(regarder les logs syst\u00e8me)<\/li><li>regarder les logs de s\u00e9curit\u00e9 Antivirus (Log &amp; Report &gt; Security Log &gt; AntiVirus)<\/li><li>lancer un debug en CLI :<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># pour afficher les erreurs uniquement<\/em>\n<em># \"-1\" est plus verbeux, mais \u00e0 lancer avec parcimonie pour ne pas saturer le Forti<\/em>\ndiagnose debug application scanunit 4\ndiagnose debug enable\n&nbsp;\ndiagnose debug disable\ndiagnose debug reset<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ips\">IPS<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose test app ipsmonitor &lt;<em>#&gt;<\/em>\n<em># avec # =<\/em>\n1: Display IPS engine information\n2: Toggle IPS engine enable\/disable status\n3: Display restart log\n4: Clear restart log\n5: Toggle bypass status\n97: Start all IPS engines\n98: Stop all IPS engines\n99: Restart all IPS engines and monitor<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"diagnostique_et_debug\">Diagnostique et debug<\/h1>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># afficher les logs de crash<\/em>\ndiagnose debug crashlog <strong>read<\/strong>\n&nbsp;\n<em># crashinfo \u00e0 envoyer au support :)<\/em>\ndiagnose debug crashlog get\n&nbsp;\n<em># ~get tech : diagnostique complet \u00e0 envoyer au support aussi<\/em>\ndiagnose debug report\n&nbsp;\n<em># debugguer une fonction (~un process)<\/em>\n<em># &lt;debug_lvl&gt; varie selon l'appli concern\u00e9e, mais le max est toujours -1<\/em>\ndiagnose debug application &lt;daemon&gt; &lt;debug_lvl&gt;\n&nbsp;\n<em># pour r\u00e9initialiser le niveau de debug<\/em>\ndiagnose debug reset\n&nbsp;\n<em># activer le log dans la console<\/em>\ndiagnose debug comlog enable\n<em># lire les logs<\/em>\ndiagnose debug comlog <strong>read<\/strong>\n<em># reset les logs console<\/em>\ndiagnose debug comlog <strong>clear<\/strong>\ndiagnose debug comlog info<\/pre>\n\n\n\n<p>Sur certains mod\u00e8les on ne peut pas consulter les logs de debug \u00e0 post\u00e9riori ; dans ce cas si on sait reproduire le probl\u00e8me, ouvrir une console sur le Fortigate, logguer la session puis :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose debug kernel level 7\ndiagnose debug console timestamp enable\ndiagnose debug enable<\/pre>\n\n\n\n<p>En cas d&#8217;ultime recourt il existe une image de firmware (HQIP pour Hardware Quick Inspection Package) pour passer des tests hardware pouss\u00e9s :&nbsp;<a href=\"https:\/\/kb.fortinet.com\/kb\/microsites\/search.do?cmd=displayKC&amp;docType=kc&amp;externalId=FD34745\">RMA Note: HQIP &#8211; Hardware Quick Inspection Package<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ping_et_cie\">ping et cie<\/h2>\n\n\n\n<p>Permet de lancer des commandes de diagnostique telles le ping, traceroute, etc\u2026<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">execute <strong>ping<\/strong> 10.10.10.10\nexecute ping6 | traceroute | tracert6\n&nbsp;\n<em># pour lancer un PING \u00e9tendu (bit df, taille, adresse source, etc...)<\/em>\nexecute ping-options view-settings<\/pre>\n\n\n\n<p>Ces commandes sont lanc\u00e9es depuis le VDOM courant et avec l&#8217;IP de management ou celle de l&#8217;interface de sortie, selon le routage. On peut influer sur ces param\u00e8tres :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># lancer un PING depuis le VDOM EXTRA (si votre login dispose des droits de management sur ce VDOM) :<\/em>\n<em># s\u00e9lectionner le VDOM EXTRA<\/em>\nexecute enter EXTRA\n current vdom=EXTRA:1\n<em># puis lancer le PING<\/em>\n<strong>ping<\/strong> 8.8.8.8\n&nbsp;\n<em># modifier l'IP source du Fortigate pour lancer le PING :<\/em>\nexecute ping-options source 10.0.0.1\nexecute <strong>ping<\/strong> 8.8.8.8<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"debug_flow\">debug flow<\/h2>\n\n\n\n<p>Pour d\u00e9bugguer un flux :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose debug info\n&nbsp;\ndiagnose debug enable\ndiagnose debug console timestamp en\ndiagnose debug cli 0\ndiagnose debug flow show console enable\n&nbsp;\n<em># filtrer sur une adresse (source, dest)<\/em>\ndiagnose debug flow filter saddr 10.104.219.3\ndiagnose debug flow filter daddr 10.212.179.5\n&nbsp;\n<em># d\u00e9marrer la prise de trace<\/em>\n<em># on peut la limiter aux x premiers paquet en ajoutant x \u00e0 la fin<\/em>\ndiagnose debug flow trace start\n&nbsp;\n<em># \u00e0 la fin de la prise de trace, pas de ctrl+C sous peine d'\u00eatre d\u00e9connect\u00e9 !<\/em>\n<em># pour stopper la prise de trace<\/em>\ndiagnose debug flow filter <strong>clear<\/strong>\ndiagnose debug flow trace stop\ndiagnose debug disable\n&nbsp;\n<em># bonus<\/em>\ndiagnose debug flow show function-name enable\ndiagnose debug flow show iprope enable<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"messages_d_erreur_courants\">Messages d&#8217;erreur courants<\/h3>\n\n\n\n<p><code>Denied by forward policy check<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>le flux ne matche aucune r\u00e8gle donc dropp\u00e9 par la r\u00e8gle balais (rule ID=0)<\/li><li>le flux matche une r\u00e8gle DENY sp\u00e9cifique (rule ID=x)<\/li><li>le flux matche une r\u00e8gle PERMIT MAIS disclaimer est activ\u00e9 (= l&#8217;utilisateur doit accepter le disclaimer affich\u00e9 par le FW pour passer)<\/li><\/ul>\n\n\n\n<p><code>iprope_in_check() check failed, drop<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>le protocole d&#8217;acc\u00e8s n&#8217;est pas permis sur le port de mgmt (PING, SSH, HTTPS)<\/li><li>l&#8217;IP src ne fait pas partie des \u201ctrusted hosts\u201d (dans System &gt; Admin &gt; Administrators)<\/li><li>quand on {PING, ssh, etc} une itf(2) du FW en arrivant par une autre itf(1) ET qu&#8217;il n&#8217;existe aucune r\u00e8gle de s\u00e9curit\u00e9 depuis itf1 vers itf2 (NB : l&#8217;interface \u201cany\u201d ne compte pas !)<\/li><\/ul>\n\n\n\n<p>ex : PING WAN2 quand on arrive par itf DMZ et qu&#8217;il n&#8217;y a pas de politique entre DMZ \u2192 WAN2<\/p>\n\n\n\n<p><code>reverse path check fail, drop<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>antispoofing = l&#8217;IP source est connue sur une autre interface (loopback interne, route statique, autre zone, etc)<\/li><\/ul>\n\n\n\n<p>Pour d\u00e9sactiver l&#8217;antispoofing :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system settings\n   set asymroute enable\nend<\/pre>\n\n\n\n<p><code>cmdb add entry failed<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>plus assez de m\u00e9moire libre ! \u21d2 il faut soit killer un\/des processus, soit rebooter le forti<\/li><\/ul>\n\n\n\n<p><code>action=ip-conn<\/code><\/p>\n\n\n\n<p>Des flux semblent bloqu\u00e9s par le Fortigate (on ne voit pas sortir les paquets avec un&nbsp;<code>diag sniff paquet \u2026<\/code>), et ressortent dans les logs avec l&#8217;action&nbsp;<code>ip-conn<\/code>&nbsp;(au lieu de accept ou deny). Ces flux sont pourtant permis par la politique de s\u00e9curit\u00e9, mais le Fortigate ne re\u00e7oit pas de r\u00e9ponse de la destination, \u00e0 cause :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>de la pr\u00e9sence d&#8217;un firewall applicatif bloquant sur la destination<\/li><li>d&#8217;un probl\u00e8me de manque de ressources sur ce dernier ; dans ce cas, la&nbsp;<a href=\"http:\/\/kb.fortinet.com\/kb\/documentLink.do?externalID=FD39321\">KB FD39321<\/a>&nbsp;recommande de v\u00e9rifier les ressources du Fortigate :<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose hardware sysinfo memory\nget system performance status\nget system performance top<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sniffer_packet\">sniffer packet<\/h2>\n\n\n\n<p>C&#8217;est une impl\u00e9mentation de tcpdump ; la syntaxe basique est :&nbsp;<code>diagnose sniffer packet &lt;interface&gt; '&lt;filter&gt;' [ &lt;verbose&gt; &lt;count&gt; &lt;time-format&gt; ]<\/code>, par exemple pour sniffer TOUT le trafic :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose sniffer packet any '' 4 0 l\n<em># avec time-format =<\/em>\n<em>#   \"a\" affiche le timestamp absolu (UTC)<\/em>\n<em>#   \"l\" affiche le timestamp local<\/em>\n<em>#Verbose levels in detail:<\/em>\n<em>#   1: print header of packets<\/em>\n<em>#   2: print header and data from IP of packets<\/em>\n<em>#   3: print header and data from Ethernet of packets<\/em>\n<em>#   4: print header of packets with interface name<\/em>\n<em>#   5: print header and data from IP of packets with interface name<\/em>\n<em>#   6: print header and data from Ethernet of packets with interface name <\/em><\/pre>\n\n\n\n<p>Il est important de noter que les paquets acc\u00e9l\u00e9r\u00e9s par les Network Processors (NP1, 2 etc\u2026) ne sont pas captur\u00e9s par cette commande, excepter les ouvertures de sessions. Pour sniffer tous ces paquets, il faut au pr\u00e9alable&nbsp;<a href=\"http:\/\/pteu.fr\/doku.php?id=informatique:fortinet:start#acceleration_hardware_np\">d\u00e9sactiver l&#8217;acc\u00e9l\u00e9ration mat\u00e9rielle<\/a>&nbsp;sur le flux qu&#8217;on veut sniffer mais cela aura un impact sur les performances.<\/p>\n\n\n\n<p>Diff\u00e9rents exemples de captures int\u00e9ressantes :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Match TTL = 1 (on lit le 9eme octet dans IP)<\/em>\ndiagnose sniffer packet port2 \"ip[8:1] = 0x01\"\n&nbsp;\n<em># Match Source IP address = 192.168.1.2: (on lit les 4 27eme octets d'ethernet)<\/em>\ndiagnose sniffer packet internal \"(ether[26:4]=0xc0a80102)\"\n&nbsp;\n<em># Match Source MAC = 00:09:0f:89:10:ea<\/em>\ndiagnose sniffer packet internal \"(ether[6:4]=0x00090f89) and (ether[10:2]=0x10ea)\"\n&nbsp;\n<em># Match Destination MAC = 00:09:0f:89:10:ea<\/em>\ndiagnose sniffer packet internal \"(ether[0:4]=0x00090f89) and (ether[4:2]=0x10ea)\"\n&nbsp;\n<em># Match ARP packets only<\/em>\ndiagnose sniffer packet internal \"ether proto 0x0806\"\ndiagnose sniffer packet internal \"arp\"\n&nbsp;\n<em># Match IPv6 packets only<\/em>\ndiagnose sniffer packet internal \"ether proto 0x86dd\"\ndiagnose sniffer packet internal \"ip6\"\n&nbsp;\n<em># Match packets with RST flag set:<\/em>\ndiagnose sniffer packet internal \"tcp[13] &amp; 4 != 0\"\n&nbsp;\n<em># Match packets with SYN flag set:<\/em>\ndiagnose sniffer packet internal \"tcp[13] &amp; 2 != 0\"\n&nbsp;\n<em># Match packets with SYN-ACK flag set:<\/em>\ndiagnose sniffer packet internal \"tcp[13] = 18\"\n&nbsp;\n<em># Match packets with SYN and no ACK flags set:<\/em>\ndiagnose sniffer packet internal \"tcp[13] &amp; 18 == 2\"\n&nbsp;\ndiagnose debug app hatalk 255\n&nbsp;\n<em># Afficher les paquets ICMP de type 3 code 4<\/em>\n<em># (fragmentation n\u00e9cessaire mais impossible \u00e0 cause du drapeau (flag) DF)<\/em>\ndiagnose sniffer packet any 'icmp[0] = 3 and icmp[1] = 4' 4 0 l\n<em># alternative :<\/em>\ndiagnose sniffer packet any 'icmp[0:2] = 0x0304' 4 0 l<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"packet_capture\">Packet capture<\/h2>\n\n\n\n<p>On peut capturer des paquets au format pcap pour pouvoir interpr\u00e9ter la trace avec Wireshark. Pour cela, il suffit de se rendre dans le menu \u201cNetwork &gt; Packet capture\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/pteu.fr\/lib\/exe\/fetch.php?media=informatique:fortinet:packet_capture_5.2.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Si le menu n&#8217;apparait pas, on peut s&#8217;y rendre avec l&#8217;<abbr title=\"Uniform Resource Locator\">URL<\/abbr>&nbsp;:&nbsp;<a href=\"https:\/\/[management-ip]\/ng\/page\/p\/firewall\/sniffer\/\">https:\/\/[management-IP]\/ng\/page\/p\/firewall\/sniffer\/<\/a><\/p>\n\n\n\n<p>Si l&#8217;on tombe sur une \u201cError 403: Access denied.\u201d avec l&#8217;astuce pr\u00e9c\u00e9dente, c&#8217;est que la fonction n&#8217;est pas disponible. Cela arrive si le Fortigate n&#8217;a pas de disque dur interne, ou s&#8217;il est configur\u00e9 en mode \u201cWAN Optimization\u201d au lieu de \u201cDisk logging\u201d (ce mode se configure dans \u201cGlobal &gt; System &gt; Advanced\u201d, puis \u201cDisk settings\u201d, et n\u00e9cessite un reboot du Forti + formatage du disque si on le modifie.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"maj_du_firmware\">MAJ du firmware<\/h1>\n\n\n\n<p>On peut r\u00e9cup\u00e9rer la version courante en mode global :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">get system status | <strong>grep<\/strong> Version:\nVersion: FortiGate-800C v5.2.3,build0670,150318 (GA)<\/pre>\n\n\n\n<p>La pluspart du temps c&#8217;est plus simple de lancer les mises \u00e0 jour via la webUI (\u00e0 partir du dashboard), mais on peut aussi le faire en CLI :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># sauvegarde de la conf<\/em>\nexecute backup config usb &lt;file.conf&gt;\nexecute backup full-config usb &lt;file_full.conf&gt;\n&nbsp;\n<em># sauvegarde des logs<\/em>\nexecute backup memory alllogs tftp &lt;tftp server&gt; [text|compact]\n&nbsp;\n<em># sauvegarder les signatures IPS<\/em>\nexecute backup ipsuserdefsig tftp &lt;filename&gt; &lt;tftp server&gt;\n&nbsp;\n<em># upgrade-downgrade en CLI :<\/em>\nexecute restore image tftp &lt;filename&gt; &lt;tftp_ipv4&gt;\n<em># ou au red\u00e9marrage lorsqu'apparait ce message en console :<\/em>\n\"Press any key to display configuration menu..........\"\n&nbsp;\n<em># restorer la conf<\/em>\nexecute backup config <strong>ftp<\/strong> &lt;FILENAME&gt; &lt;<strong>ftp<\/strong> server&gt;<\/pre>\n\n\n\n<p>NB : il n&#8217;est (\u00e0 priori) pas\/plus possible, dans les derni\u00e8res versions de firmware (5.x et +), d&#8217;uploader une image sur le Fortigate sans l&#8217;activer : le firewall reboot syst\u00e9matiquement \u00e0 chaque upload de firmware.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"rollback\">Rollback<\/h2>\n\n\n\n<p>Si une version de firmware ne fonctionne pas comme pr\u00e9vu, on peut faire un rollback c&#8217;est-\u00e0-dire un retour sur la pr\u00e9c\u00e9dente version :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># lister les partitions (gestion des images de fortiOS)<\/em>\ndiagnose sys flash list\n FGT800xxxxxxxxxx <em># diagnose sys flash list<\/em>\n Partition  Image                                     TotalSize(KB)  Used(KB)  Use%  Active\n 1          FGT800-4.00-FW-build694-161108                    27541     22537   82%  Yes\n 2          FGT800-4.00-FW-build689-140731                    27541     22537   82%  No\n Image build at Aug  1 2014 02:49:11 for b0689\n&nbsp;\n<em># ensuite on peut configurer l'image (1 ou 2, primary ou secondary) \u00e0 charger par d\u00e9faut au prochain reboot :<\/em>\nexecute set-next-reboot secondary\n Default image is changed to image<em># 2.<\/em>\n&nbsp;\n<em># rebooter<\/em>\nexecute reboot\n This operation will reboot the system !\n Do you want to continue? (y\/n)y<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"usb_auto-install\">USB auto-install<\/h2>\n\n\n\n<p>Une fonctionnalit\u00e9 int\u00e9ressante des Fortigate est d&#8217;utiliser une cl\u00e9 USB pour faire booter le firewall dessus. Si ce dernier trouve :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>un fichier&nbsp;<strong>fgt_system.conf<\/strong>, il chargera ce fichier de configuration au boot<\/li><li>une image&nbsp;<strong>image.out<\/strong>&nbsp;il chargera ce firmware au boot<\/li><\/ul>\n\n\n\n<p>Ces noms de fichiers sont configurables en webUI dans \u201cSystem &gt; Config &gt; Advanced\u201d ou en CLI :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config global\n  config system auto-install\n    set auto-install-config enable\n    set auto-install-image enable\n    set default-config-file \"fgt_system.conf\"\n    set default-image-file \"image.out\"\n  end\nend<\/pre>\n\n\n\n<p>La cl\u00e9 doit \u00eatre format\u00e9e en FAT pour \u00eatre lisible par le Fortigate ; pour le v\u00e9rifier :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">diagnose hardware deviceinfo disk\n [..]\n Disk USB-7(user-usb) ref:  32  28.8GiB    type: USB [Kingston DataTraveler 3.0] dev: \/dev\/sdc\n  partition ref:  33  28.8GiB,  28.8GiB <strong>free<\/strong>  mounted: Y  label:  dev: \/dev\/sdc1 start: 0\n&nbsp;\nexecute usb-disk list\n 2019-07-23 16:07:14\t  43664535\timage.out<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"metrologie_supervision\">M\u00e9trologie\/supervision<\/h1>\n\n\n\n<p>Pour lister les capteurs du ch\u00e2ssis :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config global\nexecute sensor { list | detail }<\/pre>\n\n\n\n<p>En vrac, les OIDs int\u00e9ressants :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ OIDs fortigate (en v3)\n<em># OID\t\t\t\t\tdesc<\/em>\n<em># system<\/em>\n.1.3.6.1.4.1.12356.1.2.0\t\tSN\n.1.3.6.1.4.1.12356.1.100.6.1.2.1\tSN\n.1.3.6.1.4.1.12356.1.3.0\t\tversion fortiOS\n.1.3.6.1.4.1.12356.1.8.0\t\tgauge CPU (%)\n.1.3.6.1.4.1.12356.1.9.0\t\tgauge m\u00e9moire (%)\n<em># network<\/em>\n.1.3.6.1.4.1.12356.1.10.0\t\tnb de sessions\n.1.3.6.1.4.1.12356.101.12.1.1.0\t\tnb de tunnel vpn IPSec up\n&nbsp;\n\/\/ OIDs v4-v5\n<em># system\t.1.3.6.1.2.1.1.1.0<\/em>\n.1.3.6.1.4.1.12356.100.1.1.1.0\t\tSN\n.1.3.6.1.2.1.1.5.0\t\t\t<strong>hostname<\/strong>\n.1.3.6.1.4.1.12356.101.4.1.1.0\t\tversion de fortiOS (firmware)\n.1.3.6.1.4.1.12356.101.4.1.3.0\t\tCPU (%)\n.1.3.6.1.4.1.12356.101.4.4.2.1.2.2\t% CPU (Core <em>#) 1 min<\/em>\n.1.3.6.1.4.1.12356.101.4.4.2.1.2.3\t% CPU (Core <em>#) 5 min<\/em>\n.1.3.6.1.4.1.12356.101.4.1.4.0\t\tmemoire (%) ?\n.1.3.6.1.2.1.1.1\t\t\tDescription SNMP\n.1.3.6.1.2.1.1.3\t\t\t<strong>uptime<\/strong>\n.1.3.6.1.2.1.1.4\t\t\tContact SNMP\n.1.3.6.1.2.1.1.5\t\t\t<strong>hostname<\/strong> + local domain name\n.1.3.6.1.2.1.1.6\t\t\tLocation SNMP\n<em># sensors<\/em>\n.1.3.6.1.4.1.12356.101.4.3.1.0\t\tHardware Sensor count\n.1.3.6.1.4.1.12356.101.4.3.2.1.1\tHardware Sensor index\n.1.3.6.1.4.1.12356.101.4.3.2.1.2\tHardware Sensor Name\n.1.3.6.1.4.1.12356.101.4.3.2.1.3\tHardware Sensor Value\n.1.3.6.1.4.1.12356.101.4.3.2.1.4\tHardware Sensor Alarm\n<em># network (IF-MIB)<\/em>\n.1.3.6.1.4.1.12356.101.4.1.8.0\t\tnb de sessions\n.1.3.6.1.4.1.12356.101.4.1.11\t\tfgSysSesRate1\n.1.3.6.1.4.1.12356.101.4.1.12\t\tfgSysSesRate10\n.1.3.6.1.4.1.12356.101.4.1.13\t\tfgSysSesRate30\n.1.3.6.1.4.1.12356.101.4.1.14\t\tfgSysSesRate60\n.1.3.6.1.2.1.2.2.1.2\t\t\tliste des interfaces\n.1.3.6.1.2.1.2.2.1.10\t\t\tIF-MIB::ifInOctets (Counter32)\n.1.3.6.1.2.1.2.2.1.16\t\t\tIF-MIB::ifOutOctets\n.1.3.6.1.2.1.31.1.1.1.6\t\t\tIF-MIB::ifHCInOctets (Counter64)\n.1.3.6.1.2.1.31.1.1.1.10\t\tIF-MIB::ifHCOutOctets (Counter64)\n<em># table ARP\/correspondance adresse IP -&gt; MAC<\/em>\n.1.3.6.1.2.1.4.22.1.2                   IP-MIB::ipNetToMediaPhysAddress\n<em>#(utilisation : &lt;OID&gt;.&lt;ID_ITF&gt;.&lt;adresse IP&gt;, par ex :<\/em>\n<em>#IP-MIB::ipNetToMediaPhysAddress.3.10.0.0.1 pour obtenir la MAC de l'IP 10.0.0.1 sur le port3 du Fortigate)<\/em>\n<em># policy<\/em>\n.1.3.6.1.4.1.12356.101.5.1.2.1.1.1.1\tfgFwPolID (index des <em># des r\u00e8gles)<\/em>\n.1.3.6.1.4.1.12356.101.5.1.2.1.1.2.1.1\tfgFwPolPktCount\n.1.3.6.1.4.1.12356.101.5.1.2.1.1.1.1\tfgFwPolByteCount\n<em># securite \/ UTM<\/em>\n.1.3.6.1.4.1.12356.101.8.2.1.1.1\tfgAvVirusDetected\n.1.3.6.1.4.1.12356.101.8.2.1.1.3\tfgAvHTTPVirusDetected\n.1.3.6.1.4.1.12356.101.8.2.1.1.5\tfgAvSMTPVirusDetected\n.1.3.6.1.4.1.12356.101.8.2.1.1.7\tfgAvPOP3VirusDetected\n.1.3.6.1.4.1.12356.101.8.2.1.1.9\tfgAvIMAPVirusDetected\n.1.3.6.1.4.1.12356.101.8.2.1.1.11\tfgAvFTPVirusDetected\n.1.3.6.1.4.1.12356.101.8.2.1.1.13\tfgAvIMVirusDetected\n.1.3.6.1.4.1.12356.101.8.2.1.1.15\tfgAvNNTPVirusDetected\n<em># IPS<\/em>\n.1.3.6.1.4.1.12356.101.9.2.1.1.2.1\n<em># HA<\/em>\n.1.3.6.1.4.1.12356.101.13.2.1.1.1\tfnHaStatsIndex\n.1.3.6.1.4.1.12356.101.13.2.1.1.2\tfnHaStatsSerial\n.1.3.6.1.4.1.12356.101.13.2.1.1.3\tfnHaStatsCpuUsage\n.1.3.6.1.4.1.12356.101.13.2.1.1.4\tifnHaStatsMemUsage\n.1.3.6.1.4.1.12356.101.13.2.1.1.5\tfnHaStatsNetUsage\n.1.3.6.1.4.1.12356.101.13.2.1.1.6\tfnHaStatsSesCount\n.1.3.6.1.4.1.12356.101.13.2.1.1.7\tfnHaStatsPktCount\n.1.3.6.1.4.1.12356.101.13.2.1.1.8\tfnHaStatsByteCount\n.1.3.6.1.4.1.12356.101.13.2.1.1.9\tfnHaStatsIdsCount\n.1.3.6.1.4.1.12356.101.13.2.1.1.10\tfnHaStatsAvCount\n.1.3.6.1.4.1.12356.101.13.2.1.1.11\tfnHaStatsHostname<\/pre>\n\n\n\n<p>R\u00e9f\u00e9rences :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"http:\/\/www.opennms.org\/wiki\/Fortinet_Guide#Datacollection\">http:\/\/www.opennms.org\/wiki\/Fortinet_Guide#Datacollection<\/a><\/li><li><a href=\"http:\/\/www.circitor.fr\/Mibs\/Html\/FORTINET-FORTIGATE-MIB.php\">http:\/\/www.circitor.fr\/Mibs\/Html\/FORTINET-FORTIGATE-MIB.php<\/a><\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"divers_tips\">Divers tips<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"password_recovery\">Password recovery<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>d\u00e9marrer le firewall en \u00e9tant connect\u00e9 au port console<\/li><li>dans les 30s qui suivent l&#8217;affichage du prompt de login, se logguer en :<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">login: \t\tmaintainer\nPassword: \tbcpbFG800CXXXXXX (\"bcpb\" suivi du n\u00b0 de s\u00e9rie du firewall)<\/pre>\n\n\n\n<p>Attention ce mode ne permet pas de cr\u00e9er des utilisateurs, juste d&#8217;en modifier des existants.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"reset_factory\">Reset factory<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">execute factoryreset<\/pre>\n\n\n\n<p>Il existe \u00e9galement la commande&nbsp;<code>execute factoryreset2<\/code>&nbsp;qui permet de garder les routes et les adresses IPs des interfaces.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fnsysctl\">fnsysctl<\/h2>\n\n\n\n<p><strong>fnsysctl<\/strong>&nbsp;est une commande qui permet de lancer certaines commandes du syst\u00e8me Linux sous-jacent. Comme elle est cach\u00e9e, elle n&#8217;est ni auto-compl\u00e9t\u00e9e dans le prompt, ni document\u00e9e (&lt;TAB&gt;).&nbsp;<del>Cette commande n&#8217;est plus disponible \u00e0 partir de la version FortiOS 5.4.<\/del><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">FGT (global) <em># fnsysctl cat \/proc\/version<\/em>\nLinux version 2.4.37 (root@build192) <em>#3 Tue Mar 17 19:52:27 PDT 2015<\/em>\n&nbsp;\nFGT (global) <em># fnsysctl ifconfig amc-dw1\/1<\/em>\namc-dw1\/1\tLink encap:Ethernet  HWaddr 00:09:0F:91:00:D4\n\tinet addr:10.1.1.52  Bcast:10.1.255.255  Mask:255.255.0.0\n\tUP BROADCAST RUNNING ALLMULTI MULTICAST  MTU:1500  Metric:1\n\tRX packets:3099621200 errors:0 dropped:0 overruns:0 frame:4\n\tTX packets:3359661545 errors:0 dropped:0 overruns:0 carrier:0\n\tcollisions:0 txqueuelen:100 \n\tRX bytes:1702617951232 (1585.7 GB)  TX bytes:2084883916597 (1941.7 GB) \n\tInterrupt:19 Base address:0x6000 Memory:e7800000-0<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">FGT (global) <em># fnsysctl cat \/proc\/net\/dev<\/em>\nInter-|   Receive                                                |  Transmit\n face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed\nort13: 428296577505964 392502799967    0 4301196  0   0   0   0   141523980618022 265213255572    0   0   0   0   0   0<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sauvegarde_en_scp\">Sauvegarde en SCP<\/h2>\n\n\n\n<p>Pour sauvegarder les configuration sur un serveur centralis\u00e9 et en SCP (src :&nbsp;<a href=\"http:\/\/kb.fortinet.com\/kb\/documentLink.do?externalID=12002\">http:\/\/kb.fortinet.com\/kb\/documentLink.do?externalID=12002<\/a>&nbsp;)<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>v\u00e9rifier que le SSH est bien activ\u00e9 et permis sur l&#8217;interface d&#8217;admin<\/li><li>copier la cl\u00e9 SSH publique du serveur sur les Fortigate :<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">config system admin\n   edit admin\n      set ssh-public-key1 \"ssh-rsa AAAAB3NzaC1[blabla...]onL7eow== adminsys@zeus\"\n   end<\/pre>\n\n\n\n<p>Maintenant on peut se connecter en SSH depuis le serveur sans saisir de mot de passe \ud83d\ude42<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>activer le SCP sur les Fortigate :<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">config system global\n   set admin-scp enable\nend<\/pre>\n\n\n\n<p>Maintenant on peut sauvegarder toute la smala avec un script de ce genre :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for FW in \"forti1 forti2 etc\"\ndo\n   <strong>scp<\/strong> adminsys@$FW:sys_config \/save\/forti\/$FW.conf\ndone<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"config_global_user\">config global user<\/h2>\n\n\n\n<p>Avec l&#8217;interface web, lorsqu&#8217;on veut cr\u00e9er un utilisateur on ne peut que lui accorder des droits RO ou RW sur un (ou des) VDOM(s) particulier(s), mais&nbsp;<strong>on ne peut pas configurer l&#8217;acc\u00e8s \u00e0 la partie configuration globale<\/strong>. La seule mani\u00e8re de donner l&#8217;acc\u00e8s \u00e0 un utilisateur \u00e0 ce menu, c&#8217;est de l&#8217;ajouter dans le profil&nbsp;<strong>super_user<\/strong>&nbsp;et donc de lui donner tous les droits, ce qui n&#8217;est pas toujours souhaitable.<\/p>\n\n\n\n<p>Pour cr\u00e9er un utilisateur qui ait les droits de lecture du menu global, il faut passer par la ligne de commande suivante :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>pour aller plus vite :<ul><li>cr\u00e9er en webUI le profil prof_RO avec tous les droits en RO<\/li><li>cr\u00e9er un utilisateur utilisant ce profil<\/li><\/ul><\/li><li>puis, en CLI :<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">config global\n   config system accprofile\n      edit prof_diag\n         set scope global\n      end<\/pre>\n\n\n\n<p>En passant en CLI, on a acc\u00e8s \u00e0 l&#8217;option \u201cscope\u201d qui permet d&#8217;activer la vue sur la partie&nbsp;<code>config global<\/code>&nbsp;du Fortigate (et en lecture seule).<\/p>\n\n\n\n<p>source :&nbsp;<a href=\"http:\/\/kb.fortinet.com\/kb\/documentLink.do?externalID=FD34502\">KB FD34502<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"route_statique_inactive\">Route statique inactive<\/h2>\n\n\n\n<p>Lorsqu&#8217;on ajoute une route statique via la webUI, elle peut \u00eatre inactive et ne pas apparaitre dans le \u201cRouting monitor\u201d. Si c&#8217;est le cas, v\u00e9rifier en CLI :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Router <em># get router info routing-table details 192.168.18.0<\/em>\nRouting entry for 192.168.18.0\/24\n  Known via \"static\", distance 10, metric 0\n    10.0.140.2, via port5 inactive<\/pre>\n\n\n\n<p>Cela arrive le plus souvent lorsque le next-hop d\u00e9clar\u00e9 n&#8217;est pas atteignable via ce port. En gros vous avez fait une faute de frappe dans la d\u00e9claration de la route statique OU vous avez un routage incoh\u00e9rent. Dans l&#8217;exemple ci-dessus, le next-hop 10.0.140.2 n&#8217;est pas joignable via le port5 mais via le port3 :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Router <em># get router info routing-table details 10.0.140.2<\/em>\nRouting entry for 10.0.140.0\/24\n  Known via \"connected\", distance 0, metric 0, best\n  * is directly connected, port3<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"policy_names\">Policy names<\/h2>\n\n\n\n<p>Depuis la version 5.4 on doit attribuer un nom aux r\u00e8gles de s\u00e9curit\u00e9s. C&#8217;est obligatoire, on ne peut pas cr\u00e9er de policy sans la nommer. Coercitif, ce comportement peut \u00eatre rendu optionnel par la directive suivante (\u00e0 saisir sur chaque VDOM ind\u00e9pendamment) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system settings\n   set gui-allow-unamed-policy enable<\/pre>\n\n\n\n<p>Cela peut \u00e9galement se configurer en webUI dans System &gt; Features Visibility, puis cocher \u201cAllow unnamed policies\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configuration_d_une_crl\">Configuration d&#8217;une CRL<\/h2>\n\n\n\n<p>Pour utiliser une liste de r\u00e9vocation (r\u00e9cup\u00e9ration en HTTP) et la mettre \u00e0 jour p\u00e9riodiquement (toutes les 3600s = 1h) :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config global\n  config certificate crl\n    edit \"G_CRL_1\"\n        set http-url \"http:\/\/10.0.0.2\/path_to_the_crl_file\/crl.pem\"\n        set source-ip 10.0.0.1\n        set update-interval 3600\n    next\n  end\nend<\/pre>\n\n\n\n<p><code>source-ip<\/code>&nbsp;permet naturellement de sp\u00e9cifier l&#8217;adresse \u00e0 partir de laquelle le Fortigate enverra sa requ\u00eate HTTP.<\/p>\n\n\n\n<p>Pour forcer la MAJ de la CRL \u201cG_CRL_1\u201d manuellement, lancer en mode global la commande :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">execute vpn certificate crl import auto G_CRL_1<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"where_used\">Where used ?<\/h2>\n\n\n\n<p>Pour pouvoir supprimer un objet (adresse, interface, VDOM, etc\u2026) il faut que toutes ses r\u00e9f\u00e9rences, dans d&#8217;autres objets, soient supprim\u00e9es.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/pteu.fr\/lib\/exe\/detail.php?id=informatique%3Afortinet%3Astart&amp;media=informatique:fortinet:forti_refs_col.png\"><img decoding=\"async\" src=\"http:\/\/pteu.fr\/lib\/exe\/fetch.php?w=600&amp;tok=47b770&amp;media=informatique:fortinet:forti_refs_col.png\" alt=\"\"\/><\/a><\/figure>\n\n\n\n<p>Par exemple pour supprimer une interface, il faut au pr\u00e9alable supprimer les routes statiques, les tunnels, les objets addresse, etc\u2026 qui en font mention. Cela peut se faire en webUI, dans le menu \u201cNetwork &gt; Interfaces\u201d en affichant la colonne&nbsp;<code>Ref.<\/code>&nbsp;:<\/p>\n\n\n\n<p>On peut aussi lister les objets utilis\u00e9s directement en CLI, avec la (nouvelle) commande :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">fgt600e (global) <em># diagnose sys cmdb refcnt show system.interface:name ico_extranet<\/em>\nentry used by table system.interface:name 'VISIO'\nentry used by table system.interface:name 'WIFI'<\/pre>\n\n\n\n<p>Si tout semble propre mais que l&#8217;objet ne peut pas \u00eatre supprim\u00e9 (la webUI affiche&nbsp;<code>Entry is used<\/code>), essayer de le supprimer en CLI : le message d&#8217;erreur sera plus verbeux. Par exemple, une interface sans r\u00e9f\u00e9rence ne pouvait pas \u00eatre supprim\u00e9e ; en CLI il est affich\u00e9 :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">fgt600e (interface) <em># delete LAN-centre<\/em>\nError: IP address 10.41.1.1 is configured <strong>as<\/strong> source-ip for communications to NTP server\ncommand_cli_delete:5774 delete table entry LAN-centre unset oper error ret=-23\nCommand fail. Return code -23<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"vpn_protocols_relaying\">VPN protocols relaying<\/h2>\n\n\n\n<p>Pour mettre en place un concentrateur VPN on cr\u00e9er une interface virtuelle \u201cdialup\u201d, en attente de connexion IKE\/IPSec entrante. Une fois le VPN \u00e9tablit, pour laisser passer les requ\u00eates broadcast\u00e9es \u00e0 travers le routage de l&#8217;interface, il faut les transf\u00e9rer en unicast vers les serveurs sp\u00e9cifi\u00e9s avec les commandes suivantes :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">config system interface\n   edit dialup\n      <em># pour le DHCP (dans ce cas, DHCP over IPSec)<\/em>\n      set dhcp-relay-service enable\n      set dhcp-relay-ip \"10.1.1.24\"\n      set dhcp-relay-type ipsec\n      <em># pour le BetBIOS<\/em>\n      set netbios-forward enable\n      set wins-ip 10.1.16.253\n   next<\/pre>\n\n\n\n<p>Pour rappel le DHCP permet la d\u00e9couverte et l&#8217;attribution des param\u00e8tres r\u00e9seau pour le client VPN (son IP, masque r\u00e9seau, passerelle,&nbsp;<abbr title=\"Domain Name System\">DNS<\/abbr>, NTP et serveurs WINs) et le NetBIOS permet de faire passer les flux vers les serveurs WINS. Cela permet par exemple un ersatzt de&nbsp;<abbr title=\"Domain Name System\">DNS<\/abbr>&nbsp;dynamique car les clients Windows s&#8217;annoncent aupr\u00e8s des WINS quand ils se connectent en VPN.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"liens_utiles\">Liens utiles<\/h1>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"http:\/\/docs-legacy.fortinet.com\/cb\/html\/index.html#page\/FOS_Cookbook\/Install_advanced\/cb_enhance_security.html\">Enhancing FortiGate Security (fortinet.com)<\/a><\/li><li>Source:  <a href=\"http:\/\/pteu.fr\/doku.php?id=informatique:fortinet:start\">http:\/\/pteu.fr\/doku.php?id=informatique:fortinet:start<\/a> <\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Fortinet&nbsp;est une marque am\u00e9ricaine cr\u00e9\u00e9e en 2000 qui con\u00e7oit des \u00e9quipements de s\u00e9curit\u00e9 r\u00e9seau. Elle est notamment connue pour ses appliances FortiGate, des firewalls tout-en-un ayant des fonctionnalit\u00e9s de pr\u00e9vention d&#8217;intrusion, routage, proxy, filtrage web et mail, VPN. Syst\u00e8me En&hellip; <a href=\"https:\/\/whatifsecu.tech\/?page_id=7\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-7","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/whatifsecu.tech\/index.php?rest_route=\/wp\/v2\/pages\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/whatifsecu.tech\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/whatifsecu.tech\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/whatifsecu.tech\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/whatifsecu.tech\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7"}],"version-history":[{"count":5,"href":"https:\/\/whatifsecu.tech\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions"}],"predecessor-version":[{"id":118,"href":"https:\/\/whatifsecu.tech\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions\/118"}],"wp:attachment":[{"href":"https:\/\/whatifsecu.tech\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}