Скидка % на 3 месяца на серверы с SSD или NVMe только сегодня по промокоду JASON-2019! Читать условия акции

Установка и настройка почтового сервера postfix с хранением почтовых паролей в файле

Устанавливаем и настраиваем postfix
Устанавливаем и настраиваем dovecot
Создаём почтовый ящик

 

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

На этом этапе мы рассмотрим настройку почтового сервера с виртуальными пользователями и хранением паролей от почтовых ящиков в файле. Этот метод несложен и не требует много действий в консоли, но если вы планируете заводить больше 10–15 почтовых ящиков, управлять ими будет не очень удобно — для этого лучше подойдёт второй вариант настройки с хранением паролей в базе данных.

Устанавливаем и настраиваем postfix

Устанавливаем postfix на сервер:

Centos (обычно в Centos 7 он уже установлен):

yum install epel-release -y
yum install postfix -y

Debian/Ubuntu:

apt install postfix -y

Далее откроется окно, где нужно выбрать Internet Site:

И в следующем окне указать ваш домен, с которого будет отправляться почта:

Запускаем и добавляем в автозагрузку службу postfix:

systemctl start postfix
systemctl enable postfix

Вносим изменения в настройку postfix, в консоли вводим следующие команды:

postconf -e 'inet_interfaces=all'
postconf -e 'mydestination='
postconf -e 'myhostname=mailtest.fvds.ru'
postconf -e 'virtual_mailbox_domains=mailtest.fvds.ru'
postconf -e 'virtual_transport=lmtp:unix:private/dovecot-lmtp'
postconf -e 'virtual_mailbox_maps=hash:/etc/postfix/virtual_recipients'
postconf -e 'virtual_alias_maps=hash:/etc/postfix/virtual_alias_recipients'
postconf -e 'virtual_mailbox_base=/var/mail/vmail/'
postconf -e 'local_recipient_maps=$virtual_mailbox_maps'

postconf -e 'smtpd_sasl_auth_enable=yes'
postconf -e 'smtpd_sasl_type=dovecot'
postconf -e 'smtpd_sasl_path=private/auth'
postconf -e 'broken_sasl_auth_clients=yes'
postconf -e 'smtpd_sasl_security_options=noanonymous'

postconf -e 'smtpd_use_tls=yes'
postconf -e 'smtpd_tls_cert_file=/etc/postfix/certs/cert.pem'
postconf -e 'smtpd_tls_key_file=/etc/postfix/certs/key.pem'
postconf -e 'smtpd_sasl_tls_security_options=noanonymous'
postconf -e 'smtpd_tls_auth_only=yes'

postconf -e 'smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination'

postconf -e 'smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_helo_hostname,reject_non_fqdn_sender,reject_unknown_sender_domain,reject_non_fqdn_recipient,reject_unknown_recipient_domain'

postconf -e 'smtpd_banner=$myhostname ESMTP'
postconf -e 'biff=no'
postconf -e 'strict_rfc821_envelopes=yes'
postconf -e 'disable_vrfy_command=yes'
postconf -e 'smtpd_helo_required=yes'

Конфигурация будет добавлена в файл /etc/postfix/main.cf.

В конец файла /etc/postfix/master.cf дописываем следующие строки:

submission inet n - n - - smtpd
 -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth
 -o syslog_name=postfix/submission
 -o smtpd_tls_wrappermode=no
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
 -o milter_macro_daemon_name=ORIGINATING

smtps inet n - n - - smtpd
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth
 -o syslog_name=postfix/smtps
 -o smtpd_tls_wrappermode=yes
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
 -o milter_macro_daemon_name=ORIGINATING

Для Centos в конец этого же файла нужно добавить:

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

Для Debian/Ubuntu в конец этого же файла нужно добавить:

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

Теперь сгенерируем самоподписанный сертификат, чтобы данные не передавались в открытом виде. При генерации сертификата система задаст несколько вопросов. На них можно ответить всё, что угодно, — особой роли это не играет.

mkdir /etc/postfix/certs
openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pem

Вот пример выполнения команды:

Если у вас есть платный сертификат на домен с не истекшим сроком действия, используйте его. Файлы сертификата нужно разместить в директории /etc/postfix/certs/ и заменить имена файлов на свои в конфигурационном файле postfix /etc/postfix/main.cf в следующих строках: 

smtpd_tls_cert_file
smtpd_tls_key_file

Проверить корректность настроек postfix можно через команду:

postfix check

Устанавливаем и настраиваем dovecot

Centos:

yum install dovecot -y

Debian/Ubuntu:

apt install dovecot-imapd dovecot-pop3d dovecot-lmtpd -y

Активируем службу и добавляем в автозапуск:

systemctl start dovecot
systemctl enable dovecot

Создаём локальный файл настроек:

touch /etc/dovecot/local.conf

Открываем его текстовым редактором и указываем в нём следующие настройки:

protocols = pop3 imap lmtp
auth_mechanisms = plain login
mail_gid = vmail
mail_uid = vmail
first_valid_uid = 5000
last_valid_uid = 5000

mail_location = maildir:/var/mail/vmail/%d/%n/

mbox_write_locks = fcntl
disable_plaintext_auth = yes

passdb {
  args = scheme=ssha512 username_format=%u /etc/dovecot/users
  driver = passwd-file
}

userdb {
  args = username_format=%u /etc/dovecot/users
  driver = passwd-file
}

service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }

  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }
}

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0600
    user = postfix
  }
  user = vmail
}

protocol lmtp {
  postmaster_address = postmaster@mailtest.fvds.ru
}

ssl = required
ssl_cert = </etc/postfix/certs/cert.pem
ssl_key = </etc/postfix/certs/key.pem
ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
ssl_dh_parameters_length = 2048
ssl_prefer_server_ciphers = yes

Файл пользователей почтовых ящиков находится здесь — /etc/dovecot/users, формат файла аналогичен формату пользователей системы — /etc/passwd.

Сертификат используется тот, что генерировали при настройке postfix, если используете свой сертификат, то нужно указать путь до него в следующих строках конфигурационного файла dovecot /etc/dovecot/local.conf:

ssl_cert
ssl_key

Создаём почтовый ящик

Основа почтового сервера готова, теперь можно создать первый почтовый ящик. Ящики и пароли от них хранятся в файле /etc/dovecot/users. Генерируем пароль для почтового ящика командой:

doveadm pw -s ssha512

Команда запросит пароль и подтверждение, придумываем его и вводим. На выходе увидим следующую строку:

Обязательно скопируйте её, это пароль от ящика в зашифрованном виде.

Далее открываем файл с пользователями /etc/dovecot/users — если его нет, то создайте его с помощью команды touch /etc/dovecot/users — и вносим туда имя почтового ящика, наш сгенерированный пароль и номера uid (5000) и gid (5000) через двоеточие в следующем формате:

admin@mailtest.fvds.ru:{SSHA512}v8cRBy17QPdVE91MRQ1MsuMtCUENXZuWGuX5o51we/V1YG3MgJnC+9qHRw488U4W5ZR6eAlxuQiKco41U5swvXVMDRg=:5000:5000

Теперь создадим файл получателей локальной почты:

touch /etc/postfix/virtual_recipients

И файл псевдонимов для почтовых ящиков, чтобы настроить переадресацию на тот почтовый ящик, с которого вам удобнее получать письма:

touch /etc/postfix/virtual_alias_recipients

В нашем примере формат файла псевдонимов следующий:

admin@mailtest.fvds.ru admin.mailtest@ya.ru

Письма, отправленные на admin@mailtest.fvds.ru, будут перенаправляться на admin.mailtest@ya.ru. Почтовые ящики можно использовать любые, здесь для примера используется admin@mailtest.fvds.ru. Вы указываете тот почтовый ящик, который у вас создан на сервере и с которого нужно настроить переадресацию, и тот, на который хотите получать письма.

Далее в файле /etc/postfix/virtual_recipients укажем созданный почтовый ящик в таком виде:

admin@mailtest.fvds.ru admin/

Проиндексируем базу пользователей postfix:

postmap /etc/postfix/virtual_recipients
postmap /etc/postfix/virtual_alias_recipients

Примечание:

После каждого изменения файлов /etc/postfix/virtual_recipients и /etc/postfix /virtual_alias_recipients выполняйте их переиндексацию, чтобы данные обновились:

postmap /etc/postfix/virtual_recipients

postmap /etc/postfix/virtual_alias_recipients

 

Перезапускаем почтовые службы:

systemctl restart dovecot
systemctl restart postfix

На этом базовая настройка почтового сервера завершена: можно отправлять и получать письма. Если не планируете переписываться с огромным количеством людей, у которых в почте настроены жёсткие проверки на спам, то можете на этом остановиться — протестировать отправку и пользоваться. Но, помните, что для полноценной работы почтового сервера только базовой настройки недостаточно. Такие сервисы, как gmail.com, mail.ru или yandex.ru, могут расценивать ваши письма, как спам, из-за того, что они не прошли проверку, и отклонять их. Чтобы этого не случилось и письма доходили до адресата, советуем выполнить ещё пару настроек, о которых расскажем далее.