|  |    www.lissyara.su—> статьи—> FreeBSD—> почтовые системы—> Postfix + LDAP
 
 Postfix + SASL + LDAP + Courier-IMAP + SSL
Автор: fr33man.
 
   Обновленная версия статьи лежит здесь.
 
 Потребовалось настроить почтовую систему для моего домена. Причем нужно было, как то связать почтовый сервер и базу LDAP, так как в LDAP
 хранилась вся информация о пользователях. Пошарив инет, я нашел, то что меня интересовало в первую очередь — схема для ldap сервера(в принципе
 можно и самому написать было, но лень :))) После этого, выбрав в качестве MTA Postfix, я быстренько все настроил, и чтобы не забыть как я все
 это сделал, решил написать how-to.
 Еще немного, про софт, который я использую:
 cyrus-sasl используется postfix'ом для авторизации пользователей.
 LDAP — база данных, где храниться информация о пользователях
 Postfix — MTA, программа, которая и будет отсылать/принимать сообщения и расскладывать их в ящики пользователей
 Courier-imap — MUA, программа, которая позволяет забрать письма пользователю с сервера.
 Для начала советую прочесть данную статью.
 Итак, приступим к установке и настройке.
 
 Сначала, необходимо произвести изменения на стороне LDAP сервера. Качаем схемку для почты здесь и кладем ее в
 /usr/local/etc/openldap/schema/mail.schema. Это схема от qmail, но она подойдет.
 Вносим изменения в slapd.conf, добавляем:
 
 
		
| 
include         /usr/local/etc/openldap/schema/mail.schema
 |  После этого перезапускаем slapd. Теперь необходимо поглумиться над пользователми и добавить каждому новый класс и пару аттрибутов.У меня 81 пользователь и мне было лень добавлять аттрибуты вручную, поэтому я написал такой скриптик:
 
 
		
| 
#!/usr/bin/perl
# Открываем файл с юзверями
open(USERS, "<users" );
# и читаем все в массив
@all = <USERS>;
# Закрываем файлик
close(USERS);
foreach $user (@all)
{
# Удаляем символы \n в имени юзера
        chomp($user);
# Создаем ldif файл для пользователя
        open(LDIF, ">/tmp/".$user.".modify.ldif");
# Описываем ldif файл
        print LDIF "dn: cn=".$user.",ou=users,dc=l1523,dc=ru\n";
        print LDIF "changetype: modify\n";
        print LDIF "add: objectClass\n";
        print LDIF "objectCLass: qmailUser\n";
        print LDIF "-\n";
        print LDIF "add: mail\n";
        print LDIF "mail: ".$user."\@mail.teachers\n";
        print LDIF "-\n";
        print LDIF "add: mailMessageStore\n";
        print LDIF "mailMessageStore: ".$user."/\n";
        print LDIF "-\n";
        print LDIF "add: mailQuotaSize\n";
        print LDIF "mailQuotaSize: 10485760\n";
        print LDIF "-\n";
        close(LDIF);
# Вносим изменения в директории LDAP
        system("/usr/local/bin/ldapmodify -x -D \"cn=root,dc=l1523,dc=ru\" 
        -w ROOT_PASSWORD -f /tmp/".$user.".modify.ldif");
# удаляем временный файл
        system("rm -rf /tmp/".$user.".modify.ldif");
}
 |  Для корректной работы, необходимо занести в users всех пользователей, которым необходимо добавить аттрибуты. Делается это например так:
 
 
		
| 
spider@/home/fr33man/> ldapsearch -LLL -b 'ou=users,dc=l1523,dc=ru' \
? -x '(|(cn=*)(uid=*))' | \
? grep dn: | awk '{print $2}' | cut -f 2 -d "=" | cut -f 1 -d "," > users
spider@/home/fr33man/>
 |  Теперь можно запускать скриптик. После этого, можно посмотреть изменения:
 
 
		
| 
spider@/home/fr33man/> ldapsearch -LLL -x -b 'dc=l1523,dc=ru' \
?  'uid=fr33man' | grep mail
objectClass: qmailUser
mailAlternateAddress: root@mail.teachers
mail: fr33man@mail.teachers
mailMessageStore: fr33man/
mailQuotaSize: 10485760
spider@/home/fr33man/>
 |  Да, как видите, тут присутствует еще один аттрибут: mailAlternateAddress, это alias для моего ящика. То есть письма для root@mail.teachers будутидти на адресс fr33man@mail.teachers. Это добавил я, а не скрипт. Все, на стороне LDAP сервера изменения внесены. Теперь переходим непосредственно
 к настройке mail сервера.
 
 Первым делом, как всегда, обновляем порты, и ставим cyrus-sasl2:
 
 
		
| 
mail@/> cd /usr/ports/security/cyrus-sasl2-saslauthd/
mail@/usr/ports/security/cyrus-sasl2-saslauthd> make -DWITH_OPENLDAP install clean
... skipped ...
mail@/usr/ports/security/cyrus-sasl2-saslauthd>
 |  Теперь составим конфиг для sasl:
 
 
		
| 
mail@/> cd /usr/local/lib/sasl2/
mail@/usr/local/lib/sasl2> cat smtpd.conf
pwcheck_method: saslauthd
mech_list: CRAM-MD5 DIGEST-MD5 PLAIN LOGIN
log_level: 3
mail@/usr/local/lib/sasl2>
 |  Осталось запустить saslauthd:
 
 
		
| 
mail@/usr/local/lib/sasl2> echo saslauthd_enable=\"YES\" >> /etc/rc.conf
mail@/usr/local/lib/sasl2> echo saslauthd_flags=\"-a ldap\" >> /etc/rc.conf
mail@/usr/local/lib/sasl2> /usr/local/etc/rc.d/saslauthd.sh start
Starting saslauthd.
mail@/usr/local/lib/sasl2> ps ax | grep sasl
15036  ??  Ss     0:00,01 /usr/local/sbin/saslauthd -a ldap
15037  ??  S      0:00,00 /usr/local/sbin/saslauthd -a ldap
15038  ??  S      0:00,00 /usr/local/sbin/saslauthd -a ldap
15039  ??  S      0:00,00 /usr/local/sbin/saslauthd -a ldap
15040  ??  S      0:00,00 /usr/local/sbin/saslauthd -a ldap
15042  p2  R+     0:00,00 grep sasl
mail@/usr/local/lib/sasl2>
 |  Усе, с sasl'ом разобрались. Идем дальше — postfix:
 
 
		
| 
mail@/> cd /usr/ports/mail/postfix
mail@/usr/ports/mail/postfix> make config
     ---------------------------------------------------------------------¬
     ¦                   Options for postfix 2.3.4,1                      ¦
     ¦ -----------------------------------------------------------------¬ ¦
     ¦ ¦[X] PCRE      Perl Compatible Regular Expressions               ¦ ¦
     ¦ ¦[ ] SASL      Cyrus SASLv1 (Simple Auth. and Sec. Layer)        ¦ ¦
     ¦ ¦[X] SASL2     Cyrus SASLv2 (Simple Auth. and Sec. Layer)        ¦ ¦
     ¦ ¦[ ] DOVECOT   Dovecot SASL authentication method                ¦ ¦
     ¦ ¦[ ] SASLKRB   If your SASL req. Kerberos select this option     ¦ ¦
     ¦ ¦[ ] SASLKRB5  If your SASL req. Kerberos5 select this option    ¦ ¦
     ¦ ¦[ ] SASLKMIT  If your SASL req. MIT Kerberos5 select this option¦ ¦
     ¦ ¦[X] TLS       Enable SSL and TLS support                        ¦ ¦
     ¦ ¦[ ] BDB       Berkeley DB (choose version with WITH_BDB_VER)    ¦ ¦
     ¦ ¦[ ] MYSQL     MySQL maps (choose version with WITH_MYSQL_VER)   ¦ ¦
     ¦ ¦[ ] PGSQL     PostgreSQL maps (choose with DEFAULT_PGSQL_VER)   ¦ ¦
     ¦ ¦[X] OPENLDAP  OpenLDAP maps (choose ver. with WITH_OPENLDAP_VER)¦ ¦
     ¦ ¦[ ] CDB       CDB maps lookups                                  ¦ ¦
     ¦ ¦[ ] NIS       NIS maps lookups                                  ¦ ¦
     ¦ ¦[X] VDA       VDA (Virtual Delivery Agent)                      ¦ ¦
     ¦ ¦[ ] TEST      SMTP/LMTP test server and generator               ¦ ¦
     +-L----v(+)----------------------------------------------------------+
     ¦                       [  OK  ]       Cancel                        ¦
     +---------------------------------------------------------------------
mail@/> make install clean
... skipped ...
mail@/usr/ports/mail/postfix> rehash
 |  Составляем конфиг для postfix:
 
		
| 
# От меня. )) 
# Сразу оговорюсь, конфиг составлял не я, а мой хороший друг Alex_hha
# Оригинал его статьи и его конфиг можно увидеть здесь:
# http://turbogaz.kharkov-ua.com/unix/mail/mail-howto-p1.php
# Мое описание тут только о LDAP и еще несколько строк, о которых я скажу
# Так что копирайт конфига не мой. )) Все дружно благодарим Алексея.
#
# /usr/local/etc/postfix/main.cf
#
# LOCAL PATHNAME INFORMATION
#
# Указываем месторасположения директории очереди postfix. Также данная
# директория является корнем, когда postfix запускается в chroot окружении.
queue_directory = /var/spool/postfix
# Задает месторасположение всех postXXX команд (postmap, postconf, postdrop)
command_directory = /usr/local/sbin
# Задает месторасположение всех программ демонов postfix. Это программы,
# перечисленные в файле master.cf. Владельцем этой директории должен быть root
daemon_directory = /usr/local/libexec/postfix
# QUEUE AND PROCESS OWNERSHIP
#
# Задает владельца очереди postfix, а также большинства демонов postfix.
# В целях безопасности, необходимо использовать выделенную учетную запись.
# Т.е. от данного пользователя не должны запускаться какие-либо процессы
# в системе, а также он не должен являться владельцем каких-либо файлов.
mail_owner = postfix
# Права по умолчанию, использующиеся local delivery agent. Не указывайте
# здесь привилегированного пользователя или владельца postfix.
default_privs = nobody
# INTERNET HOST AND DOMAIN NAMES
#
# Задает имя хоста в формате FQDN. По умолчанию, используется значение,
# возвращаемой функцией gethostname().
myhostname = mail.teachers
# Задает имя нашего домена. По умолчанию используется значение $myhostname
# минус первый компонент.
mydomain = mail.teachers
# SENDING MAIL
#
# Данный параметр указывает имя домена, которое используется при отправлении
# почты с этой машины. По умолчанию, используется имя локальной машины -
# $myhostname. Для согласованности между адресами отправителя и получателя,
# myorigin также указывает доменное имя, которое добавляется к адресу
# получателя для которого не указана доменная часть.
# myorigin = $myhostname (отправлять письма от: "alex@freebsd.turbogaz.net")
# myorigin = $mydomain (отправлять письма от: "alex@turbogaz.net")
myorigin = $mydomain
# RECEIVING MAIL
#
# Указывает адреса сетевых интерфейсов, на которых будет принимать почту
# наша почтвая система. По умолчанию используются все активные интерфейсы
# на машине. При изменении этого праметра необходимо перезапустить postfix
inet_interfaces = all
# Данный параметр указывет список доменов, для которых почта будет доставляться
# локально, а не пересылаться на другой хост.
mydestination = localhost.$mydomain, localhost
# REJECTING MAIL FOR UNKNOWN LOCAL USERS
#
# Указывает код ответа SMTP сервера для несуществующих пользователей
unknown_local_recipient_reject_code = 550
# TRUST AND RELAY CONTROL
#
# Данный параметр задает список "доверенных" клиентов, которые обладают
# некоторыми привилегиями. В частности доверенным SMTP клиентам дозволено
# пересылать почту через postfix. Если вы не доверяете никому, то оставьте
# только 127.0.0.0/8
mynetworks = 127.0.0.0/8
# ALIAS DATABASE
#
# Данный параметр указывает список алиасов, используемый local delivery agent
alias_maps = hash:/etc/mail/aliases
# JUNK MAIL CONTROLS
#
# The controls listed here are only a very small subset. The file
# SMTPD_ACCESS_README provides an overview.
# The header_checks parameter specifies an optional table with patterns
# that each logical message header is matched against, including
# headers that span multiple physical lines.
#
# By default, these patterns also apply to MIME headers and to the
# headers of attached messages. With older Postfix versions, MIME and
# attached message headers were treated as body text.
#
# For details, see "man header_checks".
#
#header_checks = regexp:/usr/local/etc/postfix/header_checks
# SHOW SOFTWARE VERSION OR NOT
#
# Желательно сообщать как можно меньше информации о нашем почтовом сервере ;)
# Согласно требованиям RFC вы должны указать $myhostname вначале текста
smtpd_banner = $myhostname mail server
# DEBUGGING CONTROL
#
# Задает уровень информативности, когда имя или адрес SMTP клиента
# или сервера соответствует шаблону заданному в параметре debug_peer_list.
# Следует использовать только во время отладки.
#debug_peer_level = 2
#debug_peer_list = 127.0.0.1
#debug_peer_list = teachers
# Это уже я писал, только про эту строчку.
# Захотелось получать сообщения ою ошибках на русском
# Если сообщения на русском не нужны, то закомментируйте данную строку
bounce_template_file = /usr/local/etc/postfix/bounce.cf
# RESTRICTIONS
#
# client, helo, sender, recipient, data, end-of-data
#
# Отклонять запрос, если хост не имеет в DNS A или MX записи.
#smtpd_helo_restrictions = reject_unknown_hostname
# Отклонять запрос, когда клиент посылает SMTP команду раньше времени.
smtpd_data_restrictions = reject_unauth_pipelining
# Отклонять команду ETRN
smtpd_etrn_restrictions = reject
# Заставляем отклонять почту с неизвестным адресом отправителя.
# Позволяет бороться с червями и некоторыми вирусами.
#smtpd_reject_unlisted_sender = yes
# Отключает SMTP команду VRFY. В результате чего, невозможно определить
# существование определенного ящика. Данная техника (применение команды
# VRFY) используется спамерами для сбора имен почтовых ящиков.
disable_vrfy_command = yes
# Требуем, чтобы удаленный SMTP клиент представлял себя
# в начале SMTP сессии с помощью команды HELO или EHLO.
smtpd_helo_required = yes
# Всегда отправлять EHLO вначале SMTP сессии
smtp_always_send_ehlo = yes
# Максимальное количество ошибок, которое может сделать удаленный SMTP клиент.
# При превышение данного числа Postfix отсоединится.
smtpd_hard_error_limit = 8
# Интервал времени в течение которого SMTP сервер Postfix должен послать ответ,
# а удаленный SMTP клиент получить запрос
smtpd_timeout = 30s
# Интервал времени, в течение которого SMTP клиент должен послать
# SMTP команду HELO или EHLO и получить ответ сервера.
smtp_helo_timeout = 15s
# Интервал времени, в течение которого SMTP клиент должен послать
# SMTP команду RCPT TO и получить ответ сервера.
smtp_mail_timeout = 15s
# Интервал времени, в течение которого SMTP клиент должен послать
# SMTP команду MAIL FROM и получить ответ сервера.
smtp_rcpt_timeout = 15s
# Включаем поддержку sasl аутентификации
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
# Необходимо для корректной работы клиентов, использующих устаревший
# метод AUTH, например outlook express
broken_sasl_auth_clients = yes
# Запрещаем анонимную авторизацию
smtpd_sasl_security_options = noanonymous
# Указываем, где postfix должен брать информацию о транспорте
transport_maps = hash:/usr/local/etc/postfix/transport.conf
# Указываем, где postfix должен брать информацию о алиасах
#virtual_alias_maps = mysql:/usr/local/etc/postfix/mysqlLookupMaps/alias.conf
# Указываем, где postfix должен брать информацию о доменах
virtual_mailbox_domains = $mydomain localhost localhosy.$mydomain
# Корень для почтовых сообщений
virtual_mailbox_base = /var/spool/mail/
# От меня. )
# Я не стал выносить конфиг для соединения с LDAP сервером
# в отдельный файл, поэтому все настройки будут в основном файле
# Указываем, где postfix должен брать информацию о почтовых ящиках
virtual_mailbox_maps = ldap:ldapvirtual
# Хост, на котором крутится LDAP
ldapvirtual_server_host = ldaps://spider.teachers/
# Порт на котором висит LDAP
ldapvirtual_server_port = 636
# Соединяться с сервером
ldapvirtual_bind = yes
# Версия протокола
# Очень долго мучился из-за этой опции
# Не хотело соединяться и все! 
# Кстати, есть альтернатива, можно в slapd.conf добавить:
# allow bind_v2
ldapvirtual_version = 3
# С какого объекта начинать поиск
ldapvirtual_search_base = ou=users,dc=l1523,dc=ru
# Ищем пользователя, у которого нужный нам почтовый адрес
ldapvirtual_query_filter = (mail=%s)
# Выхватываем информацию, о том, в какой директории лежит почта пользователя
ldapvirtual_result_attribute = mailMessageStore
# Описываем alias'ы.
virtual_alias_maps = ldap:ldapalias
# далее стандартные параметры. См выше для описания
ldapalias_server_host = ldaps://spider.teachers/
ldapalias_server_port = 636
ldapalias_bind = yes
ldapalias_version = 3
ldapalias_search_base = ou=users,dc=l1523,dc=ru
# Ищем пользователя, у которого есть альтернативный почтовый ящик
ldapalias_query_filter = (mailAlternateAddress=%s)
# Выхватываем настоящий ящик
ldapalias_result_attribute = mail
# Настраиваем поддержку квот
virtual_mailbox_limit_maps = ldap:ldapquota
ldapquota_server_host = ldaps://spider.teachers/
ldapquota_server_port = 636
ldapquota_bind = yes
ldapquota_version = 3
ldapquota_search_base = ou=users,dc=l1523,dc=ru
# Ищем пользователя, у которого нужный нам почтовый ящик
ldapquota_query_filter = (mail=%s)
# Хватаем размер maildir'а.
ldapquota_result_attribute = mailQuotaSize
# Относится к поддержке квот
virtual_maildir_extended=yes
virtual_mailbox_limit_override=yes
virtual_create_maildirsize = yes
virtual_overquota_bounce = yes
virtual_maildir_limit_message="Sorry, the user's maildir has 
overdrawn his diskspace quota, please try again later"
# Ограничиваем максимальный размер письма до 10Мб
message_size_limit = 10485760
# 1981 - uid и gid пользователя и группы virtual соответственно
virtual_gid_maps = static:1981
virtual_uid_maps = static:1981
virtual_minimum_uid = 1000
# Перенаправляем всю почту amavisd-new. Если вы еще не настроили amavisd,
# то пока закомментируйте эту строку. Иначе почтовая система не будет работать.
#content_filter=smtp-amavis:[127.0.0.1]:10024
# Параметры ssl
# Путь к Сертефикату
smtpd_tls_cert_file = /usr/local/etc/ssl/pop3d.pem
smtpd_tls_key_file = $smtpd_tls_cert_file
# Уровень отладки
smtpd_tls_loglevel = 1
# Использовать tls
smtpd_use_tls = yes
# Авторизация только по безопасному соединению
smtpd_tls_auth_only = yes
 |  На этом конфиг закончился. Выполняем необходимые действия, но не запускаем postfix, не забывайте, что нам нужно создать еще и сертефикат, а пока добаляем пользователя virtual и добавляем домен mail.teachers:
 
 
 
		
| 
mail@/> pw groupadd virtual -g 1981
mail@/> pw useradd virtual -u 1981 -g 1981
mail@/> id virtual
uid=1981(virtual) gid=1981(virtual) groups=1981(virtual)
mail@/> cd /usr/local/etc/postfix/
mail@/usr/local/etc/postfix> cat > transport.conf
mail.teachers   virtual
mail@/usr/local/etc/postfix> makemap hash transport.conf.db < transport.conf
mail@/usr/local/etc/postfix> ll transport.conf.db
-rw-r-----  1 root  wheel    16K 17 сен 19:33 transport.conf.db
mail@/> echo postfix_enable=\"YES\" >> /etc/rc.conf
mail@/> /usr/local/etc/rc.d/postfix.sh start
postfix/postfix-script: starting the Postfix mail system
mail@/>
 |  Теперь насчет русских сообщений об ошибках. Топаем в /usr/local/etc/postfix и копируем дефолтный конфиг для сообщений об ошибках:
 
 
		
| 
mail@/> cd /usr/local/etc/postfix/
mail@/usr/local/etc/postfix> cp bounce.cf.default bounce.cf
mail@/usr/local/etc/postfix>
 |  После этого можно редактировать bounce.cf, там все понятно без комментов, просто приведу пример для одного типа сообщений:
 bounce.cf
 
 
		
| 
... skipped ...
failure_template = <<EOF
Charset: koi8-r
From: MAILER-DAEMON (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
Postmaster-Subject: Postmaster Copy: Undelivered Mail
Это сообщение было сгенерировано почтовой системой, $myhostname.
Ваше сообщение не может быть доставлено, из-за следующей проблемы:
EOF
... skipped ...
 |  Теперь переходим к установке courier-imap. Сначала ставим courier-authlib:
 
		
| 
mail@/> cd /usr/ports/security/courier-authlib
mail@/usr/ports/security/courier-authlib> make config
     ---------------------------------------------------------------------¬
     ¦                Options for courier-authlib 0.58_2                  ¦
     ¦ -----------------------------------------------------------------¬ ¦
     ¦ ¦        [ ] GDBM         Use gdbm instead of system bdb         ¦ ¦
     ¦ ¦        [X] AUTH_LDAP    LDAP support                           ¦ ¦
     ¦ ¦        [ ] AUTH_MYSQL   MySQL support                          ¦ ¦
     ¦ ¦        [ ] AUTH_PGSQL   PostgreSQL support                     ¦ ¦
     ¦ ¦        [ ] AUTH_USERDB  Userdb support                         ¦ ¦
     ¦ ¦        [ ] AUTH_VCHKPW  Vpopmail/vchkpw support                ¦ ¦
     ¦ ¦                                                                ¦ ¦
     +-L------------------------------------------------------------------+
     ¦                       [  OK  ]       Cancel                        ¦
     L---------------------------------------------------------------------
mail@/usr/ports/security/courier-authlib> make install clean
... skipped ...
mail@/usr/ports/security/courier-authlib>
 |  Теперь переходим непосредственно к настройке:
 /usr/local/etc/authlib/authdaemonrc:
 
 
		
| 
# Список модулей авторизации
authmodulelist="authldap"
authmodulelistorig="authldap"
# Количество запускаемых демонов
daemons=5
authdaemonvar=/var/run/authdaemond
subsystem=mail
# Уровень отладки
DEBUG_LOGIN=2
DEFAULTOPTIONS="wbnodsn=1"
LOGGEROPTS=""
 |  /usr/local/etc/authlib/authldaprc:
 
		
| 
# Хост LDAP сервера
LDAP_URI                ldaps://spider.teachers/
# Версия протокола
LDAP_PROTOCOL_VERSION   3
# Корень LDAP сервера
LDAP_BASEDN             dc=l1523,dc=ru
# Под кем соединяться
LDAP_BINDDN             cn=root,dc=l1523,dc=ru
# Пароль для соединения
LDAP_BINDPW             9vpIj9
# Timeout соединения
LDAP_TIMEOUT            5
# Соединяемся с сервером
LDAP_AUTHBIND           1
# Директива, в которой храниться название почтового ящика пользователя
LDAP_MAIL               mail
# Домен
LDAP_DOMAIN             mail.teachers
# Под кем работаем
LDAP_GLOB_UID           1981
LDAP_GLOB_GID           1981
# Домащняя директория пользователя
LDAP_HOMEDIR            mailMessageStore
# Корень, где храниться почта
LDAP_MAILROOT        /var/spool/mail
# Имя пользователя храниться в cn
LDAP_FULLNAME           cn
# Защифрованный пароль пользователя храниться в UserPassword
LDAP_CRYPTPW            userPassword
LDAP_DEREF              never
LDAP_TLS                0
 |  Запускаем:
 
 
		
| 
mail@/> echo courier_authdaemond_enable=\"YES\" >> /etc/rc.conf
mail@/> /usr/local/etc/rc.d/courier-authdaemond.sh start
Starting courier_authdaemond.
mail@/>
 |  Теперь переходим к настройке courier-imap:
 
 
		
| 
mail@/> cd /usr/ports/mail/courier-imap/
mail@/usr/ports/mail/courier-imap> make config
     ---------------------------------------------------------------------¬
     ¦                 Options for courier-imap 4.1.1,1                   ¦
     ¦ -----------------------------------------------------------------¬ ¦
     ¦ ¦     [X] OPENSSL      Build with OpenSSL support                ¦ ¦
     ¦ ¦     [ ] FAM          Build in fam support for IDLE command     ¦ ¦
     ¦ ¦     [ ] DRAC         Build in DRAC support                     ¦ ¦
     ¦ ¦     [X] TRASHQUOTA   Include deleted mails in the quota        ¦ ¦
     ¦ ¦     [ ] GDBM         Use gdbm db instead of system bdb         ¦ ¦
     ¦ ¦     [ ] IPV6         Build with IPv6 support                   ¦ ¦
     ¦ ¦     [X] AUTH_LDAP    LDAP support                              ¦ ¦
     ¦ ¦     [ ] AUTH_MYSQL   MySQL support                             ¦ ¦
     ¦ ¦     [ ] AUTH_PGSQL   PostgreSQL support                        ¦ ¦
     ¦ ¦     [ ] AUTH_USERDB  Userdb support                            ¦ ¦
     ¦ ¦     [ ] AUTH_VCHKPW  Vpopmail/vchkpw support                   ¦ ¦
     +-L------------------------------------------------------------------+
     ¦                       [  OK  ]       Cancel                        ¦
     L---------------------------------------------------------------------
mail@/usr/ports/mail/courier-imap> make install clean
... skipped ...
mail@/usr/ports/mail/courier-imap>
 |  Создаем конфиг для скрипта создания сертефиката
 
 
		
| 
mail@/> cp /usr/local/etc/courier-imap/pop3d.cnf.dist \
? /usr/local/etc/courier-imap/pop3d.cnf 
 |  /usr/local/etc/courier-imap/pop3d.cnf:
 
 
		
| 
RANDFILE = /dev/random
[ req ]
default_bits = 2048
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no
[ req_dn ]
C=RU
ST=NA
L=Moscow
O=Mail Server
OU=SSL Key
CN=mail.teachers
emailAddress=root@mail.teachers
[ cert_type ]
nsCertType = server
 |  Ну и создаем сам сертефикат:
 
 
		
| 
mail@/> cd /usr/local/share/courier-imap/
mail@/usr/local/share/courier-imap>
mail@/usr/local/share/courier-imap> ll
total 8
drwxr-xr-x   2 root  wheel   512B  1 окт 21:38 .
drwxr-xr-x  33 root  wheel   1,0K 30 окт 00:01 ..
-rwxr-xr-x   1 root  wheel   1,4K 17 сен 17:03 mkimapdcert
-rwxr-xr-x   1 root  wheel   1,4K 17 сен 17:03 mkpop3dcert
mail@/usr/local/share/courier-imap> ./mkpop3dcert
Generating a 2048 bit RSA private key
..............................+++
...........+++
writing new private key to '/usr/local/share/courier-imap/pop3d.pem'
-----
512 semi-random bytes loaded
Generating DH parameters, 512 bit long safe prime, generator 2
This is going to take a long time
....................+..................................+...
....+.......+..............................................
+..........................................................
......................+........+..........+.+..............
......+.........................................+.+...
.+........................+........+..........+
..................................................................
....+.......+...+.....................+......+.........+.....+..
.+........+..................................
....................+....+...............
..........................+................
.........................+.................
.......+......+...............++*++*++*++*++*++*
subject= /C=RU/ST=NA/L=Moscow/O=Mail Server/OU=SSL Key/
CN=mail.teachers/emailAddress=root@mail.teachers
notBefore=Nov  9 19:05:09 2006 GMT
notAfter=Nov  9 19:05:09 2007 GMT
MD5 Fingerprint=11:5C:84:6A:6B:9A:AB:B0:24:34:61:18:53:FE:CE:A4
mail@/usr/local/share/courier-imap>
 |  Теперь настраиваем imapd-ssl, /usr/local/etc/courier-imap/imapd-ssl, я ничего не менял, кроме:
 
		
| 
# На каком адресе висим
SSLADDRESS=192.168.1.245
# Путь к сертефикату
TLS_CERTFILE=/usr/local/etc/ssl/pop3d.pem
# Maildir находится в home directory
MAILDIRPATH=.
 |  Теперь, можно запускать это все добро:
 
 
		
| 
mail@/> echo courier_imap_imapd_ssl_enable=\"YES\" >> /etc/rc.conf
mail@/> /usr/local/etc/rc.d/courier-imap-imapd-ssl.sh start
Starting courier_imap_imapd_ssl.
mail@/> /usr/local/etc/rc.d/postfix.sh start
postfix/postfix-script: starting the Postfix mail system
mail@/>
 |  Усе, все запустилось, смотрим логи:
 
 
		
| 
mail@/> tail -2 /var/log/maillog
Nov  9 23:13:23 mail postfix/postfix-script: starting the Postfix mail system
Nov  9 23:13:23 mail postfix/master[27388]: daemon started -- version 2.3.3, 
configuration /usr/local/etc/postfix
mail@/>
 |  Теперь попробуем отправить почту пользователю fr33man@mail.teachers:
 
 
		
| 
spider@/> cat /etc/passwd | mail -s 'test' fr33man@mail.teachers
 |  Смотрим логи:
 
 
		
| 
mail@/> tail -0f /var/log/maillog
Nov  9 23:15:19 mail postfix/smtpd[27482]: connect from 
spider.teachers[192.168.1.250]
Nov  9 23:15:19 mail postfix/smtpd[27482]: setting up TLS 
connection from spider.teachers[192.168.1.250]
Nov  9 23:15:19 mail postfix/smtpd[27482]: TLS connection 
established from 
spider.teachers[192.168.1.250]: TLSv1 with cipher 
DHE-RSA-AES256-SHA (256/256 bits)
Nov  9 23:15:20 mail postfix/smtpd[27482]: 03173CF02D: 
client=spider.teachers[192.168.1.250]
Nov  9 23:15:20 mail postfix/cleanup[27487]: 03173CF02D: 
message-id=<200611092015.kA9KFU2p050904@spider.teachers>
Nov  9 23:15:20 mail postfix/qmgr[27390]: 03173CF02D: 
from=<fr33man@spider.teachers>, size=2327, nrcpt=1 (queue active)
Nov  9 23:15:20 mail postfix/smtpd[27482]: disconnect 
from spider.teachers[192.168.1.250]
Nov  9 23:15:20 mail postfix/virtual[27488]: 03173CF02D: 
to=<fr33man@mail.teachers>, relay=virtual, 
delay=0.32, delays=0.2/0.06/0/0.07, dsn=2.0.0, 
status=sent (delivered to maildir)
Nov  9 23:15:20 mail postfix/qmgr[27390]: 03173CF02D: 
removed
^C
mail@/>
 |  Отправлено, это хорошо. Теперь попробуем принять почту:
 
 
		
| 
mail@/> tail -0f /var/log/maillog
Nov  9 23:16:52 mail authdaemond: Authenticated: 
sysusername=<null>, sysuserid=1981, sysgroupid=1981, 
homedir=/var/spool/mail/fr33man/, address=fr33man, 
fullname=fr33man, maildir=<null>, quota=10485760, options=<null>
Nov  9 23:16:52 mail authdaemond: Authenticated: clearpasswd=xa)), 
passwd={SSHA}SdlcxiAqmSIBXiyBSFXf7WYsdbyhEfT1
Nov  9 23:16:52 mail imapd-ssl: LOGIN, user=fr33man, 
ip=[192.168.1.197], protocol=IMAP
^C
mail@/>
 |  Усе работает. Кстати, квоты тоже работают. Сейчас пытаюсь прикрутить maildrop в качестве транспорта. Так что скоро ждите новой статьи. ))
 
 
 размещено: 2006-11-09,последнее обновление: 2007-01-31,
 автор: fr33man
 
 |  | 
	
Комментарии пользователей [14 шт.]