Ссылка на оригинал: http://www.gentoo.org/doc/ru/virt-mail-howto.xml
C версии: 1.0
Для большинства пользователей 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.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.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
Снова запустите ваш любимый почтовый клиент и проверьте что сервисы начали принимать и посылать почту. Теперь когда основная часть заработала, перейдем к связыванию всех компонентов, для получения спокойно работающей системы. Снова, проверьте, что все что мы сделали работает, перед тем как переходить к следующему шагу.
Следующим шагом будет инсталляция 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
Дальше делаем 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 )
Теперь поправим конфигурацию 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 для принятия нашей авторизации и информации о виртуальных доменах.
Для инсталляции 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
Ваша новая база имеет значения по умолчанию и таблицы для двух доменов. Вложены следующие таблицы:
alias — локальные e-mail и информация о псевдонимах для mailman
relocated — информация о адресах перемещенных пользователях
transport — информация о почтовых транспортах для всех доменов размещающихся у вас
users — информация о всех пользователях
virtual — информация о псевдонимах для виртуальных доменов
Листинг 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
Итак, следующим шагом мы настроим 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.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 в целом справляется с этой работой очень неплохо.
Дальше мы перенастроим нашу авторизацию, на использование 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.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)
Последний шаг — 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 для более детальной информации по управлению листами рассылки.
Скоро будет,... это уже существует, но я должен еще немного разобраться в perl'e и протестировать результат. Если вы хотите помочь с этим, свяжитесь со мной.
Итак,. Вы все сделали, теперь поправьте /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
Вобщем инджой и хэв фан!
Введение
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=`