...
...
...

Факс-сервер под 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, перевод Александра Михайлова.
обсуждение статьи

© Сетевые решения