Поиск по сайту:

Как настроить Postfix и Dovecot для пользователей виртуального домена в Linux. Часть 2


В предыдущей статье этой серии мы объяснили, как безопасно настроить базу данных почтового сервера и управлять ею с помощью phpMyAdmin.

Требование:

  1. Установите почтовый сервер Postfix и Dovecot с помощью MariaDB – часть 1

Теперь пришло время настроить внутренние программы, которые сделают отправку и получение электронной почты реальностью: Postfix и Dovecot (для обработки исходящей и входящей электронной почты соответственно).

Настройка почтового сервера Postfix

Прежде чем приступить к настройке Postfix, было бы полезно просмотреть его справочные страницы здесь, уделив особое внимание разделу под названием «Информация для новых пользователей Postfix». . Если вы это сделаете, вам будет легче следовать этому руководству.

Короче говоря, вы должны знать, что для Postfix существует два файла конфигурации:

  1. /etc/postfix/main.cf (параметры конфигурации Postfix, более подробную информацию см. в man 5 postconf).
  2. /etc/postfix/master.cf (конфигурация главного демона Postfix, дополнительную информацию см. в разделе man 5 master).

В /etc/postfix/main.cf найдите (или добавьте, если необходимо) следующие строки и убедитесь, что они соответствуют значениям, указанным ниже:


append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Следующие три настройки имеют особое значение. В файлах, обозначенных желтым цветом, мы настроим доступ Postfix к таблицам Domains_tbl, Users_tbl и Alias_tbl:


virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf

Обратите внимание, что вы можете выбрать разные имена файлов, указанные выше, при условии, что вы их создали и вставили в них следующее содержимое. В каждом случае замените YourPassword паролем, который вы выбрали для пользователя dba в Части 1, или вы также можете использовать MariaDB. учетные данные root для пользователя и пароль ниже.

Кроме того, убедитесь, что вы используете те же имена базы данных сервера электронной почты и таблиц, созданных в Части 1.

В /etc/postfix/mariadb-vdomains.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'

В /etc/postfix/mariadb-vusers.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'

В /etc/postfix/mariadb-valias.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'

Наконец, не забудьте изменить права доступа к этим файлам на 640:


chmod 640 /etc/postfix/mariadb-vdomains.cf
chmod 640 /etc/postfix/mariadb-vusers.cf
chmod 640 /etc/postfix/mariadb-valias.cf

И право собственности на пользователя root и группу postfix:


chown root:postfix /etc/postfix/mariadb-vdomains.cf
chown root:postfix /etc/postfix/mariadb-vusers.cf
chown root:postfix /etc/postfix/mariadb-valias.cf

Далее, чтобы включить безопасные соединения, нам необходимо убедиться, что следующие настройки раскомментированы (или добавлены, если необходимо) в /etc/postfix/master.cf:


submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp

showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
#virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

Примечание. Отступ в строках, начинающихся с параметра -o, имеет решающее значение; в противном случае проверка постфикса вернет ошибку:

Прежде чем сохранить изменения, добавьте следующие строки внизу файла:


dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

На этом этапе важно проверить, имеет ли Postfix доступ к таблицам базы данных, а также доменам, учетным записям и псевдонимам, которые мы создали в Части 1.

Для этого мы воспользуемся командой postmap — утилитой для проверки связи с таблицами, которые Postfix будет искать во время работы, но прежде всего нам нужно перезапустить postfix:


systemctl postfix restart
postmap -q linuxnewz.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q someotherdomain.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-valias.cf

На изображении ниже мы видим, что для существующих записей в базе данных возвращается 1. В противном случае на экране ничего не отображается. В случае проверки псевдонима обратите внимание, что возвращается фактическая учетная запись электронной почты, с которой сопоставлен псевдоним:

Обратите внимание, что мы НЕ аутентифицируемся по учетным данным, установленным для каждой учетной записи электронной почты, мы только тестируем способность Postfix обнаруживать эти записи в базе данных.

Таким образом, если вы получаете результат, отличный от приведенного выше, убедитесь, что вы используете действительную пару пользователь/пароль в mariadb-vdomains.cf, mariadb-vusers.cf и mariadb-valias.cf (или как вы хотите назвать эти файлы).

Настройка Dovecot

В качестве сервера IMAP/POP3 Dovecot предоставляет пользователям возможность использовать Mail User Agent (MUA или также известный как клиент), например Thunderbird или Outlook, и это лишь несколько примеров доступа к их почте.

Для начала давайте создадим пользователя и группу для обработки электронной почты (это нам понадобится, поскольку наши учетные записи электронной почты не связаны с пользователем системы). Вы можете использовать другие UID и GID (кроме 5000, как показано ниже), если они не используются и имеют большое число:


groupadd -g 5000 vmail 
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Настройки Dovecot разделены на несколько файлов конфигурации (убедитесь, что следующие строки раскомментированы и/или отредактируйте их, чтобы они соответствовали настройкам, указанным ниже).

В /etc/dovecot/dovecot.conf:


!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf

В /etc/dovecot/conf.d/10-auth.conf (включите только аутентификацию через SQL и оставьте другие методы аутентификации закомментированными):


disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

В /etc/dovecot/conf.d/auth-sql.conf.ext (обратите внимание, что мы будем хранить электронные письма в каталоге с именем yourdomain.com внутри / home/vmail, который необходимо создать, если он не существует. В нашем случае мы использовали mkdir /home/vmail/linuxnewz.com для управления электронной почтой для этого домена):


passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}

Отдельные почтовые ящики для учетных записей пользователей будут созданы при первом получении электронных писем для таких учетных записей.

В /etc/dovecot/conf.d/10-mail.conf:


mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
  inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl

В /etc/dovecot/conf.d/10-master.conf:


service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
   mode = 0600
   user = vmail
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}
service dict {
  unix_listener dict {
  }
}

В /etc/dovecot/conf.d/10-ssl.conf (замените пути к сертификату и ключу, если вы планируете использовать сертификат, подписанный центром сертификации):


ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

В /etc/dovecot/dovecot-sql.conf.ext введите информацию о вашей базе данных и учетные данные администратора, созданного в Части 1.

Важно: если ваш пароль содержит звездочку (#), вам нужно будет заключить строку подключения, как показано в примере ниже:


driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=PassWith#Here"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';

Кроме того, вы можете настроить ведение журналов для Dovecot отдельно от Postfix в /etc/dovecot/conf.d/10-logging.conf:


log_path = /var/log/dovecot.log

Наконец, убедитесь, что журнал Dovecot доступен пользователю dovecot:


chown vmail:dovecot /var/log/dovecot.log
chmod 660 /var/log/dovecot.log

Проверьте и исправьте конфигурацию Postifix и включите SMTP, POP3 и IMAP в брандмауэре.

Если у вас возникнут какие-либо проблемы при настройке Postfix и/или Dovecot, вместо отправки всех файлов конфигурации с просьбой о помощи вы можете получить сводку конфигурации (только строки без комментариев) с помощью:


postconf –n # Summary for /etc/postfix/main.cf
postconf –M # Summary for /etc/postfix/master.cf
doveconf –n # Summary of all configuration files for Dovecot

Кроме того, убедитесь, что почтовые ящики доступны для чтения только vmail:


chown –R vmail:vmail /home/vmail

Файлы конфигурации также должны быть доступны для чтения пользователями vmail и dovecot:


chown -R vmail:dovecot /etc/dovecot 
chmod -R o-rwx /etc/dovecot 

Наконец, убедитесь, что вы включили SMTP, POP3 и IMAP через брандмауэр:


firewall-cmd --add-port=143/tcp
firewall-cmd --add-port=143/tcp --permanent
firewall-cmd --add-port=110/tcp
firewall-cmd --add-port=110/tcp --permanent
firewall-cmd --add-port=587/tcp
firewall-cmd --add-port=587/tcp --permanent

Настройте Thunderbird в качестве почтового клиента для Postfix

Обеспечив доступ через брандмауэр к портам, используемым в электронной почте, пришло время настроить почтовый клиент. Используя [email  и соответствующий пароль, а также mail.linuxnewz.com в качестве сервера IMAP (или POP3) и SMTP, мы готовы начать отправлять и получать электронные письма на и с такого аккаунта:

Вы можете спокойно игнорировать отображаемое предупреждающее сообщение, поскольку вы используете сертификат, не подписанный доверенным сторонним центром сертификации:

Давайте составим краткое тестовое письмо и нажмем «Отправить»:

Когда будет предложено принять самозаверяющий сертификат для исходящего сервера, подтвердите его, как и раньше:

Наконец, перейдите к адресу электронной почты и проверьте, получили ли вы только что отправленное письмо. Если да, ответьте на него и посмотрите, доставлено ли оно обратно в исходный почтовый ящик (в противном случае обратитесь к журналу Postfix по адресу /var/log/maillog или журналу Dovecot по адресу /var). /log/dovecot.log для получения информации об устранении неполадок):

Теперь у вас есть работающий почтовый сервер Postfix и Dovecot, и вы можете начать отправлять и получать электронные письма.

Краткое содержание

В этой статье мы объяснили, как настроить Postfix и Dovecot для обработки почтового трафика на вашем сервере Linux. Если что-то не работает так, как указано в этой статье, обязательно уделите время проверке документации Postfix и Dovecot.

Обратите внимание: хотя настройка почтового сервера Postfix — непростая задача, это полезный опыт для каждого системного администратора.

Если после изучения документации вы обнаружите, что все еще испытываете трудности с Postfix и/или Dovecot, напишите нам, используя форму комментариев ниже, и мы будем рады вам помочь. помочь вам (не забудьте загрузить в онлайн-хранилище конфигурацию Postfix и Dovecot, полученную с помощью postconf и doveconf, как описано в этой статье).