Настройка Postfix для отправки почты через внешний SMTP

· By NeoFusion

В этом руководстве я опишу процесс настройки Postfix для отправки (и переадресации локальной) почты через внешний SMTP сервер (на примере Gmail) с различными видами ограничений.

В процессе написания руководства использовались:

  • Debian 7.6 (wheezy)
  • Postfix 2.9.6

В дальнейшем проверялось на версиях:

  • Debian 9.6 (stretch)
  • Postfix 3.1.8

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

Устанавливаем Postfix:

aptitude install postfix

Тип настройки: “Только локальное использование”.

В /etc/postfix создаем файл sasl_passwd, содержащий учетные данные для подключения к smtp:

smtp.gmail.com noreply@example.com:password

Создаем базу:

postmap sasl_passwd

В файле main.cf (или с помощью postconf) указываем следующие параметры:

postconf -e "myhostname = localhost"
postconf -e "inet_protocols = ipv4"
postconf -e "default_transport = smtp"
postconf -e "relay_transport = error"
postconf -e "relayhost = smtp.gmail.com:587"
postconf -e "smtp_sasl_auth_enable = yes"
postconf -e "smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd"
postconf -e "smtp_sasl_security_options = noanonymous"
postconf -e "smtp_use_tls = yes"

Примерный вид получившегося файла main.cf (можно проверить также командой postconf -n):

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
default_transport = smtp
inet_interfaces = loopback-only
inet_protocols = ipv4
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
mydestination = localhost, gitlab, localhost.localdomain
myhostname = localhost
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
readme_directory = no
recipient_delimiter = +
relay_transport = error
relayhost = smtp.gmail.com:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes

Список перенаправлений

В /etc/postfix создаем файл virtual, содержащий список перенаправлений с виртуальных адресов:

user@localhost user@example.com

Создаем базу:

postmap virtual

Добавляем параметр:

postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"

Фильтрация rcpt to

Если необходима фильтрация rcpt to, то создаем файл allowed_rcpt_domains:

localhost OK
example.com OK

Создаем базу:

postmap allowed_rcpt_domains

Добавляем параметр:

postconf -e "smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/allowed_rcpt_domains, reject"

Фильтрация с использованием transport_maps

Создаем файл transport:

localhost local
example.com smtp:smtp.gmail.com:587
* error:Destination is not allowed

Создаем базу:

postmap transport

Добавляем параметр:

postconf -e "transport_maps = hash:/etc/postfix/transport"

Запуск и проверка

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

systemctl restart postfix.service

Проверяем отправку почты:

echo "Test" | mail user@localhost

Разное

Различные примеры команд:

postconf         # Выводит все текущие параметры Postfix
postconf -n      # Выводит параметры содержащиеся в main.cf

postqueue -p     # Просмотр очереди сообщений
postsuper -d ALL # Удаление всех писем из очереди