Привет,
задача этой статьи — настроить сбор исходящих писем для отправки на корпоративную почту biz.mail.ru в зависимости от доменных имён.
Для этой цели я использую Postfix, потому-что у него есть очередь писем (полезно в случае временных сбоев) и возможна авторизация на внешнем SMTP сервере используя логин\пароль сервиса Mail.ru \ Yandex \ GMail что-бы письма не считались спам-рассылкой.
Что-бы это сработало, необходимо настроить Postfix в качестве relay.
Что такое почтовый Relay?
Релей обеспечивает приём электронной почты, а также временное хранение и последующую пересылку узлу-получателю.
Помимо хранения и пересылки релей также может проверять проходящие через него сообщения на вирусы, спам, осуществлять проверку санкционированности передачи почты (в случае релея исходящей корпоративной почты).
Обычно релей требует авторизации отправителя. Релеи, которые не контролируют отправителей, называют открытыми релеями, но в этом случае такие сервисы как biz.mail.ru, Корпоративная почта Яндекс, Gmail для бизнеса быстро отправят вас в blacklist.
Итак, приступим…
Установите Postfix, в моем случае это Debian:
1 |
sudo apt-get install mailutils |
В процессе установки, может запуститься настройка Postfix, в этом случае выберите Internet Site. Остальное — по умолчанию. На данном этапе это не важно, поскольку конфигурационный файл далее будет заменён.
После установки создайте резервную копию конфигурационного файла /etc/postfix/main.cf:
1 |
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.backup |
откройте файл main.cf
1 |
sudo nano /etc/postfix/main.cf |
и замените содержимое следующим:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
myorigin = /etc/mailname mydestination = = localhost.$mydomain, localhost mynetworks = 127.0.0.0/8 194.87.102.0/23 [::1]/128 [fe80::]/64 mailbox_size_limit = 51200000 recipient_delimiter = + inet_interfaces = loopback-only inet_protocols = all #relayhost map file see here: /etc/postfix/sender_relay relayhost = smtp_sasl_auth_enable = yes smtp_sasl_mechanism_filter = login smtp_sasl_type = cyrus smtp_sasl_security_options = noanonymous smtp_sender_dependent_authentication = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay sender_canonical_maps = hash:/etc/postfix/canonical smtp_generic_maps = hash:/etc/postfix/canonical # Client-side SMTPS requires "encrypt" or stronger. smtp_tls_security_level = encrypt # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache |
Создайте файл /etc/postfix/canonical (замените почтовые адреса и доменные имена на свои)
1 2 3 4 5 6 7 8 9 10 11 |
# # echo "Test message"|mail -s "Test subject" -a "From: Batman <root@domain.tld>" destination@gmail.com # This command will send your mail from mail@java.md to destination@gmail.com. # root@domain.tld mail@java.md linux_user@domain.tld help@domain1.ru linus_user2@domain.tld help@domain1.ru glassfish@domain.tld mail@java.md @domain1.ru help@domain1.ru @mail.java.md mail@java.md @java.md mail@java.md |
Создайте файл /etc/postfix/sasl_passwd и задайте в нём маппинг своих пользователей и аккаунтов в сервисе biz.mail.ru или другом:
1 2 3 4 5 |
# Per-sender authentication; see also /etc/postfix/sender_relay. help@domain1.ru help@domain1.ru:password1 mail@java.md mail@java.md:password2 # Login information for the default relayhost. [smtp.mail.ru]:587 default@java.md:password0 |
Для исходящей почты на адрес help@domain1.ru Postfix авторизуется под логином и паролем help@domain1.ru:password1.
SMTP сервер для этих аккаунтов указан в файле sender_relay.
Аналогичное правило и для остальных доменных имён. По умолчанию Postfix будет пытаться отправить письмо по адресу default@java.md.
Теперь создайте файл /etc/postfix/sender_relay
1 2 3 4 5 6 7 |
# # Per-sender provider; Login/password see also /etc/postfix/sasl_passwd. # SMTP relay server for user help@domain1.ru is [smtp.mail.ru]:587 # SMTP relay server for user mail@java.md is [smtp.mail.ru]:587 # help@domain1.ru [smtp.mail.ru]:587 mail@java.md [smtp.mail.ru]:587 |
В этом файле указаны внешние SMTP сервера для каждого из аккаунтов в sasl_passwd.
Ограничьте доступ к файлам:
1 2 3 |
sudo chmod 600 /etc/postfix/canonical sudo chmod 600 /etc/postfix/sasl_passwd sudo chmod 600 /etc/postfix/sender_relay |
Теперь скомпилируйте, что-бы Postfix мог их прочитать:
1 2 3 |
sudo postmap /etc/postfix/canonical sudo postmap /etc/postfix/sasl_passwd sudo postmap /etc/postfix/sender_relay |
Для применения настроек перезагрузите Postfix.
1 |
sudo service postfix restart |
Настройка Postfix в качестве relay завершена.
Для проверки транспортировки почты выполните отправку тестового E-mail через консоль:
1 |
echo "Test message" | mail -s "Test subject" -a "From: Batman <root@domain.tld>" destination@gmail.com |
Таким образом, письмо отправленное с адреса root@domain.tld направится от mail@java.md по адресу destination@gmail.com
Проверьте лог почты:
1 |
sudo tail -f /var/log/mail.log |
1 2 3 4 5 |
Oct 11 00:59:47 domain1 postfix/pickup[58287]: 063BAC0DF1: uid=0 from=<root@domain.tld> Oct 11 00:59:47 domain1 postfix/cleanup[58296]: 063BAC0DF1: message-id=<20189010215947.063BAC9DF1@domain1.ru> Oct 11 00:59:47 domain1 postfix/qmgr[58288]: 063BAC0DF1: from=<mail@java.md>, size=339, nrcpt=1 (queue active) Oct 11 00:59:49 domain1 postfix/smtp[58298]: 063BAC0DF1: to=<destination@gmail.com>, relay=smtp.mail.ru[94.100.180.160]:587, delay=2.2, delays=0.43/0.19/1.2/0.29, dsn=2.0.0, status=sent (250 OK id=1gAMWE-0004Xa-Pc) Oct 11 00:59:49 domain1 postfix/qmgr[58288]: 063BAC0DF1: removed |
Если видим статус status=sent, значит всё работает отлично.
>>Создайте файл /etc/postfix/cannonical
в конфиге с одной N
Спасибо, поправил
Не поправили))
данный функционал работает как полноценный сервер пересылки или ограничен отправкой самого с себя?
>>myorigin = /etc/mailname
тут надо имя домена иначе
status=bounced (host mxs.mail.ru[94.100.180.104] said: 501 : domain missing or malformed
спасибо за инструктаж