Содержание
И так, у нас уже есть настроенный LDAP сервер по этой статье и внём уже есть пользователи, хотелось бы использовать данных пользователей для почтового сервера. Сформируем условия для нашего почтового сервера:
1. Пользователи являются виртуальными и находятся в базе LDAP на другом сервере
2. Алиасы пользователей так же находятся в LDAP сервере
3. Домены поддерживаемые серверов тоже находятся в LDAP
4. Существует поддержка квот, значения квот берутся из LDAP
5. В качестве логина будет использоваться email пользователя
6. Почтовые папки пользователей будут находится по адресу /home/mail/_домен_/_email_пользователя_/
7. В качестве почтового пользователя на сервере, будет пользователь vmail которого необходимо создать
8. В качестве почтовой группы на сервере, будет группа mail которая присутствует по умолчанию
9. Почтовый сервер будет работать только по защищённым соединениям т. е. pop3 соединения будут осуществляться на 995 порту либо на 110 порту с обязательно включенной опцией starttls, imap соединения будут осуществляться на 993 порту либо на 143 порту с обязательно включенной опцией starttls, smtp соединение для отправки почты пользователями будет осуществляться на 465 порту либо на 25 порту с обязательно включенной опцией starttls.
В распоряжении имеется машина со свежеустановленной Ubuntu 10.04.
Все действия в этой статье выполняются от пользователя root.
Прежде чем приступить к настройке самого почтового сервера необходимо немного подготовить LDAP сервер. И так, для начала нам необходимо добавить ещё одну схему в LDAP.
На сервере LDAP переходим в каталог /usr/share/gosa/contrib/plugins/fai и редактируем файл схемы fai.ldif, так как это делалось при натройке LDAP сервера т.е.: Строки в начале приводим к виду
dn: cn=fai,cn=schema,cn=config objectClass: olcSchemaConfig cn: fai
и в конце файла удаляем всё начиная с structuralObjectClass: и до конца файла.
Добавляем эту схему в LDAP
ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/share/gosa/contrib/plugins/fai/fai.ldif
Теперь открываем Gosa, в разделе Administration открываем Системы, далее жмём Действия → Создать → Сервер указываем Server name, обязательно указываем IP-адрес, по этому полю будет выставлен фильтр серверов при поиске доменов и указываем MAC-адрес, его можно указать произвольно.
Переходим на вкладку Services, жмём Действия → Создать → Service в поле Service to add выбираем Mail smtp service(Postfix) и жмём продолжить. В открывшейся странице в поле Domains to accept mail for добавляем домены которые будет обслуживать почтовый сервер, в данном случае это example.com. Жмём Сохранить, затем Ок, в результате должен появится новый сервер с названием которое мы указали в Server name.
Переходим к пользователям, создаём нового или открываем существующего, переходим на вкладку Почта, жмём Add Почта settings. Заполняем поля:
Основной адрес — здесь полностью указываем основной адрес пользователя, в данном случае это test@example.com
Размер квоты — здесь указываем размер квоты (ВНИМАНИЕ!!! размер квоты указываем в байтах. К сожалению мне не удалось найти способ преобразовывать Мб в байты при получении данных из LDAP), если хотите чтоб ящик не имел ограничений то это поле оставьте пустым.
Alternative addresses — здесь можно добавить алиасы.
Перенаправлять сообщения — если хотите чтоб сообщения доставлялись не только на основной адрес, а и на другой адрес на этом почтовом сервере, то укажите этот адрес здесь.
Далее жмём Ок, всё почтовый пользователь добавлен.
Также необходимо добавить адрес postmaster@example.com я этот адрес добавил админу samba.
1. Базовая настройка postfix.
Устанавливаем postfix
apt-get install postfix
Настраиваем базовую конфигурацию
dpkg-reconfigure postfix
Отвечаем на вопросы
Internet Site example.com оставляем пустым mail.example.com, localhost.example.com , localhost No 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24 0 + ipv4
Применяем патч квоты Postfix
Мы должны получить исходники Postfix, патч к нему, построить .deb пакеты и установить эти .deb пакеты:
Устанавливаем необходимые пакеты для сборки
apt-get build-dep postfix
Загружаем исходники postfix
cd /usr/src && apt-get source postfix
Загружаем и применяем патч квоты
wget http://vda.sourceforge.net/VDA/postfix-vda-2.7.0.patch cd postfix-2.7.0 patch -p1 < ../postfix-vda-2.7.0.patch
Собираем пропатченный postfix
dpkg-buildpackage
Перейдем на один уровень вверх и посмотрим какие новые .deb пакеты были созданы:
cd .. && ls -1
Выбираем пакеты postfix и postfix-ldap и устанавливаем их:
dpkg -i postfix_2.7.0-1_i386.deb dpkg -i postfix-ldap_2.7.0-1_i386.deb
2. Создание сертификатов для postfix и dovecot
Генерируем Certificate Signing Request (CSR)
Создадим ключ для Certificate Signing Request (CSR)
cd /etc/ssl && openssl genrsa -des3 -out server.key 2048
здесь необходимо будет указать пароль для защищённого ключа
Теперь создадим незащищённый ключ
openssl rsa -in server.key -out server.key.insecure && mv server.key server.key.secure && mv server.key.insecure server.key
здесь необходимо будет указать пароль от защищённого ключа
Создадим CSR
openssl req -new -key server.key -out server.csr
здесь необходимо будет ответить на ряд вопросов
Country Name (2 letter code) [AU]:RU (страна) State or Province Name (full name) [Some-State]:obl-t (область) Locality Name (eg, city) []:NewCity (город) Organization Name (eg, company) [Internet Widgits Pty Ltd]: Example Ltd (название организации) Organizational Unit Name (eg, section) []:branch (название подразделения) Common Name (eg, YOUR name) []:example.com (ваш домен) Email Address []:admin@example.com A challenge password []: (оставил пустым) An optional company name []: Example
Установим ключ сервера
cp server.key /etc/ssl/private
Создаём внутренний Certification Authority (CA) Для начала создадим директории необходимые для СА сертификатов
mkdir /etc/ssl/CA && mkdir /etc/ssl/newcerts
Создаём необходимые файлы
sh -c "echo '01' > /etc/ssl/CA/serial" && touch /etc/ssl/CA/index.txt
Редактируем /etc/ssl/openssl.cnf в секции [ CA_default ] следующим образом
dir = /etc/ssl/ # Where everything is kept database = $dir/CA/index.txt # database index file. certificate = $dir/certs/cacert.pem # The CA certificate serial = $dir/CA/serial # The current serial number private_key = $dir/private/cakey.pem# The private key default_days = 3650 # how long to certify for
Создадим self-singed корневой сертификат
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -newkey rsa:2048 -out cacert.pem
здесь необходимо будет указать пароль для ключа и ответить на вопросы
Установим корневой сертификат и ключ
mv cakey.pem /etc/ssl/private/ && mv cacert.pem /etc/ssl/certs/
Создадим сертификаты для postfix и dovecot Создаём сертификат для postfix
openssl ca -in server.csr -config /etc/ssl/openssl.cnf
отвечаем на вопросы
Enter pass phrase for /etc/ssl//private/cakey.pem: пароль_от_ключа Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n] y
Установим полученный сертификат
cat /etc/ssl/newcerts/01.pem | sed -n '/-----BEGIN CERTIFICATE-----/,$p' > /etc/ssl/certs/postfix.pem
Для создания следующего сертификата необходимо в файле /etc/ssl/CA/index.txt.attr заменить значение unique_subject с yes на no
sed 's/unique_subject = yes/unique_subject = no/' /etc/ssl/CA/index.txt.attr > /etc/ssl/CA/temp && mv /etc/ssl/CA/temp /etc/ssl/CA/index.txt.attr
Создаём сертификат для dovecot
openssl ca -in server.csr -config /etc/ssl/openssl.cnf
Устанавливаем полученный сертификат
cat /etc/ssl/newcerts/02.pem | sed -n '/-----BEGIN CERTIFICATE-----/,$p' > /etc/ssl/certs/mydovecot.pem
3. Создание сертификатов для связи с LDAP
Для связи с LDAP сервером по защищённому соединению нам потребуются отдельные сертификаты.
Идём на наш LDAP сервер. Создаём папку для сертификатов почтового сервера и заходим в неё
mkdir /etc/ssl/veles-ssl && cd /etc/ssl/veles-ssl
Создаём ключ для почтового сервера
certtool --generate-privkey > mail_server_ldap_key.pem
Создаём файл mail.info следующего содержания
country = US state = North Carolina locality = Winston-Salem organization = Example Company cn = mail.example.com tls_www_client encryption_key signing_key
Первые пять значений меняйте на свои.
Создаём сертификат
certtool --generate-certificate --load-privkey mail_server_ldap_key.pem \ --load-ca-certificate /etc/ssl/certs/cacert.pem --load-ca-privkey /etc/ssl/private/cakey.pem \ --template mail.info --outfile mail_server_ldap_cert.pem
Копируем СА сертификат и переименовываем его
cp /etc/ssl/certs/cacert.pem . && mv cacert.pem mail_server_ldap_ca.pem
Теперь содержимое папки mail-ssl необходимо скопировать на почтовый сервер следующим образом файлы mail_server_ldap_ca.pem и mail_server_ldap_cert.pem необходимо положить в папку /etc/ssl/certs на почтовом сервере файл mail_server_ldap_key.pem необходимо положить в папку /etc/ssl/private на почтовом сервере.
4. Настраиваем Dovecot
Устанавливаем пакет dovecot-postfix который автоматически установит dovecot и настроит postfix на использование SASL. Также этот пакет настроит dovecot для IMAP, IMAPS, POP3, и POP3S.
apt-get install dovecot-postfix
Приступаем к настройке dovecot.
Создадим пользователя для почты
useradd -d /bin/false vmail
Создадим папку для почты и установим на неё права
mkdir /home/mail && chown vmail:mail /home/mail
Зайдём в папку dovecot
cd /etc/dovecot
На данный момент dovecot не настроен на использование виртуальных пользователей из ldap, а так же пакет dovecot-postfix разделил конфигурацию dovecot на несколько файлов
dovecot.conf auth.d/01-dovecot-postfix.auth conf.d/01-dovecot-postfix.conf
лично мне это не удобно, поэтому я сделал копию текущего dovecot.conf
mv dovecot.conf dovecot.conf.bak1
и создал свой dovecot.conf
> dovecot.conf
следующего содержания
# Поддерживаемые протоколы protocols = imap pop3 imaps pop3s managesieve log_timestamp = "%Y-%m-%d %H:%M:%S " mail_privileged_group = mail # Отключаем plaintext аутентификацию disable_plaintext_auth = yes # Включаем ssl ssl = yes ssl_cert_file = /etc/ssl/certs/mydovecot.pem ssl_key_file = /etc/ssl/private/server.key ssl_ca_file = /etc/ssl/certs/cacert.pem ssl_cipher_list = ALL:!LOW:!SSLv2:ALL:!aNULL:!ADH:!eNULL:!EXP:RC4+RSA:+HIGH:+MEDIUM # Место нахождения почтовых папок mail_location = maildir:/home/mail/%d/%u # Символы используемые для аутентификации auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@ # Допустимый интервал UID для пользователей first_valid_uid = 1000 last_valid_uid = 50000 # Интервал для группы. Минимальный GID для группы у меня выставлен в 8, т.к. под этим номером у # меня находится группа mail. first_valid_gid = 8 last_valid_gid = 50000 # Пользователь и группа от которых будет работать dovecot с почтой mail_uid = vmail mail_gid = mail # Пути к логам dovecot log_path = /var/log/dovecot.log info_log_path = /var/log/dovecot_info.log # Конфигурация IMAP протокола protocol imap { mail_max_userip_connections = 10 imap_client_workarounds = outlook-idle delay-newmail mail_plugins = quota imap_quota } # Конфигурация POP3 протокола protocol pop3 { pop3_uidl_format = %08Xu%08Xv mail_max_userip_connections = 10 pop3_client_workarounds = outlook-no-nuls oe-ns-eoh mail_plugins = quota } # Конфигурация LDA протокола protocol lda { postmaster_address = postmaster@citramon.donetsk.ua mail_plugins = sieve quota quota_full_tempfail = yes deliver_log_format = msgid=%m: %$ rejection_reason = Your message to <%t> was automatically rejected:%n%r } protocol managesieve { } auth default { # Механизмы аутентификации mechanisms = plain login # База паролей passdb ldap { args = /etc/dovecot/dovecot-ldap.conf } # База пользователей userdb ldap { args = /etc/dovecot/dovecot-ldap.conf } socket listen { master { path = /var/run/dovecot/auth-master mode = 0600 user = vmail group = mail } client { path = /var/spool/postfix/private/dovecot-auth mode = 0660 user = postfix group = postfix } } user = vmail } dict { } # Конфигурация плагинов plugin { sieve=/home/mail/%d/%u/.dovecot.sieve sieve_dir=/home/mail/%d/%u/sieve quota = maildir:User quota quota_rule = *:storage=0B quota_rule2 = Trash:ignore } # Эти опции включают отладочные сообщения, раскоментируйте их # на стадии тестирования, но потом их лучше отключить #mail_debug = yes #verbose_ssl = yes #auth_verbose = yes #auth_debug = yes #auth_debug_passwords = yes
Теперь необходимо настроить подключение к ldap, переименовываем файл настроек ldap
mv dovecot-ldap.conf dovecot-ldap-example.conf
и создаём свой dovecot-ldap.conf
> dovecot-ldap.conf
слеждующего содержания
# Хост на котором работает ldap uris = ldaps://ldap.example.com # Админ ldap и его пароль dn = cn=admin,dc=example,dc=com dnpass = secret # Пути к сертификатам для tls соединения tls_ca_cert_file = /etc/ssl/certs/ mail_server_ldap_ca.pem tls_ca_cert_dir = /etc/ssl/certs tls_cert_file = /etc/ssl/certs/mail_server_ldap_cert.pem tls_key_file = /etc/ssl/private/mail_server_ldap_key.pem # Отладочные сообщения при соединении с ldap, после окончания тестирования лучше отключить #debug_level = -1 # Поиск в ldap будет проходить не от пользователя проходящего аутентификацию auth_bind = no # Версия протокола ldap ldap_version = 3 # Где искать пользователя base = dc=example,dc=com deref = never scope = subtree # Соответствие ldpa и dovecot переменных (слева ldap, справа dovecot) pass_attrs = mail=user,userPassword=password # Фильтр для проверки паролей pass_filter = (&(objectClass=gosaMailAccount)(mail=%u)) # Здесь переменным home, uid, gid присваиваются фиксированные значения, а значение quota_rule # берётся в ldap из параметра gosaMailQuota, 1001 и 8 это uid пользователя vmail и gid группы mail user_attrs = \ =home=/home/mail/%d/%u, \ =uid=1001, \ =gid=8, \ gosaMailQuota=quota_rule=?:storage=%$B # Фильтр для выборки пользователей user_filter = (&(objectClass=gosaMailAccount)(mail=%u)) # Метод шифрования паролей в ldap default_pass_scheme = MD5
Не знаю с чем это связано но для того чтоб dovecot смог соединиться с ldap на другом сервере по tls, необходимо чтоб на сервере с dovecot присутствовал файл /etc/ldap/ldap.conf в котором находится строка
TLS_CACERT /etc/ssl/certs/mail_server_ldap_ca.pem
в ubuntu 10.04 этот файл присутствует, поэтому просто добавляем в него выше указанную строку.
echo "TLS_CACERT /etc/ssl/certs/mail_server_ldap_ca.pem" >> /etc/ldap/ldap.conf
Перезагружаем dovecot
/etc/init.d/dovecot restart
5. Настраиваем postfix
Конфигурируем main.cf
# Настраиваем tls и SASL postconf -e 'smtpd_tls_key_file = /etc/ssl/private/server.key' postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem' postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem' postconf -e 'smtpd_tls_loglevel = 1' postconf -e 'smtpd_tls_session_cache_timeout = 3600s' postconf -e 'smtp_tls_note_starttls_offer = yes' postconf -e 'smtpd_sasl_local_domain =' # Почта будет находится в каталоге /home/mail/domain/user_mail поэтому значение home_mailbox # должно быть пустым, mailbox_command выполняться не будет поэтому тоже пусто postconf -e 'home_mailbox =' postconf -e 'mailbox_command =' # Домен почтового сервера postconf -e 'mydomain = example.com' postconf -e 'myorigin = $mydomain' # Отклонять команду ETRN postconf -e 'smtpd_etrn_restrictions = reject' # Дополнительные ограничения, применяемые сервером Postfix в контексте команды MAIL FROM postconf -e 'smtpd_sender_restrictions = reject_sender_login_mismatch, reject_unlisted_sender, reject_unknown_sender_domain' # Дополнительные ограничения, применяемые сервером Postfix в контексте команды RCPT TO postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unverified_recipient, reject_invalid_hostname, reject_multi_recipient_bounce, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, reject_unauth_destination' # Настройка виртуальных пользователей, здесь 1001 и 8 это uid и gid пользователя vmail и группы mail postconf -e 'virtual_mailbox_base = /home/mail' postconf -e 'virtual_mailbox_domains = ldap:/etc/postfix/ldap_virtual_domains_maps.cf' postconf -e 'virtual_mailbox_maps = ldap:/etc/postfix/ldap_virtual_mailbox_maps.cf' postconf -e 'virtual_alias_maps = ldap:/etc/postfix/ldap_virtual_alias_maps.cf' postconf -e 'virtual_uid_maps = static:1001' postconf -e 'virtual_gid_maps = static:8' postconf -e 'virtual_minimum_uid = 1000' # Устанавливаем dovecot в качестве транспорта postconf -e 'virtual_transport = dovecot' postconf -e 'mailbox_transport = dovecot' postconf -e 'dovecot_destination_recipient_limit = 1' # Настраиваем квоту postconf -e 'virtual_create_maildirsize = yes' postconf -e 'virtual_maildir_extended = yes' postconf -e 'virtual_mailbox_limit_override = yes' postconf -e 'virtual_overquota_bounce = yes' postconf -e 'virtual_mailbox_limit_maps = ldap:/etc/postfix/ldap_virtual_mailbox_limit_maps.cf' postconf -e 'virtual_maildir_limit_message = Sorry, the users mailbox is full, please try again later.' # Здесь к значениям по умолчанию добавляются $virtual_mailbox_limit_maps и # $smtpd_sender_login_maps postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $sender_bcc_maps $recipient_bcc_maps $smtp_generic_maps $lmtp_generic_maps $virtual_mailbox_limit_maps $smtpd_sender_login_maps' # Не разрешает отправку сообщений от другого пользователя # Логин пользователя для отправки сообщений и MAIL FROM должны совпадать postconf -e 'smtpd_sender_login_maps = ldap:/etc/postfix/ldap_logins.cf' # Отключаем команду VRFY postconf -e 'disable_vrfy_command = yes' # Ставить исходящие сообщения в очередь postconf -e 'defer_transports=smtp'
Теперь заходим в файл /etc/postfix/master.cf, убираем комментарий со строк
smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject
и добавляем в конец файла строки
dovecot unix - n n - - pipe flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -d ${recipient}
Осталось создать файлы запросов к LDAP серверу К сожалению мне не удалось подключиться к LDAP по защищённому соединению ldaps. При попытке подключения по ldaps или start_tls в логах появляются строки
warning: process /usr/lib/postfix/trivial-rewrite pid 1289 killed by signal 6 warning: /usr/lib/postfix/trivial-rewrite: bad command startup — throttling
и postfix наотрез отказывается принимать почту. В связи с эти файлы запросов соединяются с ldap через не защищённое соединение. Если кто решил данную проблему или знает с чем это связано, поделитесь пожалуйста буду очень признателен. Лично я перерыл весь инет но решение так и не нашёл. И так создаём файлы запросов в папке /etc/postfix
Файл ldap_logins.cf
# адрес LDAP-сервера server_host = ldap://ldap_server_ip/ # где искать людей search_base = ou=Users,dc=example,dc=com # версия протокола version = 3 # какие записи отфильтровывать # брать только тех, у кого создан почтовый акаунт query_filter = (&(objectClass=gosaMailAccount)(|(mail=%s)(gosaMailAlternateAddress=%s))) # требуемый атрибут result_attribute = mail # DN-запись для подключения к LDAP bind_dn = cn=admin,dc=example,dc=com bind_pw = secret
Файл ldap_virtual_alias_maps.cf
# адрес LDAP-сервера server_host = ldap://ldap_server_ip/ # где искать людей search_base = ou=Users,dc=example,dc=com # версия протокола version = 3 # какие записи отфильтровывать # брать только тех, у кого создан почтовый акаунт query_filter = (&(objectClass=gosaMailAccount)(|(mail=%s)(gosaMailAlternateAddress=%s))) # требуемый атрибут - мы забираем mail result_attribute = mail # DN-запись для подключения к LDAP bind_dn = cn=admin,dc=example,dc=com bind_pw = secret
Файл ldap_virtual_domains_maps.cf
# адрес LDAP-сервера server_host = ldap://ldap_server_ip/ # где искать домены search_base = ou=servers,ou=systems,dc=example,dc=com # версия протокола version = 3 # какие записи отфильтровывать # брать только текущий почтовый сервер, ip указывается текущего почтового сервера query_filter = (&(objectClass=goMailServer)(ipHostNumber=192.168.0.2)(postfixMyDestinations=%s)) # требуемый атрибут - мы забираем список доменов result_attribute = postfixMyDestinations # DN-запись для подключения к LDAP bind_dn = cn=admin,dc=example,dc=com bind_pw = secret
Файл ldap_virtual_mailbox_limit_maps.cf
# адрес LDAP-сервера server_host = ldap://ldap_server_ip/ # где искать пользователей search_base = ou=Users,dc=example,dc=com # версия протокола version = 3 # какие записи отфильтровывать # брать только тех, у кого создан почтовый акаунт query_filter = (&(objectClass=gosaMailAccount)(|(mail=%s)(gosaMailAlternateAddress=%s))) # требуемый атрибут - мы забираем квоту result_attribute = gosaMailQuota # DN-запись для подключения к LDAP bind_dn = cn=admin,dc=example,dc=com bind_pw = secret
Файл ldap_virtual_mailbox_maps.cf
# адрес LDAP-сервера server_host = ldap://ldap_server_ip/ # где искать людей search_base = ou=Users,dc=example,dc=com # версия протокола version = 3 # какие записи отфильтровывать # брать только тех, у кого создан почтовый акаунт query_filter = (&(objectClass=gosaMailAccount)(mail=%s)) # требуемый атрибут - мы забираем mail и gosaMailForwardingAddress result_attribute = mail, gosaMailForwardingAddress # по каким путям будет создаваться папка для юзера и подпапки (%d/ будет создаваться подпапка с # доменом вида domain.dom/mail_adress/) result_format = %d/%s/ # DN-запись для подключения к LDAP bind_dn = cn=admin,dc=example,dc=com bind_pw = secret
Перезагружаем postfix
/etc/init.d/postfix restart
Разрешим группе mail писать логи в файлы dovecot.log и dovecot_info.log, если этого не сделать postfix не будет принимать почту
chown root:mail /var/log/dovecot* && chmod 660 /var/log/dovecot*
На этом настройка postfix и dovecot закончена.
6. Тестирование почтового сервера
Протестируем работоспособность, отправив сообщение через telnet пользователю test.
telnet localhost 25
Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mail.example.com ESMTP Postfix (Ubuntu)
helo example.com
250 mail.example.com
mail from: vasiapupkin@mail.ru
250 2.1.0 Ok
rcpt to: test@example.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Пишем содержание письма
Hello LDAP user :) # жмём Enter
Ставим «.» точку и жмём Enter чтоб закончить ввод сообщения
. 250 2.0.0 Ok: queued as D5E5622CC5
quit
221 2.0.0 Bye Connection closed by foreign host.
После этого в папке /home/mail должна появится папка с названием домена в данном случае example.com, а внутри неё папка с адресом пользователя test@example.com, если не появилась лезем в логи и ищем ошибку, если появилась то всё ок.
Проверяем dovecot.
openssl s_client -host localhost -port 995
в конце ответа должно быть
+OK Dovecot ready.
user test@example.com
+OK
pass secret
+OK Logged in.
list
+OK 1 messages: 1 454 .
quit
Если ошибок нет то всё работает нормально.
7. Отправка писем из очереди
Всю почту отправляемую во внешний мир postfix ставит в очередь, для того чтоб письма из очереди доставлялись адресатам необходимо выполнить команду postfix flush. Добавим в crontab эту команду, так чтоб письма в очереди отправлялись каждую минуту
crontab -e (выбираем редактор)
и добавляем следующее
* * * * * /usr/sbin/postfix flush
в результате письма из очереди будут отправляться каждую минуту.
Всё почтовый сервер готов к использованию.
P.S. Лично мне не удобно использовать в качестве логина email пользователя. Мой почтовый сервер обслуживает один домен, поэтому я немного модифицировал запрос получения пароля из ldap в dovecot-ldap.conf, изменив в нём одну строку с
pass_filter = (&(objectClass=gosaMailAccount)(mail=%u))
на
pass_filter = (&(objectClass=gosaMailAccount)(mail=%n@*))
при таком варианте в качестве логина нужно использовать имя пользователя (к примеру если email пользователя test@example.com то в качестве логина нужно использовать test).
Итак почтовый сервер настроен и работает, хотелось бы чтоб почта приходящая на него проверялась на наличие вирусов и на спам. Для решения этой задачи существует множество способов, лично мне в качестве спам фильтра больше нравится Dspam, но возможности amavisd-new меня тоже устраивают, поэтому в следующей статье я попробую скрестить Dspam, Amavisd-new и ClamAV
Обсудить данную статью можно на форуме.
8. Материалы используемые при написании данной статьи
https://oss.gonicus.de/labs/gosa/wiki/PluginInstallationMailPostfix
http://vda.sourceforge.net/VDA/
http://www.sys-adm.org.ua/mail/dovecot.php
http://www.opennet.ru/docs/RUS/exit_setup/dovecot.html
http://hexedit.ifproject.ru/blog1.php/unix/server/postfix-dovecot-openldap?page=2
https://help.ubuntu.com/community/DovecotLDAP
http://www.postfix.org/postconf.5.html#smtpd_sender_login_maps
http://www.gentoo.ru/node/9652
http://ukhov.ru/content/ustanovka-pochtovoj-sistemy-postfixsaslcourierimappostgresql-na-freebsd
http://www.postfix.ru/viewtopic.php?p=9794
http://www.opennet.ru/keywords/postfix.html
http://www.sfr-fresh.com/unix/misc/postfix-2.7.1.tar.gz:a/postfix-2.7.1/man/man5/ldap_table.5
http://www.rfc-editor.org/rfc/rfc2254.txt
http://www.howtoforge.com/postfix-virtual-hosting-with-ldap-and-dovecot-on-ubuntu8.04
http://maint.intraset.ru/doc/dovecot.shtml
http://maint.intraset.ru/doc/postfix.shtml
http://www.opennet.ru/base/net/postfix_openldap.txt.html
https://help.ubuntu.com/10.04/serverguide/C/postfix.html
https://help.ubuntu.com/10.04/serverguide/C/certificates-and-security.html
https://help.ubuntu.com/10.04/serverguide/C/mail-filtering.html
http://www.lissyara.su/articles/freebsd/mail/postfix+dovecot+spamassasin+clamav+ldap+mysql/