Авг 182012
 


Понадобилось мне настроить почтовый сервер что бы он обслуживал 4 домена.
Пользователей не много будет у этого почтового сервера. 4 почтовых ящика по одному на домен.
Также у меня этот сервер еще отвечает и за массовую рассылку почты от 3 доменов.
Будем использовать postfix dovecot sasl
Самже почтовый сервер будем подымать на системе Debian Linux.
Приступим,
Для настройки виртуального почтового нужно установить почтовый сервер.

# aptitude install postfix

Теперь нам надо натсроить только что установленный почтовый сервер posftix.
Добавим поддержку виртуальных пользователей.
Подданными который я в нес в конфигурационный файл я поясню. остальные стандартные настройки.

# nano /etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
#
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.pem
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_note_starttls_offer = yes
smtpd_tls_security_level = may
#
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
anvil_rate_time_unit = 300s
smtpd_client_message_rate_limit = 30
smtpd_soft_error_limit = 1
smtpd_error_sleep_time = 15
smtpd_hard_error_limit = 2
#
myhostname = mail.it.ru
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = it.local, localhost.ru, , localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 10240000
recipient_delimiter = +
inet_interfaces = all
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
virtual_mailbox_domains = domain.lock domain1.local domain2.local likeunix.ru
virtual_mailbox_base = /var/spool/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual
relay_domains = $mydestination, $virtual_mailbox_domain
# SASL
anvil_rate_time_unit = 300s
smtpd_client_message_rate_limit = 30
smtpd_soft_error_limit = 1
smtpd_error_sleep_time = 15
smtpd_hard_error_limit = 2
smtpd_sasl_auth_enable = yes
smtpd_sasl_application_name = smtpd
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_client_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_pipelining,permit
smtpd_helo_restrictions = permit
smtpd_sender_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_sender,reject_unknown_sender_domain,reject_unverified_sender,permit
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_recipient,reject_unauth_destination,reject_unknown_recipient_domain,reject_unverified_recipient,permit
smtpd_data_restrictions = permit
smtpd_end_of_data_restrictions = permit
smtpd_etrn_restrictions = permit

Такс теперь по подробнее о настройках.
Добавим к пункту relay_domains парметр $virtual_mailbox_domains

relay_domains = $mydestination, $virtual_mailbox_domains

Таким образом мы указали postfix`y принимать почту для доменов перечисленных в переменных mydestination и в virtual_mailbox_domains.
теперь укажим виртуальные почтовые ящики.

virtual_mailbox_domains = domain.lock domain1.local domain2.local likeunix.ru
# Даем понять почтовому серверу какие он домены должен обслуживать.
virtual_mailbox_base = /var/spool/mail/vhosts
# Указываем базовый путь, где будут лежать наши почтовые ящики.
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
# Укажим путь до файла, где прописаны названия виртуальных почтовых ящиков и соответствующие им относительные пути до почтовых хранилищ.
virtual_minimum_uid = 100
# Минимальный uid ( идентификатор пользователя ) который имеет владелец почтовых хранилищ.
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
# Укажим uid и gid владельца всех виртуальных почтовых хранилищ.
virtual_alias_maps = hash:/etc/postfix/virtual
# Укажим путь где будут храниться у нас алисы пользователей.

Продолжаем дальше разбирать параметры.

relay_domains = $mydestination, $virtual_mailbox_domain
# Здесь укажим те домены, почту которых наш сервер будет стараться переслать дальше соответственно старшинству MX записей для этого домена.
anvil_rate_time_unit = 100s
smtpd_client_message_rate_limit = 60
# Ограничение отправки писем за временной интервал
При данных параметрах с одного ящика можно отправить не более 60 писем за 100 секунд.
smtpd_soft_error_limit = 1
# количество ошибок удаленного клиента SMTP разрешается делать без доставки почты до сервера Postfix SMTP замедляет все свои ответы.
smtpd_error_sleep_time = 15
# ответ SMTP сервера задержки после клиента составил более $ smtpd_soft_error_limit ошибки, и меньше, чем smtpd_hard_error_limit ошибки, без доставки почты.
smtpd_hard_error_limit = 2
# максимальное количество ошибок удаленного клиента SMTP разрешается делать без доставки почты. Сервер Postfix SMTP отключается, когда предел превышен.
Если клиент вызывает ошибки и общее количество ошибок в текущем SMTP сеансе меньше или равно значению параметра smtpd_soft_error_limit, то каждая ошибка приводит к задержке на значение smtpd_error_sleep_time.
Вообщем максимальное количество ошибок, которое может сделать удаленный SMTP клиент.
smtpd_sasl_auth_enable = yes
# Включаем sasl для postfix.
smtpd_sasl_application_name = smtpd
# Укажим postfix использовать файл smtpd.conf для sasl.
smtpd_sasl_local_domain =
# Добавляет имя домена для клиентов использующих smtp.
smtpd_sasl_security_options = noanonymous
# не разрешаем никому отправлять почту с нашего сервера без авторизации!
smtpd_sasl_type = dovecot
# за авторизацию будет отвечать dovecot
smtpd_sasl_path = private/auth
# указывается относительный путь до сокета, для передачи функций аутентификации пользователей от Postfix серверу Dovecot. Полный путь до сокета складывается из пути до директории очереди Postfix + "private/auth" = "/var/spool/postfix" + "private/auth" = "/var/spool/postfix/private/auth".
broken_sasl_auth_clients = yes
# Добавил специально для поддержки outlook и outlook express.
smtpd_client_restrictions
# IP-адрес и (если возможно) доменное имя клиентского компьютера (или другого почт.сервера), который соединяется с сервером postfix для отправки письма.
smtpd_helo_restrictions
# имя компьютера и (если возможно) его IP-адрес по имени, переданному в команде HELO/EHLO hostname.
smtpd_sender_restrictions
# адрес отправителя, указанный в команде MAIL FROM: 
smtpd_recipient_restrictions
# адрес получателя, указанный в команде RCPT TO: 
smtpd_data_restrictions
# Тоже что smtpd_client_restrictions и smtpd_recipient_restrictions,
smtpd_end_of_data_restrictions
# Тоже что smtpd_client_restrictions и smtpd_data_restrictions.
smtpd_etrn_restrictions
# ТОже что smtpd_client_restrictions и smtpd_helo_restrictions.
#описание различных ограничений на приём, отправку.
#сюда можно вставлять проверки в блэклистах
mailbox_size_limit
# Емкость ящиков.
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
# эти парметры мне нужны были для рассылки, описание смотреть тут.
smtpd_tls_security_level = may
# Включаем tls для тех, кто умеет, а остальные будут не зашифрованные.
smtpd_tls_loglevel = 1
#Уровень логирования.
smtpd_tls_received_header = yes
# У меня в логах сыпались ошибки на тему (No client certificate requested), дабвил этот параметр. и все прекратилось, нужный параметр.
Запрашивать заголовки сообщений с информацией о версии протокола и шифрования.
smtpd_tls_session_cache_timeout = 3600s
#Течение данные времени кэш TLS-сессии считаются актуальным.

Остальные параметры по стандарту.
В этом конфигурационном файле я только в нес изменения касающиеся порта smpts ( 465 ) и авторизации пользователей посредством dovecot.

# cat /etc/postfix/master.cf
Этим мы разрешаем отправлять почту по безопасному порту smpts ( 465 ).
smtps     inet  n       -       -       -       -    smtpd 
  -o  smtpd_tls_wrappermode=yes
  -o  smtpd_sasl_auth_enable=yes
  -o  smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o  milter_macro_daemon_name=ORIGINATING 
также авторизацию dovecot добавим в конец файла
dovecot unix  - n n -  -  pipe flags=DRhu user=virtual:virtual argv=/usr/lib/dovecot/deliver -d ${recipient}
#

теперь создадим файл touch /etc/postfix/vmailbox
с таким содержимым.

nano /etc/postfix/vmailbox
info@donaim.local domain.local/info/
sasl@likeunix.ru likeunix.ru/sasl/
bodrol@likeunix.ru likeunix.ru/bodrol/

Где info@donaim.local название почтового ящика, а domain.local/info/ это относительный путь до почтового хранилища.
После наших изменений с файлом, вводим команду

# postmap /etc/postfix/vmailbox 

теперь должен появиться файл /etc/postfix/vmailbox.db
И сразу же создадим файл с алиасами /etc/postfix/virtual , если мы никаких алиасов не назначаем, то все равно содаим файл он должен быть.
У меня так выглядит файл алиасов

# nano /etc/postfix/virtual
sasl@likeunix.ru user@gmail.com,user12@yandex.ru

Создадим.

# postmap /etc/postfix/virtual

также появиться файл virtual.db
теперь нам нужно создать директории для наших доменов, что бы почту в них складывалась.

# /var/spool/mail/ &&  mkdir vhosts
# mkdir /var/spool/mail/vhosts/likeunix.ru/

Идем дальше и создаем пользователя с uid и gid 5000.
Чтобы он был владельцем всех наших почтовых хранилищ.

# groupadd -g 5000 virtual 
# useradd -u 5000 -g 5000 virtual 

Теперь мы укажим владельцем virtual директории /var/spool/mail/vhosts и ее дочерних директорий с файлами.
Изменим права рекурсивно, что бы на всех директориях с файлами поменялся владелец.

# chown -R virtual:virtual /var/spool/mail/vhosts 

теперь мы может перезапустить сервис postfix.

# /etc/init.d/postfix restart

Установим dovecot sasl

# aptitude install dovecot libsasl2-2 libsasl2-modules 

Теперь мы приступ к настройке dovecot.

# cat /etc/dovecot/dovecot.conf
protocols = pop3 pop3s
# Указываем какой протокол используем.
disable_plaintext_auth = no
# Указываем что можно передавть данные для авторизации на сервере в открытом виде.
log_path = /var/log/dovecot
# Лог файл.
log_timestamp = "%Y-%m-%d %H:%M:%S "
# Префикс для каждой записи в лог-файл.
ssl_cert_file = /etc/postfix/ssl/smtpd.pem
ssl_key_file = /etc/postfix/ssl/smtpd.pem
# Сертификаты.
mail_debug = no 
auth_verbose = no
auth_debug = no
auth_debug_passwords = no
# Для отладки.
mail_location = maildir:/var/spool/mail/vhosts/%d/%n
# Расположение почтовых ящиков. (%d - домен, %n - имя пользователя).
mail_uid = 5000
mail_gid = 5000
# Владелец почтовых директорий.
mail_privileged_group = virtual
# Группа владелец почтовых директорий.
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
# Если необходима совместимость UIDL с другими POP3-серверами, используте:
#  UW's ipop3d         : %08Xv%08Xu
#  Courier             : %f or %v-%u (оба могут быть использованы)
#  Cyrus (= 2.1.4)    : %v.%u
#  Dovecot v0.99.x     : %v.%u
#  tpop3d              : %Mf
#
# Имейте ввиду, что Outlook 2003 имеет проблемы с форматом %v.%u, который
# является для Dovecot форматом по умолчанию, и если настраивается новый
# сервер, то было бы неплохо изменить этот параметр.
}
protocol managesieve {
}
auth_username_format = %Ln@%Ld
auth_debug = yes
# для отладки.
auth default {
mechanisms = plain login digest-md5 cram-md5
# Указываем механизмы авторизации.
passdb passwd-file {
args = /etc/dovecot/passwd
# Файл с паролями к почтовым ящикам.
}
userdb passwd-file {
args = /etc/dovecot/users
# Файл с пользователями к почтовым ящикам.
}
# Выше видем запрос параметров виртуальных почтовых пользователей.(логин, пароль)
user = root
socket listen {
master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      user = virtual
    }
client {
path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
# от кого будет запускаться файл.
    }
  }
}
dict {
}
plugin {
}
#

Теперь создадим два файла:
# nano /etc/dovecot/users

info@domen.local::5000:5000
sasl@likeunix.ru::5000:5000

Теперь создадим пароли в зашифрованном виде.

# dovecotpw -s CRAM-MD5 -u sasl@likeunix.ru

И после выполнения действия создания пароля, на экране появиться зашифрованный пароль мы его копируем в файл passwd.
И для каждого почтового ящика.
# nano /etc/dovecot/passwd

info@domen.local:{CRAM-MD5}0eb13ba7s6f7sdwkbvxhgufwyhgyqwgey23847yt7w4hr543yg5yu34t58ygbh3y
sasl@likeunix.ru:{CRAM-MD5}40sdhd8f780sd0f9isd09hjhj4bgfg4f5jhgjhgj43h5jhjnjh43j5hjnjdfhdsf

Вот в принципе и все.Проверяем только что собранный почтовый сервер.
Осталось только сменить mx запись в днс зоне домена.
Рекомендую первой сделать наш сервер, а второй записью mx сделать хостера почтовый сервер.
Несколько команд для управлением очереди писем.
Просмотреть очередь писем.

postqueue -p
mailq

Отправить все письма находящиеся в очереди.

postqueue -f
mailq -q

Отправить все письма для определенного домена.

postqueue -s locahost.locak

После изменений в конфигурации иногда необходимо перезапустить очередь, что бы сообщения в очереди начали обрабатываться заново.

postsuper -r ALL
или
postfix stop && postsuper -r ALL && postfix start (так правильней)

Очистки очереди писем.

postsuper -d ALL

Удаления писем от определенного адресата.

mailq|grep 'locak@likeunix.ru'|awk '{print $1}'|xargs -J{} -n1 postsuper -d {} deferred

Также можно к нему сделать dkim подписи для каждого из почтовых доменом.
Postfix dkim подпись
Exim4 dkim подпись

  21 комментарий to “postfix почтовый сервер для нескольких доменов”

  1. Спасибо,
    Очень помогла, сутки потратил на поиск хорошей инструкции.

  2. Спасибочки, нужно было мне в кротчайщие сроки запустить почтовый сервер для двух доменов, ваш варинат стати мне помог.

  3. нифига не работает
    МХ определяет но при тесте уходит в таймаут…

  4. что значит тайм-айт?

  5. smtpd_soft_error_limit = 1
    smtpd_error_sleep_time = 15
    smtpd_hard_error_limit = 2

    повторяются, но проблем не будет.

  6. Уважаемый гуру, я бы хотел с Вами связаться с вопросом настройки postfix. Очень нужен Ваш совет. Заранее благодарен.

    • Пиши мне на почту, в данных о пользователе есть мой мыльник.

      • Уважаемый гуру) У меня есть к тебе вопрос по настройке постфикс. Уже всю голову сломал. не получается заставить его принимать почту с виртуального емеила. Напиши свою почту плиз или мне на мыло как с тобой связяться. Тут не смог найти твоих контактных данных! Заранее спаибо!

  7. […] Настраиваем постфикс. Полное описание параметров почтового сервера тут смотреть.Описания параметров Postfix […]

  8. Добавлю новый конфиг для dovecot 2
    # cat /etc/dovecot/dovecot.conf
    disable_plaintext_auth = no
    log_path = /var/log/dovecot.err
    log_timestamp = «%Y-%m-%d %H:%M:%S»
    ssl = yes
    ssl_cert =< /etc/dovecot/site.cert ssl_key =< /etc/dovecot/site.key login_greeting = Dovecot hello. mail_location = maildir:/var/spool/mail/%d/%n mail_uid = 5000 mail_gid = 5000 mail_privileged_group = virtual auth_verbose = yes auth_debug = yes auth_debug_passwords = yes valid_chroot_dirs = /var/spool/mail/vhosts/ auth_mechanisms = plain login digest-md5 passdb { driver = passwd-file args = scheme=CRYPT username_format=%u /etc/dovecot/passwd } userdb { driver = passwd-file args = username_format=%u /etc/dovecot/users } service auth { unix_listener auth-userdb { mode = 0660 user = virtual group = virtual } unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } } service imap-login { inet_listener imap { port = 0 } inet_listener imaps { port = 993 ssl = yes } }

  9. интересная статейка, а вот что означает biff = no и за что он отвечает не как не могу найти инфу

    • biff отвечает за уведомления о новой почте, на нагруженных почтовых серверах ее лучше отключать.
      Можешь в конфиг не добавлять biff, по умолчанию этот параметр включен.

  10. Добрый день.

    А создание почтовых доменов и почтовых ящиков к ним, можно в этом случае как-то зацепить с postfixadmin?

    • Да,
      Постфикс админ именно для этого и предназначен, админить почтовый сервер, создавать новые почтовые ящики, домены.

  11. у меня на centos стоит postfix. Настроена отправка с одного ip в
    /etc/postfix/main.cf
    smtp_bind_address = 111.111.111.111
    Для того, что везде все хорошо проходило прописана обратная зона для этого ip.
    Сейчас добавился еще один важный проект у него другие ip и другой домен, как можно заставить postfix отсылать почту для каждого домена с нужного ip?
    Нагуглил вот эту статью она для Professional у меня нет опции почтовый ip для домена. В ISP5 это уже встроено тоже.

    Вопрос: не подскажите где это ручками прописать, уже ноги сломал пытаясь разобраться и найти решение

    Заранее спасибо большое

  12. Здравствуйте!
    Подскажите, нужна ли SMTP-авторизация для почтового сервера, если он используется только для пересылки почты с неподконтрольных внутренних почтовых серверов? Или достаточно разрешить принимать почту только с указанных подсетей?

 Leave a Reply

(required)

(required)

45 Запросов к базе. 0,458 Генерации страницы, 36MB Использование памяти.
Вы зашли с IP: 54.225.16.10