DTop CMS - система управления контентом
Текущая версия: 3.4.1



© 2002-2013

Статья опубликована: 2011.07.08
Последние изменения: 2012.04.28

Exim + Courier-imap


В этой статье рассказано как на сервере под управлением FreeBSD установить и настроить Exim в качестве MTA и Courier-imap в качестве pop3- или imap-сервера.

  • Особенности реализации

    - информация о почтовых доменах и почтовых ящиках хранится в MySQL;
    - почтовые ящики хранятся на диске в /var/mail;
    - квота для каждого почтового ящика: 10 мегабайт;
    - работа с SMTP протоколом с защитой соединения при помощи TLS/SSL;
    - шифрование SMTP-пароля: CRAM-MD5;
    - работа с POP3 протоколом с защитой соединения при помощи TLS/SSL;
    - шифрование POP3-пароля: CRAM-MD5;
    - работа с IMAP протоколом с защитой соединения при помощи TLS/SSL;
    - шифрование IMAP-пароля: CRAM-MD5;
    - Exim полностью заменит MTA Sendmail, используемый по умолчанию в FreeBSD;
    - поддержка виртуальных почтовых доменов;


  • Использованные версии ПО:
    # uname -sr
    FreeBSD 8.2-RELEASE
    
    # pkg_info | grep exim
    exim-4.76
    
    # pkg_info | grep courier-imap
    courier-imap-4.9.3,2
    

  • Установка Exim

    /etc/make.conf
    PORTSDIR?=/usr/ports
    
    .if ${.CURDIR} == ${PORTSDIR}/mail/exim
    WITH_DEFAULT_CHARSET=UTF8
    LOG_FILE_PATH=/var/log/exim%s.log
    EXICYCLOG_MAX=10
    .endif
    

    Устанавливаем:
    # cd /usr/ports/mail/exim
    # make install clean
    

    Опции настроек:
    [ ] ALT_CONFIG_PREFIX  Restrict the set of configuration files
    [X] AUTH_CRAM_MD5      Enable CRAM-MD5 authentication mechanisms
    [ ] AUTH_DOVECOT       Enable Dovecot authentication mechanisms
    [ ] AUTH_PLAINTEXT     Enable plaintext authentication
    [ ] AUTH_RADIUS        Enable radius (RFC 2865) authentication
    [ ] AUTH_SASL          Enable use of Cyrus SASL auth library
    [ ] AUTH_SPA           Enable Secure Password Authentication
    [X] CDB                Enable CDB-style lookups
    [X] CONTENT_SCAN       Enable exiscan email content scanner
    [X] DAEMON             Install scripts to run as a daemon
    [ ] DCC                Enable DCC at ACL support via dccifd
    [ ] DEBUG              Build with debugging symbols
    [X] DISABLE_D_OPT      Disable macros overrides using option -D
    [X] DNSDB              Enable DNS-style lookups
    [X] DSEARCH            Enable directory-list lookups
    [X] EMBEDDED_PERL      Enable embedded Perl interpreter
    [ ] EXIMON             Build eximon monitor (require XFree86!)
    [X] ICONV              Enable header charset conversion
    [ ] IPV6               Enable IPv6 support
    [ ] KAS                Build with Kaspersky AntiSpam local scan
    [X] LMTP               RFC2033 SMTP over command pipe transport
    [X] LSEARCH            Enable wildcarded-file lookups
    [X] MAILDIR            Enable Maildir mailbox format
    [X] MAILSTORE          Enable Mailstore mailbox format
    [X] MBX                Enable MBX mailbox format
    [X] MYSQL              Link against libmysqlclient library
    [X] NIS                Enable NIS-style lookups
    [X] OLD_DEMIME         Enable old, deprecated demime ACL
    [ ] OPENLDAP           Link against libldap
    [X] PAM                Enable PAM authentication mechanisms
    [X] PASSWD             Enable /etc/passwd lookups
    [ ] PGSQL              Link against libpq
    [ ] READLINE           Enable readline(3) library
    [ ] SASLAUTHD          Enable use of Cyrus SASL auth daemon
    [ ] SA_EXIM            SA-Exim support
    [ ] SO_1024            Build with Spamooborona-1024 local scan
    [ ] SPF                Enable Sender Policy Framework checking
    [ ] SQLITE             Enable SQLite lookups
    [ ] SRS                Enable Sender Rewriting Scheme
    [ ] SRS_ALT            Enable alternative SRS library
    [X] SUID               Install the exim binary suid root
    [ ] TCP_WRAPPERS       Enable /etc/hosts.allow access control
    [X] TLS                Link against OpenSSL
    [ ] WISHLIST           Include the unsupported patches
    [ ] XCLIENT            Enable XCLIENT command in exim
    

    Меняем значения в /etc/mail/mailer.conf:
    sendmail        /usr/local/sbin/exim
    send-mail       /usr/local/sbin/exim
    mailq           /usr/local/sbin/exim -bp
    newaliases      /usr/local/sbin/exim -bi
    hoststat        /usr/local/sbin/exim
    purgestat       /usr/local/sbin/exim
    
    /etc/rc.conf
    exim_enable="YES"
    

  • Установка Courier-imap
    # cd /usr/ports/mail/courier-imap
    # make install clean
    

    Опции настроек:
    [ ] FAM          Build in fam support for IDLE command
    [ ] TRASHQUOTA   Include deleted mails in the quota
    [ ] GDBM         Use gdbm db instead of system bdb
    [ ] IPV6         Build with IPv6 support
    [ ] DRAC         Build with DRAC support
    [ ] AUTH_LDAP    LDAP support
    [X] AUTH_MYSQL   MySQL support
    [ ] AUTH_PGSQL   PostgreSQL support
    [ ] AUTH_USERDB  Userdb support
    [ ] AUTH_VCHKPW  Vpopmail/vchkpw support
    
    /etc/rc.conf
    courier_authdaemond_enable="YES"
    
    если используем courier-imap как pop3-сервер, то добавляем строку
    courier_imap_pop3d_ssl_enable="YES"
    
    если используем courier-imap как imap-сервер, то добавляем строку
    courier_imap_imapd_ssl_enable="YES"
    

  • Настройка базы данных и почтовых ящиков

    Дано:
    локальный почтовый домен (совпадает с именем сервера): mydomain.ru
    виртуальный почтовый домен: virtmail.com
    почтовые ящики @mydomain.ru: user1@mydomain.ru, user2@mydomain.ru
    почтовые ящики @virtmail.com: one@virtmail.com, two@virtmail.com

    Создаем в MySQL базу данных и таблицы:
    кодировка базы данных: utf8
    база данных: exim
    пользователь: eximuser
    пароль: eximpass

    createtables.sql - первоначальное создание базы данных
    # создаем базу данных
    create database exim;
    # создаем mysql-пользователя и даем права на базу данных
    grant all privileges on exim.* to 'eximuser'@'localhost' identified by 'eximpass';
    use exim;
    # создаем таблицу aliases
    CREATE TABLE aliases (
      local_part varchar(64) NOT NULL default '',
      domain varchar(128) NOT NULL default '',
      recipients text,
      PRIMARY KEY  (local_part,domain)
    );
    # создаем таблицу domains для хранения доменов, обслуживаемых сервером
    CREATE TABLE domains (
      domain varchar(128) NOT NULL default '',
      type enum('LOCAL','RELAY','VIRTUAL') default 'VIRTUAL',
      PRIMARY KEY  (domain)
    );
    # создаем таблицу users в которой хранятся почтовые ящики
    CREATE TABLE users (
      login varchar(64) NOT NULL default '',
      name varchar(128) NOT NULL default '',
      home text NOT NULL default '',
      password varchar(64) NOT NULL default '',
      decrypt varchar(64) NOT NULL default '',
      uid int(10) unsigned default '26',
      gid int(10) unsigned default '6',
      domain varchar(128) NOT NULL default '',
      quota tinyint(4) default '0',
      status enum('0','1') default '1',
      PRIMARY KEY  (login,domain)
    );
    
    # значение по умолчанию для uid в таблице users - id пользователя mailnull из /etc/passwd
    # cat /etc/passwd | grep mailnull
    mailnull:*:26:26:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin
    
    # значение по умолчанию для gid в таблице users - id группы mail из /etc/group
    # cat /etc/group | grep mail
    mail:*:6:
    

    aliases.sql - добавление системных алиасов (текущие алиасы можно уточнить в файле /etc/aliases)
    INSERT INTO exim.aliases VALUES ('MAILER-DAEMON','mydomain.ru','postmaster');
    INSERT INTO exim.aliases VALUES ('postmaster','mydomain.ru','root');
    
    INSERT INTO exim.aliases VALUES ('_dhcp','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('_pflogd','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('bin','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('bind','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('daemon','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('games','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('kmem','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('mailnull','mydomain.ru','postmaster');
    INSERT INTO exim.aliases VALUES ('man','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('news','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('nobody','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('operator','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('pop','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('proxy','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('smmsp','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('sshd','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('system','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('toor','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('tty','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('usenet','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('uucp','mydomain.ru','root');
    
    INSERT INTO exim.aliases VALUES ('abuse','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('noc','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('security','mydomain.ru','root');
    
    INSERT INTO exim.aliases VALUES ('ftp','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('ftp-bugs','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('hostmaster','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('webmaster','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('www','mydomain.ru','root');
    
    INSERT INTO exim.aliases VALUES ('sync','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('mail','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('postgres','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('mysql','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('squid','mydomain.ru','root');
    INSERT INTO exim.aliases VALUES ('named','mydomain.ru','root');
    
    INSERT INTO exim.aliases VALUES ('root','mydomain.ru','user1');
    
    Последняя строчка перенаправляет всю почту для root в почтовый ящик user1@mydomain.ru

    newdomain.sql - добавление почтового домена
    # добавляем локальный домен
    INSERT INTO exim.domains VALUES ('mydomain.ru','LOCAL');
    # добавляем виртуальный домен
    INSERT INTO exim.domains VALUES ('virtmail.com','VIRTUAL');
    

    newuser.sql - добавление пользователей (почтовых ящиков)
    # пользователи домена mydomain.ru
    INSERT INTO exim.users (login,name,home,password,decrypt,domain)
     VALUES ('user1','User 1','/var/mail/mydomain.ru/user1',encrypt('user1Password'),'user1Password','mydomain.ru');
    INSERT INTO exim.users (login,name,home,password,decrypt,domain)
     VALUES ('user2','User 2','/var/mail/mydomain.ru/user2',encrypt('user2Password'),'user2Password','mydomain.ru');
    # пользователи домена virtmail.com
    INSERT INTO exim.users (login,name,home,password,decrypt,domain)
     VALUES ('one','One','/var/mail/virtmail.com/one',encrypt('onePassword'),'onePassword','virtmail.com');
    INSERT INTO exim.users (login,name,home,password,decrypt,domain)
     VALUES ('two','One','/var/mail/virtmail.com/two',encrypt('twoPassword'),'twoPassword','virtmail.com');
    
    Добавляем данные в MySQL
    # mysql -uroot -p < createtables.sql
    # mysql -uroot -p < aliases.sql
    # mysql -uroot -p < newdomain.sql
    # mysql -uroot -p < newuser.sql
    

    Создаем директории почтовых доменов и почтовых ящиков, задаем владельца и права доступа. Директории автоматически создаются exim при получении первого письма, но до этого пользователь не сможет проверить почтовый ящик, так как pop3-сервер будет выдавать ошибку об отсутствии директорий почтового ящика.
    # mkdir /var/mail/mydomain.ru
    # mkdir -p /var/mail/mydomain.ru/user1/cur
    # mkdir /var/mail/mydomain.ru/user1/new
    # mkdir /var/mail/mydomain.ru/user1/tmp
    # mkdir -p /var/mail/mydomain.ru/user2/cur
    # mkdir /var/mail/mydomain.ru/user2/new
    # mkdir /var/mail/mydomain.ru/user2/tmp
    # chown -R mailnull:mail /var/mail/mydomain.ru
    # chmod -R 0770 /var/mail/mydomain.ru
    # mkdir /var/mail/virtmail.com
    # mkdir -p /var/mail/virtmail.com/one/cur
    # mkdir /var/mail/virtmail.com/one/new
    # mkdir /var/mail/virtmail.com/one/tmp
    # mkdir -p /var/mail/virtmail.com/two/cur
    # mkdir /var/mail/virtmail.com/two/new
    # mkdir /var/mail/virtmail.com/two/tmp
    # chown -R mailnull:mail /var/mail/virtmail.com
    # chmod -R 0770 /var/mail/virtmail.com
    

  • Настройка Exim

    Генерируем сертификат для TLS/SSL
    # mkdir -p /etc/ssl/certs
    # cd /etc/ssl/certs
    # openssl req -x509 -newkey rsa:1024 -keyout mail.pem -out mail.pem -days 9999 -nodes
    # chown root:mail mail.pem
    
    При генерации сертификата в поле Common Name (eg, YOUR name) [ ] необходимо задать адрес почтового сервера (в рассматриваемом здесь примере это mydomain.ru)


    Конфигурационный файл exim:
    /usr/local/etc/exim/configure
    ######################################################################
    #                    MAIN CONFIGURATION SETTINGS                     #
    ######################################################################
    
    primary_hostname = mydomain.ru
    
    perl_at_start = yes
    
    hide mysql_servers = localhost/exim/eximuser/eximpass
    
    domainlist local_domains = ${lookup mysql{SELECT domain FROM domains WHERE domain='${domain}' AND (type='LOCAL' OR type='VIRTUAL')}}
    domainlist relay_to_domains =
    addresslist accept_from_emails = /usr/local/etc/exim/accept-from-emails.txt
    hostlist   relay_from_hosts = localhost : 127.0.0.1/8
    
    acl_smtp_rcpt = acl_check_rcpt
    acl_smtp_data = acl_check_data
    
    #av_scanner = clamd:/var/run/clamav/clamd.sock
    
    tls_advertise_hosts = *
    tls_certificate = /etc/ssl/certs/mail.pem
    tls_privatekey = /etc/ssl/certs/mail.pem
    
    daemon_smtp_ports = 25 : 465 : 587
    tls_on_connect_ports = 465
    
    qualify_domain = mydomain.ru
    
    allow_domain_literals = false
    
    exim_user = mailnull
    exim_group = mail
    never_users = root
    
    host_lookup = *
    rfc1413_hosts = *
    rfc1413_query_timeout = 5s
    
    
    ignore_bounce_errors_after = 30m
    timeout_frozen_after = 3d
    freeze_tell = postmaster
    message_size_limit = 10M
    smtp_accept_max = 100
    smtp_accept_max_per_connection = 5
    smtp_accept_max_per_host = 2
    split_spool_directory = true
    remote_max_parallel = 15
    smtp_banner = "Welcome!"
    
    ######################################################################
    #                       ACL CONFIGURATION                            #
    #         Specifies access control lists for incoming SMTP mail      #
    ######################################################################
    
    begin acl
    
    acl_check_rcpt:
    
      accept  hosts = :
    
      deny    message       = Restricted characters in address
              domains       = +local_domains
              local_parts   = ^[.] : ^.*[@%!/|]
    
      deny    message       = Restricted characters in address
              domains       = !+local_domains
              local_parts   = ^[./|] : ^.*[@%!] : ^.*/../
    
      accept  local_parts   = postmaster
              domains       = +local_domains
    
      accept  authenticated = *
              control       = submission
    
      accept  senders       = +accept_from_emails
    
      accept  hosts         = +relay_from_hosts
              control       = submission
              endpass
    
    
      require verify        = sender
    
      deny    message       = HELO/EHLO required by SMTP RFC
              condition     = ${if eq{$sender_helo_name}{}{yes}{no}}
    
      deny    message       = rejected, $sender_address_domain is listed in $dnslist_domain ($dnslist_text)
              log_message   = found in $dnslist_domain ($dnslist_text)
              dnslists      = dsn.rfc-ignorant.org/$sender_address_domain : postmaster.rfc-ignorant.org/$sender_address_domain
    
      deny    message       = rejected, $sender_host_address Open Proxy, see $dnslist_domain ($dnslist_text)
              log_message   = found in $dnslist_domain ($dnslist_text)
              dnslists      = dnsbl.void.ru
    
      require message       = relay not permitted
              domains       = +local_domains : +relay_to_domains
    
    
      require verify = recipient
    
      require   verify     = reverse_host_lookup
    
    
      accept
    
    
    
    acl_check_data:
    
      deny      message    = Sorry, noone speacks chinese here
                condition  = ${if eq{$mime_charset}{gb2312}{1}{0}}
    
    
    #  deny    malware    = *
    #          message    = This message contains a virus ($malware_name).
    
      accept
    
    
    ######################################################################
    #                      ROUTERS CONFIGURATION                         #
    #               Specifies how addresses are handled                  #
    ######################################################################
    #     THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT!       #
    # An address is passed to each router in turn until it is accepted.  #
    ######################################################################
    begin routers
    
    dnslookup:
      driver = dnslookup
      domains = !+local_domains
      transport = remote_smtp
      ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
      no_more
    
    system_aliases:
      driver = redirect
      allow_fail
      allow_defer
      data = ${lookup mysql{SELECT recipients FROM aliases WHERE local_part='${local_part}' AND domain='${domain}'}}
    
    userforward:
      driver = redirect
      check_local_user
      file = $home/.forward
      no_verify
      no_expn
      check_ancestor
      file_transport = address_file
      pipe_transport = address_pipe
      reply_transport = address_reply
      condition = ${if exists{$home/.forward} {yes} {no} }
    
    virtual_localuser:
      driver = accept
      domains = ${lookup mysql{SELECT domain FROM domains WHERE domain='${domain}'}}
      local_parts = ${lookup mysql{SELECT login FROM users WHERE login='${local_part}' AND domain='${domain}'}}
      transport = local_delivery
      cannot_route_message = Unknown user
    
    
    ######################################################################
    #                      TRANSPORTS CONFIGURATION                      #
    ######################################################################
    #                       ORDER DOES NOT MATTER                        #
    #     Only one appropriate transport is called for each delivery.    #
    ######################################################################
    
    begin transports
    
    remote_smtp:
      driver = smtp
    
    local_delivery:
      driver = appendfile
      check_string = ""
      create_directory
      directory = /var/mail/$domain/$local_part
      directory_mode = 0770
      maildir_format
      quota=10M
      maildir_tag = ,S=$message_size
      message_prefix = ""
      message_suffix = ""
      delivery_date_add
      envelope_to_add
      return_path_add
      mode = 0660
      no_mode_fail_narrower
    
    address_pipe:
      driver = pipe
      return_output
    
    address_file:
      driver = appendfile
      delivery_date_add
      envelope_to_add
      return_path_add
    
    address_reply:
      driver = autoreply
    
    
    
    ######################################################################
    #                      RETRY CONFIGURATION                           #
    ######################################################################
    begin retry
    
    # Address or Domain    Error       Retries
    # -----------------    -----       -------
    
    *                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h
    
    ######################################################################
    #                      REWRITE CONFIGURATION                         #
    ######################################################################
    begin rewrite
    
    
    ######################################################################
    #                   AUTHENTICATION CONFIGURATION                     #
    ######################################################################
    begin authenticators
    
    CRAM:
      driver                     = cram_md5
      public_name                = CRAM-MD5
      server_set_id              = ${local_part:$1}
      server_secret              = ${lookup mysql{SELECT decrypt FROM users
                                                 WHERE login = '${quote_mysql:${local_part:$1}}'
                                                 AND domain = '${quote_mysql:${domain:$1}}'
                                                 AND status = '1'}{$value}fail}
      server_advertise_condition = ${if def:tls_cipher}
    
    # End of Exim configuration file
    

  • Проверка настройки Exim

    Проверка синтаксиса конфигурационного файла
    # exim -bV
    Exim version 4.76 #0 (FreeBSD 8.2) built 11-Jul-2011 08:25:01
    Copyright (c) University of Cambridge, 1995 - 2007
    Probably Berkeley DB version 1.8x (native mode)
    Support for: crypteq iconv() use_setclassresources PAM Perl Expand_dlfunc OpenSSL Content_Scanning DKIM Old_Demime
    Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dnsdb dsearch mysql nis nis0 passwd
    Authenticators: cram_md5
    Routers: accept dnslookup ipliteral manualroute queryprogram redirect
    Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp
    Fixed never_users: 0
    Size of off_t: 8
    Configuration file is /usr/local/etc/exim/configure
    
    Проверка распознавания сообщений для локальных пользователей
    # exim -bt postmaster
    user1@mydomain.ru
        <-- root@mydomain.ru
        <-- postmaster@mydomain.ru
      router = virtual_localuser, transport = local_delivery
    
    Проверка распознавания сообщений для внешних пользователей
    # exim -bt billhates@msn.com
    billhates@msn.com
      router = dnslookup, transport = remote_smtp
      host mx2.hotmail.com [65.55.92.136]  MX=5
      host mx2.hotmail.com [65.55.37.88]   MX=5
      host mx2.hotmail.com [65.55.92.168]  MX=5
      host mx2.hotmail.com [65.55.92.184]  MX=5
      host mx2.hotmail.com [65.54.188.126] MX=5
      host mx2.hotmail.com [65.55.92.152]  MX=5
      host mx2.hotmail.com [65.55.37.72]   MX=5
      host mx2.hotmail.com [65.54.188.72]  MX=5
      host mx2.hotmail.com [65.55.37.104]  MX=5
      host mx2.hotmail.com [65.54.188.94]  MX=5
      host mx2.hotmail.com [65.55.37.120]  MX=5
      host mx2.hotmail.com [65.54.188.110] MX=5
    

  • Запуск Exim
    # /usr/local/etc/rc.d/exim start
    
    Проверка что Exim работает:
    # ps ax | grep exim
    39478  ??  Is     0:00.01 /usr/local/sbin/exim -bd -q30m (exim-4.76-0)
    
    Смотрим /var/log/exim/eximmain.log на предмет отсутствия ошибок.

    Для просмотра работы в реальном времени запускаем так:
    $ exim -bd -d
    


  • Настройка courier-authdaemon

    /usr/local/etc/authlib/authdaemonrc
    authmodulelist="authmysql"
    
    /usr/local/etc/authlib/authmysqlrc
    MYSQL_SERVER   localhost
    MYSQL_USERNAME eximuser
    MYSQL_PASSWORD eximpass
    
    MYSQL_SOCKET   /tmp/mysql.sock
    MYSQL_PORT     0
    
    MYSQL_OPT      0
    
    MYSQL_DATABASE      exim
    MYSQL_CHARACTER_SET utf8
    
    MYSQL_USER_TABLE    users
    
    MYSQL_CRYPT_PWFIELD password
    MYSQL_CLEAR_PWFIELD decrypt
    MYSQL_UID_FIELD     uid
    
    DEFAULT_DOMAIN      mydomain.ru
    
    MYSQL_LOGIN_FIELD   id
    MYSQL_HOME_FIELD    home
    MYSQL_NAME_FIELD    name
    MYSQL_QUOTA_FIELD   quota
    
    MYSQL_SELECT_CLAUSE     SELECT CONCAT(users.login,'@',users.domain),
                            CONCAT('{MD5}',users.password),             
                            users.decrypt,                              
                            users.uid,                                  
                            users.gid,                                  
                            users.home,                                 
                            users.home,                                 
                            users.quota,                                
                            '',                                         
                            ''                                          
                            FROM users                                  
                            WHERE users.login = '$(local_part)'         
                            AND users.domain = '$(domain)'
    

  • Настройка Courier-imap для использования в качестве pop3-сервера

    Генерируем сертификат для TLS/SSL
    # cd /usr/local/etc/courier-imap
    # cp pop3d.cnf.dist pop3d.cnf
    
    /usr/local/etc/courier-imap/pop3d.cnf
    Писать можно всё, что угодно, но в секции [ req_dn ] в значение параметра CN необходимо записать адрес Вашего почтового сервера, а в значение параметра emailAddress email локального postmacter.
    [ req_dn ]
    CN=mydomain.ru
    emailAddress=postmaster@mydomain.ru
    
    Генерим сертификат для pop3
    # cd /usr/local/share/courier-imap/
    # ./mkpop3dcert
    
    Настраиваем pop3d-ssl
    /usr/local/etc/courier-imap/pop3d-ssl
    Ничего не трогаем, только изменяем строку
    POP3DSSLSTART=NO
    
    на
    POP3DSSLSTART=YES
    

    Запуск Courier-imap pop3d-ssl
    # /usr/local/etc/rc.d/courier-imap-pop3d-ssl start
    
    Проверяем
    # cat /var/run/pop3d-ssl.pid
    43923
    # ps ax | grep 43923
    43923   2  I      0:00.00 [courierlogger]
    


  • Настройка Courier-imap для использования в качестве imap-сервера

    Генерируем сертификат для TLS/SSL
    # cd /usr/local/etc/courier-imap
    # cp imapd.cnf.dist imapd.cnf
    
    /usr/local/etc/courier-imap/imapd.cnf
    Писать можно всё, что угодно, но в секции [ req_dn ] в значение параметра CN необходимо записать адрес Вашего почтового сервера, а в значение параметра emailAddress email локального postmaster.
    [ req_dn ]
    CN=mydomain.ru
    emailAddress=postmaster@mydomain.ru
    
    Генерим сертификат для imap
    # cd /usr/local/share/courier-imap/
    # ./mkimapdcert
    
    Настраиваем imapd-ssl
    /usr/local/etc/courier-imap/imapd-ssl
    Ничего не трогаем, только изменяем строки
    IMAPDSSLSTART=NO
    
    на
    IMAPDSSLSTART=YES
    
    /usr/local/etc/courier-imap/imapd
    Для того, чтобы наш imap-сервер требовал шифрованный пароль при использовании SSL-соединения, необходимо сделать следующее: найти и закомментировать строку (поставить в начале строки решетку - #):
    IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"
    
    ниже добавить новую строчку:
    IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=CRAM-MD5"
    

    Запуск Courier-imap imapd-ssl
    # /usr/local/etc/rc.d/courier-imap-imapd-ssl start
    
    Проверяем
    # cat /var/run/imapd-ssl.pid
    43923
    # ps ax | grep 43923
    43923   5-  I      0:00.00 [courierlogger]
    


  • Настройка pop3-почтового ящика для установленного сервера на примере Mozilla Thunderbird
    $ pkg_info | grep thunderbird
    thunderbird-3.1.11
    
    POP3 Server
    Server Type: POP Mail Server
    Server Name: mydomain.ru
    Port: 995
    User Name: user1@mydomain.ru

    Connection security: SSL/TLS
    Authentication method: Encrypted password

    SMTP Server
    Server Name: mydomain.ru
    Port: 465

    Connection security: SSL/TLS
    Authentication method: Encrypted password
    User Name: user1@mydomain.ru

  • Настройка imap-почтового ящика для установленного сервера на примере Mozilla Thunderbird
    $ pkg_info | grep thunderbird
    thunderbird-3.1.20
    
    Server Settings
    Server Type: IMAP Mail Server
    Server Name: mydomain.ru
    Port: 993
    User Name: user1@mydomain.ru

    Connection security: SSL/TLS
    Authentication method: Encrypted password

    SMTP Server
    Server Name: mydomain.ru
    Port: 465

    Connection security: SSL/TLS
    Authentication method: Encrypted password
    User Name: user1@mydomain.ru