Установка почтового сервера Postfix c Cyrus IMAP
Здесь приведен один из рецептов построения почтового сервера на базе Postfix.
Перед его использованием, рекомендую прочитать о том, что такое вообще электронная почта.
Почтовая система в этом примере ориентирована на небольшое количество клиентов, примерно до 300 ящиков. Впрочем, данную систему можно доработать введением различных почтовых фильтров "милтеров" (Spamassassin, ClamAV, GrayList), добавлением веб-интерфейса (Ilohamail) для пользователей и администратора. В итоге эффективность такого решения можно повысить до 2000 почтовых ящиков.
Как вы уже поняли, в качестве SMTP сервера здесь используется Postfix.
В качестве POP3 / IMAP4 сервера используется Cyrus IMAP.
Информация о почтовых ящиках хранится в MySQL.
Для авторизации используется библиотека из API Cyrus SASL.
Установка производилась на Linux Slackware 10.2. Предполагается, что MySQL уже установлен с префиксом /usr.
В этом примере почтовый сервер обслуживает домен deus.ru, все почтовые ящики имеют вид - name@deus.ru.
Заведение специальных пользователей
Перед установкой нужно добавить в систему (см. adduser) следующих пользователей:
postfix
cyrus
И следующие группы (см. groupadd):
postfix
postdrop
cyrus
Cyrus SASL 2.1.21
Устанавливаем c использованием команд:
# ./configure --prefix=/usr --enable-plain --enable-login --enable-sql --with-plugindir=/usr/lib/sasl2 --with-mysql=/usr
# make
# make install
Cyrus IMAP 2.2.12
Устанавливаем c использованием команд:
# ./configure --prefix=/usr --with-cyrus-user=cyrus --with-cyrus-group=cyrus --with-sasl=/usr/lib/sasl2 --without-bdb
# make
# make install
Мой конфиг /etc/imapd.conf:
admins: admin
allowallsubscribe: 0
allowanonymouslogin: 0
allowapop: 1
allownewnews: 0
allowplaintext: 1
allowusermoves: 0
altnamespace: 0
annotation_db: skiplist
autocreatequota: 0
client_timeout: 10
configdirectory: /var/imap
defaultacl: admin password
defaultdomain: deus.ru
duplicate_db: skiplist
partition-default: /var/spool/imap
ptscache_db: skiplist
deleteright: c
foolstupidclients: 0
seenstate_db: skiplist
subscription_db: skiplist
tlscache_db: skiplist
implicit_owner_rights: lca
lmtp_downcase_rcpt: 1
lmtp_over_quota_perm_failure: 1
loginuseacl: 0
logtimestamps: 1
maxmessagesize: 0
mboxlist_db: skiplist
plaintextloginpause: 1
poptimeout: 10
popuseacl: 0
postmaster: postmaster
quota_db: skiplist
quotawarn: 95
reject8bit: 0
servername: deus.ru
virtdomains: off
# Далее - как и куда будет авторизовать пользователей Cyrus SASL
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sql
sasl_sql_engine: mysql
sasl_mech_list: plain login
sasl_sql_user: mail
sasl_sql_passwd: password
sasl_sql_database: mail
sasl_sql_hostnames: localhost
sasl_sql_select: SELECT password FROM users WHERE uname = LOWER(’%u@%r’) AND enable = 1
sasl_log_level: 255
После установки необходимо создать две директории, принадлежащие пользователю cyrus:
/var/imap
/var/spool/imap
Затем, перейдя командой su cyrus под пользователя cyrus, запустить скрипт из исходников:
$ tools/mkimap
который создаст структуру папок внутри /var/imap. Но структура будет пустой, без ящков. Для создания конкретных ящиков пользуйтесь интерактивной утилитой cyradm из комплекта cyrus.
Postfix 2.2.9
Устанавливаем c использованием команд:
# 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
Мой конфиг /etc/postfix/master.cf:
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = mail.deus.ru
mydomain = deus.ru
myorigin = $mydomain
mydestination = $myhostname, localhost, $mydomain
# Инфа о ящиках здесь берется из MySQL
virtual_mailbox_maps=mysql:/etc/postfix/mysql/virtual-mailbox-map.cf
unknown_local_recipient_reject_code = 550
mynetworks_style = subnet
# Сети, которым можно использовать мой smtp для relay
mynetworks = 192.168.1.0/24, 192.168.0.0/24, 127.0.0.0/8
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions= permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_application_name = smtpd
alias_maps = dbm:/etc/mail/aliases
alias_maps = hash:/etc/mail/aliases
# Откуда брать альясы для ящиков
virtual_alias_maps=mysql:/etc/postfix/mysql/virtual-alias.cf
alias_database = dbm:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases
# В качестве агента доставки используем cyrus imap
mailbox_transport = cyrus
virtual_transport = cyrus
fallback_transport = cyrus
# Это вид приветствия почтового сервера
smtpd_banner = $myhostname ESMTP $mail_name
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /etc/postfix
readme_directory = no
В файле /etc/postfix/master.cf должна содержаться строка:
cyrus unix - n n - - pipe
user=cyrus argv=/usr/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
Для обращения к MySQL нужны следующие конфиги:
/etc/postfix/mysql/virtual-mailbox-map.cf:
user = mail
password = password
dbname = mail
table = users
select_field = uname
where_field = uname
additional_conditions = and enable = 1
hosts = localhost
/etc/postfix/mysql/virtual-alias.cf:
user = mail
password = password
dbname = mail
table = users
select_field = alias
where_field = uname
additional_conditions = and enable =1 and isnull(alias)=0
hosts = localhost
MySQL (версия 3 или 4)
Дамп базы "mail":
CREATE TABLE `users` (
`uid` int(32) NOT NULL auto_increment,
`uname` char(255) NOT NULL default ’’,
`password` char(255) NOT NULL default ’’,
`alias` char(255) default NULL,
`descr` char(255) default ’No Description’,
`enable` enum(’1’,’0’) default ’0’,
PRIMARY KEY (`uid`),
KEY `uname` (`uname`)
);
Данные (ящики admin@deus.ru и test@deus.ru):
INSERT INTO `users` VALUES (1, ’admin’, ’password’, NULL, ’Mail Admin’, ’1’);
INSERT INTO `users` VALUES (2, ’test’, ’test’, NULL, ’Just test’, ’1’);
Запуск и остановка
Для запуска почтовой системы нужно последовательно выполнить:
# /usr/local/bin/master -d
# /usr/sbin/postfix start
Для остановки:
# /usr/sbin/postfix stop
# killall master
Ваши предложения и замечания направляйте через обратную связь.
©Deus 17.03.2006
|