Экспорт статистики из InJoy Firewall 3.0

Автор: Ян Злобин

Дата: 17 октября 2006

Источник: Net space

Скачать статью в формате DOC.

Как я уже писал, InJoy Firewall 3.0 сохраняет данные о статистике в ASCII-файле, содержащем большое количество данных, и неплохо подходящем для чтения человеком. К сожалению, ASCII-файл плохо подходит для экспорта информации в другие форматы.

Экспорт статистики подразумевает понимание двух моментов: куда мы будем сливать данные и в каком формате. В идеале формат должен быть таким, чтобы переносить данные можно было бы куда угодно.

Определяемся с форматом файла

Лучшим из известных мне форматов представления данных является XML, который имеет следующие плюсы:

  • Формат XML позволяет в одном файле представить сколь угодно сложную структуру данных
  • Почти все (а может и все) современные СУБД понимают формат XML
  • XML относительно легко воспринимается человеком
  • XML является самодостаточным форматом в том смысле, что для его чтения и анализа необязательно использовать базу данных

При всех его достоинствах файл формата XML имеет весьма значительный размер, что не может не сказаться при передачи файла по сети. Однако, он хорошо сжимается (мне удалось сжать XML-файл в 17 раз).

В нашем случае мы рассмотрим вариант, когда статистическая информация преобразуется в формат XML с целью дальнейшей заливки в базу данных. В данной статье собственно базу данных я рассматривать не буду (это тема отдельной статьи), а остановлюсь непосредственно на процессе преобразования данных в формат XML и программных средств, которые будут для этого использоваться.

Предварительные меры

В первую очередь необходимо отметить, что действующий файрвол продолжает работать с исходным ASCII-файлом, регулярно открывая его на запись. Из переписки с разработчиками файрвола я понял, что если открыть файл в тот момент, когда файрвол будет сохранять в него очередную порцию статистики, ничего хорошего не произойдет. Они рекомендуют сначала проверить время последнего изменения файла, после этого скопировать его в другое место и только тогда обрабатывать. Следовательно, программа-обработчик файла непременно должна начинать работу с проверки даты последнего изменения файла.

Выбираем среду разработки

Я решал задачу по экспорту статистики в своей любимой оси OS/2 Warp, на этом примере и опишу данный процесс. За выбором реализации программы-обработчика дело не стало - самым естественным решением, идеально подходящим для решения нашей задачи в OS/2 Warp, является REXX. REXX, для тех, кто не знает - это язык программирования, командный язык и макроязык в одном флаконе, на котором можно делать практически все, что позволяет операционная система (например, легким движением левой задней ноги напрямую вызывать функции API операционной системы, создавать многопоточные приложения и подключать внешние библиотеки). Не смотря на то, что REXX - язык интерпретируемый, программы на нем летают как пули.

Если InJoy Firewall работает в среде Windows, то самым простым вариантом реализации программы-обработчика будет использование встроенного в систему VBScript, который предоставляет родные для Windows средства доступа к файловой системе. Для UNIX, соответственно sh или аналог.

Собственно обработка

Как я уже говорил, в результате обработки файла статистики в базе данных получается восемь таблиц, каждую из которых необходимо отобразить в XML-файле. Я не буду подробно вдаваться в описание кода программы-обработчика и описание структуры XML-файла, вместо этого я даю готовый скрипт на REXX, который все это делает (для запуска изменить расширение на CMD, если кто не знает). Кому интересно, может посмотреть код программы и заглянуть в XML.

На самом деле обозначенный скрипт делает несколько больше, чем просто конвертирование файла статистики файрвола в XML - он обрабатывает сразу два файла статистики двух файрволов (внутреннего и внешнего), предварительно проверив дату последнего обновления обоих файлов, заливает все эти данные в один XML-файл (то есть, уже 16 таблиц), сжимает его в ZIP, отправляет по FTP на сервер, пишет лог, удаляет за собой все временные файлы и делает запись в специальном флаговом файле о дате последней удачно проведенной процедуры. Таким образом достигается непрерывность переноса данных статистики, так как следующая процедура переноса данных будет начинаться с даты, идущей непосредственно за последней удачно прошедшей заливкой. В моем случае ZIP-файл заливается на сервер статистики, где распаковывается, и данные заливаются непосредственно в базу данных.

Описание переменных

В начале REXX-файла есть выделенная область, в которой задаются переменные. Их необходимо определить до первого запуска программы и создать все нужные директории. Все файлы (включая временные и файл-флаг) программа создает автоматически. Вот краткое описание переменных:

BufferPath - полный путь к директории временных файлов

LastRunLogFileName - полный путь к файлу, хранящему дату последней удачной процедуры

OutsideLogFileName - имя файла статистики внешнего файрвола (должно совпадать с файлом статистики, определенным правилом файрвола)

InsideLogFileName - то же для внутреннего файрвола

InsideLogProcess - флаг, включающий обработку файла статистики внутреннего файрвола (1 - обрабатывать, 0 - не обрабатывать). Здесь можно отключить обработку второго файла статистики, если файрвол только один.

FirewallIp - IP-адрес хоста файрвола. Одновременно является именем результирующих XML- и ZIP-файлов. Таким образом становиться возможным заливать на сервер статистики одновременно несколько файлов с разных хостов-файрволов. Что в моем случае и происходит. Лучше использовать IP-адрес внутреннего интерфейса.

FtpHost - IP-адрес или имя FTP-сервера статистики

FtpUser - имя пользователя на FTP-сервере

FtpPassword - пароль на FTP-сервере

LogLevel - уровень подробности создаваемого программой лога (1 - подробно, 0 - кратко). Лог выдается на стандартное устройство вывода, то есть, по умолчанию на консоль. Для записи в файл надо использовать символы перенаправления >> {Имя файла}

FirewallPath - путь к корню внешнего файрвола. Путь внутреннего файрвола не регулируется и должен быть таким: "C:\Firewall_Inside". Пробелы в этом пути использовать не рекомендуется.

LogPath - путь к файлам статистики файрвола, начиная от корня файрвола. Имеет смысл оставить значения по умолчанию.

Параметры запуска

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

Если месяц - текущий, то при запуске без параметров программа определяет время и дату последнего обновления каждого файла статистики. Если дата не сегодняшняя, то файлы обрабатываются немедленно, иначе программа ждет 40 минут, проверяя дату последней записи каждые 10 секунд. Если зафиксировано новое изменение файла, программа ждет еще 10 секунд и обрабатывает файл. Каждый файл в отдельности.

При этом, можно определить и любой другой месяц из командной строки. Месяц определяется по тому же правилу, что и расширение файла статистики файрвола, то есть трехбуквенное сокращение месяца на основе языка системы. Например, statproc May обработает майскую статистику в октябре без ожидания перезаписи файла.

Дополнительные утилиты

Описанная выше REXX-программа использует в своей работе некоторые утилиты, которые должны находиться в директории C:\OS2\APPS\.

Для правильной работы статистики необходимо запускать файл в начале каждых суток по расписанию согласовано с установленным в параметрах файрвола временем задержки сохранения статистики в файл (параметр Account-Interval в файле firewall/firewall.cnf). Для запуска по расписанию можно, например, использовать cron.

Для сжатия в ZIP необходима программа pkzip. Программа работает именно с PKZIP. Тестировалась с версией 2.50, но будет работать и с любой другой аналогичной.

Для заливки файла по FTP никаких дополнительных утилит не требуется, потому как REXX-программа использует встроенное FTP API системы OS/2 Warp.

В заключение

Описанная выше моя программа работает около двух лет, обрабатывая каждую ночь статистику нескольких хостов-шлюзов, и сливая ее на один общий сервер статистики. Время работы программы при обработке двух файлов статистики за раз на самом слабом из шлюзов (Pentium 166 при 80-ти мозгобайтах памяти) занимает меньше секунды.