Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Code source bouton "Save" et "Apply change "

    Français
    2
    8
    603
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Medi
      last edited by

      Bonjour,

      je suis en train de modifier le fichier config.xml de pfsense depuis un script python pour ajouter des vlan's, interfaces, des rules … etc. après la mise en place du nouveau fichier config.xml dans /cf/conf/ je supprime le /tmp/config.cache pour appliquer la modification. la seule chose manquante l'état de l'interface, il est toujours Down, après une clic sur le bouton "Save" dans le Gui de l'interface crée après sur "Apply change", je trouve son état est UP.
      je demande si c'est possible de m'indiquer comment je puisse lancer le script ou le code php qui fait le sauvegarde et applique les changements effectuer, je trouve déjà une fonction dans le fichier interfaces.php :

      +++++++++++++++++++++++++++++++++++++++++++++++++++++
      $changes_applied = false;

      if ($_POST['apply']) {
      unset($input_errors);
      if (!is_subsystem_dirty('interfaces')) {
      $input_errors[] = gettext("The settings have already been applied!");
      } else {
      $retval = 0;
      unlink_if_exists("{$g['tmp_path']}/config.cache");
      clear_subsystem_dirty('interfaces');

      if (file_exists("{$g['tmp_path']}/.interfaces.apply")) {
                  $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply"));
                  foreach ($toapplylist as $ifapply => $ifcfgo) {
                      if (isset($config['interfaces'][$ifapply]['enable'])) {
                          interface_bring_down($ifapply, false, $ifcfgo);
                          interface_configure($ifapply, true);
                          if ($config['interfaces'][$ifapply]['ipaddrv6'] == "track6") {
                              /* call interface_track6_configure with linkup true so
                                IPv6 IPs are added back. dhcp6c needs a HUP. Can't
                                just call interface_configure with linkup true as
                                that skips bridge membership addition.
                              /
                              $wancfg = $config['interfaces'][$ifapply];
                              interface_track6_configure($ifapply, $wancfg, true);
                          }
                      } else {
                          interface_bring_down($ifapply, true, $ifcfgo);
                          if (isset($config['dhcpd'][$ifapply]['enable']) ||
                              isset($config['dhcpdv6'][$ifapply]['enable'])) {
                              services_dhcpd_configure();
                          }
                      }
                  }
              }
              / restart snmp so that it binds to correct address */
              $retval |= services_snmpd_configure();

      /* sync filter configuration */
              setup_gateways_monitor();

      clear_subsystem_dirty('interfaces');

      $retval |= filter_configure();

      enable_rrd_graphing();

      $changes_applied = true;

      if (is_subsystem_dirty('staticroutes') && (system_routing_configure() == 0)) {
                  clear_subsystem_dirty('staticroutes');
              }
          }
          @unlink("{$g['tmp_path']}/.interfaces.apply");
      }
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      je ne sais pas si c'est la bonne fonction ou pas, malgré ça je ne connais pas la façon d'exécutions de ce code là.

      J'attends vos conseils ou propositions ;)
      Merci

      1 Reply Last reply Reply Quote 0
      • C
        ccnet
        last edited by

        Une chose m'échappe dans tout cela. D'un point de vue pratique quel est l'objectif final ?

        1 Reply Last reply Reply Quote 0
        • M
          Medi
          last edited by

          Bonne question ccnet ;)

          Mon objectif est d'automatiser la création des vlan's, interfaces, nat, alias .. etc dans le fichier config.xml depuis un script, cette partie passe bien, cette phase passe bien, seulement l'activation de l'interface réseaux ne marche pas, le seul moyen est d'entrer dans l'interface gui de pfsense, dans le menu de la nouvelle interface réseau, clic sur la bouton "Save" et puis "Apply change" et oop l'interface est UP.
          Donc pour cela, j'ai besoin de ce code pour l'intégrer dans le script python ;)

          j’espère que j'ai bien présenter mon objectif :)

          1 Reply Last reply Reply Quote 0
          • C
            ccnet
            last edited by

            C'est tout à fait clair. Outre le fait que je ne vois ni l'intérêt, ni la justification à automatiser cela, je ne sais pas comment vous envisagez de le faire. Normalement ces paramètres changent assez peu. Je crois comprendre que vous envisagez d'attaquer directement, depuis le script, le firewall. C'est un problème de sécurité majeur et une mauvaise pratique. N'oubliez pas que ce faisant, y compris via l'interface, que vous êtes root. De plus vous allez stocker très probablement un mot de passe
            Un possibilité serait de générer le fichier xml conforme à vos besoin et de passer l'option de restauration. C'est moins dangereux si vous êtes certain de la maitrise du fichier xml.

            1 Reply Last reply Reply Quote 0
            • M
              Medi
              last edited by

              Au niveau de sécurité j'ai bien protéger mon réseaux, mon architecture de scripting ce lance en local pas à distant.

              Pour la méthode de restauration ça ne me plait pas, parce que chaque modification effectuer vas rebooter le serveur pfsense ça implique une coupure de connexion pendant le délais de démarrage.

              Avant, j'ai utilise le script /etc/rc.reload_interfaces, mais je tombe une autre fois dans le problème du perte de connexion.

              1 Reply Last reply Reply Quote 0
              • C
                ccnet
                last edited by

                @Medi:

                Au niveau de sécurité j'ai bien protéger mon réseaux, mon architecture de scripting ce lance en local pas à distant.

                Je ne comprend pas cette phrase. Au delà de vos affirmations le principe est de toute façon douteux.
                Vous aurez de toute façon des coupures. Les modifications sur les vlans et interfaces nécessitent très souvent de redémarrer Pfsense pour fonctionner correctement.
                Et je ne vois toujours pas l'intérêt de ne pas utiliser l'interface pour faire vos modifications.

                1 Reply Last reply Reply Quote 0
                • M
                  Medi
                  last edited by

                  Si je passe par l'interface GUI de pfsense je vais créer manuellement les vlan's et les interfaces, mon objectif est de le rendre automatique par l'insertion des données dans le fichier config.xml et de rafraîchir cette nouvelle configuration.

                  1 Reply Last reply Reply Quote 0
                  • C
                    ccnet
                    last edited by

                    Il faudrat bien indiquer et saisir les données nouvelles pour générer votre xml . Vous n'avez pas 300 vlans et douze interfaces à ajouter tous les matins. Je ne vois que des risques et inconvénients à la méthode que vous envisagez. Et je vous le redis, il faut en général redémarrer Pfsense avec ce type de modifications pour un fonctionnement correct. Je ne vois rien qui justifierai votre approche.

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post
                    Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.