Почтовый сервер Postfix Dovecot: различия между версиями
Pauli (обсуждение | вклад) |
|||
(не показаны 24 промежуточные версии 8 участников) | |||
Строка 1: | Строка 1: | ||
{{stub}} | {{stub}} | ||
В этой статье описывается минимальная настройка почтового сервера на основе Postfix (SMTP) и Dovecot (IMAP, POP3) c авторизаций пользователей через LDAP в Samba4 DC.<br> | В этой статье описывается минимальная настройка почтового сервера на основе Postfix (SMTP) и Dovecot (IMAP, POP3) c авторизаций пользователей через LDAP в Samba4 DC.<br> | ||
Предполагается что уже есть | Предполагается что уже есть настроенная Samba4 в роли контроллера домена. Исходные данные: | ||
*Домен: '''test.alt''' | *Домен: '''test.alt''' | ||
*Контроллер домена: '''dc.test.alt''' | *Контроллер домена: '''dc.test.alt''' | ||
Строка 7: | Строка 7: | ||
*Сгенерированные сертификаты и ключи для Dovecot и Postfix | *Сгенерированные сертификаты и ключи для Dovecot и Postfix | ||
*Пользователь для доступа к LDAP серверу: ldapbind | *Пользователь для доступа к LDAP серверу: ldapbind | ||
== Подготовка == | |||
1. Создайте SambaDC-домен | |||
*[[SambaDC|см. здесь]] | |||
*[[SambaAD_start|или здесь]] (альтернативная инструкция) | |||
* Настройте TLS/SSL для OpenLDAP https://www.altlinux.org/OpenLDAP/TLS | |||
2.[[Создание самоподписанных сертификатов|Сгенерируйте сертификаты и ключи для Dovecot и Postfix]] | |||
3. Создайте на контроллере домена учетную запись '''ldapbind''' | |||
# samba-tool user create ldapbind | |||
== Установка и предварительная настройка == | == Установка и предварительная настройка == | ||
Для работы почтового сервера необходимо установить следующие пакеты: | Для работы почтового сервера необходимо установить следующие пакеты: | ||
<source lang="bash"># apt-get install postfix-dovecot postfix-ldap postfix dovecot</source> | <source lang="bash"># apt-get install postfix-dovecot postfix-ldap postfix-tls postfix dovecot</source> | ||
Проверим работу DNS: | Проверим работу DNS: | ||
<pre># dig +short -t A dc. | <pre># dig +short -t A dc.test.alt | ||
10.10.105.1 | 10.10.105.1 | ||
# dig +short -t A mail.test.alt | # dig +short -t A mail.test.alt | ||
Строка 17: | Строка 29: | ||
Проверим доступ к LDAP-серверу: | Проверим доступ к LDAP-серверу: | ||
<pre># ldapsearch -h dc.test.alt -p 389 -W -D "ldapbind@test.alt" -b "cn=Users,dc=test,dc=alt"</pre> | <pre># ldapsearch -h dc.test.alt -p 389 -W -D "ldapbind@test.alt" -b "cn=Users,dc=test,dc=alt"</pre> | ||
{{Note|Если ldapsearch не найдена, потребуется<br># apt-get update && apt-get install openldap-clients}} | |||
Если подключения не произошло и появилась ошибка связанная с безопасностью подключения:<br> | |||
<pre>ldap_bind: Strong(er) authentication required (8) <br> | |||
additional info: BindSimple: Transport encryption required. </pre> | |||
То необходимо добавить строчку в /etc/samba/smb.conf на сервере-контроллере домена в секцию [global] (не забудьте про отступ):<br> | |||
<pre> ldap server require strong auth = No </pre> | |||
И перезапустить службу: | |||
service samba restart | |||
Это команда должна выдать информацию о пользователях. | Это команда должна выдать информацию о пользователях. | ||
Все почтовые ящики пользователей будут хранится в директории {{path|/var/vmail}} и обрабатываться системным пользователем vmail c домашней директорией {{path|/var/vmail}}.<br> | Все почтовые ящики пользователей будут хранится в директории {{path|/var/vmail}} и обрабатываться системным пользователем vmail c домашней директорией {{path|/var/vmail}}.<br> | ||
Создадим пользователя vmail и его домашнюю директорию: | Создадим пользователя vmail и его домашнюю директорию: | ||
<pre># useradd -b /var -m -s /bin/false vmail</pre> | <pre># useradd -b /var -m -s /bin/false vmail</pre> | ||
== Настройка Dovecot == | == Настройка Dovecot == | ||
Создадим файл {{path|/etc/dovecot/dovecot-ldap.conf.ext}} параметров подключения Dovecot к LDAP: | Создадим файл {{path|/etc/dovecot/dovecot-ldap.conf.ext}} параметров подключения Dovecot к LDAP: | ||
Строка 43: | Строка 64: | ||
# Где искать в LDAP | # Где искать в LDAP | ||
base = cn=Users,dc= | base = cn=Users,dc=test,dc=alt | ||
deref = never | deref = never | ||
Строка 49: | Строка 70: | ||
scope = subtree | scope = subtree | ||
# Использовать фильтр для поиска пользователей - искать только пользователей (sAMAccountType=805306368), у которых совпадает c переданным логином IMAP или имя пользователя (userPrincipalName=%Lu) или электронная почта (mail=%Lu) | # Использовать фильтр для поиска пользователей - искать только пользователей (sAMAccountType=805306368), | ||
# у которых совпадает c переданным логином IMAP или имя пользователя (userPrincipalName=%Lu) или электронная почта (mail=%Lu) | |||
user_filter = (&(sAMAccountType=805306368)(|(userPrincipalName=%Lu)(mail=%Lu))) | user_filter = (&(sAMAccountType=805306368)(|(userPrincipalName=%Lu)(mail=%Lu))) | ||
Строка 80: | Строка 102: | ||
auth_mechanisms = plain login | auth_mechanisms = plain login | ||
# Убираем локальную авторизацию | |||
# !include auth-system.conf.ext | |||
# Добавляем поддержку аутентификации в LDAP | # Добавляем поддержку аутентификации в LDAP | ||
!include auth-ldap.conf.ext</pre> | !include auth-ldap.conf.ext</pre> | ||
Строка 87: | Строка 111: | ||
# Указываем системного пользователя, созданного реннее, для работы с почтой и минимальные/максимальные gid/uid пользователей имеющих право работать с почтой (id vmail) | # Указываем системного пользователя, созданного реннее, для работы с почтой и минимальные/максимальные gid/uid пользователей имеющих право работать с почтой (id vmail) | ||
# Для AltLinux uid/gid 501 | |||
mail_uid = vmail | mail_uid = vmail | ||
mail_gid = vmail | mail_gid = vmail | ||
first_valid_uid = | first_valid_uid = 501 | ||
last_valid_uid = | last_valid_uid = 501 | ||
first_valid_gid = | first_valid_gid = 501 | ||
last_valid_gid = | last_valid_gid = 501 | ||
# Метод блокировок записи | # Метод блокировок записи | ||
mbox_write_locks = fcntl</pre> | mbox_write_locks = fcntl</pre> | ||
Далее настраваем параметра SSL Dovecot в файле {{path|/etc/dovecot/conf. | Далее настраваем параметра SSL Dovecot в файле {{path|/etc/dovecot/conf.d/10-ssl.conf}}: | ||
ssl = required | <pre>ssl = required | ||
ssl_cert = </etc/dovecot/imap.test.alt.crt | ssl_cert = </etc/dovecot/imap.test.alt.crt | ||
ssl_key = </etc/dovecot/imap.test.alt.key | ssl_key = </etc/dovecot/imap.test.alt.key</pre> | ||
Далее настраиваем сокет авторизации для postfix. Он настраивается в файле {{path|/etc/dovecot/conf.d/10-master.conf}} секция {{path|service auth}}: | |||
<pre>service auth { | |||
unix_listener auth-userdb { | |||
mode = 0660 | |||
user = vmail | |||
} | |||
unix_listener /var/spool/postfix/private/auth { | |||
mode = 0660 | |||
user = postfix | |||
group = postfix | |||
} | |||
}</pre> | |||
В этом же файле настроим сокет для приема писем из postfix-a - секция {{path|service lmtp}}: | |||
<pre>service lmtp { | |||
unix_listener /var/spool/postfix/private/dovecot-lmtp { | |||
group = postfix | |||
mode = 0600 | |||
user = postfix | |||
} | |||
user = vmail | |||
}</pre> | |||
В файле {{path|/etc/dovecot/dovecot.conf}} можно все оставить по умолчанию, например он может выглядеть так: | |||
<pre>protocols = imap pop3 lmtp | |||
listen = * | |||
base_dir = /var/run/dovecot/ | |||
login_greeting = Dovecot ready. | |||
dict { | |||
} | |||
!include conf.d/*.conf</pre> | |||
Теперь можно запускать и добавлять в автозагрузку сервис dovecot: | |||
<pre># service dovecot enable | |||
# service dovecot start</pre> | |||
== Настройка Postfix == | |||
Настраиваем параметры postfix в файле {{path|/etc/postfix/main.cf}}: | |||
<pre># Использовать ipv4 и слушать на всех интерфейсах | |||
inet_protocols = ipv4 | |||
inet_interfaces = all | |||
# Следующие параметры оставляем без изменения | |||
queue_directory = /var/spool/postfix | |||
command_directory = /usr/sbin | |||
daemon_directory = /usr/libexec/postfix | |||
data_directory = /var/lib/postfix | |||
mail_owner = postfix | |||
# Задаем полное имя сервера, которым postfix будет представляться при отправке/получении почты | |||
myhostname = mail.test.alt | |||
# Задаем имя нашего домена | |||
mydomain = test.alt | |||
# Имя от которого будут посылаться письма с локальной машины | |||
myorigin = mail.test.alt | |||
# Параметр указывает для каких доменов почта будет доставляться локально без пересылки на другие сервера | |||
mydestination = $myhostname, localhost.$mydomain, localhost | |||
# Указываем как доставляется локальная почта | |||
local_transport = virtual | |||
# Указываем как определять локальных пользователей | |||
local_recipient_maps = $virtual_mailbox_maps | |||
# Номер ошибки посылаемый оправителю при отказе | |||
unknown_local_recipient_reject_code = 550 | |||
# Задаем список виртуальных доменов | |||
virtual_mailbox_domains = test.alt | |||
virtual_mailbox_base = /var/mail/vhosts | |||
# Список разрешенных пользователей | |||
virtual_mailbox_maps = ldap:/etc/postfix/ldap/local_recipients.cf | |||
# Указываем сокет для доставки писем в dovecot | |||
virtual_transport = lmtp:unix:private/dovecot-lmtp | |||
# Указываем сертификаты, ключи SSL и включаем безопасные соединения и аутентификацию | |||
smtpd_tls_cert_file = /etc/postfix/smtp.test.alt.crt | |||
smtpd_tls_key_file = /etc/postfix/smtp.test.alt.key | |||
smtpd_use_tls = yes | |||
smtpd_tls_auth_only = yes | |||
# Настраиваем правила фильтрации писем | |||
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access | |||
# Указываем опции SASL аутентификации через dovecot | |||
smtpd_sasl_auth_enable = yes | |||
smtpd_sasl_security_options = noanonymous | |||
broken_sasl_auth_clients = yes | |||
smtpd_sasl_type = dovecot | |||
smtpd_sasl_path = private/auth | |||
smtpd_sasl_local_domain = $myorigin</pre> | |||
Для работы smtps раскоментируем следующие строки в файле {{path|/etc/postfix/master.cf}}: | |||
<pre>smtps inet n - - - - smtpd | |||
-o smtpd_tls_wrappermode=yes | |||
-o smtpd_sasl_auth_enable=yes | |||
-o smtpd_client_restrictions=permit_sasl_authenticated,reject | |||
</pre> | |||
Далее создадим каталог ldap и добавим файлы с правилами, указанные выше: | |||
<pre># mkdir /etc/postfix/ldap</pre> | |||
В этом каталоге создадим файл {{path|local_recipients.cf}}, который проверяет считать ли пользователя локальным: | |||
<pre>debuglevel = 0 | |||
version = 3 | |||
server_host = dc.test.alt | |||
bind_dn = ldapbind@test.alt | |||
bind_pw = PaSSword | |||
search_base = dc=test,dc=alt | |||
search_scope = subtree | |||
query_filter = (&(|(userPrincipalName=%u@%d)(mail=%u@%d)(otherMailbox=%u@%d))(sAMAccountType=805306368)) | |||
result_attribute = userPrincipalName | |||
cache = no</pre> | |||
Запускаем и добавляем в автозагрузку сервис postfix: | |||
<pre># systemctl enable postfix | |||
# systemctl start postfix</pre> | |||
== Проверка работоспособности == | |||
Создадим в домене двух пользователей u01test (u01test@test.alt) и u02test (u02test@test.alt). Настроим почтовый клиент и попробуем посылать письма от одного пользователя другому. |
Текущая версия от 10:26, 3 ноября 2023
В этой статье описывается минимальная настройка почтового сервера на основе Postfix (SMTP) и Dovecot (IMAP, POP3) c авторизаций пользователей через LDAP в Samba4 DC.
Предполагается что уже есть настроенная Samba4 в роли контроллера домена. Исходные данные:
- Домен: test.alt
- Контроллер домена: dc.test.alt
- Почтовый сервер: mail.test.alt
- Сгенерированные сертификаты и ключи для Dovecot и Postfix
- Пользователь для доступа к LDAP серверу: ldapbind
Подготовка
1. Создайте SambaDC-домен
- см. здесь
- или здесь (альтернативная инструкция)
- Настройте TLS/SSL для OpenLDAP https://www.altlinux.org/OpenLDAP/TLS
2.Сгенерируйте сертификаты и ключи для Dovecot и Postfix
3. Создайте на контроллере домена учетную запись ldapbind
# samba-tool user create ldapbind
Установка и предварительная настройка
Для работы почтового сервера необходимо установить следующие пакеты:
# apt-get install postfix-dovecot postfix-ldap postfix-tls postfix dovecot
Проверим работу DNS:
# dig +short -t A dc.test.alt 10.10.105.1 # dig +short -t A mail.test.alt 10.10.105.2
Проверим доступ к LDAP-серверу:
# ldapsearch -h dc.test.alt -p 389 -W -D "ldapbind@test.alt" -b "cn=Users,dc=test,dc=alt"
# apt-get update && apt-get install openldap-clients
Если подключения не произошло и появилась ошибка связанная с безопасностью подключения:
ldap_bind: Strong(er) authentication required (8) <br> additional info: BindSimple: Transport encryption required.
То необходимо добавить строчку в /etc/samba/smb.conf на сервере-контроллере домена в секцию [global] (не забудьте про отступ):
ldap server require strong auth = No
И перезапустить службу:
service samba restart
Это команда должна выдать информацию о пользователях.
Все почтовые ящики пользователей будут хранится в директории /var/vmail и обрабатываться системным пользователем vmail c домашней директорией /var/vmail.
Создадим пользователя vmail и его домашнюю директорию:
# useradd -b /var -m -s /bin/false vmail
Настройка Dovecot
Создадим файл /etc/dovecot/dovecot-ldap.conf.ext параметров подключения Dovecot к LDAP:
# Контроллер домена (сервер LDAP) hosts = dc.test.alt # Пользователь и пароль для подключения к LDAP dn = ldapbind@test.alt dnpass = 'PaSSword' # Следующая опция позволяет аутентифицировать пользователей с помощью подключения к серверу LDAP с их аутентификационными данными auth_bind = yes # Преобразуем все имена пользователей в нижний регистр auth_bind_userdn = %Lu # Используем защищенное LDAP соединение tls = yes # Версия протокола LDAP ldap_version = 3 # Где искать в LDAP base = cn=Users,dc=test,dc=alt deref = never # Искать во всех вложенных объектах scope = subtree # Использовать фильтр для поиска пользователей - искать только пользователей (sAMAccountType=805306368), # у которых совпадает c переданным логином IMAP или имя пользователя (userPrincipalName=%Lu) или электронная почта (mail=%Lu) user_filter = (&(sAMAccountType=805306368)(|(userPrincipalName=%Lu)(mail=%Lu))) # Указываем расположение домашнего каталога подсоединенного пользователя, параметр "%$" будет заменен на значение userPrincipalName (формата user@domain) user_attrs = userPrincipalName=home=/var/vmail/%$ # Использовать фильтр для паролей pass_filter = (&(sAMAccountType=805306368)(userPrincipalName=%Lu)) # Указываем имя пользователя найденное в LDAP pass_attrs = userPrincipalName=user
Ссылка на этот конфигурационный файл есть в файле /etc/dovecot/conf.d/auth-ldap.conf.ext:
passdb { driver = ldap args = /etc/dovecot/dovecot-ldap.conf.ext } userdb { driver = ldap args = /etc/dovecot/dovecot-ldap.conf.ext }
Далее настраиваем параметры аутентификации в файле /etc/dovecot/conf.d/10-auth.conf:
# Добавляемое к имени пользователю имя домена по умочанию (если пользователь введет имя user, то для dovecot он будет user@test.alt) auth_default_realm = test.alt # Преобразуем все имена пользователей в нижний регистр auth_username_format = %Lu # Указываем методы аутентификации auth_mechanisms = plain login # Убираем локальную авторизацию # !include auth-system.conf.ext # Добавляем поддержку аутентификации в LDAP !include auth-ldap.conf.ext
Далее настраиваем параметры работы с почтой в файле /etc/dovecot/conf.d/10-mail.conf:
# Настроим формат и расположение почты пользователей, %h - указывает, что почта располагается в домашнем каталоге пользователя установленном в параметре user_attrs файла dovecot-ldap.conf.ext mail_location = maildir:%h # Указываем системного пользователя, созданного реннее, для работы с почтой и минимальные/максимальные gid/uid пользователей имеющих право работать с почтой (id vmail) # Для AltLinux uid/gid 501 mail_uid = vmail mail_gid = vmail first_valid_uid = 501 last_valid_uid = 501 first_valid_gid = 501 last_valid_gid = 501 # Метод блокировок записи mbox_write_locks = fcntl
Далее настраваем параметра SSL Dovecot в файле /etc/dovecot/conf.d/10-ssl.conf:
ssl = required ssl_cert = </etc/dovecot/imap.test.alt.crt ssl_key = </etc/dovecot/imap.test.alt.key
Далее настраиваем сокет авторизации для postfix. Он настраивается в файле /etc/dovecot/conf.d/10-master.conf секция service auth:
service auth { unix_listener auth-userdb { mode = 0660 user = vmail } unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } }
В этом же файле настроим сокет для приема писем из postfix-a - секция service lmtp:
service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } user = vmail }
В файле /etc/dovecot/dovecot.conf можно все оставить по умолчанию, например он может выглядеть так:
protocols = imap pop3 lmtp listen = * base_dir = /var/run/dovecot/ login_greeting = Dovecot ready. dict { } !include conf.d/*.conf
Теперь можно запускать и добавлять в автозагрузку сервис dovecot:
# service dovecot enable # service dovecot start
Настройка Postfix
Настраиваем параметры postfix в файле /etc/postfix/main.cf:
# Использовать ipv4 и слушать на всех интерфейсах inet_protocols = ipv4 inet_interfaces = all # Следующие параметры оставляем без изменения queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix # Задаем полное имя сервера, которым postfix будет представляться при отправке/получении почты myhostname = mail.test.alt # Задаем имя нашего домена mydomain = test.alt # Имя от которого будут посылаться письма с локальной машины myorigin = mail.test.alt # Параметр указывает для каких доменов почта будет доставляться локально без пересылки на другие сервера mydestination = $myhostname, localhost.$mydomain, localhost # Указываем как доставляется локальная почта local_transport = virtual # Указываем как определять локальных пользователей local_recipient_maps = $virtual_mailbox_maps # Номер ошибки посылаемый оправителю при отказе unknown_local_recipient_reject_code = 550 # Задаем список виртуальных доменов virtual_mailbox_domains = test.alt virtual_mailbox_base = /var/mail/vhosts # Список разрешенных пользователей virtual_mailbox_maps = ldap:/etc/postfix/ldap/local_recipients.cf # Указываем сокет для доставки писем в dovecot virtual_transport = lmtp:unix:private/dovecot-lmtp # Указываем сертификаты, ключи SSL и включаем безопасные соединения и аутентификацию smtpd_tls_cert_file = /etc/postfix/smtp.test.alt.crt smtpd_tls_key_file = /etc/postfix/smtp.test.alt.key smtpd_use_tls = yes smtpd_tls_auth_only = yes # Настраиваем правила фильтрации писем smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access # Указываем опции SASL аутентификации через dovecot smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_local_domain = $myorigin
Для работы smtps раскоментируем следующие строки в файле /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
Далее создадим каталог ldap и добавим файлы с правилами, указанные выше:
# mkdir /etc/postfix/ldap
В этом каталоге создадим файл local_recipients.cf, который проверяет считать ли пользователя локальным:
debuglevel = 0 version = 3 server_host = dc.test.alt bind_dn = ldapbind@test.alt bind_pw = PaSSword search_base = dc=test,dc=alt search_scope = subtree query_filter = (&(|(userPrincipalName=%u@%d)(mail=%u@%d)(otherMailbox=%u@%d))(sAMAccountType=805306368)) result_attribute = userPrincipalName cache = no
Запускаем и добавляем в автозагрузку сервис postfix:
# systemctl enable postfix # systemctl start postfix
Проверка работоспособности
Создадим в домене двух пользователей u01test (u01test@test.alt) и u02test (u02test@test.alt). Настроим почтовый клиент и попробуем посылать письма от одного пользователя другому.