АНДРЕЙ МОЗГОВОЙ
SMTP AUTH in da Postfix + ...
SMTP AUTH in da Postfix + Cyrus-SASL + Mysql + Courier-IMAP + DrWeb + SquirrelMail + SpamAssassin. Как собрать все это «хозяйство» с MTA Postfix, вы можете найти в следующих статьях:
Как прикрутить SpamAssassin, можно почитать здесь:
Настоящая статья только вскользь опишет общую сборку большой связки.
Главная цель – настроить авторизацию по SMTP (без SSL) и выдержать стиль Mini-HOWTO.
Большая связка
Версии ПО, используемые мной на момент написания статьи:
- Linux Slackware-9.0 + Patches
- Postfix-2.0.13
- Cyrus-sasl-2.1.15
- Mysql-3.23.56
- Courier-imap-1.7.1
- Drweb-4.29.5
- SpamAssassin-2.55
- Squirrelmail-1.4.0
Честно говоря, у меня крутится MySQL, который поставляется вместе с дистрибутивом. MySQL, наверное, лучше установить/настроить первым. Качаем, распаковываем, конфигурим, собираем, устанавливаем. Заводим отдельного пользователя под Postfix, например, «postfix». Кстати, для повышения безопасности, почта все-таки, заставьте MySQL не слушать Сеть, общайтесь только через сокет-файл. Так оно и быстрее.
--- /etc/my.cnf ---
...
[mysqld]
…
skip-networking
...
--- EOF /etc/my.cnf ---
Создаем базу данных (mail), в которой будут храниться таблицы, содержащие все записи о почтовых бюджетах (users), синонимах (aliases) и обслуживаемых доменах (transport).
Поля таблиц
Можно обойтись несколькими полями в каждой таблице, но в Postfix-2.x.x появилась поддержка дополнительных полей/условий. Это очень удобно, почему бы не воспользоваться ими? Придерживаясь главной цели сей статьи, буду краток. Некоторые поля действительно необязательны, но они пригодятся, когда будем прикручивать веб-интерфейс собственного производства (тема следующей статьи).
CREATE TABLE users (
uid int(11) NOT NULL auto_increment,
gid int(11) NOT NULL default '12',
alias varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
active enum('1','0') NOT NULL default '1',
maildir varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
password-crypt varchar(255) default NULL,
owner varchar(255) NOT NULL default '',
create_date datetime NOT NULL default '0000-00-00 00:00:00',
change_date datetime NOT NULL default '0000-00-00 00:00:00',
quota varchar(255) NOT NULL default 'NOQUOTA',
comment text,
PRIMARY KEY (uid),
UNIQUE KEY alias (alias),
FULLTEXT KEY comment (comment)
) TYPE=MyISAM COMMENT='Здесь хранится информация о почтовых бюджетах';
CREATE TABLE aliases (
id int(11) NOT NULL auto_increment,
alias varchar(200) NOT NULL default '',
rcpt varchar(200) NOT NULL default '',
create_date datetime NOT NULL default '0000-00-00 00:00:00',
change_date datetime NOT NULL default '0000-00-00 00:00:00',
active enum('1','0') NOT NULL default '1',
PRIMARY KEY (id),
UNIQUE KEY alias (alias,rcpt)
) TYPE=MyISAM COMMENT='Здесь хранится информация о синонимах';
CREATE TABLE transport (
id int(11) NOT NULL auto_increment,
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
create_date datetime NOT NULL default '0000-00-00 00:00:00',
change_date datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
gid int(11) NOT NULL default '12',
PRIMARY KEY (domain),
KEY id (id)
) TYPE=MyISAM COMMENT='Здесь храниться информация об обслуживаемых доменах';
Cyrus-SASL
Немногим сложнее MySQL. Качаем, распаковываем, конфигурим, собираем, устанавливаем.
---
./configure --enable-login --with-mysql --with-openssl
make
make install
---
* прочтите файл doc/install.html, чтоб сделать
* все необходимые линки
Postfix
Качаем, распаковываем. Учтите, что собирается postfix с учетом окружения и ОС, под которой в дальнейшем будет работать. Читайте INSTALL-файл.
---
make tidy
make -f Makefile.init makefiles
"CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -I/usr/include/sasl"
"AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2"
make
...
make install
---
*уточните пути до библиотек в вашей системе
Настройка Postfix
Если кратко, только то, что касается MySQL.
--- /etc/postfix/main.cf ---
relay_domains = $transport_maps
transport_maps = mysql:/etc/postfix/transport.cf
virtual_alias_domains = $virtual_alias_maps
virtual_alias_maps = mysql:/etc/postfix/aliases.cf
virtual_gid_maps = mysql:/etc/postfix/gids.cf
virtual_mailbox_base = /
virtual_mailbox_domains = $virtual_mailbox_maps
virtual_mailbox_maps = mysql:/etc/postfix/users.cf
virtual_transport = virtual
virtual_uid_maps = mysql:/etc/postfix/uids.cf
--- EOF /etc/postfix/main.cf ---
--- /etc/postfix/users.cf ---
user = postfix
password = PASSWORD
dbname = mail
table = users
select_field = maildir
where_field = alias
additional_conditions = and active = "1"
hosts = unix:/var/run/mysql/mysql.sock
--- EOF /etc/postfix/users.cf ---
--- /etc/postfix/gids.cf ---
user = postfix
password = PASSWORD
dbname = mail
table = users
select_field = gid
where_field = alias
additional_conditions = and active = "1"
hosts = unix:/var/run/mysql/mysql.sock
--- EOF /etc/postfix/gids.cf ---
--- /etc/postfix/aliases.cf ---
user = postfix
password = PASSWORD
dbname = mail
table = aliases
select_field = rcpt
where_field = alias
additional_conditions = and active = "1"
hosts = unix:/var/run/mysql/mysql.sock
--- EOF /etc/postfix/aliases.cf ---
--- /etc/postfix/transport.cf ---
user = postfix
password = PASSWORD
dbname = mail
table = transport
select_field = transport
where_field = domain
additional_conditions = and active = "1"
hosts = unix:/var/run/mysql/mysql.sock
--- EOF /etc/postfix/transport.cf ---
--- /etc/postfix/uids.cf ---
user = postfix
password = PASSWORD
dbname = mail
table = users
select_field = uid
where_field = alias
additional_conditions = and active = "1"
hosts = unix:/var/run/mysql/mysql.sock
--- EOF /etc/postfix/uids.cf ---
Вся информация по настройке Postfix подробно расписана в man-страницах и на домашнем сайте Postfix.
Расписывать установку и настройку Courier-imap, Drweb, SpamAssassin и Squirrelmail в этой статье нет смысла.
SMTP AUTH
Создайте файл /usr/lib/sasl2/smtpd.conf следующего содержания:
--- /usr/lib/sasl2/smtpd.conf ---
pwcheck_method: auxprop
mysql_user: postfix
mysql_passwd: PASSWORD
mysql_hostnames: localhost
mysql_database: mail
mysql_statement: select password from users where alias = "%u@%r"
--- EOF /usr/lib/sasl2/smtpd.conf ---
Это все.
Небольшая выжимка из README-файла.
- %u имя пользователя до @, под которым логинятся.
- %p особенность запроса, механизм идентификации.
- %r все что за @, т.е. имя домена.
Я специально не расписывал возможные ошибки. Все они обязательно проявятся (если будут) и отобразятся в лог-файлах. Просто внимательно читайте, что вам пишут. С радостью отвечу на все вопросы по электронной почте, пишите.