Categories: Шпаргалки

Настройка SMTP-авторизации в Postfix

Используемые термины: Postfix , SMTP , Dovecot .

Данная настройка позволит запрашивать логин с паролем при отправке сообщений. В данном примере аутентификация реализована при помощи dovecot.

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

Без шифрования

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

а) если используем CentOS / Red Hat :

yum install dovecot

б) если используем Ubuntu / Debian :

apt install dovecot-imapd dovecot-pop3d

Открываем конфигурационный файл Postfix:

vi /etc/postfix/main.cf

И добавляем:

smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

* где:

  • smtpd_sasl_path — путь до плагина аутентификации по механизму SASL.
  • smtpd_sasl_auth_enable — разрешает или запрещает аутентификацию по механизму SASL.
  • smtpd_sasl_type — тип плагина, который используется для SASL-аутентификации.
  • smtpd_relay_restrictions — правила разрешения и запрета использования MTA при пересылке. Нужны, чтобы запретить отправку писем без аутентификации.

Открываем настройки аутентификации в dovecot:

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

и приводим опцию service auth к следующему виду:

service auth {

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

}

* если соответствующей секции unix_listener нет, то ее нужно создать.

Отключаем требование ssl для аутентификации:

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

ssl = no

Настройки аутентификации приводим к следующему виду:

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

auth_mechanisms = plain login

В этом же файле проверяем, что снят комментарий со следующей строки:

!include auth-system.conf.ext

Перезапускаем сервис Postfix:

systemctl restart postfix

Запускаем Dovecot:

systemctl enable dovecot

systemctl restart dovecot

Готово. В качестве логина и пароля необходимо использовать системную учетную запись.

Проверку можно выполнить из командной строки. Для этого устанавливаем утилиту для отправки почты.

а) В Debian / Ubuntu:

apt install mutt

б) В CentOS / Red Hat:

yum install mailx

После установки можно делать отправку. Для каждого типа операционной системы Linux свои ключи.

а) Для Rocky Linux / CentOS:

echo «Test text» | mail -v -s «Test title» -S smtp=»localhost:25″ -S smtp-auth=login -S smtp-auth-user=»master» -S smtp-auth-password=»password» -S from=postmaster@remontka.com master@remontka.com

б) Для Debian / Ubuntu:

vi ~/.muttrc

set smtp_url=»smtp://master@localhost:25″
set smtp_pass = password
set ssl_verify_host = no
set ssl_verify_dates = no
set ssl_starttls = no
set ssl_force_tls = no

echo «Test text» | mutt -s «Test title» -e ‘my_hdr From: postmaster@remontka.com’ — master@remontka.com

* где master — логин (учетная запись в системе); password — пароль для учетной записи; postmaster@remontka.com — от кого отправляем письмо; master@remontka.com — кому отправляем письмо.

Если мы получим ошибку smtp-server: 503 5.5.1 Error: authentication not enabled , значит у нас выставлено требование устанавливать защищенное соединение при прохождении аутентификации.

Открываем конфигурационный файл postfix:

vi /etc/postfix/main.cf

Находим и комментируем параметр:

#smtpd_tls_auth_only = yes

Аутентификация с помощью виртуальных пользователей

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

Открываем конфигурационный файл dovecot:

vi /etc/dovecot/conf.d/auth-system.conf.ext

Находим секцию passdb и приводим ее к виду:

passdb {
# driver = pam
driver = passwd-file
args = scheme=SHA1 /etc/dovecot/passwd

}

* в моем случае было закомментировано использование pam драйвера и добавлены опции driver и args . В данном примере они указывают на использование в качестве базы логинов и паролей — файл /etc/dovecot/passwd .

Создаем хэш для пароля первого пользователя:

doveadm pw -s sha1 | cut -d ‘}’ -f2

* система запросит пароль — вводим его дважды.

Полученный хэш имеет, примерно, такой вид:

tMoWsjKKoenYg7+SLRB8GXZQY38=

Копируем его и создаем файл:

vi /etc/dovecot/passwd

user@remontka.com:tMoWsjKKoenYg7+SLRB8GXZQY38=

* в данном примере user@remontka.com — имя виртуального пользователя; tMoWsjKKoenYg7+SLRB8GXZQY38= — хэш нашего пароля.

Задаем права на файл с базой логинов и паролей:

chown dovecot: /etc/dovecot/passwd

chmod 600 /etc/dovecot/passwd

Перезапускаем Dovecot:

systemctl restart dovecot

Для проверки вводим команды.

а) Для Rocky Linux / CentOS:

echo «Test text» | mail -v -s «Test title» -S smtp=»localhost:25″ -S smtp-auth=login -S smtp-auth-user=»user@remontka.com» -S smtp-auth-password=»password» -S from=postmaster@remontka.com master@remontka.com

* где user@remontka.com — логин (учетная запись в системе); password — пароль для учетной записи; postmaster@remontka.com — от кого отправляем письмо; master@remontka.com — кому отправляем письмо.

б) Для Debian / Ubuntu:

vi ~/.muttrc

Редактируем пользователя и пароль:

set smtp_url=»smtp://user@remontka.com@localhost:25″
set smtp_pass = password

* где user@remontka.com — логин (учетная запись в системе); password — пароль для учетной записи;

echo «Test text» | mutt -s «Test title» -e ‘my_hdr From: postmaster@remontka.com’ — master@remontka.com

* postmaster@remontka.com — от кого отправляем письмо; master@remontka.com — кому отправляем письмо.

Настройка SSL-шифрования

В конфигурационный файл postfix добавляем:

vi /etc/postfix/main.cf

smtpd_tls_cert_file = /etc/ssl/certs/dovecot.pem
smtpd_tls_key_file = /etc/ssl/private/dovecot.key
smtpd_use_tls = yes
smtpd_tls_auth_only = yes

В нашем примере мы создадим самоподписанный сертификат, но лучше сгенерировать сертификат, который пройдет все проверки. Для этого можно его купить или получить бесплатно от Let’s Encrypt .

Добавляем в master.cf:

vi /etc/postfix/master.cf

smtps inet n — n — — smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

submission inet n — n — — smtpd
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_security_options=noanonymous
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

Настраиваем требование сертификата:

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

ssl = required

Генерируем сертификат (не требуется, если получили сертификат другим способом):

openssl req -x509 -days 1461 -nodes -newkey rsa:2048 -sha256 -keyout /etc/ssl/private/dovecot.key -out /etc/ssl/certs/dovecot.pem -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=mail.remontka.com»

Перезапускаем postfix и dovecot:

systemctl restart postfix

systemctl restart dovecot

Готово. Аутентификация будет требовать шифрованного подключения по порту 25 (STARTTLS), 587 (TLS/STARTTLS), или 465 (SSL/TLS).

Выполним проверку.

* где user@remontka.com — логин (учетная запись в системе); password — пароль для учетной записи; postmaster@remontka.com — от кого отправляем письмо; master@remontka.com — кому отправляем письмо.

а) Для Rocky Linux / CentOS:

echo «Test text» | mail -v -s «Test title» -S smtp=»localhost:587″ -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user=»user@remontka.com» -S smtp-auth-password=»password» -S ssl-verify=ignore -S nss-config-dir=/etc/pki/nssdb -S from=postmaster@remontka.com master@remontka.com

* для проверки работы по порту 587 .

echo «Test text» | mail -v -s «Test title» -S smtp=»smtps://localhost:465″ -S smtp-auth=login -S smtp-auth-user=»user@remontka.com» -S smtp-auth-password=»password» -S ssl-verify=ignore -S nss-config-dir=/etc/pki/nssdb -S from=postmaster@remontka.com master@remontka.com

* для проверки по порту 465 .

б) Для Debian / Ubuntu:

vi ~/.muttrc

Редактируем адрес подключения, а также опции использования шифрования:

set smtp_url=»smtp://user@remontka.com@localhost:587″

set ssl_starttls = yes
set ssl_force_tls = yes

* где ssl_starttls — использовать starttls; ssl_force_tls — использовать SSL. Также мы заменили порт подключения с 25 на 587.

echo «Test text» | mutt -s «Test title» -e ‘my_hdr From: postmaster@remontka.com’ — master@remontka.com

* postmaster@remontka.com — от кого отправляем письмо; master@remontka.com — кому отправляем письмо.

Если Postfix и Dovecot на разных серверах

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

Но если сервер Postfix — это другой сервер, который взаимодействует с dovecot по сети. Настройка будет немного другой.

На сервере Postfix

Открываем конфигурационный файл:

vi /etc/postfix/main.cf

Настройка аутентификации будет такой:

smtpd_sasl_path = inet:192.168.0.15:333
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

* обратите внимание, что данные настройки отличаются от примера выше только опцией smtpd_sasl_path , где в качестве значения указываются адрес и порт сервера dovecot, где будет выполняться аутентификация. Предполагается, что это сервер с адресом 192.168.0.15 .

Для применения настройки вводим:

systemctl restart postfix

На сервере Dovecot

Открываем конфигурационный файл:

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

* важно знать, что некоторые почтовые системы настроены с dovecot, конфигурационный файл которого находится по пути /etc/dovecot/dovecot.conf . В таком случае, открывать нужно этот файл.

Находим секцию service auth и добавляем строки inet_listener :

service auth {

inet_listener {
port = 333
}


}

* мы указали dovecot, что аутентификацию он также должен принимать на сетевом порту 333 .

Применяем настройки:

systemctl restart dovecot

Готово.

admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

2 месяца ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

2 месяца ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

2 месяца ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

2 месяца ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

2 месяца ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

2 месяца ago