Создание виртуальной почтовой системы
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
|
Дальше правим /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
# nano -w pop3d.cnf
# nano -w imapd.cnf
# 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
|
Дальше правим /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
# 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");
# ./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
# 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
|
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 =
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
# 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
# /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
# 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
# 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
|
Далее нам нужно поправить конфигурацию авторизации 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
# ln -s /home/httpd/htdocs/squirrelmail/ /home/httpd/htdocs/mail
# cd /home/httpd/htdocs/mail/conf
# ./conf.pl
|
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"
|
Code Listing 12.2 |
# emerge mailman
# 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')
|
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...
# 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
|
Code Listing 12.6: Добавление поддержки псевдонимов mailman в postfix |
# nano -w /etc/postfix/main.cf
owner_request_special = no
recipient_delimiter = +
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 запущен из под пользователя 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
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: Обзор
Если получив информацию, вы смогли понять и устранить проблемы - великолепно! Если нет, вам неоходимо поискать в интернете информацию, которая поможет вам. Ниже приведен список сайтов, где вы можете поискать решение своей проблемы, если она была решена раньше.
|