Факс-сервер под Linux для сети на базе Windows
В фирме, на которую я работаю, есть система для отсылки и приема факсов, интегрированная в корпоративную e-mail платформу, Microsoft Exchange. В один прекрасный день, после обновления ПО, система сломалась. Нам потребовалось найти что-то с эквивалентной функциональностью, но удовлетворяющее следующим условиям:
- минимальная стоимость, или лучше вообще бесплатно, особенно в том что касается лицензий на ПО;
- прозрачная интеграция с программным обеспечением конечных пользователей (проще говоря, с Microsoft Office);
- отсутствие необходимости установки какого-либо ПО на стороне клиента, даже бесплатных программ, для минимизации работы сетевых администраторов.
Эта статья рассказывает о том, как интеграция нескольких продуктов с открытым исходным кодом на платформе Linux позволила удовлетворить все эти требования.
обзор системы
Чтобы уточнить о каком именно компьютере я веду здесь речь, я буду называть ПК с установленным программным обеспечением для работы с факсами TOSERFAX.
Предлагаемое решение использует программный пакет HylaFax. Это приложение контролирует установленные модемы, распределяет входящие факсы и отсылает исходящие.
Входящие факсы конвертируются в формат PDF и направляются при помощи почтового протокола SMTP соответствующим получателям. В качестве формата был выбран PDF, так как Acrobat Reader — это стандартная программная платформа в данной сети. Место назначения выбирается, исходя из определенных правил, что будет разъяснено позднее.
Если кто-то хочет послать факс, то он печатает документ на принтер, расположенный на 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 для второго модема). Первый из этих файлов можно найти здесь —http://www.msk.nestor.minsk.by/sr/download/config.ttyS0.
прием факсов
У нашего предприятия есть несколько телефонных номеров, соединенных с факс-машинами. Функция перевода звонка может переключать звонки с одного внутреннего номера на другой. Эта возможность позволяет централизовать прием всех факсов на TOSERFAX, без изменения телефонных номеров, уже известных клиентам.
Например, предположим, что у отдела закупок есть номер факса 5550001, а у отдела логистики 5550002. Один из модемов TOSERFAX подсоединен к внутреннему номеру 1700. АТС переводит все входящие звонки на номера 5550001 и 5550002, на внутренний номер 1700, где TOSERFAX принимает факс.
Но, конечно же, человек, который должен получать факсы, предназначенные отделу закупок, и человек, который должен получать факсы адресованные отделу логистики — это не одно и тоже лицо. Необходимое нам распределение факсов требует знания номера, на который был изначально адресован факс, и который недоступен в стандартной версии faxrcvd. Обходной маневр в данной ситуации — это восстановить этот номер из лога сессии и присвоить его некоторой переменной, например TOPHONE.
TOPHONE=$($AWK '/SESSION BEGIN/ {print $NF; exit}' log/c${COMMID})
Модифицированные версии faxrcvd и FaxDispatch можно найти здесь — http://www.msk.nestor.minsk.by/sr/download/faxrcvd и здесь — http://www.msk.nestor.minsk.by/sr/download/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 (http://www.msk.nestor.minsk.by/sr/download/metasend.sh.txt) и 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-1@domain.com
DOM+User2: email-2@other-domain.com
и так далее. После этого запустите "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, перевод Александра Михайлова.
обсуждение статьи
Сетевые решения. Статья была опубликована в номере 03 за 2003 год в рубрике sysadmin