Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  FreeBSD Mail Howto
  exim & dovecot
  exim & courier-imap
  squirrelmail
  exim + saslauthd + courier-imap
  postfix -> exim
  sendmail -> exim
  imapsync
  Postfix + LDAP
  maildrop & postfix
  DSPAM
  Exim + LDAP
  ISPmanager
  Backup MX
  exim + exchange
  exim + dovecot + win2003 AD
  RoundCube
  qmail-ldap + AD
  spamooborona
  exim&dovecot + fetchmail + SSL
  Postfix + DBMail
  Mailgraph
  smfsav
  Exim+PgSQL
  Postfix + Dovecot + Clamav + SpamAssasin + LDAP vs MYSQL
  Simplemail Admin
  MTA qmail full install
  OpenLDAP адресная книга
  POSTFIX Статистики
  Backup MX (exim)
  Exim + dovecot + PgSQL + web
  Exim+dovecot2+dspam
  Возможности Dovecot 2
  Dovecot2 configfiles RUS
  Почтовый сервер по шагам ч.1
  Почтовый сервер по шагам ч.2
  Почтовый сервер по шагам ч.3
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


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 в качестве транспорта. Так что скоро ждите новой статьи. ))



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=17503.

размещено: 2006-11-09,
последнее обновление: 2007-01-31,
автор: fr33man

оценить статью:

Морская Сова, 2007-03-06 в 22:42:49

Что-то я недопонял, а какой смысл в настройке:
myhostname = [color=blue]mail.teachers
mydomain = mail.teachers[/color]

??
т.е. имя машинки mail совпадает с именем домена?
не приведёт ли это к путанице, и зачем так делать?

LLIAMAY, 2007-03-15 в 15:18:49

Не вышло что-то с virtual_alias. Подумав, добавил
ldapvirtual_query_filter = (|(mailAlternateAddress=%s)(mail=%s))

Вроде тоже работает :)

swallowed, 2007-05-04 в 13:28:03

у меня что то вот ругнулся

Starting slapd.
/usr/local/etc/openldap/schema/mail.schema: line 37: AttributeType not found: "homeDirectory"

f0s, 2007-05-10 в 12:44:22

Соединение с сервером www.fr33man.ru сбой (Сервер не отвечает.)

artem, 2007-11-21 в 17:46:52

"Для начала советую прочесть данную статью."
ссылка не работает
http://turbogaz.kharkov-ua.com/unix/mail/mail-architech.php
и www.fr33man.ru тоже
Лиссяра помоги!

MDV, 2007-12-28 в 8:34:45

В smtpd.conf указаны механизмы
mech_list: CRAM-MD5 DIGEST-MD5 PLAIN LOGIN
Однако при наличии записи CRAM-MD5 в логах появляются варнинги:
Dec 28 13:05:39 mail postfix/smtpd[45754]: warning: SASL authentication failure: Could not open db
Dec 28 13:05:39 mail postfix/smtpd[45754]: warning: SASL authentication failure: Could not open db
Dec 28 13:05:39 mail postfix/smtpd[45754]: warning: SASL authentication failure: no secret in database
Dec 28 13:05:39 mail postfix/smtpd[45754]: warning: unknown[192.10.10.1]: SASL CRAM-MD5 authentication failed: authentication failure

А так и не понял, так и должно быть, или всё таки где-то, что-то нужно до править?

Плюс автор совсем забыл про конфиг sasluathd.conf

svol, 2008-12-22 в 15:55:11

ошибка в main.cf
вместо virtual_mailbox_base = /var/spool/mail/
нужно указывать virtual_mailbox_base = /var/spool/mail
(без завершающего слэша, если кто не понял)

sasl, 2009-02-27 в 18:22:33

Да, а меня то и не настроили как положено, в итоге я хрен работаю :)))

skliz, 2009-03-30 в 10:31:21

Подскажите плиз, а с двумя LDAP серверами работать будет, один постфикс обслуживает два домена и пересылает в разные ексченджи назодяжиеся в разных домен AD????

mavriq, 2009-06-01 в 12:07:13

- 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
+ ldapsearch -LLL -b 'ou=Users,dc=standart,dc=md' -x '(|(cn=*)(uid=*))' | grep dn: | sed -e 's/^dn. //' | cut -f 2 -d "=" | cut -f 1 -d "," > users
не надо забывать что cn могут содержать пробелы и awk разрывает его на 2-е части $2 и $3. вроде так правильней должно быть. незнаю почему раньше никто не заметил

krz, 2009-07-15 в 14:57:02

ссылочка на mail.schema не работает, где же теперь её брать

scompy, 2009-10-25 в 19:55:29

то.. ссылочку надобно починить !

scompy, 2009-10-26 в 0:33:31

рабочая схема qmail

марк, 2012-04-05 в 22:41:52

Для отключения пользователя, сделал такой файлик (подставте свои значения в скобках <>):

# cat disable.ldif
dn: uid=<USER>,ou=users,dc=<DOMAIN>,dc=<RU>
changetype: modify
replace: accountStatus
accountStatus: inactive


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli

Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master

MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-22, Mufanu
named 9.7.0

Система доменных имен (Domain Name Service, DNS) - одна из тех незаметных, закулисных программ, которым не уделяется и половины того внимания, которого они заслуживают.
2010-03-09, terminus
DNS zones

Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)

Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4

Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3

Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2

Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1

Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat

Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat

Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills

Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS

Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs

Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD

Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC

Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
ipfw nat

Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot

Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless

Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
2009-07-29, BAV_Lug
Видеонаблюдение

Настройка бюджетного варианта видеонаблюдения на удаленном объекте
2009-07-22, Cancer
OpenLDAP адресная книга

Настройка и создание адресной книги на базе OpenLDAP + phpLDAPadmin
2009-06-30, SergeySL
AimSniff

Руководство по созданию системы мониторинга ICQ-переписки на базе AimSniff, использующей базу данных MySQL для хранения и Web-интерфейс WAS (Web Aim Sniff) для просмотра перехваченных сообщений
2009-06-25, atrium
Управление правами доступа

Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX.
2009-06-16, DNK
Exim+PgSQL

Установка почтовой системы exim+pgsql на FreeBSD 7.1
2009-05-30, mvalery
HDD(mbr) -> HDD(gpt)

Как разбить диск размером более 2TB на разделы, сделать загрузочным, а затем перенести на него информацию с рабочей системы — донора.
2009-05-22, Cancer
SendXMPP

Отправка сообщений на Джаббер сервер по средствам SendXMPP
2009-05-11, Raven2000
Network UPS Tools

Network UPS Tools представляет собой набор программ, которые обеспечивают общий интерфейс для мониторинга и администрирование UPS оборудования.
2009-04-29, m0ps
IPSEC over GRE with RIP

Пример IPSEC over GRE и динамическим роутингом (RIP), с ADSL в качестве последней мили на оборудовании Cisco.
2009-04-24, WhiteBear777
qemu network

Появилась необходимость поставить на БСД эмулятор(qemu) и настроить в качестве гостевой ОС Windows XP, предоставив ей выход в локалку и в сеть internet...
2009-04-22, vp
freebsd + huawei 162 gsm modem

В статье описывается простой способ подключения модема huawei 162 к freebsd + первичная настройка smstools
2009-04-12, mvalery
Мониторинг RAID

Мониторинг из командной строки RAID компаний AMCC 3ware, HighPoint, Dell (Perc 5/i и PERC 6/i) и LSI (MegaRAID SAS 8408E и SAS1078)
2009-04-09, texnotronic
RAID1 via LAN

Функциональности DRBD во FreeBSD можно добиться примонтировав блочное устройство по сети при помощи GEOM Gate (ggate) и добавив его в зеркало с локальным диском средствами gmirror.
2009-04-03, Raven2000
Оптимизация хоста для CMS

В последнее время на старый и не очень быстрый ПК (Celeron 800 RAM 256) мною было навешано с десяток сайтов и некоторые были из серии тяжелых CMS. И так нам дано FreeBSD 7.1 и ~10 сайтов/CMS.
2009-04-01, atrium
VSFTPD + AD && MySQL

Настройка самого безопасного сервера FTP - vsftpd.
2009-03-31, Dron
Peoplenet + C-motech (3G)

Описание подключения к сети Peoplenet посредством 3G модема С-motech CCu-650U на FreeBSD
2009-03-25, lissyara
mod_auth_external

mod_auth_external - авторизация пользователей в apache c помощью внешней программы - например, системных пользователей.
2009-03-24, gx_ua
Lightsquid

Частично lightsquid может заменить sams: быстрая и простая инсталляция, быстрый парсер, cgi скрипт для динамической генерации отчета, нет привязки к БД, различные графические отчеты, мультиязычный инт
2009-03-18, LHC
Установка Zabbix-1.6

Установка и первоначальная настройка системы мониторинга Zabbix (версия 1.6)
2009-03-16, Cancer
Принт-Сервер Samba+LPD & AD

Простейшая настройка Принт-Сервера на FreeBSD используя Samba+LPD & AD
2009-03-04, Mad_caterpillar
ipsec_vpnc

Настройка VPN IPSec концентратора на FreeBSD 6.2 для клиента cisco с использованием ipsec-tools и авторизацией в активной директории
2009-02-18, Andy
Free-SA

Программа анализирует log файлы Squid'а и формирует по ним отчет.
2009-02-02, Cancer
Openfire Jabber Server

Установка Jabber сервера на примере Openfire
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 17 чел.
За последние 30 мин было: 70 человек
За сегодня было
5408 показов,
1017 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.2267 секунд
Из них PHP: 70%; SQL: 30%; Число SQL-запросов: 77 шт.
Исходный размер: 177760; Сжатая: 34571