Установка и настройка Postfix и Dovecot

Установка и настройка Postfix и Dovecot

Фото Тумису

Это вторая публикация из серии «Настройка и конфигурирование почтового сервера» . В ней мы покажем вам, как установить и настроить Postfix и Dovecot — два основных компонента нашей почтовой системы.

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

Это руководство было написано для Ubuntu 16.04, однако те же шаги с небольшими изменениями должны работать на любой более новой версии Ubuntu .

Предпосылки

Прежде чем продолжить работу с этим руководством, убедитесь, что вы вошли в систему как пользователь с привилегиями sudo .

Установка Postfix и Dovecot

Пакеты Dovecot в стандартных репозиториях Ubuntu устарели. Чтобы воспользоваться модулем imap_sieve , мы установим Dovecot из репозитория сообщества Dovecot.

Добавьте ключ GPG репозитория в вашу связку ключей apt sources с помощью следующей команды wget :

 wget -O- https://repo.dovecot.org/DOVECOT-REPO-GPG | sudo apt-key add -

Включите репозиторий сообщества Dovecot с помощью следующей команды:

 echo "deb https://repo.dovecot.org/ce-2.3-latest/ubuntu/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/dovecot.list
 sudo apt update sudo debconf-set-selections <<< "postfix postfix/mailname string $(hostname -f)" sudo debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'" sudo apt install postfix postfix-mysql dovecot-imapd dovecot-lmtpd dovecot-pop3d dovecot-mysql

Конфигурация постфикса

Мы настроим Postfix для использования виртуальных почтовых ящиков и доменов.

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

 sudo mkdir -p /etc/postfix/sql

Откройте текстовый редактор и создайте следующие файлы:

/etc/postfix/sql/mysql_virtual_domains_maps.cf

 user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'

/etc/postfix/sql/mysql_virtual_alias_maps.cf

 user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf

 user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

 user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

/etc/postfix/sql/mysql_virtual_mailbox_maps.cf

 user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf

 user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'

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

 sudo postconf -e "virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf" sudo postconf -e "virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf" sudo postconf -e "virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf"

Команда postconf отображает фактические значения параметров конфигурации, изменяет значения параметров конфигурации или отображает другую информацию о конфигурации почтовой системы Postfix.

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

 sudo postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"

Задайте параметры TL, используя ранее сгенерированный SSL-сертификат Let's Encrypt:

 sudo postconf -e 'smtp_tls_security_level = may' sudo postconf -e 'smtpd_tls_security_level = may' sudo postconf -e 'smtp_tls_note_starttls_offer = yes' sudo postconf -e 'smtpd_tls_loglevel = 1' sudo postconf -e 'smtpd_tls_received_header = yes' sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mail.linuxgazette.ru/fullchain.pem' sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.linuxgazette.ru/privkey.pem'

Настройте параметры аутентифицированного SMTP и передайте аутентификацию Dovecot:

 sudo postconf -e 'smtpd_sasl_type = dovecot' sudo postconf -e 'smtpd_sasl_path = private/auth' sudo postconf -e 'smtpd_sasl_local_domain =' sudo postconf -e 'smtpd_sasl_security_options = noanonymous' sudo postconf -e 'broken_sasl_auth_clients = yes' sudo postconf -e 'smtpd_sasl_auth_enable = yes' sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'

Нам также потребуется отредактировать главный файл конфигурации Postfix master.cf и включить порт отправки ( 587 ) и порт smtps ( 465 ).

Откройте файл с помощью текстового редактора и раскомментируйте/отредактируйте следующие строки:

/etc/postfix/master.cf

 submission inet n - y - - 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_client_restrictions = permit_sasl_authenticated,reject # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name = ORIGINATING smtps inet n - y - - smtpd -o syslog_name = postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions = permit_sasl_authenticated,reject # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name = ORIGINATING

Перезапустите службу postfix, чтобы изменения вступили в силу.

 sudo systemctl restart postfix

На этом этапе вы успешно настроили службу Postfix.

Настроить Dovecot

В этом разделе мы настроим Dovecot в соответствии с нашими настройками. Не забудьте отредактировать строки, выделенные жёлтым цветом.

Начните с настройки файла dovecot-sql.conf.ext , который указывает Dovecot, как получить доступ к базе данных и как найти информацию об учетных записях электронной почты.

/etc/dovecot/dovecot-sql.conf.ext

 driver = mysql connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=P4ssvv0rD default_pass_scheme = MD5-CRYPT iterate_query = SELECT username AS user FROM mailbox user_query = SELECT CONCAT('/var/mail/vmail/',maildir) AS home,  CONCAT('maildir:/var/mail/vmail/',maildir) AS mail,  5000 AS uid, 5000 AS gid, CONCAT('*:bytes=',quota) AS quota_rule  FROM mailbox WHERE username = '%u' AND active = 1 password_query = SELECT username AS user,password FROM mailbox  WHERE username = '%u' AND active='1'

Не забудьте использовать правильные учетные данные MySQL (имя базы данных, имя пользователя и пароль).

Далее отредактируйте файл conf.d/10-mail.conf и отредактируйте следующие переменные:

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

 ... mail_location = maildir:/var/mail/vmail/%d/%n ... mail_uid = vmail mail_gid = vmail ... first_valid_uid = 5000 last_valid_uid = 5000 ... mail_privileged_group = vmail ... mail_plugins = quota ...

Чтобы аутентификация заработала, откройте conf.d/10-auth.conf , отредактируйте следующие строки и включите файл auth-sql.conf.ext :

/etc/dovecot/conf.d/10-auth.conf

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

Откройте файл conf.d/10-master.conf и измените его следующим образом:

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

 ... service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } ... } ... service auth { ... unix_listener auth-userdb { mode = 0600 user = vmail group = vmail } ... unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } ... } ... service auth-worker { user = vmail } ... service dict { unix_listener dict { mode = 0660 user = vmail group = vmail } } ...

Откройте conf.d/10-ssl.conf и включите SSL/TLS.

/etc/dovecot/conf.d/10-ssl.conf

 ... ssl = yes ... ssl_cert =  ssl_key =  ssl_dh =  ... ssl_cipher_list = EECDH+AES:EDH+AES+aRSA ... ssl_prefer_server_ciphers = yes ...

Убедитесь, что вы используете правильный путь к файлам SSL-сертификата.

Если вы следовали этой серии с самого начала, файлы fullchain.pem , privkey.pem и dhparam.pem уже должны быть созданы на вашем сервере. Подробнее о создании бесплатного SSL-сертификата Let's Encrypt и ключа Диффи–Хеллмана можно узнать в этом руководстве .

Спасибо Невину за то, что он заметил проблему и предложил решение.

Откройте файл conf.d/20-imap.conf и активируйте плагин imap_quota :

/etc/dovecot/conf.d/20-imap.conf

 ... protocol imap { ... mail_plugins = $mail_plugins imap_quota ... } ...

Откройте файл conf.d/20-lmtp.conf и отредактируйте его следующим образом:

/etc/dovecot/conf.d/20-lmtp.conf

 ... protocol lmtp { postmaster_address = postmaster@linuxgazette.ru mail_plugins = $mail_plugins } ...

Определите почтовые ящики по умолчанию в файле conf.d/15-mailboxes.conf :

/etc/dovecot/conf.d/15-mailboxes.conf

 ... mailbox Drafts { special_use = Drafts } mailbox Spam { special_use = Junk auto = subscribe } mailbox Junk { special_use = Junk } ...

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

Теперь нам нужно настроить Dovecot для подключения к базе данных, обработки квот и запуска скрипта, который отправляет пользователю письмо при превышении квоты. Для этого откройте файл conf.d/90-quota.conf и измените его следующим образом:

/etc/dovecot/conf.d/90-quota.conf

 plugin { quota = dict:User quota::proxy::sqlquota quota_rule = *:storage=5GB quota_rule2 = Trash:storage=+100M quota_grace = 10%% quota_exceeded_message = Quota exceeded, please contact your system administrator. quota_warning = storage=100%% quota-warning 100 %u quota_warning2 = storage=95%% quota-warning 95 %u quota_warning3 = storage=90%% quota-warning 90 %u quota_warning4 = storage=85%% quota-warning 85 %u } service quota-warning { executable = script /usr/local/bin/quota-warning.sh user = vmail unix_listener quota-warning { group = vmail mode = 0660 user = vmail } } dict { sqlquota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext }

Также нам нужно указать dovecot, как получить доступ к словарю SQL квот. Откройте файл dovecot-dict-sql.conf.ext и отредактируйте следующие строки:

/etc/dovecot/dovecot-dict-sql.conf.ext

 ... connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=P4ssvv0rD ... map { pattern = priv/quota/storage table = quota2 username_field = username value_field = bytes } map { pattern = priv/quota/messages table = quota2 username_field = username value_field = messages } ... # map { # pattern = shared/expire/$user/$mailbox # table = expires # value_field = expire_stamp # # fields { # username = $user # mailbox = $mailbox # } # } ...

Убедитесь, что вы используете правильные учетные данные MySQL (имя базы данных, имя пользователя и пароль).

Создайте следующий скрипт оболочки, который отправит электронное письмо пользователю, если его квота превысит указанный предел:

/usr/local/bin/quota-warning.sh

 #!/bin/sh PERCENT = $1 USER = $2 cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=dict:User quota::noenforcing:proxy::sqlquota" From: postmaster@linuxgazette.ru Subject: Quota warning Your mailbox is now $PERCENT% full. EOF

Сделайте скрипт исполняемым, выполнив следующую команду chmod :

 sudo chmod +x /usr/local/bin/quota-warning.sh

Наконец, перезапустите службу dovecot, чтобы изменения вступили в силу.

 sudo systemctl restart dovecot

Заключение

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

почтовый сервер postfix dovecot

Эта публикация является частью серии «Настройка и конфигурирование почтового сервера» .
Другие посты в этой серии:

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *