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

    Выполнение скрипта после перезапуска фил

    Scheduled Pinned Locked Moved Russian
    7 Posts 2 Posters 4.0k Views
    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.
    • R
      r3l4x
      last edited by

      Доброго времени суток!
      Собственно есть perl-скрипт, который динамически формирует aliasы (или таблицы) пакетного фильра на основе данных, хранящихся в DB. т.е. этот скрипт считывает данные из DB и заносит их в таблицы pf c определенной переодичностью. Проблема в том, что после добавления нового правила или применения конфигурации фильтра, эти таблицы очищаются.
      Нужно сделать так, чтобы после применения правил пакетного фильтра автоматически стартовал данный скрипт.

      1 Reply Last reply Reply Quote 0
      • D
        dvserg
        last edited by

        Ну что мне на ум приходит - добавить какой нибудь ключевой алиас в БД, а из крона раз в 1-2 минуты проверять скриптом наличие этого алиаса в таблице. При отсутствии - запускать скрипт апдейта.

        SquidGuardDoc EN  RU Tutorial
        Localization ru_PFSense

        1 Reply Last reply Reply Quote 0
        • R
          r3l4x
          last edited by

          Да я об этом тоже думал, но 1-2 минуты это довольно много, да и безсмысленных итераций…
          Самый хороший вариант, нажал кнопку "Apply Changes", веб-конфигуратор перечитал файл настроек, обновил фильтр с помощью pfctl, выполнил скрипт.
          Как вариант можно в php-файлик добавить пару строк вида $aus=shell_exec("cd /blablabla; ./123.pl");. Только вот в какой? )
          С pfsense познакомился дня 2 назад, понял принцип его работы, что откуда читает, куда записывает, подправил .inc файлики под свои нужды, но видимо не доконца )
          Как вариант можно подменить файлик pfctl своим скриптом, который анализировал переданные аргументы, и если это релоад конфига, то выполнить его, а затем скрипт, но это слишком грубый метод.

          Так что вот думаю как поступить, или обойтись малой кровью, сделать через крон, или разбираться в коде )

          1 Reply Last reply Reply Quote 0
          • R
            r3l4x
            last edited by

            Решил пойти другим путем, и опять грабли… )
            Через веб-конфигуратор создал алиас auth_users, с двумя адресами 10.0.1.1 и 10.0.1.2. Т.е. в файле /tmp/rules.debug (pf.conf в pfsense), появился новый список auth_users = {10.0.1.1, 10.0.1.2}. Далее в /etc/inc/filter.inc добавил пару строк:

            if ($alias['name'] == "auth_users") {
                $aliases .= "table <auth_users>persist file "/usr/local/scripts/auth_users" \n";
            } else {
                $aliases .= "{$alias['name']} = "{ {$alias['address']}

            Далее мой скрипт сгенерил /usr/local/scripts/auth_users

            Обновил правила фильтра, в файлике /tmp/rules.debug появилась строка типа table <auth_users>persist file "/usr/local/scripts/auth_users".
            Проверяю: pfctl -t auth_users -T show
            10.0.1.1
            10.0.1.2
            т.е. всего 2 ip, хотя в /usr/local/scripts/auth_users их 200 )

            Где ошибка? Не понимаю…</auth_users></auth_users>

            1 Reply Last reply Reply Quote 0
            • D
              dvserg
              last edited by

              Ну можно напрямую писать в конфиг /cf/config.xml алиас и потом вызывать функцию генерации правил.

              SquidGuardDoc EN  RU Tutorial
              Localization ru_PFSense

              1 Reply Last reply Reply Quote 0
              • R
                r3l4x
                last edited by

                Ну не удачное решение на самом деле, если учесть что алиас может меняться и один раз за час, а может и несколько раз на минуте. При таком разкладе, если учесть что генерация правил не тривиальная задача для системы, я боюсь предположить что получится.
                Да и смысл? Как я понимаю filter.inc - скрипт, который парсит /cf/config.xml.

                1 Reply Last reply Reply Quote 0
                • R
                  r3l4x
                  last edited by

                  Решил, кстати, проблему )

                  В filter.inc, сразу после функции загрузки вставил строку:
                  $rms = shell_exec("cd /usr/local/scripts; ./aus_reload.pl");
                  И все ок.
                  Хотя в этом filter.inc, сразу после релоада правил идут строки:

                  /* run items scheduled for after filter configure run */
                  $fda = fopen("/tmp/commands.txt", "w");
                  foreach($after_filter_configure_run as $afcr)
                  fwrite($fda, $afcr . "\n");
                  fclose($fda);
                  if(file_exists("/tmp/commands.txt")) {
                  mwexec("sh /tmp/commands.txt &");
                  unlink("/tmp/commands.txt");
                  }

                  т.е. можно закомментировать unlink("/tmp/commands.txt"); и в /tmp/commands.txt добавить нужные команды.

                  Может кому пригодится )

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