Это второй пост из серии « Установка и настройка почтового сервера ». В этом посте мы покажем вам, как установить и настроить 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
Мы настроим Postfix для использования виртуальных почтовых ящиков и доменов.
Начните с создания файлов конфигурации sql
которые будут указывать postfix, как получить доступ к базе данных MySQL , созданной в первой части этой серии .
sudo mkdir -p /etc/postfix/sql
Откройте текстовый редактор и создайте следующие файлы:
user = postfixadmin
password = P4ssvv0rD
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
user = postfixadmin
password = P4ssvv0rD
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
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'
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'
user = postfixadmin
password = P4ssvv0rD
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
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"
Агент локальной доставки доставит входящие электронные письма в почтовые ящики пользователей. Выполните следующую команду, чтобы установить службу 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
).
Откройте файл в текстовом редакторе и раскомментируйте / отредактируйте следующие строки:
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, как получить доступ к базе данных и как найти информацию об учетных записях электронной почты.
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
и отредактируйте следующие переменные:
...
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
:
...
disable_plaintext_auth = yes
...
auth_mechanisms = plain login
...
#!include auth-system.conf.ext
!include auth-sql.conf.ext
...
Откройте 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.
...
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
...
Если вы с самого начала следили за этой серией, у вас уже должны быть fullchain.pem
, privkey.pem
, dhparam.pem
созданные на вашем сервере. Для получения дополнительной информации о том, как создать бесплатный SSL-сертификат Let’s encrypt и ключ Диффи – Хеллмана, обратитесь к этому руководству .
Спасибо Невину за то, что заметил проблему и предложил решение.
Откройте conf.d/20-imap.conf
и активируйте плагин imap_quota
:
...
protocol imap {
...
mail_plugins = $mail_plugins imap_quota
...
}
...
Откройте conf.d/20-lmtp.conf
и отредактируйте его следующим образом:
...
protocol lmtp {
postmaster_address = [email protected]
mail_plugins = $mail_plugins
}
...
Определите почтовые ящики по умолчанию в conf.d/20-lmtp.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
и измените его следующим образом:
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
и отредактируйте следующие строки:
...
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
# }
# }
...
Создайте следующий сценарий оболочки, который будет отправлять электронное письмо пользователю, если его квота превышает указанный предел:
#!/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 .
Этот пост является частью серии «Установка и настройка почтового сервера». Другие сообщения из этой серии:
Настраиваю почтовый сервер по вашим статьям. Большое спасибо за проделанную работу!
Не всё работает в лоб, местами приходится искать рабочие варианты и исправлять ошибки. Так например в этой статье в разделе настроек почтовых ящиков по умолчанию нет служебного символа перед флагом \Junk.
Очень пригодилось бы указание на то как можно проверить работу почтового сервера на данном этапе. Как отправить тестовое письмо, как получить и т.п. Так например в прошлой статье показателем успешной настройки была возможность зайти на страницу postfixadmin.
В файле конфигурации /etc/dovecot/conf.d/90-quota.conf
вместо Trash_storage=+100M должно быть Trash:storage=+100M