Виртуальная почтовая система на основе qmail/vpopmail. Mike Frysinger Цраев Эльдар Это руководство в деталях объясняет, как построить почтовую систему основанную на qmail, vpopmail, courier-imap, mysql, и horde's imp. 1.11 2005-04-24 Введение

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

Это руководство поможет вам освоить qmail, courier-imap, vpopmail, и horde/imp. Но вместе с ними так же вступят в "игру" daemontools, ucspi-tcp, mysql, apache, и mod_php. qmail предоставляет функции MTA (Mail Transfer Agent), courier-imap - предоставляет удаленный сбор почты, (pop3/imap сервер. прим.пер.) vpopmail предоставляет функции управления виртуальными доменами, и horde/imp - это почтовый веб-клиент.

До установки (emerging) чего-либо, вы должны корректно установить переменную USE. Если у вас уже были установлены какие-нибудь из этих пакетов, то, возможно, вам придется их переустановить. USE="maildir ssl imap mysql". Также, если вы хотите использовать horde/imp как web-клиент, то так же надо добавить USE="nls" до установки mod_php.

Это руководство написано "по-шагам" Если в какой-то момент вы чувствуете что все то, что нужно готово, то можете не продолжать.

Конечно, существует достаточно пакетов, с помошью которых можно построить систему электронной почты. Сейчас самое время осмыслить и решить для вас ли qmail. У нас так же есть прекрасное руководство основанное на Postfix, или вы можете взглянуть на exim. Выбирайте решение для себя, а мы покажем вам, как использовать qmail.

qmail ("Разговаривая с собой")
# emerge qmail
Эта часть построена вокруг qmail-1.03-r13 или старше. Будет ли нижеизложенное работать с ранними версиями? Может быть. Должны ли вы обновиться? Да, если вы хотите быть уверены, что это сработает. Если вы получили сообщение the virtual/mta package conflicts with another package тогда вам необходимо удалить из системы любой другой MTA. Чтобы узнать что это за пакет, просто запустите emerge qmail -p.

Установка qmail так же "потянет" за собой установку ucspi-tcp и daemontools. О них, если хотите, вы можете прочитать на ucspi-tcp и на daemontools. Обычно, daemontools отвечает за управление qmail'ом как сервисом, тогда как ucspi-tcp отвечает за управление входящими TCP соединениями для сервиса qmail.

Для начала проведем несколько пост-инсталяционных мероприятий. :)

(Измените под свою конфигурацию)
# nano /var/qmail/control/servercert.cnf
# ebuild /var/db/pkg/mail-mta/qmail-1.03-r*/qmail-1.03-r*.ebuild config

Qmail проектировался так, чтобы полностью соответствовать требованиям безопасности. Почта никогда не посылается пользователю 'root'. Поэтому вам надо выбрать пользователя на машине, который будет получать почту предназначенную 'root'. С этого момента я предполагаю, что этот пользователь 'vapier'.

# cd /var/qmail/alias
# echo vapier > .qmail-root
# echo vapier > .qmail-postmaster
# echo vapier > .qmail-mailer-daemon

Теперь, поднимем сервис доставки qmail.

# rc-update add svscan default
# /etc/init.d/svscan start
# cd /service
# ln -s /var/qmail/supervise/qmail-send qmail-send

Надо убедиться, что qmail работает корректно, вот небольшой тест.

# ssh vapier@localhost
# maildirmake .maildir
# qmail-inject root << EOF
test root e-mail!
EOF
# qmail-inject postmaster << EOF
test postmaster e-mail!
EOF
# qmail-inject vapier << EOF
test vapier e-mail!
EOF
# mutt 
(Теперь в вашем ящике должно быть 3 письма)

Вот и все! Теперь у вас стоит почтовая система способная удовлетворить, потребности локальной машины и системных демонов/пользователей.

Если вы не получили никаких писем или видите странные ошибки в лог-файлах (проверьте /var/log/qmail/) включающие 'localhost.localhost', это означает что ваша domain/dns информация не корректна. По умолчанию, qmail использует информацию от hostname --fqdn. Если на вашей машине, эта команда выводит 'localhost', тогда проверьте ваши файлы /etc/hostname, /etc/hosts, и настройки dns чтобы убедиться что все правильно. Отредактируйте конфигурационные файлы в каталоге /var/qmail/control/. Используйте их примеры, (там же) если вам нужна помощь.
# hostname --fqdn
wh0rd.org
# cat me
wh0rd.org
# cat defaultdomain
wh0rd.org
# cat plusdomain
wh0rd.org
# cat locals
wh0rd.org
# cat rcpthosts
wh0rd.org
# hostname --fqdn
mail.wh0rd.org
# cat me
mail.wh0rd.org
# cat defaultdomain
wh0rd.org
# cat plusdomain
wh0rd.org
# cat locals
mail.wh0rd.org
# cat rcpthosts
mail.wh0rd.org
vpopmail
# emerge vpopmail
Эта часть построена вокруг vpopmail-5.4.6 или старше. Будет ли нижеизложенное работать с ранними версиями? Может быть. Должны ли вы обновиться? Да, если вы хотите быть уверены что это сработает.

vpopmail требует немного больше старания при установке, чем предыдущие пакеты. Мы должны убедиться что он запущен и работает (до mysql). Далее мы можем установить базу данных vpopmail. До того как приступить к следующему шагу, необходимо проверить что mysql корректно установлен. Учтите, пароль для базы данных vpopmail будет 'vpoppw', конечно вы можете выбрать другой.

# rc-update add mysql default
Если вы установили mysql в первый раз, убедитесь что была запущена команда 
ebuild <mysql.ebuild> config до запуска mysql сервера.
# /etc/init.d/mysql start
# nano /etc/vpopmail.conf 
(Изменим пароль с 'secret' на 'vpoppw')
# mysql -p << EOF
create database vpopmail;
use mysql;
grant select, insert, update, delete, create, drop on vpopmail.* to vpopmail@localhost identified by 'vpoppw';
flush privileges;
EOF
(Следующие шаги могут понадобиться, а могут и нет, но мы выполним их просто чтобы быть уверенными)
# chown root:vpopmail /etc/vpopmail.conf
# chmod 640 /etc/vpopmail.conf
# chown root:vpopmail /var/vpopmail/bin/vchkpw
# chmod 4711 /var/vpopmail/bin/vchkpw
Если вы испытываете трудности с доступом в mysql/vpopmail, перезапустите mysql. Выполните /etc/init.d/mysql restart.

Теперь, vpopmail готов к использованию. В этой части, мы предоставим виртуальный хостинг для домена 'wh0rd.org'. Это означает что мы должны "сообщить" vpopmail об этом домене. Кстати, давайте добавим пользователя 'vapier'.

(Это нужно сделать только в том случае если vadddomain выдает "command not found" (см. далее))
# source /etc/profile
(While debugging vpopmail, you may want to consult the logs)
# mysql -u vpopmail -p
mysql> select * from vpopmail.vlog;
# vadddomain wh0rd.org postpass
(Теперь проверим правильно ли установлен домен)
# printf "postmaster@wh0rd.org\0postpass\0blah\0" | vchkpw `which id` 3<&0
uid=89(vpopmail) gid=89(vpopmail) groups=0(root)
(Если вы не видите что-либо подобное, значит права доступа где-то выставлены некорректно)
# vadduser vapier@wh0rd.org vappw

В каждом домене созданном vpopmail существует аккаунт 'postmaster'. Мы задаем пароль postmaster'а в 'postpass'. Чтобы vpopmail был действительно полезен нам, мы должны получать почту через courier и посылать с помощью qmail и SMTP.

Courier POP/IMAP
# emerge net-mail/courier-imap
Сразу после vpopmail вы должны установить courier-imap Модуль authvchkpw будет встроен.(?) Эта часть построена вокруг net-mail/courier-imap-3.0.7 или старше. Будет ли нижеизложенное работать с ранними версиями? Может быть. Должны ли вы обновиться? Да, если вы хотите быть уверены что это сработает.

И еще несколько пост-инсталляционных шагов:). Они необходимы только в том случае если вы будете использовать SSL зашифрованные коммуникации (Рекомендуется!). Иначе вы можете пропустить последние 2 шага, в следующих листингах, удаляя '-ssl' из имени инициализационного скрипта.

# nano /etc/courier/authlib/authdaemonrc
(Оставьте в переменной authmodulelist только "authvchkpw")
# cd /etc/courier-imap
# nano pop3d.cnf 
(Отредактируйте секцию [ req_dn ] )
# mkpop3dcert
# rc-update add courier-pop3d-ssl default
# /etc/init.d/courier-pop3d-ssl start
# cd /etc/courier-imap
# nano imapd.cnf 
(Отредактируйте секцию [ req_dn ] )
# mkimapdcert
# rc-update add courier-imapd-ssl default
# /etc/init.d/courier-imapd-ssl start

Ваш почтовый клиент теперь может соединиться с сервером (с запущенным на нем courier) и получать почту предназначенную для виртуального хоста. В моем случае, я могу соединиться с именем 'vapier@wh0rd.org' и паролем 'vappw'.

qmail (разговаривая с миром)

Давайте заставим SMTP работать, не причинив ущерба людям, открыв очередную спам-дыру.

# cd /var/qmail/control/
# nano conf-smtpd
(Раскомментируйте SMTP-AUTH переменную и установите QMAIL_SMTP_CHECKPASSWORD в /var/vpopmail/bin/vchkpw)
# nano servercert.cnf 
(Отредактируйте секцию [ req_dn ] )
# mkservercert
# cd /service
# ln -s /var/qmail/supervise/qmail-smtpd qmail-smtpd
# /etc/init.d/svscan restart

Предположим вы не меняли файлов qmail, тогда он теперь принимает почту для виртуального домена wh0rd.org и для пользователей локальной машины. Более того, qmail доверяет любому кто посылает письма через 127.0.0.1 и для любого кто может пройти аутентификацию через vpopmail. При настройке своего почтового клиента для отправки почты, убедитесь что вы включили опцию вроде 'Server requires authentication'. В моем случае, я поставил имя пользователя в 'vapier@wh0rd.org' и пароль - 'vappw'. И последняя деталь - убедитесь что настроили использование SSL/TLS для SMTP в своем клиенте. Qmail не позволит вам пройти аутентификацию если сессия не зашифрована.

Веб клиент Horde / IMP

Несмотря на то что существует множество веб-клиентов электронной почты (и вы свободны выбрать любой из них), я предпочитаю IMP Webmail Client который является частью "окружения Horde". Основная причина заключается в том что Horde предоставляет достаточно прозрачный web доступ к почте, и вы можете очень просто добавить другие компоненты, такие как Адресные Книги, Календари, Задачи, и др. И если он до сих пор вас не устраивает, тогда вам следует прочитать Horde.

On to the good stuff! Теперь установим IMP.

# emerge horde-imp
Эта часть построена вокруг horde-2.2.x and horde-imp-3.2.x. CVS версии (и следующие релизы) скорее всего, будут очень различаться в настройках. Так же имейте ввиду что horde-2.x скорее всего не будет работать с php-5.x.

Horde не просто настроить если вы точно не знаете что делать. К счастью для вас, я точно знаю что делать, значит и вы будете. :)

# cd /var/www/localhost/htdocs/horde/config/
# for f in *.dist ; do mv ${f} ${f/.dist} ; done
# nano horde.php
(Ниже 'Horde Authentication':)
$conf['auth']['driver'] = 'imap';
$conf['auth']['params']['dsn'] = '{localhost:993/imap/ssl/novalidate-cert}';

(Ниже 'Horde Logging':)
$conf['log']['name'] = '/var/log/apache2/horde.log';

(Ниже 'Problem Reporting':)
$conf['problems']['enabled'] = true;
$conf['problems']['email'] = 'webmaster@wh0rd.org';

# nano registry.php
(Ниже 'Handlers':)
$this->registry['auth']['login'] = 'imp';
$this->registry['auth']['logout'] = 'imp';

(Ниже 'Application registry':) Установите элемент 'status', раздел applications['imp'], из 'inactive' в 'active'

# touch /var/log/apache2/horde.log
# chown apache:apache /var/log/apache2/horde.log
Вы можете поменять аккаунт 'webmaster' на что-нибудь другое. Если вы хотите использовать этот e-mail адрес, тогда вы должны добавить такого пользователя в vpopmail. (или смотрите ниже о qmailadmin).

Теперь действительно быстро установим IMP.

# cd /var/www/localhost/htdocs/horde/imp/config/
# for f in *.dist ; do mv ${f} ${f/.dist} ; done
# nano servers.php

(Отредактируйте массив $servers['imap'] 
$servers['imap'] = array(
	'name' => 'wh0rd.org',
	'server' => 'localhost',
	'protocol' => 'imap/ssl/novalidate-cert',
	'port' => 993,
	'folders' => '',
            'namespace' => 'INBOX.',
	'maildomain' => 'wh0rd.org',
	'smtphost' => 'localhost',
	'realm' => '',
	'preferred' => ''
);

Наконец, поднимем apache, чтобы начать использовать webmail.

# nano /etc/conf.d/apache2 
(Раскоменнтируйте APACHE2_OPTS="-D SSL -D PHP4")
# rc-update add apache2 default
# /etc/init.d/apache2 start
Вы должны подумать о том, чтобы заставить работать Horde через https. Это не простая задача, но приглядитесь к ней ради безопасности.

Чтобы проверить установку IMP, запустите браузер и зайдите http://localhost/horde/ (измените localhost на ваш сервер) Вы должны увидеть страницу приглашения Horde где вы можете войти. Опять же, в моей установке я вхожу с помощью 'vapier@wh0rd.org' и 'vappw' соответственно как логин и пароль.

На данный момент, Horde и IMP установлены. Однако, вы можете пройти заново через все дерево конфигурационных директорий и настроить все что вашей душе угодно.

Дополнительные пакеты
qmailadmin

Первый пакет на который я обращу ваше внимание это qmailadmin. Это веб интерфейс для управления виртуальными доменами. Просто emerge net-mail/qmailadmin а затем укажите вашему браузеру на http://localhost/cgi-bin/qmailadmin чтобы начать использовать его. qmailadmin делает жизнь намного проще.

qmHandle

Если вы вляпались в проблемы с очередями qmail и провели много времени над отладкой, то, возможно захотите взглянуть на qmHandle. Это простая перл программа которая позволяет вам видеть и редактировать очередь сообщений qmail. Опять таки все что нужно сделать это emerge net-mail/qmhandle.

Дополнения к horde

Я очень рекомендую посмотреть на множество приложений Horde. Turba, Kronolith, и Nag эти приложения очень хорошо дополняют IMP для разных случаев. Их настройка схожа с настройкой IMP, так что у вас не будет проблем с ними. Просто не забудьте отредактировать registry.php в директории конфигурации horde, и новые приложения появятся внизу странички Horde.

ucspi-tcp

qmail использует ucspi-tcp для фильтрации входящих соединений. Если вы хотите настроить правила фильтрации, тогда смотрите файлы в /etc/tcprules.d/ (в старых версиях qmail эти файлы находятся в /etc). Здесь вы найдете по два файла на каждый сервис, конфигурационный файл (tcp.qmail-smtp) и его откомпилированную версию, ту которую и использует ucspi-tcp (tcp.qmail-smtp.cdb). Каждый раз после обновления конфигурационного файла, надо пересобрать бинарную его версию. Запустите tcprules tcp.qmail-smtp.cdb tcp.qmail-smtp.tmp < tcp.qmail-smtp. Каждый раз при соединении с qmail, откомпилированные правила перечитываются с диска, то есть, нет нужды перезапускать сервис.

qmail-scanner

Если вы хотите обеспечить фильтрацию контента на своем mail сервере (спам, вирусы), тогда вам необходимо использовать другую программу для организации очередей. Одна из хороших программ это qmail-scanner. Наберите emerge qmail-scanner и отредактируйте /etc/tcprules.d/tcp.qmail-smtp.

Процесс сборки qmail-scanner очень уродлив. Чтобы поддерживать пакеты, они уже должны быть установлены в системе. Это означает что вы должны установить SpamAssassin и/или Clam AntiVirus до qmail-scanner'а. Смотрите подходящие секции ниже.
# cd /etc/tcprules.d/
# nano tcp.qmail-smtp
(добавьте QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue" в правило catchall)
# tcprules tcp.qmail-smtp.cdb tcp.qmail-smtp.tmp < tcp.qmail-smtp

Смотрите секции об установке спам и вирус фильтров. Вы можете отредактировать несколько опций в /var/qmail/bin/qmail-scanner-queue.pl.

SpamAssassin

Один из лучших спам фильтров это SpamAssassin. Чтобы установить emerge mail-filter/spamassassin. Пакет поставляется двояко, как версия для командной строки и как клиент/серверная. Для серверов через которые проходит небольшое количество почты, использование версии для командной строки себя оправдывает. Но любой у кого большая загрузка серверов должен использовать клиент/серверную версию.

# nano /etc/mail/spamassassin/local.cf
(чтобы обеспечить самый минимум, добавьте следующие опции:)
required_hits 6
skip_rbl_checks 1

# rc-update add spamd default
# /etc/init.d/spamd start
# nano /var/qmail/bin/qmail-scanner-queue.pl
(Убедитесь что $spamc_binary variable выставлена в '/usr/bin/spamc'.)
(Если она выставлена в '', тогда смотрите далее.)
Если у вас не был установлен SpamAssassin до установки qmail-scanner'а, Вы должны будете переустановить qmail-scanner. Процесс его сборки очень ужасен, включены будут только те функции, пакеты для которых уже были установлены.

На этом этапе входящая почта будет проходить через qmail-scanner который в свою очередь пропустит ее через SpamAssassin.

Clam AntiVirus

Как и SpamAssassin, Clam AntiVirus поставляется в двойном исполнении. Я расскажу как быстро поставить клиент/серверную версию. Во-первых, emerge app-antivirus/clamav.

# nano /etc/conf.d/clamd 
(Установите START_CLAMD=yes)
# nano /etc/clamav.conf
(Настройте все как хотите)
# rc-update add clamd default
# /etc/init.d/clamd start
# nano /var/qmail/bin/qmail-scanner-queue.pl
(Убедитесь что $clamscan_binary переменная установлена в '/usr/bin/clamscan'.)
(Если нет, смотрите ниже.)
# nano /var/qmail/control/conf-common
(Если ClamAV сообщает о проблемах с памятью попробуйте увеличить программный лимит (softlimit))
Если у вас не был установлен Clam AntiVirus до установки qmail-scanner'а, Вы должны будете переустановить qmail-scanner. Процесс его сборки очень ужасен, включены будут только те функции, пакеты для которых уже были установлены.

На этом этапе входящая почта будет проходить через qmail-scanner который в свою очередь пропустит ее через Clam AntiVirus.

Заключительные примечания

У меня нет особых примечаний, но если у вас проблемы с этим руководством, пожалуйста, свяжитесь со мной или разместите сообщение на Gentoo's Bugtracking Website. Если у вас есть интересная информация которая вы считаете, может расширить это руководство, то шлите ее мне для включения. Я люблю qmail и с удовольствием добавлю веши, которые могут расширить опыт работы пользователя с mta.