Понадобилось мне настроить почтовый сервер что бы он обслуживал 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 подписи для каждого из почтовых доменом.
RSS & RSS to Email