Продолжение postfix-цикла. Если Вам нужно что-то посерьезнее qpoppep'а
или Вам просто необходима возможность работы по imap (хранить почтовые
ящики пользователей на сервере - кстати, очень удобно). Сразу скажу -
большенство материала перекочевало из предыдущих статей цикла.
Повторяюсь: если Вы заметите какую-либо неточность или более красивое
решение - пишите, я это отражу (разумеется герои не будут забыты в
руководстве).
В конце есть ссылки на собранные (пересобранные) файлы, которые я
использовал при написании этой статьи
Инсталляция
-----------
MySQL:
тут ничего не обычного нет - просто ставите и все. Единственное, что
отмечу - нужны пакеты mysql, mysql-server, mysql-devel, zlib-devel
Postfix:
Вот тут необходимо пересобрать пакет. Необходимо "включить" поддержку
MySQL. Но тут все очень просто - необходимо взять srpm'ку из
дистрибутива, развернуть ее в то место, где у Вас осуществляется
сборка пакетов и в spec'е изменить одно значение:
с %define MYSQL 0
на %define MYSQL 1
а также добавить один патчик с http://www.oav.net/vda/.
ftp://ftp.oav.net/others/postfix/VDA/postfix-1.1.11_quota_maildirsize.patch.gz
Он нужен для квотирования почтовых ящиков пользователей (одному дадите 1 Мб,
другому 10). Вся проблема в том, что postfix может квотировать только
mailbox-ящики, а courier'у требуется maildir-ящик. Указанный патч как
раз и устраняет проблему. Фактически, при пересборке postfix'а
необходимо положить указанный патч в то место, где у Вас расположены
исходники, патчи и т.п. которые участвуют при сборке rpm-пакета
(каталог SOURCE), а в спеке добавить инструкцию о применении этого
патча. Здесь я приведу diff измененного spec'а:
После этих подготовительных операций осуществите пересборку (rpm -ba
postfix.spec), а после инсталлируйте (если переинсталлировать, то rpm
-Uvh --force имя_пакета.rpm) пакет.
Courier-imap:
Идем на сайт: http://www.inter7.com/courierimap.html программы и
берем исходники courier-imap. На момент написания была версия 1.7.3.
Вся прелесть в том, что с пакетом уже идет spec для сборки rpm-пакета,
его просто нужно "вытянуть" из архива. По умолчанию собирается
несколько пакетов: сам courier-imap и модули авторизации через mysql
(то что нам и нужно), postgresql (для поклонников - есть патчи для
postfix'а) и ldap (в postfix'е нативная поддержка). Так как я все
нужные пакеты собираю под vmware (чего основную систему захламлять),
поэтому я ничего в спеке не изменял, а инсталлировал недостающие для
сборки пакеты (лдапные и постгресные) и на выходе получил то, что
нужно. После инсталлировал courier-imap и courier-imap-mysql.
Следует отметить, что если Вы ничего не меняли, пакет ставится в
/usr/lib/courier-imap
Следующий шаг - конфигурирование.
Конфигурирование
----------------
MySQL:
все конфигурирование заключается в создании базы виртуальных
пользователей и пользователя, от которого будет осуществляться доступ
к указанной базе.
mysql>create database mail;
mysql>GRANT select ON `mail`.* TO 'postfix'@'127.0.0.1' IDENTIFIED BY 'postfix';
mysql>use mail;
mysql>create table alias (address varchar(128) not null default '',
goto varchar(128) not null default '', primary key (address));
mysql>create table transport (domain varchar(128) not null default '',
transport varchar(128) not null default '', primary key (domain));
mysql>create table users (email varchar(128) not null default '',
passwd varchar(128) not null default '', uid int(11) unsigned not null default'1000',
gid int(11) unsigned not null default '12',
maildir varchar(255) not null default '/var/spool/mail/',
enabled tinyint(4) not null default '1',
quota int(11) unsigned not null default '2048000', primary key (email) );
mysql>insert into transport VALUES ('virtual1.domain', 'virtual');
mysql>insert into users VALUES ('test@virtual1.domain', 'password', '1000', '12',
'/var/spool/mail/virtual1.domain/test/', '1', '2048000');
Обратите внимание на значение поля maildir. Оно заканчивается на "/".
Это необходимо для того, чтобы postfix "работал" с почтовыми ящиками в
формате maildir
Postfix:
Конфигурирование postfix'а заключается в редактировании
конфигурационных файлов. Сразу скажу - здесь я не буду описывать весь
процесс конфигурирования postfix'а (смотрите документацию к postfix'у
- там есть много чего интересного), а только тем моменты, которые
затрагивают рассматриваемый вопрос.
файл /etc/postfix/master.cf
строку:
virtual unix - n y - - virtual
меняем на:
virtual unix - n n - - virtual
строка local_recipient_maps = ... необходима для того, чтобы почту
могли получать и локальные пользователи (не нужно было бы их
прописывать в базе), которым направляются результаты работы сервисов
системы (запускаемые по cron, ошибки и т.п.), а эту почту локального
пользователя (например, root) можно потом перенаправить на
виртуального в файле /etc/postfix/aliases.
файл /etc/postfix/mysql-mydestination.cf
user = postfix
password = postfix
dbname = mail
table = transport
select_field = domain
where_field = domain
hosts = 127.0.0.1
файл /etc/postfix/mysql-virtual-maps.cf
user = postfix
password = postfix
dbname = mail
table = users
select_field = maildir
where_field = email
additional_conditions = and enabled = 1
hosts = 127.0.0.1
файл /etc/postfix/mysql-virtual.cf
user = postfix
password = postfix
dbname = mail
table = alias
select_field = goto
where_field = address
hosts = 127.0.0.1
файл /etc/postfix/mysql-virtual-uid.cf
user = postfix
password = postfix
dbname = mail
table = users
select_field = uid
where_field = email
additional_conditions = and enabled = 1
hosts = 127.0.0.1
файл /etc/postfix/mysql-virtual-gid.cf
user = postfix
password = postfix
dbname = mail
table = users
select_field = gid
where_field = email
additional_conditions = and enabled = 1
hosts = 127.0.0.1
файл /etc/postfix/mysql-transport.cf
user = postfix
password = postfix
dbname = mail
table = transport
select_field = transport
where_field = domain
hosts = 127.0.0.1
файл /etc/postfix/mysql-mailboxsize.cf
user = postfix
password = postfix
dbname = mail
table = users
select_field = quota
where_field = email
additional_conditions = and enabled = 1
hosts = 127.0.0.1
Не забываем создать каталог /var/spool/mail/virtual1.domain с правами:
drwxrwxr-x root:mail
Courier-imap:
тут все просто. нужно подправить конфиг, да настроить каким службам
автоматически запускаться (pop3,pop3-ssl, imap, imap-ssl) - см.
соответствующие конфиги в /usr/lib/courier-imap/etc/
На этом этап конфигурирования закончен. Следующее - тестирование.
Тестирование
------------
Перво-наперво нужно проверить возможность получения почты виртуальными
пользователями. Пользователь test@virtual1.domain у нас создан. Нужно
попытаться послать ему какое либо письмо. Самый простой способ (это
нужно делать с машины, на которой и происходит процесс установки):
$cat какой_либо_текстовый_файл |mail test@virtual1.domain
далее смотрим, что появилось в файле /var/log/maillog. Если возникли
какие-либо ошибки - описывается довольно подробно где смотреть. Обычно
это опечатки в конфигурационных файлах. Если не совсем понятно -
попробуйте включить режим логирования в mysql (в этом логе будут
писаться обращения к серверу и его ответы).
Если все работает, то в maillog'е будет запись типа:
May 20 10:05:41 localhost postfix/virtual[9779] DF0B1C79D: to=<test@virtual1.domain>,
relay=virtual, delay=1, status=sent(maildir)
После этого посмотрите содержитое каталога
/var/spool/mail/virtual1.domain/ Там должен будет появиться каталог test.
После того, как все получилось, попробуйте аналогичное для локальных
пользователей (например, postmaster - смотрите куда он алиасится в
файле /etc/postfix/aliases).
С получением почты разобрались. Займемся доступом по pop3 (imap
оставим на самостоятельное задание). Во-первых, запустите
courier-imap:
#/etc/init.d/courier-imap start
Starting Courier-IMAP server: imap pop3
у меня запускаются только imap и pop3. Если Вы ничего не изменяли в
конфигах, то еще должно будет запуститься imap-ssl и pop3-ssl.
Во-вторых: Самый простой способ это с машины, на которой происходит
процесс установки выполняем:
telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
user test@virtual1.domain (или test - дефолтный домен мы прописали)
+OK Password required.
pass test
+OK logged in.
quit
+OK Bye-bye.
Connection closed by foreign host.
если что-то не то - смотрите /var/log/maillog и лог запросов к mysql.
Если попали в засаду - пишите на форум.
http://www.phantom.atknet.ru/cgi-bin/cgiforum.pl Попробуем разобраться
(но перед этим еще раз внимательно проверьте - ничего-ли Вы не забыли
сделать и нет ли ошибок в конфигурационных файлах).
В завершение напоминаю: Создаете виртуальный почтовый домен - не
забудьте создать пользователей этого домена: "root@", "postmaster@" и "abuse@"