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


Ссылка на оригинал: http://www.gentoo.org/doc/ru/virt-mail-howto.xml

C версии: 1.0

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.

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


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


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


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


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



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


Листинг 2.1: Инсталляция postfix

# emerge postfix


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



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


Листинг 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. Они включат режим подробного протоколирования для отладки:


Листинг 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.


Листинг 2.4: Запуск postfix'а в первый раз

# /usr/bin/newaliases

(это создаст новые псевдонимы. Это требуется делать)

(когда вы создаете или обновляете файл псевдонимов.)

# /etc/init.d/postfix start



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

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



3. Courier-imap


Листинг 3.1: Инсталляция courier-imap

# emerge courier-imap



Листинг 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



Листинг 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.

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



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

# USE='-ldap -mysql' emerge cyrus-sasl

(мы не используем ldap и мы не используем возможности sasl-mysql,

поэтому мы отключаем их )



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


Листинг 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.


Листинг 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. Добавьте следующие параметры в конец файла, где их легко потом можно будет найти.


Листинг 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'а, и то что он прочел файлы конфигурации.


Листинг 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


Листинг 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



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



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

id alias destination

1 root foo@bar.com

2 postmaster foo@bar.com



Листинг 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



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

id domain destination

1 bar.com local:

2 virt-bar.org virtual:



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

id email destination

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



8. Apache и phpMyAdmin


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


Листинг 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


Листинг 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


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



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


Листинг 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-пользователь


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


Листинг 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.


Листинг 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.


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


Листинг 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



Листинг 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



Листинг 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



Листинг 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



Листинг 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



Листинг 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



Листинг 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 еще один раз.


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

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



Листинг 10.11:

# postfix reload



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


11. Squirrelmail


Листинг 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.


Листинг 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)



Листинг 12.2:

# emerge mailman

(имя этого пакета маскировано, поэтому вам надо указать emerge путь к

ebuild. После инсталляции, следуйте инструкциям в README.gentoo.gz *исключая* —

не добавляйте псевдонимы в /etc/mail/aliases. Вместо этого, мы укажем postfix

использовать псевдонимы из базы)


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



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

# nano -w /var/mailman/Mailman/Defaults.py

(измените значения приведенные ниже на ваши, дальше будем настраивать

виртуальные домены)

DEFAULT_EMAIL_HOST = 'domain.com'

DEFAULT_URL_HOST = 'www.domain.com'



Листинг 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 с виртуальными доменами)



Листинг 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 при каждой загрузке)



Листинг 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, все зависит от вашего решения какие сервисы предоставлять. Обычно я разрешаю все сервисы.


Листинг 14.1: Окончание

# postfix reload

# rc-update add $service default



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


15. Troubleshooting



Введение


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


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


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


Листинг 15.1:

# /etc/init.d/service restart



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


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


Листинг 15.2:

# /etc/init.d/$service status

# netstat -a | grep $service (или $port)



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


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


Листинг 15.3:

# apachectl fullstatus (необходим lynx)

# apachectl configtest (проверка нормальной конфигурации)

# postconf -n (показывает текущие параметры используемые postfix)

# /etc/init.d/$service restart



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


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


Листинг 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 который может быть полезен. Включение этого параметра, увеличит подробность выводящихся сообщений в логи.


Листинг 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 сессию с сервисом, для того чтобы выяснить что случилось.


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


Листинг 15.7:

# emerge strace

# strace $command

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