Установите и настройте 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 updatesudo 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

Мы настроим 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 обновите основной файл конфигурации постфикса, включив в него информацию о виртуальных доменах, пользователях и псевдонимах, которые хранятся в базе данных 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.

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

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.linuxize.com/fullchain.pem'sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.linuxize.com/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

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

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 файл 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 = </etc/letsencrypt/live/mail.linuxize.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.linuxize.com/privkey.pem
ssl_dh = </etc/ssl/certs/dhparam.pem
...
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 = [email protected]
  mail_plugins = $mail_plugins
}
...

Определите почтовые ящики по умолчанию в conf.d/20-lmtp.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: [email protected]
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 .

2 комментария
  1. 30.06.2021
  2. 14.09.2022

Оставьте комментарий