Gentoo Logo

Создание виртуальной почтовой системы

Content:

1. Введение

Для большинства gentoo пользователей простого почтового клиента и fetchmail (для сбора почты) достаточно. Однако если вы размещаете на своей системе домен, вам необходим полноценный MTA (Mail Transfer Agent). И если вы размещаете на своей системе несколько доменов, тогда вам точно необходимо что-то мощное для обработки всей почты ваших пользователей. Эта система была разработана для элегантного решения этой проблемы.

Виртуальная почтовая система должна быть способна обработать почту от многочисленных доменов с множеством пользователей через разнообразные интерфейсы. С этим связано несколько проблем, которые надо решить. Для примера, что если вы имеете двух пользователей в разных доменах, которые хотят иметь одинаковые имена? Если вы предоставляете сервисы imap и smtp-авторизации, как вы комибинируете различные демоны авторизации в одной системе? Как обеспечиваете безопасность многочисленных компонентов которая содержит система? Как вы управляете этим всем?

Это howto покажет вам, как настроить гибкую систему обработки почты из стольких доменов, сколько ваша поддерживает система, как создавать виртуальных пользователей не требующих наличия аккаунта в системе, иметь доменные имена пользователей, как авторизовать пользователей через веб, imap, smtp и pop3 снова таки из одной базы данных, использовать ssl-транспорт для безопасности, как обрабатывать списки рассылки для любого домена на машине, и контролировать все хорошей и простой базой данных mysql.

Конечно существует множество путей настройки виртуальной почтовой системы. Другой способ возможно окажется более подходящим вашим нуждам. Дополнительную информацию вы можете найти на http://www.qmail.org/ и http://www.exim.org/

Мы будем использовать следующие программы: apache, courier-imap, pam_mysql, postfix, mod_php, phpmyadmin, squirrelmail, cyrus-sasl, mysql, php, и mailman.

Убедитесь что вы добавили в файле /etc/make.conf в переменную USE следующие пакеты: USE="mysql imap libwww maildir sasl ssl". Иначе, возможно, вам придeтся перекомпилировать пакеты, для поддержки всех необходимых протоколов. Затем, хорошей идеей будет отключить любые другие почтовые и сетевые программы которые вам не нужны, вроде IPv6.

Important: Это howto написано для postfix-2.0.x. Если вы используете postfix версии < 2 некоторые переменные используемые в этом документе могут отличается. В таком случае рекомендуется обновить postfix. Некоторые пакеты используемые в этом документе зависят от версии. Вы поступите мудро, если прочтете документацию поставляемую с пакетами, при возникновении вопросов.

Important: В нашем документе мы будем использовать apache-1.3.x. В портежах Apache-2 был помечен stable, но как бы то ни было существуют еще некоторые проблеммы интеграции с php. Пока php-поддержка в apache-2.0.x не будет отмечена stable, в этом документе будем продолжать использовать apache-1.3.x.

Important: Вам необходимо доменное имя для работы общедоступного почтового сервера, или по крайней мере иметь МХ-записи для домена. В идеале вы должны иметь контроль над двумя доменами, для извлечения пользы из функциональности новой виртуальной системы.

Important: Убедитесь что в /etc/hostname указано правильное имя сервера, также убедитесь что в /etc/hosts нет конфликтных значений.

Note: Рекомендуется прочесть документ полностью и ознакомится со всеми шагами настройки, перед тем как начинать инсталяцию. Если вы столкнетесь с проблемами при любом из шагов, проверьте troubleshooting guide в конце этого документа. Также не все упомянутые пакеты необходимы, просто настройка описаная здесь достаточна гибка. Для примера, если вам не требуется веб-интерфейса, вы свободны пропустить соответствующий раздел squirrelmail.

2. Начальная настройка postfix

Code Listing 2.1: Инсталяция postfix

# emerge postfix

Warning: Проверьте чтобы у вас не были проинсталлированы любые другие MTA, например ssmtp, exim или qmail, иначе у вас могут быть БОЛЬШИЕ проблемы.

После инсталляции postfix, время его настроить. Измените следующие настройки в /etc/postfix/main.cf:

Code Listing 2.2: /etc/postfix/main.cf

myhostname = $host.domain.name
mydomain = $domain.name
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain $mydomain
mynetworks = my.ip.net.work/24, 127.0.0.0/8
home_mailbox = .maildir/
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10 

Следующие изменения следуют для /etc/postfix/master.cf. Они включат режим подробного протоколирования для отладки:

Code Listing 2.3: /etc/postfix/master.cf

# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (50)
#
==========================================================================
smtp      inet  n       -       n       -       -       smtpd -v

(Просто добавьте -v после smtpd)

Дальше правим /etc/mail/aliases для добавления локальных псевдонимов. По крайне туда должен быть включен псевдоним для root типа: root: your@email.address.

Code Listing 2.4: Запуск postfix'а в первый раз

# /usr/bin/newaliases
(Это создаст новые псевдонимы. Это требуется делать)
(когда вы создаете или обновляете файл псевдонимов.)
		
# /etc/init.d/postfix start

Теперь postfix запущен, запустите вашего любимого консольного почтового клиента и пошлите самому себе письмо. Я использую mutt для всей переписки из консоли.

Note: Настоятельно рекомендуется проверить, чтобы postfix доставлял почту локальным пользователям, перед тем как перейти к следующему шагу.

3. Courier-imap

Code Listing 3.1: Инсталяция courier-imap

# emerge courier-imap

Code Listing 3.2: Настройка courier-imap

# cd /etc/courier-imap
(Если вы хотите использовать возможности ssl в courier-imap или pop3, )
(вам необходимо создать сертификаты.)
(Если вы не хотите использовать ssl, просто пропустите следующий шаг. )

# nano -w pop3d.cnf
# nano -w imapd.cnf
(Измените значения C, ST, L, CN и адреса e-mail.)

# mkpop3dcert
# mkimapdcert

Code Listing 3.3: Запуск нужных вам сервисов courier

# /etc/init.d/courier-imapd start
# /etc/init.d/courier-imapd-ssl start
# /etc/init.d/courier-pop3d start
# /etc/init.d/courier-pop3d-ssl start

Снова запустите ваш любимый почтовый клиент и проверьте что сервисы начали принимать и посылать почту. Теперь когда основная часть заработала, перейдем к связыванию всех компонентов, для получения спокойно работающей системы. Снова, проверьте, что все что мы сделали работает, перед тем как переходить к следующему шагу.

4. Cyrus-sasl

Следующим шагом будет инсталяция cyrus-sasl. Sasl на самом деле играет роль передатчика авторизационных переменных к pam (Pluggable Authentication Modules), который передаст эту информацию mysql, для авторизации smtp пользователей. Мы не будем проверять работоспособность sasl, пока не настроим mysql, и не создадим тестовых пользователей. В конечном результате, он будет авторизировать пользователей в mysql.

Note: По некоторым причинам, sasl плохо работает с pam используя shadow. Для меня долгое время это была большая проблема. Если кто-нибудь знает почему sasl не авторизирует пользователей из /etc/shadow в текущем релизе gentoo, пожалуйста напишите мне об этом, я буду очень рад услышать решение этой проблемы.E-mail

Code Listing 4.1: Инсталяция и настройка cyrus-sasl

# USE='-ldap -mysql' emerge cyrus-sasl
(Мы не используем ldap и мы не используем возможности sasl-mysql, поэтому мы отключаем их. )

Дальше правим /usr/lib/sasl2/smtp.conf.

Code Listing 4.2: Запуск sasl

# nano -w /usr/lib/sasl2/smtp.conf
pwcheck_method: saslauthd
mech_list: LOGIN PLAIN
(Важно выключить метод авторизации который мы не используем. Они могут привести к граблям на некоторых почтовых клиентах.)
# /etc/init.d/saslauthd start

5. SSL-сертификаты для Postfix и Apache

Дальше делаем ssl-сертификаты для posfix и apache.

Code Listing 5.1

# cd /etc/ssl/
# nano -w openssl.cnf

(Измените следующие значения для вашего домена:)
countryName_default
stateOrProvinceName_default
localityName_default
0.organizationName_default
commonName_default
emailAddress_default.

(Если каких-то переменных нет, просто добавьте их в любое удобное место.)


# cd misc
# nano -w CA.pl
(Нам необходимо добавить -nodes в код строк "# create a certificate" и
"# create a certificate request" таким образом чтобы наши новые ssl-сертификаты
загрузились без пароля. Иначе после перезагрузки системы ssl-сертификаты будут 
не доступны.)

(Найдите эти строки в файле и измените их:)

# create a certificate
system ("$REQ -new -nodes -x509 -keyout newreq.pem -out newreq.pem $DAYS");

# create a certificate request
system ("$REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS");

(Далее создаем сертификат для postfix)
		
# ./CA.pl -newca
# ./CA.pl -newreq
# ./CA.pl -sign
# cp newcert.pem /etc/postfix
# cp newreq.pem /etc/postfix
# cp demoCA/cacert.pem /etc/postfix
(А теперь такой же для apache)

# openssl req -new > new.cert.csr
# openssl rsa -in privkey.pem -out new.cert.key
# openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 365
(Оставьте получившиеся сертификаты, мы их проинсталлируем когда будем настраивать apache. )

6. Добавим SSL и SASL поддержку в Postfix

Теперь поправим конфигурацию postfix чтобы включить совместимость с sasl и ssl. Добавьте следующие параметры в конец файла, где их легко потом можно будет найти.

Code Listing 6.1: /etc/postfix/main.cf

# nano -w /etc/postfix/main.cf

smtpd_sasl_auth_enable = yes
smtpd_sasl2_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =

(Опция broken_sasl_auth_clients и метод авторизации используется только
для outlook и outlook express, они не документированы. Опция smtpd_sasl_local_domain 
добавляет имя домена для клиентов использующих smtp-авторизацию. Убедитесь что 
postfix отвергает пустое или просто имя пользователя, и они не могут авторизироватся. )

smtpd_recipient_restrictions =
	permit_sasl_authenticated,
	permit_mynetworks,
	reject_unauth_destination
	

smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/newreq.pem
smtpd_tls_cert_file = /etc/postfix/newcert.pem
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

(Опция  smtpd_tls_auth_only закоментирована для простоты тестирования, вы можете включить ее позже, если захотите.)

# postfix reload

Теперь мы попробуем проверить работоспособность postfix'а, и то что он прочел файлы конфигурации.

Code Listing 6.2: Проверка поддержки sasl и tls

# telnet localhost 25

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.domain.com ESMTP Postfix
EHLO domain.com
250-mail.domain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-XVERP
250 8BITMIME
^]
telnet> quit

Проверьте, что ответ postfix'а содержит линии AUTH и STARTTLS. Как уже замечалось выше, AUTH пока не будет работать, потому что sasl пытается авторизировать из sasldb, вместо shadow по неизвестным причинам. Итак мы просто пропускаем это и дальше настраиваем mysql для принятия нашей авторизации и информации о виртуальных доменах.

7. MySQL

Для инсталяции mysql нам необходим dump-файл genericmailsql.sql genericmailsql.sql

Code Listing 7.1: Инсталяция и настройка MySQL

# emerge mysql

# /usr/bin/mysql_install_db
(Далее следуйте указаниям на екране, для добавления пароля root в mysql, не mysqladmin, иначе ваша база будет открыта всем ветрам.)

# /etc/init.d/mysql start
# mysqladmin -u root -p create mailsql
# mysql -u root -p mailsql < genericmailsql.sql

# mysql -u root -p mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE
	->     ON mailsql.*
	->     TO mailsql@localhost
	->     IDENTIFIED BY '$password';

	->     quit
(Проверьте, что новый mailsql пользователь, может подключатся к mysql серверу.)

# mysql -u mailsql -p mailsql

Ваша новая база имеет значения по умолчанию и таблицы для двух доменов. Вложены следующие таблицы:

  • alias - локальные e-mail и информация о псевдонимах для mailman
  • relocated - информация о адресах перемещенных пользователях
  • transport - информация о почтовых транспортах для всех доменов размещающихся у вас
  • users - информация о всех пользователях
  • virtual - информация о псевдонимах для виртуальных доменов

Code Listing 7.2: пример таблицы псевдонимов

id   alias    destination
1    root     foo@bar.com
2  postmaster foo@bar.com

Code Listing 7.3: пример таблицы пользователей

(Приведем для ясности строку)
id email            clear     name     uid     gid     homedir     \
	maildir                                quota  postfix
10 foo@virt-bar.org $password realname virtid  virtid  /home/vmail \
	/home/vmail/virt-bar.org/foo/.maildir/        y
13 foo@bar.com      $password realname localid localid /home/foo   \
	/home/foo/.maildir/                           y

Code Listing 7.4: пример таблицы транспортов

id   domain       destination
1    bar.com      local:
2    virt-bar.org virtual:

Code Listing 7.5: пример таблицы псевдонимов для виртуальных доменов

id   email            destination
3   root@virt-bar.org other@email.address

8. Apache и phpMyAdmin

Итак, следующим шагом мы настроим apache и создадим интерфейс для еще более простого взаимодействия с базой данных.

Code Listing 8.1: Настройка apache и phpmyadmin

# emerge apache mod_php phpmyadmin

Существует множество руководств по настройке apache с поддержкой php. Например http://www.linuxguruz.org/z.php?id=31. Также многочисленные сообщения на http://forums.gentoo.org где рассматриваются решения проблем возникших в ходе инсталяции (поиск по "apache php"). Итак, я не стараюсь раскрыть эту тему здесь. Настройте apache и php, затем продолжим вместе настройку. Теперь слово для умных: .htaccess положите в директорию к phpmyadmin. Если вы не сделаете этого, поисковые системы проиндексируют страницы phpmyadmin и каждый сможет получить к нему доступ с помощью google, и изменить ваши базы, что не есть хорошо. Существует много howto как это сделать. http://docs.csoft.net/micro/black-htaccess.html.

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

  • SSLCertificateFile /path/to/certs/new.cert.cert
  • SSLCertificateKeyFile /path/to/certs/new.cert.key

Code Listing 8.2: Инсталяция Apache SSL сертификатов

# cp /etc/ssl/misc/new.cert.cert /etc/apache/conf/ssl/
# cp /etc/ssl/misc/new.cert.key /etc/apache/conf/ssl/
# nano -w /etc/apache/conf/vhosts/ssl.default-vhost.conf
(Измените следующие параметры)

ServerName host.domain.name
ServerAdmin your@email.address
SSLCertificateFile /etc/apache/conf/ssl/new.cert.cert
SSLCertificateKeyFile /etc/apache/conf/ssl/new.cert.key

# /etc/init.d/apache restart

Note: Если у вас apache уже проинсталлирован, вам вероятно придется сделать перезагрузку сервера. Проверьте логи системы на предмет корректного запуска apache.

Дальше настраиваем phpMyAdmin.

Code Listing 8.3: Настройка phpMyAdmin

# nano -w /home/httpd/htdocs/phpmyadmin/config.inc.php
(Измените следующие параметры)

$cfg['Servers'][$i]['host'] = 'localhost';          // MySQL hostname
$cfg['Servers'][$i]['controluser'] = 'mailsql';     // MySQL настройки системного аккаунта
                                                    // (этот аккаунт должен иметь read-only
$cfg['Servers'][$i]['controlpass'] = '$password';   // доступ к таблицам "mysql/user"
                                                    // и "mysql/db" tables)
$cfg['Servers'][$i]['user'] = 'mailsql';            // MySQL пользователь
$cfg['Servers'][$i]['password'] = '$password';      // MySQL пароль

Теперь введите адрес phpmyadmin страницы и просмотрите ваши таблицы в базе. Вы можете добавить локальные псевдонимы, поправить таблицу пользователей и добавить тестового пользователя, изменить таблицу транспортов для добавления информации о ваших доменах. Значений по умолчанию которые устанавливаются вместе с dump-файлом должно быть достаточно для примера, чтобы помочь вам настроить систему. Убедитесь что ввели в базу корректную информацию. Для примера, убедитесь что директории локальных пользователей существуют и указаны корректные uid/gid. Почтовые директории пользователей, должны быть созданы postfix, при первой принятой почте для пользователя. Будет неплохо, если вы пошлете "Добро пожаловать!", чтобы убедится, что .maildir создан.

9. Vmail-пользователь

Здесь вы можете быть удивленны узнав, что для виртуальных акаунтов, используются пользователи и дериктории, и будете правы.

Code Listing 9.1: Adding the vmail user

# adduser -d /home/vmail -s /bin/false vmail
# uid=`cat /etc/passwd | grep vmail | cut -f 3 -d :`
# groupadd -g $uid vmail
# mkdir /home/vmail
# chown vmail. /home/vmail

Теперь, когда вы настраиваете виртуальный акаунт, используйте vmail uid, gid , и его домашнюю папку. Когда вы создаете локальный акаунт, используйте uid, gid и домашнюю папку нового пользователя, а не vmail. Мы имеем ввиду, что если вы захотите создать php-страничку для администрирования пользователей, не забывайте, что phpmyadmin в целом справляется с этой работой очень неплохо.

10. Настройка MySQL авторизации и виртуальных доменов

Дальше мы перенастроим нашу авторизацию, на использование mailsql базы в courier-imap и postfix. Во всех следующих примерах, замените $paasword паролем, который вы задали пользователю mailsql для mysql.

Code Listing 10.1

# emerge /usr/portage/sys-libs/pam_mysql/pam_mysql-$currentversion.ebuild
(Этот пакет здесь задан маской, которую вы должны заменить на текущюю версию пакета. версию пакета вы можете посмотреть в portage. )

# nano -w /etc/pam.d/imap
(Закомментируйте существующие строки настройки авторизации, и добавьте указаные ниже.)

#auth       required     pam_nologin.so
#auth       required     pam_stack.so service=system-auth
#account    required     pam_stack.so service=system-auth
#session    required     pam_stack.so service=system-auth

auth     optional       pam_mysql.so host=localhost db=mailsql user=mailsql \
  passwd=$password table=users usercolumn=email passwdcolumn=clear crypt=0
account  required       pam_mysql.so host=localhost db=mailsql user=mailsql \
  passwd=$password table=users usercolumn=email passwdcolumn=clear crypt=0

# nano -w /etc/pam.d/pop3
# nano -w /etc/pam.d/smtp
(Сделайте такие же изменения в pop3 и smtp файлах)

Далее нам нужно поправить конфигурацию авторизации courier.

Code Listing 10.2

# nano -w /etc/courier-imap/authdaemonrc
authmodulelist="authmysql authpam"

# nano -w /etc/courier-imap/authdaemond.conf
AUTHDAEMOND="authdaemond.mysql"

# nano -w /etc/courier-imap/authmysqlrc
MYSQL_SERVER            localhost
MYSQL_USERNAME       mailsql
MYSQL_PASSWORD      $password
MYSQL_DATABASE          mailsql
MYSQL_USER_TABLE        users
#MYSQL_CRYPT_PWFIELD    crypt (эта строка должна быть закомментирована)
MYSQL_CLEAR_PWFIELD     clear
MYSQL_UID_FIELD         uid
MYSQL_GID_FIELD         gid
MYSQL_LOGIN_FIELD       email
MYSQL_HOME_FIELD        homedir
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir

# /etc/init.d/authdaemond restart
# /etc/init.d/saslauthd restart

Мы уже почти подошли к тому что вам обещал. Далее мы настроим необходимые конфиги postfix'a для связки с базой данных для всех необходимых необходимых транспортов.

Code Listing 10.3: /etc/postfix/mysql-aliases.cf

# nano -w /etc/postfix/mysql-aliases.cf
# mysql-aliases.cf

user         	= mailsql
password     	= $password
dbname       	= mailsql
table        	= alias
select_field 	= destination
where_field  	= alias
hosts        	= unix:/var/run/mysqld/mysqld.sock

Code Listing 10.4: /etc/postfix/mysql-relocated.cf

# nano -w /etc/postfix/mysql-relocated.cf
# mysql-relocated.cf

user         	= mailsql
password     	= $password
dbname       	= mailsql
table        	= relocated
select_field 	= destination
where_field  	= email
hosts        	= unix:/var/run/mysqld/mysqld.sock

Code Listing 10.5: /etc/postfix/mysql-transport.cf (необязательно)

# nano -w /etc/postfix/mysql-transport.cf		
# mysql-transport.cf

user         	= mailsql
password     	= $password
dbname       	= mailsql
table        	= transport
select_field 	= destination
where_field  	= domain
hosts        	= unix:/var/run/mysqld/mysqld.sock

Code Listing 10.6: /etc/postfix/mysql-virtual-gid.cf (необязательно)

# nano -w /etc/postfix/mysql-virtual-gid.cf
#myql-virtual-gid.cf

user          	= mailsql
password        = $password
dbname        	= mailsql
table           = users
select_field    = gid
where_field     = email
additional_conditions = and postfix = 'y'
hosts         	= unix:/var/run/mysqld/mysqld.sock

Code Listing 10.7: /etc/postfix/mysql-virtual-maps.cf

# nano -w /etc/postfix/mysql-virtual-maps.cf
#myql-virtual-maps.cf

user        	= mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = maildir
where_field   	= email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock

Code Listing 10.8: /etc/postfix/mysql-virtual-uid.cf (необязательно)

# nano -w /etc/postfix/mysql-virtual-uid.cf
# mysql-virtual-uid.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = uid
where_field    	= email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock

Code Listing 10.9: /etc/postfix/mysql-virtual.cf

# nano -w /etc/postfix/mysql-virtual.cf
# mysql-virtual.cf

user         	= mailsql
password     	= $password
dbname       	= mailsql
table        	= virtual
select_field 	= destination
where_field  	= email
hosts        	= unix:/var/run/mysqld/mysqld.sock

И последнее, правим /etc/postfix/main.cf еще один раз.

Code Listing 10.10: /etc/postfix/main.cf

# nano -w /etc/postfix/main.cf
alias_maps = mysql:/etc/postfix/mysql-aliases.cf
relocated_maps = mysql:/etc/postfix/mysql-relocated.cf

local_transport = local
local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname

virtual_transport = virtual
virtual_mailbox_domains =
	virt-bar.com,
	$other-virtual-domain.com

virtual_minimum_uid = 1000
virtual_gid_maps = static:$vmail-gid
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
virtual_uid_maps = static:$vmail-uid
virtual_mailbox_base = /
#virtual_mailbox_limit =

Здесь видно чем значительно отличается postfix 2.0.x от 1.1.x. Сильнее всего заметно отсутствие необходимости в таблицах транспорта, virtual-gid и virtual-uid, хотя эти таблицы и вкладываются, чтобы вы могли их использовать при необходимости.

Note: Рекомендуем прочесть VIRTUAL_README идущий с postfix, для большего количества информации.

Code Listing 10.11

# postfix reload

Теперь, если все прошло хорошо, вы должны иметь работающий почтовый сервер. Пользователи должны быть способны авторизироватся в sql базе, использовать свой полный почтовый адрес для pop3, imap, и smtp. Настоятельно рекомендую проверить , что всё это действительно работает. Если вы столкнулись с проблемами, проверьте раздел troubleshooting в конце документа.

11. Squirrelmail

Code Listing 11.1

# emerge squirrelmail
(Добавим ссылку на htdocs для более короткого пути.)

# ln -s /home/httpd/htdocs/squirrelmail/ /home/httpd/htdocs/mail
# cd /home/httpd/htdocs/mail/conf
# ./conf.pl
(Измените настройки Organization, Server, и Folder для squirrelmail.)
( Теперь вы имеете возможность залогинится в squirrelmail, снова с вашим полным email адресом, и использовать ваш новый webmail setup.)

12. Mailman

Последний шаг - mailman. Новая версия имеет великолепную поддержку виртуальных доменов, поэтому я использую его, не говоря уже о том что это просто великолепная программа. Настоятельно рекомендую прочесть документацию mailman, включающую README.POSTFIX.gz, для более полного понимания.

Одно замечание, текущая версия mailman инсталируется в /usr/local/mailman. Если вы хотите изменить дерикторию инсталяции, вы можете изменить в ebuild файле переменную INSTALLDIR.

Code Listing 12.1: /usr/portage/net-mail/mailman/mailman-$ver.ebuild

# nano -w /usr/portage/net-mail/mailman/mailman-$ver.ebuild
MAILGID="280"
(Задайте MAILGID для группы mailman взаммен nobody)
(Это необходимо для интеграции с postfix)

Code Listing 12.2

# emerge mailman
(Имя этого пакета маскировано, поэтому вам надо указать emerge путь к 
ebuild. После инсталяции, следуйте инструкциям в README.gentoo.gz *исключая* - 
не добавляйте псевдонимы в /etc/mail/aliases. Вместо этого, мы укажем postfix 
использовать псевдонимы из базы.)

# zless /usr/share/doc/mailman-$ver/README.gentoo.gz

Code Listing 12.3: Настройки по умолчанию: Mailman/Defaults.py

#  nano -w /var/mailman/Mailman/Defaults.py
(Измените значения приведенные ниже на ваши, дальше будем настраивать виртуальные домены.)
DEFAULT_EMAIL_HOST = 'domain.com'
DEFAULT_URL_HOST = 'www.domain.com'

Code Listing 12.4: настройка mailman: mm_cfg.py

# nano -w /var/mailman/Mailman/mm_cfg.py
MTA = "Postfix"
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['virt-domain.com', 'virt.domain2.com']	
add_virtualhost('www.virt.domain.com', 'virt.domain.com')
add_virtualhost('www.virt.domain2.com', 'virt.domain2.com')
(Это нужно для работы mailman с виртуальными доменами.)

Code Listing 12.5

(Создадим наш первый лист рассылки.)

# su mailman
# cd ~
# bin/newlist test
Enter the email of the person running the list: your@email.address
Initial test password:
Hit enter to continue with test owner notification...
(Листы виртуального домена могут быть указаны в виде list@domain.com)
# bin/genaliases
(Теперь ваши псевдонимы сгенерированы, проверьте, что они добавлены правильно.)

# nano -w data/aliases
# STANZA START: test
# CREATED:
test:             "|/var/mailman/mail/mailman post test"
test-admin:       "|/var/mailman/mail/mailman admin test"
test-bounces:     "|/var/mailman/mail/mailman bounces test"
test-confirm:     "|/var/mailman/mail/mailman confirm test"
test-join:        "|/var/mailman/mail/mailman join test"
test-leave:       "|/var/mailman/mail/mailman leave test"
test-owner:       "|/var/mailman/mail/mailman owner test"
test-request:     "|/var/mailman/mail/mailman request test"
test-subscribe:   "|/var/mailman/mail/mailman subscribe test"
test-unsubscribe: "|/var/mailman/mail/mailman unsubscribe test"
# STANZA END: test

# /etc/init.d/mailman start
# rc-update add mailman default
(Для запуска mailman при каждой загрузке)

Code Listing 12.6: Добавление поддержки псевдонимов mailman в postfix

# nano -w /etc/postfix/main.cf
owner_request_special = no
recipient_delimiter = +
(Прочтите README.POSTFIX.gz для более детальной информации)

alias_maps     =
	hash:/var/mailman/data/aliases,
	mysql:/etc/postfix/mysql-aliases.cf

virtual_alias_maps =
	hash:/var/mailman/data/virtual-mailman,
	mysql:/etc/postfix/mysql-virtual.cf
(Это добавит поддержку файлов псевдонимов mailman'a в postfix, конечно
вы можете использовать таблицу в mysql для этого, но я ненавижу делать это руками. 
Также если вы не используете виртуальных доменов, добавление псевдонимов, может
привести к проблемам.)

Теперь вы можете создавать листы рассылок для каждого домена в вашей системе. Последнее замечание, убедитесь, что mailman запущен из под пользователя mailman (su mailman) иначе у вас будут проблемы с разрешениями. прочтите документацию mailman для более детальной информации по управлению листами рассылки.

13. Фильтрация содержимого и Anti-Virus

Скоро будет,... это уже существует, но я должен еще немного разобраться в perl'e и протестировать результат. Если вы хотите помочь с этим, свяжитесь со мной.

14. Окончание

Итак,. Вы все сделали, теперь поправьте /etc/postfix/master.cf и отключите режим verbose. Возможно вы захотите довавить сервис в автозагрузку. Убедитесь что вы добавили в автозагрузку все сервисы которые используете - apache, mysql, saslauthd, postfix, courier-imapd, courier-imapd-ssl, courier-pop3d, и courier-pop3d-ssl, все зависит от вашего решения какие сервисы предоставлять. Обычно я разрешаю все сервисы.

Code Listing 14.1: Окончание

# postfix reload
# rc-update add $service default

Вобщем инджой и хэв фан!

15. Troubleshooting

Введение

Troubleshooting: Это небольшой список решений для проблем, наиболее часто возникающих в ходе установки. Это не исчерпывающая информация, но вы можете начать поиск решения граблей отсюда. Такая запутанная настройка и инсталяция как в этом документе, может привести к тому что некоторые компоненты будут работать неправильно. Вообще советую сделать несколько следующих шагов. Запустите систему в базовой конфигурации, добавляя компонент за компонентом, чтобы выяснить какой из них сбоит.

Шаг 1: Проверьте ваши файлы конфигурации. 

Опечатки главный враг, особенно когда идет речь о системе авторизации. Проверьте ваши конфигурационные файлы и базу данных на предмет опечаток. Если вы делаете изменения настроек для сервиса, убедитесь, что вы перезапустили сервиса, дабы изменения вступили в силу.

Code Listing 15.1

# /etc/init.d/service restart

Шаг 2: Все необходимые сервисы запущены и работают?

Если не запущены, запустите. Крайне сложно отлаживать программу если она не запущена. Иногда сервис запускается, но не функционирует. Иногда, когда используется неправильный файл конфигурации сервис может использовать другой порт предназначенный другому процессу. Иногда вы можете воспользоватся netstat. Или если возможно , перезагрузите ваш сервер, это очистит любой зависший сервис.

Code Listing 15.2

# /etc/init.d/$service status
# netstat -a | grep $service (или $port)

Шаг 3: Все сервисы используют правильные файлы конфигурации?

Если вы внесли изменения в конфигурационные файлы сервиса, убедитесь что он использует новые параметры. Некоторые программы, вроде postfix могут показывать конфигурацию их параметров.

Code Listing 15.3

# apachectl fullstatus  (необходим lynx)
# apachectl configtest (проверка нормальной конфигурации)
# postconf -n (показывает текущие параметры используемые postfix)
# /etc/init.d/$service restart

Шаг 4: Проверьте логи.

На то логи и существуют, чтобы помочь нам выяснить причину, а иногда и подсказать решение проблемы. Просмотрите все логи, которые имеют отношение к программе, ее сбою.

Code Listing 15.4

# kill -USR1 `ps -C metalog -o pid=`(для выключения metalog buffering)
# nano -w /var/log/mail/current
# cat /var/log/mysql/mysql.log
# tail /var/log/apache/error_log

Вы также можете найти параметр debug_peer в main.cf который может быть полезен. Включение этого параметра, увеличит подробность выводящихся сообщений в логи.

Code Listing 15.5: добавление поддержки debug_peer

# nano -w /etc/postfix/main.cf
debug_peer_level = 5
debug_peer_list = $host.domain.name
(Раскоментируйте одну из нужных строк.)

Шаг 5: Попробуйте связаться с сервисом.

SMTP, IMAP, и POP3 отвечают на telnet сессию, как вы видели немного раньше при конфигурации postfix. Иногда помогает открыть telnet сессию с сервисом, для того чтобы выяснить что случилось.

Code Listing 15.6

# telnet localhost $port
(SMTP на 25-м, IMAP, на 143-м, POP3 на 110-м порту. по крайней мере вы
должны увидеть слово ОК. Так вы будете знать что сервис запущен, и готов к ответу.)

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.

Шаг 6: Иногда только большая пушка может дать нам информацию: strace.

Вы должны иметь эту программу всегода под рукой. Это бесценный инструмент для отлаживания программ. Вы можете запустить из командной строки starce и наблюдать все системные вызовы происходящие в программе. Часто дамп содержит огромное количество информации, так что вы можете либо наблюдать в реальном времени, за транакцией приводящей к краху программы, или записать его в файл, для неторопливого просмотра позже.

Code Listing 15.7

# emerge strace
# strace $command
# strace -p `ps -C $service -o pid=`

Шаг 7: Обзор

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



Print

Updated November 13, 2003

Summary: Этот документ описывает как создать виртуальную почтовую систему с помощью программ postfix, mysql, courier-imap, и cyrus-sasl.

Ken Nowack
Author

Ezra Gorman
Author

Alexandr Logechnik
Translator

Donate to support our development efforts.

Tek Alchemy

Tek Alchemy offers dedicated servers and other hosting solutions running Gentoo Linux.

php|architect

php|architect is the monthly magazine for PHP professionals, available worldwide in print and electronic format. A percentage of all the sales will be donated back into the Gentoo project.

The Gentoo Linux Store
SevenL.net

Seven L Networks provides customizable Dedicated Servers for your customized Gentoo install. Colocation and other hosting services are also provided.

$99/mo dedicated servers

No BS Dedicated Gentoo Linux Servers from vr.org.

Copyright 2001-2005 Gentoo Foundation, Inc. Questions, Comments, Corrections? Email www@gentoo.org.