Добавить в избранное | Сделать стартовой страницей

Большая Linux библиотека для пользователей OS Linux и ПО для нее
Есть что сказать? Нужен совет? Посети наш форум.


При поддержке
Продвижение сайта
Продвижение сайта
Раскрутка сайта
Создание сайта
Оптимизация сайта
Интернет реклама
Аудит сайта
Администрирование сервера
настройка сервера
установка сервера
аренда сервера
Администрирование сервера
администрирование сервера
настройка сервера
аренда сервера
Rambler's Top100


Линукс факс-сервер для сети на базе Windows.

Автор : Pedro Fraile
Перевод : Александр Михайлов

Введение

В фирме, на которую я работаю, есть система для отсылки и приема факсов, интегрированная в корпоративную e-mail платформу, Microsoft Exchange. В один прекрасный день, после обновления ПО, система сломалась. Нам потребовалось найти что-то с эквивалентной функциональностью, но удовлетворяющее следующим условиям:

  • Минимальная стоимость, или лучше вообще бесплатно, особенно в том что касается лицензий на ПО.
  • Прозрачная интеграция с программным обеспечением конечных пользователей (проще говоря Microsoft Office)
  • Отсутствие необходимости установки какого-либо ПО на стороне клиента, даже бесплатных программ, для минимизации работы сетевых администраторов.

Эта статья рассказывает о том, как интеграция нескольких продуктов с открытым исходным кодом на платформе Линукс позволила удовлетворить все эти требования.

Благодарности

Я хочу выразить мою признательность людям и организациям, без помощи которых я никогда не написал бы этой статьи. Во-первых, это работники IT-подразделения фабрики Solvay QuMmics S.L. в Torrelavega, Испания. Во-вторых, руководство моей фирмы за одобрение и поддержку при написании этой статьи. И, наконец, в последнюю очередь, но особенно сильно хочется поблагодарить всех кто участвовал в разработке проектов с Открытым Исходным кодом, упомянутых в этом тексте, участников списка рассылки HylaFax (которые обеспечили меня необходимой информацией) и Craig Kelly, разработчика утилиты smbfax.

Обзор системы

Чтобы уточнить о каком именно компьютере я веду здесь речь, я буду называть ПК с установленным программным обеспечением для работы с факсами, TOSERFAX.

Предлагаемое решение использует программный пакет HylaFax. Это приложение контролирует установленные модемы, распределяет входящие факсы и отсылает исходящие.

Входящие факсы конвертируются в формат PDF и направляются при помощи почтового протокола SMTP соответствующим получателям. PDF был выбран в качестве формата, так как Acrobat Reader это стандартная программная платформа в данной сети. Место назначение выбирается исходя из определенных правил, что будет разъяснено позднее.

Если кто-то хочет послать fax, то он печатает документ на принтер, расположенный на TOSERFAX, который виден всем остальным компьютерам благодаря Samba. Задание на печать вызовет отсылку e-mail сообщения пользователю, который поставил его на печать. Это e-mail сообщение содержит URL веб-формы, создаваемой на лету веб-сервером Apache. Веб-форма позволяет пользователю заполнить детали, касающиеся данного факсимильного сообщения, в частности телефонный номер. Как только пользователь закончил с заполнением формы, и щелкнул на кнопку "Отправить", факс попадает в очередь исходящих.

Программное и аппаратное обеспечение

Конфигурация TOSERFAX следующая:

  • PC Dell Optiplex GX150, с процессором 1 Ghz Pentium III , с 256 MB RAM и 20 GB жестким диском. Модемы: 3Com US Robotics 56K Faxmodem.

Что касается программного обеспечения:

  • Базовая система -- это дистрибутив SuSE Linux 7.2, который включает в себя HylaFAX версии 4.1beta2, веб-сервер Apache версии 1.3.19 и SMTP-сервер sendmail версии 8.11.3.
  • Samba версии 2.2.3a.
  • Отправка факсов клиентами реализована при помощи пакета smbfax, версии 1.4.

Установка и настройка HylaFAX

Установка HylaFax проводилась в соответствии со стандартными процедурами, четко определенными в документации. Самая тонкая часть - настройка модемов. В HylaFax нет шаблона для модема US Robotics 56K Faxmodem. Тем не менее, поиск в списке рассылки дал необходимую информацию, в результате чего был создан файл /var/spool/fax/etc/config.ttyS0 ( и config.ttyS1 для второго модема). Первый из этих файлов можно найти здесь.

Прием факсов

У нашего предприятия есть несколько телефонных номеров, соединенных с факс-машинами. Функция перевода звонка может переключать звонки с одного внутреннего номера на другой. Эта возможность позволяет централизовать прием всех факсов на TOSERFAX, без изменения телефонных номеров, уже известных клиентам.

Например, предположим, что у отдела закупок есть номер факса 5550001, а у отдела логистики 5550002. Один из модемов TOSERFAX подсоединен к внутреннему номеру 1700. АТС переводит все входящие звонки на номера 5550001 и 5550002, на внутренний номер 1700, где TOSERFAX принимает факс.

Но конечно же, человек, который должен получать факсы предназначенные отделу закупок, и человек, который должен получать факсы адресованные отделу логистики, это не одно и тоже лицо. Необходимое нам распределение факсов требует знания номера, на который был изначально адресован факс, и который недоступен в стандартной версии faxrcvd. Обходной маневр в данной ситуации, это восстановить этот номер из лога сессии и присвоить его некоторой переменной, например TOPHONE.

        TOPHONE=$($AWK '/SESSION BEGIN/ {print $NF; exit}' log/c${COMMID})

Модифицированные версии faxrcvd и FaxDispatch можно найти здесь и здесь.

Стандартная версия faxrcvd посылает факс адресату, как postscript вложение в e-mail сообщение. На моем предприятии это не самое лучшее решение, так как на стандартном ПК клиента нет программы для просмотра postscript. Но зато есть программа для просмотра PDF, а файлы postscript могут быть преобразованы в PDF.

Однако, здесь мы сталкиваемся с небольшой проблемой, связанной с отсылкой e-mail сообщения, с присоединенным файлом. TOSERFAX использует в качестве SMTP-ретранслятора сервер Windows NT, с ISS версии 4. По какой-то причине, которую я так и не смог установить, этот сервер не может пересылать e-mail'ы c вложениями созданными faxrcvd.

Решением стало использование утилиты "metasend", включенной в пакет metamail 2.7.19. Скрипты metasend.sh и tiff2pdf.sh успешно отсылают факсы, предварительно преобразованные в PDF-формат, таким образом (и в таком виде), который устраивает SMTP-ретранслятор. Стоит также заметить, что эти скрипты вызывают утилиты tiff2ps и gs.

Отправка факсов

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

Использование очереди печати имеет дополнительное преимущество, т.к. любое приложение способное послать документ на печать (а это практически любая программа), сможет отправить факс. С учетом этого, система отправки факсов, описанная в этой статье, явно превосходит другие коммерческие системы, установленные в Microsoft Exchange, которые позволяют отсылать только факсы созданные определенными приложениями, например созданные в Microsoft Office.

Пакет smbfax, разработанный Craig Kelly, выполняет указанное выше требование. В его основе лежит очень интересная идея: клиент печатает документ, который он хочет отправить по факсу в очередь принтера, сконфигурированную на TOSERFAX при помощи Samba, и которая представляется как postscript принтер. Печать вызывает исполнение perl скрипта, который вкладывает распечатанный документ в файл и отсылает клиенту e-mail с его URL. Этот URL указывает на веб-форму, создаваемую "на лету" в веб-сервере на TOSERFAX (Apache). Клиент нажимает на URL, вызывает браузер и, используя веб-форму, заполняет номер или номера, по которым должен быть отправлен факс. Выбирает нужно ли добавлять титульную страницу и другие детали. Наконец, после нажатия на кнопку "Отправить", факс ставится в очередь на отправку. Если в ходе обработки задания возникнет какая-либо ошибка, клиент также будет извещен поcредством электронной почты. Очевидно что такая система требует знания идентификатора пользователя, отсылающего факс (должен существовать механизм, позволяющий однозначно идентифицировать пользователя Windows), а также его e-mail адреса.

Инсталляция smbfax достаточно проста. Документация пакета ясно объясняет различные шаги и повторение их здесь будет излишне.

Настройка Samba, с другой стороны, требует применения некоторых интересных приемов. Подходящий файл конфигурации можно увидеть здесь. Следующие строки должны быть выделены:

[global]
        workgroup = DOM
        netbios name = TOSERFAX
        security = DOMAIN
        winbind uid = 10000-20000
        winbind gid = 10000-20000
        template homedir = /home/win/%D/%U
        winbind separator = +
        printer admin = @DOM+PRINTADMIN
        ...

[print$]
        path = /etc/samba/printers/
        browseable = yes
        read only = yes
        write list = @DOM+PRINTADMIN,root

# В этой секции настраивается очередь печати для факса
[fax]
        comment = Fax queue
        path = /tmp
        printable = Yes
        writable = no
        create mode = 0700
        guest ok = no
        postscript = Yes
        printing = lprng
        print command = /usr/local/smbfax/smbfax -r queue %u %s
        lpq command = /usr/local/smbfax/smbfax show
        lprm command = /usr/local/smbfax/smbfax dequeue %j

Как Samba-сервер, TOSERFAX входит в домен Windows 2000 (Active Directory). Samba версии 2.2.3 включает поддержку "winbindd", который позволяет авторизовать клиентов, основываясь на мандате полученном после начала сессии в домене. Как следствие больше не нужно создавать Windows пользователей на Linux машине. Каждый клиент, который первый раз подсоединяется к samba-серверу, будет идентифицироваться комбинацией <Доменное имя>+<Имя пользователя>, и получит "uid" в диапазоне 10000 - 20000.

Внутри секции [fax] , строка

        print command = /usr/local/smbfax/smbfax -r queue %u %s

вызывает программу smbfax, передавая ей в качестве параметра имя пользователя (%u), которое определяется как было описано ранее.

Внутри секции [global], строка

        printer admin = @DOM+PRINTADMIN

дает административные права на принтер всем членам группы PRINTADMIN в NT домене DOM. Эти пользователи смогут настраивать принтеры, устанавливать драйвера (для разных версий Windows) и давать привилегии на печать пользователям домена при помощи стандартных административных утилит, имеющихся на NT или Windows 2000 машинах, и которые используют Удаленный Вызов Процедур (RPC). Все это полностью прозрачно для пользователя, несмотря на то, что сервер печати это на самом деле не Windows-сервер, а Linux.

Члены группы DOM+PRINTADMIN конечно должны иметь доступ на запись в /etc/samba/printers. Это достигается путем установки необходимых прав в файловой системе Linux:

       $ chown -R DOM+PROWNER:DOM+PRINTADMIN /etc/samba/printers
       $ chmod 0775 /etc/samba/printers

Установка драйверов -- это особенно интересная возможность. На TOSERFAX можно установить драйвера postscript принтера для всех версий Windows, которые используются на предприятии: 95, NT и 2000. После чего любой клиент, который подсоединяется к очереди печати в первый раз, сможет автоматически установить необходимые драйвера. Таким образом достигается одна из целей сетевых администраторов: не нужно производить дополнительную настройку на стороне клиента.

Дополнительно любой член группы PRINTADMIN, может запретить доступ к очереди печати, используя списки доступа NT (ACL).

Единственный вопрос оставшийся без ответа, это как отослать e-mail сообщение пользователю, который хочет отправить факс. Благодаря winbindd, пользователь прошел процедуру аутентификации, но какой у него e-mail адрес? Т.к. считать эту информацию из Active Directory не представляется возможным (возможно здесь помог бы OpenLDAP), то решением стало вручную добавить в файл "aliases" список всех возможных пользователей факса, вместе с их e-mail адресами

        DOM+User1:      [email protected]
        DOM+User2:      [email protected]

и так далее. После этого запустите "newaliases" и система готова.

Обслуживание системы

После того как все компоненты сконфигурированы, последнее что остается сделать, это автоматизировать некоторые простые сервисные процедуры. Этого очень легко достигнуть, добавив в /etc/crontab следующие строки:

     0 21 * * *     root  test -x /usr/sbin/faxqclean && /usr/sbin/faxqclean

25 23 * * * root test -e /usr/sbin/faxcron && sh /usr/sbin/faxcron | mail faxmaster

Примите во внимание, что пакет HylaFax, поставляемый с Suse 7.2 устанавливает faxcron в /etc/cron.daily. Вам придется удалить его, чтобы предложенная схема заработала.

Заключение

Комбинация из HylaFax, Samba, smbfax и других open-source пакетов, на базе Linux системы, позволила интегрировать эффективный централизованный факс-сервис в окружение Windows сети, оправдав ожидания IT менеджеров, и, что особенно важно, исключив необходимость установки дополнительного программного обеспечения на стороне клиентов.


Pedro Fraile

Я впервые встретился с компьютерами в 1982, и если меня не подводит память, то это был Z 80. В 1998 я открыл для себя Linux, и очень скоро это операционная система была водружена на мои домашние PC. Компьютеры и программирование одни из самых моих любимых хобби.
Обсудить данную тему на нашем форуме "Все о Linux"