|
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 шт.]