Понадобилось мне настроить почтовый сервер что бы он обслуживал 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 [email protected] domain.local/info/ [email protected] likeunix.ru/sasl/ [email protected] likeunix.ru/bodrol/
Где [email protected] название почтового ящика, а domain.local/info/ это относительный путь до почтового хранилища.
После наших изменений с файлом, вводим команду
# postmap /etc/postfix/vmailbox
теперь должен появиться файл /etc/postfix/vmailbox.db
И сразу же создадим файл с алиасами /etc/postfix/virtual , если мы никаких алиасов не назначаем, то все равно содаим файл он должен быть.
У меня так выглядит файл алиасов
# nano /etc/postfix/virtual [email protected] [email protected],[email protected]
Создадим.
# 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
[email protected]::5000:5000 [email protected]::5000:5000
Теперь создадим пароли в зашифрованном виде.
# dovecotpw -s CRAM-MD5 -u [email protected]
И после выполнения действия создания пароля, на экране появиться зашифрованный пароль мы его копируем в файл passwd.
И для каждого почтового ящика.
# nano /etc/dovecot/passwd
[email protected]:{CRAM-MD5}0eb13ba7s6f7sdwkbvxhgufwyhgyqwgey23847yt7w4hr543yg5yu34t58ygbh3y [email protected]:{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 '[email protected]'|awk '{print $1}'|xargs -J{} -n1 postsuper -d {} deferred
Также можно к нему сделать dkim подписи для каждого из почтовых доменом.