понедельник, 6 декабря 2010 г.

Настройка Postfix+MySQL+Dovecot-POP3+Amavis в ubuntu server 10.04

Раздел 3. Связка Postfix - MySQL

Теперь база данных готова к заполнению данными и дальнейшей обработке. Поскольку в роли почтового сервера у нас выступает Postfix, объяснить ему как получать инфу из БД. Начнем с "объяснения" какие у нас есть виртуальные домены.

Создаем конфиг /etc/postfix/mysql-virtual_domains.cf такого содержания:

user = mail_admin
password = mailadminpass
hosts = 127.0.0.1
dbname = mail
query = SELECT 1 FROM domains WHERE domain='%s' 

Итак, представим, что Postfix получил письмо для somebody@example.com, и теперь должен проверить: example.com - наш ли это виртуальный домен. Для это ему необходимо выполнить SQL запрос (query в нашем конфиге) и заменить %s на example.com. Если найдет там такой - вернет 1. Вообщем-то неважно что он вернет, главное что б вернул хоть какой-нибудь результат, а не null

Укажем Postfix`у где лежит этот конфиг:
#> postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual_domains.cf 
Команда postconf - e по сути просто добавляет в /etc/postfix/main.cf строку. Плюс добавление доп. параметров в конфиг postfx`а таким способом происходит интерактивно, т.е. изменения вступают в силу сразу, без перезагрузки postfix.

Заполним таблицу domains. Цепляемся к консоли MySQL, к БД mail:
#> mysql -p mail
И выполним запрос:
mysql> INSERT INTO domains (domain) VALUES ('example.com');
exit 
Возвращаемся в наш shell и проверяем, знает ли postfix наш виртуальный домен exemple.com:
#> postmap -q example.com mysql:/etc/postfix/mysql-virtual_domains.cf 
Если вернулась 1 - значит все гуд! Ежели есть ошибки - проверяй конфиг
/etc/postfix/mysql-virtual_domains.cf . Косяки с именем юзера, паролем или еменем БД, либо еще можно проверить на предмет привилегий, а лучше дать их еще раз (см. выше)




Теперь научим Postfix понимать, где у нас в БД хранятся юзверя, ну и соответственно их email`ы. Создаем под это дело конфиг /etc/postfix/mysql-virtual_mailboxes.cf такого содержания:








user = mail_admin
password = mailadminpass
hosts = 127.0.0.1
dbname = mail
query = SELECT 1 FROM users WHERE email = '%s' 



Укажем Postfix`у где лежит этот конфиг:



#>postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual_mailboxes.cf 


Заполним таблицу users. Цепляемся к консоли MySQL, к БД mail:

#> mysql -p mail

и выполним запрос:



mysql> INSERT INTO users (email, password) VALUES ('john@example.com', 'jhon'));
exit

Возвращаемся в наш shell и проверяем, знает ли postfix нашего вновь созданного юзверя:







#>postmap -q john@example.com mysql:/etc/postfix/mysql-virtual_mailboxes.cf 

Опять таки, если вернулся одинчик ("1") - у нас все гуд!

Важный момент! Директория хранения писем пользователя будет такой: var/vmail/$DOMAIN/$USER

Теперь перейдем к организации "форвардинга".
Заполним таблицу forwardings. Цепляемся к консоли MySQL, к БД mail:

#> mysql -p mail

и выполним запрос:
mysql> INSERT INTO forwardings (source, destination) VALUES ('john@example.com', 'john@example.com'), ('john@example.com', 'devnull@workaround.org'); 
exit
Теперь научим Postfix понимать, где у нас в БД хранится таблица forwardings. Создаем под это дело конфиг /etc/postfix/mysql-virtual_forwardings.cf такого содержания:








user = mail_admin
password = mailadminpass
hosts = 127.0.0.1
dbname = mail
query = SELECT destination FROM forwardings  WHERE source = ''%s' 

Тестим:



#>postmap -q john@example.com mysql:/etc/postfix/mysql-virtual_forwardings.cf 








Должны получить:

 john@example.com,devnull@workaround.org


Укажем Postfix`у где лежит этот конфиг:

#>postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual_forwardings.cf 


На этом организация связки Postfix - MySQL завершена. Можно двигаться дальше, не забыв при этом "навалить" пользователю postfix соответствующих правов на чтение его конфигов):

#> chgrp postfix /etc/postfix/mysql-*.cf
#> chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf


<-- Раздел 2. Подготовка базы данных

Комментариев нет:

Отправить комментарий