Code source bouton "Save" et "Apply change "



  • 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



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



  • 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 :)



  • 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.



  • 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.



  • @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.



  • 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.



  • 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.


Log in to reply