FreeSource: StepnovAndrey

Почтовая система на базе postfix, cyrus-imap, mysql, web-cyradm, cyrus-sasl2.

В данной статье рассматривается установка почтовой системы на базе Alt Linux Server 4.0.1. Достаточно подробно описывается каждый этап настройки компонентов системы, в основном актуальных для Alt Linux, но по моему мнению эта информация будет полезна и пользователям (администраторам) других дистрибутивов.

mySQL— это центр нашей системы. Postfix и Cyrus используя демон saslauthd будут делать сюда запросы аутентификации. Postfix будет обращаться сюда, для определения информации необходимой для доставки. Система построенная с использованим mySQL является очень гибкой, производительной и удобной в администрировании.

Выбор МТА postfix был обусловлен тем, что это МТА Alt Linux по умолчанию. В принципе postfix является, по моему мнению, очень гибким и стабильным MTA .

Cyrus-imapd будет служить нам в качестве MDA... Почму? Потому что, по моему субъективному мнению, это самый стабильный MDA, он будет без ошибок взаимодействовать с библиотекой Cyrus-SASL2,он лёгок в настройке. А то что у него свой формат почтовых ящиков – это для меня не важно.

1.

Устанавливаем Mysql (My SQL-server 5.0.51-alt1):

apt-get install My SQL-server

Правим /var/lib/mysql/my.cnf

[mysqld]

old_passwords=1

Не стоит забывать что этот демон в chroot окружении

chroot=/var/lib/mysql

datadir=/db

bdb-logdir=/log

pid-file=/mysqld.pid

skip-locking

Закоментировал только одну строку

#skip-networking

socket=/mysql.sock

tmpdir=/tmp

user=mysql

Стартуем service mysqld start, и проверяем telnet localhost 3306, в ответ вы должны получить примерно следующее

telnet localhost 3306

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

4

5.0.510YPe.R2B,�!7,t'c<Bw Sx"=

Задаём пароль root настраиваем права доступа

mysqladmin -u root password 'pass'

mysql -u root -p

SELECT Host, User FROM mysql.user;

DELETE FROM mysql.user WHERE User = ;

DELETE FROM mysql.db WHERE User = ;

FLUSH PRIVILEGES;

В режиме отладки можно запускать mysql —log=filename что бы проследить все запросы в одном файле. Это очень полезно, когда например, конфигурируешь cyrus-sasl2.

Активируем My SQL на нужных уровнях запуска

chkconfig --level 345 mysqld on

Раз уж мы планируем управлять почтой через web интерфейс (web-cyradm), то целесообразным будет поставить и phpMyAdmin для управления mysql:

apt-get install apache2

apt-get install apache2-mod_php5

apt-get install phpMyAdmin-apache2-php5

Что бы закончить с установкой пакетов, связанных с web ставим и web-cyradm

apt-get install web-cyradm

в дополнение ко всему установленному, в нашу систему устанавливаются (по зависимостям) много других, важных пакетов, таких как pam-mysql — необходимый для работы демона аутентификации с My SQL.

Далее конфигурируем apache2... На нём нет смысла останавливаться подробно, учитывая то что статья о другом. Хотелось бы отметить только то, что желательно с phpMyadmin и web-cyradm работать по протоколу https с аутентификацией.

Убедившись, что apache стартует без ошибок, выполняем

chkconfig --level 345 httpd2 on

Теперь надо создать таблицы в которых будут хранится учётные записи пользователей их адреса, транспорты и пр. Что бы облегчить нам задачу разработчики наградили нас скриптами, которые можно увидеть в /usr/share/doc/web-cyradm/script. Далее — дело техники — правим скрипты (надо задать пароли) и выполняем (всё написано в README.ALT).

mysql -u root -p < /usr/share/doc/web-cyradm-0.5.4/scripts/insertuser_mysql.sql

mysql -u root -p mail < /usr/share/doc/web-cyradm-0.5.4/scripts/create_mysql.sql

Проверяем созданы ли таблицы.

Конфигурация My SQL закончена

2.

cyrus-sasl2 и cyrus-imapd

apt-get install cyrus-sasl2

apt-get install cyrus-imapd

apt-get install cyrus-imapd-utils

По умолчанию cyrus-sasl2 устанавливается с поддержкой LDAP. Но наша система работает с My Sql, поэтому отправляемся в /etc/sysconfig/saslauthd и правим:

OPTIONS="-a pam -n 0"

Всё, больше там ничего не должно быть.

Затем /etc/pam.d/imap /etc/pam.d/pop /etc/pam.d/smtp

#%PAM-1.0

#auth include system-auth

#account include system-auth

auth sufficient pam_mysql.so user=mail passwd=postcyrus host=localhost db=mail table=accountuser usercolumn=username passwdcolumn=password crypt=1 logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time

#auth sufficient pam_unix_auth.so

account required pam_mysql.so user=mail passwd=postcyrus host=localhost db=mail table=accountuser usercolumn=username passwdcolumn=password crypt=1 logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time

#account sufficient pam_unix_acct.so

Главное, что бы все строчки, кроме тех, которые относятся к pam_musql были ЗАКОММЕНТИРОВЫАНЫ! Иначе будет ошибка.

Проверяем

testsaslauthd -u cyrus -p postcyrus

0: OK “Success.”

Автозапуск

chkconfig --level 345 saslauthd on

На конфигурации cyrus-imapd останавливаться подробно не будем, приведу конфиги (комментированные строки удалены):

/etc/imap.conf

admins: test@test

allowapop: 0

allowplaintext: 1

annotation_db: skiplist

autocreatequota: 100000

createonpost: yes

autocreateinboxfolders: sent|junk|remove|recipient

autosubscribeinboxfolders: sent|junk|remove|recipient

configdirectory: /var/lib/imap

duplicate_db: skiplist

duplicatesuppression: 0

hashimapspool: 1

idlesocket: /var/lib/imap/socket/idle

imapidresponse: 0

lmtp_downcase_rcpt: 1

mboxlist_db: skiplist

partition-default: /var/spool/imap

poptimeout: 5

quotawarn: 90

quotawarnkb: 0

reject8bit: 0

sasl_pwcheck_method: saslauthd

sasl_mech_list: PLAIN LOGIN DIGEST-MD5 CRAM-MD5

seenstate_db: skiplist

sendmail: /usr/sbin/sendmail

servername: smtp.sakhsci.ru

sievedir: /var/lib/imap/sieve

subscription_db: flat

tls_cert_file: /etc/openssl/private/mail.crt

tls_key_file: /etc/openssl/private/mail.pem

tls_session_timeout: 15

username_tolower: 1

virtdomains: userid

/etc/cyrus.conf

START {

recover cmd="ctl_cyrusdb -r"

idled cmd="idled"
}

SERVICES {

imap cmd="imapd" listen="imap" prefork=5

imaps cmd="imapd -s" listen="imaps" prefork=1

pop3 cmd="pop3d" listen="pop3" prefork=3

pop3s cmd="pop3d -s" listen="pop3s" prefork=1

lmtpunix cmd="lmtpd" listen="/var/spool/postfix/public/lmtp" prefork=1

}

EVENTS {

checkpoint cmd="ctl_cyrusdb -c" period=30

delprune cmd="cyr_expire -E 3" at=0400

tlsprune cmd="tls_prune" at=0400

}

Проверяем

service cyrus-imapd start

Смотрим /var/log/messages — если нет ошибок

chkconfig --level 345 cyrus-imapd on

3.

web-cyradm

Смотрим права на sasldb2 (они должны быть такие же как в листинге)

ls -l /etc/sasl2/

total 20

-rw-r


1 root root 2519 Oct 17 14:36 saslauthd.conf -rw-rr 1 root sasl 12288 Feb 12 17:46 sasldb2

-rw-r


1 root root 23 Oct 17 14:36 saslpasswd.conf Если нет выполняем

chmod 0644 /etc/sasl2/sasldb2

Добавляем пользователя в sasldb2 (без этого не работает :))

saslpasswd2 cyrus

Пытаемся подключится к cyradm

cyradm --user cyrus localhost

Password:

<имя >.ru>

если увидели строку приветствия то переходим к конфигурации web-cyradm

Во первых разберёмся с правами. На папку ../web-cyradm/config права должны быть такие

drwxxx 2 root root 21 Feb 12 16:03 config

Права на conf.php в этой папке

-rw-rr 1 root root 3443 Feb 12 19:07 conf.php

Во вторых для работы этого инструмента необходим pear-db

apt-get install pear-DB

Правим ../web-cyradm/config/conf.php

я в них указал только пароли на пользователя cyrus и mail больше ничего не менял.

Всё, теперь проверяем

https://<name>.ru/webcyradm

Имя пользователя -admin — его пароль мы задавали на этапе создания таблиц в My SQL, в скрипте /usr/share/doc/web-cyradm-0.5.4/scripts/create_mysql.sql!!!

Это и есть администратор web-cyradm.

Вывод ошибок смотрите в /var/log/httpd2/error_log.

4.

Postfix

apt-get install postfix-mysql

apt-get install postfix-cyrus

По postfix много документации, укажу лишь параметры main.cf относящиеся к нашей системе и правил доступа:

#аутентификация – Cyrus-sasl2

##

#добавить сюда permin_mynetwork дл отключения аутентификации локальных юзверей

smtpd_sasl_auth_enable = yes

smtpd_sasl_type = cyrus

smtpd_sasl_path = smtpd

# Необходимо для корректной работы клиентов, использующих устаревший

# метод AUTH, например outlook express

broken_sasl_auth_clients = yes

smtpd_helo_restrictions = reject_unknown_helo_hostname, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname

smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient

_domain, reject_unauth_destination

smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_unknown_sender_domain

smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_unknown

_sender_domain, reject_rbl_client blackholes.mail-abuse.org, reject_rbl_client dialups.mail-abuse.org, reject_rbl_client dul.ru, reject_rbl_client list.dsbl.org, rej

ect_rbl_client sbl.spamhaus.org, reject_rbl_client cbl.abuseat.org, reject_rbl_client bl.spamcop.net, reject_rbl_client dnsbl.njabl.org, reject_rbl_client dynablock.

njabl.org, reject_rbl_client combined.njabl.org

#reject_unknown_client

#reject_rbl_client opm.blitzed.org, reject_rbl_client relays.ordb.org

smtpd_data_restrictions = reject_unauth_pipelining

strict_rfc821_envelopes = yes

disable_vrfy_command = yes

smtpd_helo_required = yes

virtual_maps = mysql:/etc/postfix/mysql-virtual.cf

alias_database = mysql:/etc/postfix/mysql-alias.cf

alias_maps = mysql:/etc/postfix/mysql-alias.cf

5.

Заключение

Вот основные действия, которые необходимо провести для настройки системы postfix, cyrus-imap, mysql, web-cyradm, cyrus-sasl2. В дополнение к этому необходимо будет установить amavis-new (с clamAV и spamassassin) для фильтрации почты на вирусы и спам. Данная система выстояла все тесты на «прочность» и используется в конкретной организации.

6.

Материал.

При написании данной статьи и насройки описываемой системы истользовались следующие ресурсы:

1. http://www.bog.pp.ru/

2. http://opennet.ru/

3. http://www.freesource.info/

4. http://lists.altlinux.org/