Линукс факс-сервер для сети на базе 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. Компьютеры и программирование одни из самых моих любимых хобби.