Возможно это не самая подходящая программа для использования в подобных целях, тем не менее она довольно распространена и обладает достаточной гибкостью для того, чтобы её можно было использовать даже таким нестандартным способом. В сочетании с локальными fetchmail и dovecot можно вообще организовать полнофункциональную локальную почтовую систему, не имеющую постоянного доступа в интернет и всё же работающую ожидаемым образом через внешние серверы в интернете.
Для начала установим необходимые пакеты:
# apt-get install postfix libsasl2-modules bsd-mailxДля отправки почты с подменой отправителя и аутентификацией на сервере провайдера можно настроить Postfix. Настроим в файле /etc/postfix/main.cf следующую конфигурацию:
# Имя сервера и его почтового домена myhostname = server.domain.tld mydomain = domain.tld # Откуда и для кого принимать почту к доставке inet_protocols = ipv4 inet_interfaces = 127.0.0.1 mydestination = $myhostname, localhost.$mydomain, localhost mynetworks = 127.0.0.0/8 # К адресам локальных отправителей добавлять этот домен masquerade_domains = domain.tld # Карта соответствия локальных получателей адресам на почтовом сервере ISP alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases # Карта соответствия локальных отправителей ящикам на почтовом сервере ISP sender_canonical_maps = hash:/etc/postfix/sender_maps # Включаем использование аутентификации на сервере провайдера smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/passwords # Включаем выбор учётных данных на сервере провайдера в зависимости от отправителя smtp_sender_dependent_authentication = yes sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relays # Если в таблице отправителей нет соответствия, использовать этот почтовый сервер ISP relayhost = [mailserver.domain.tld]:587 # Устанавливаем не более одного исходящего подключения на каждый домен default_destination_concurrency_limit = 1 # Разрешаем использовать механизмы аутентификации PLAIN и LOGIN smtp_sasl_security_options = noanonymous smtp_sasl_tls_security_options = noanonymous smtp_sasl_mechanism_filter = plain, loginПосле настройки самого Postfix, его можно перезапустить, чтобы настройки вступили в силу:
# /etc/init.d/postfix restartТеперь создадим необходимые карты. Укажем в файле /etc/aliases, на какие ящики на сервере провайдера перенаправлять почту для локальных пользователей:
postmaster root root recipient@domain.tldПочта для пользователя root будет перенаправляться в ящик recipient@domain.tld.
Укажем в файле /etc/postfix/sender_maps, какой ящик на сервере провайдера использовать для отправки почты от локального отправителя:
root sender@domain.tldКогда пользователь root попытается отправить письмо, то на сервер провайдера оно уйдёт от отправителя sender@domain.tld.
Укажем в файле /etc/postfix/sender_relays, какой сервер следует использовать для отправки писем от определённого отправителя:
sender@domain.tld [mailserver.domain.tld]:587Когда пользователь root попытается отправить почту, письмо, в соответствии с настройками в файле /etc/postfix/sender_maps, будет отправлено с адреса sender@domain.tld. Письмо от этого отправителя нужно отправить через порт 587 сервера mailserver.domain.tld.
Укажем в файле /etc/postfix/passwords учётные данные каждого из ящиков на сервере провайдера:
sender@domain.tld sender:passwordКогда пользователь root попытается отправить почту, письмо, в соответствии с настройками в файле /etc/postfix/sender_maps, будет отправлено с адреса sender@domain.tld. Письмо от этого отправителя, в соответствии с настройками в файле /etc/postfix/sender_relays, нужно отправить через порт 587 сервера mailserver.domain.tld. В соответствии с настройками в этом файле для аутентификации на сервере провайдера нужно будет использовать имя пользователя sender и пароль password.
Для файла /etc/postfix/passwords стоит задать разрешения, ограничивающие возможность подсмотреть пароли локальными пользователями системы:
# chown root:root /etc/postfix/passwords # chmod ug=rw,o= /etc/postfix/passwordsПри каждом обновлении файлов карт нужно не забывать обновлять их двоичные копии одной из следующих команд:
# postalias /etc/aliases # postmap /etc/postfix/sender_maps # postmap /etc/postfix/sender_relays # postmap /etc/postfix/passwordsДвоичные копиии имеют то же имя, но с расширением .db. Права доступа к оригинальному файлу полностью переносятся и на его двоичную копию.
Осталось проверить правильность работы системы. Попробуем отправить тестовое письмо от имени пользователя root пользователю root:
# mail -s test root test .На ящик recipient@domain.tld должно прийти письмо от ящика sender@domain.tld.
11 комментариев:
У меня с этим:
sender_canonical_maps = hash:/etc/postfix/sender_maps
не заработало, но получилось с этим:
smtp_generic_maps = hash:/etc/postfix/sender_maps
Как настроить postfix когда у тебя для виртуального сервера стоит основным 1 домен, но почту надо отправлять от другого домена?
Сергей, вопрос не понятен.
Где для виртуального сервера стоит основным один домен? Важно ли, что сервер виртуальный? При чём тут другой домен? Почему почта отправляется не с почтового ящика, а с домена?
В контексте этой статьи не вижу проблем с отправкой почты с какого угодно домена, если указать правильные настройки почтового ящика. Можно отправлять хоть с домена gmail.com, если почтовый ящик на gmail завести и прописать его настройки.
у меня была следующая ситуация, на ubuntu стоял exim4 и dovecot с панелью веста, из за не правильных конфигов МХ записей не правильно работала почта, я решил поставить постфикс, получился конфликт с ексимом, но так как я с линуксом на Вы, я то удалял то ставил все подряд, пока не понял кто за что отвечает и не снес постфикс с довекот, перенастроил конфиги ДНС и все заработало
Но вопрос вот такой, если основным доменом виртуального сервера является один сайт, а почта отправляется от другого сайта, как настроить постфикс, чтобы основной домен не попадал в заголовки писем другого домена на этом же сервере?
Сергей, если человек в принципе не понимает что и как работает, то любое объяснение будет для него недостаточным.
Краткий ответ - никак.
Вот вам пример (лишнее вырезано):
$ dig mail.ru MX
mail.ru. 146 IN MX 10 mxs.mail.ru.
$ dig bk.ru MX
bk.ru. 3202 IN MX 10 mxs.mail.ru.
$ telnet mxs.mail.ru 25
Trying 94.100.180.104...
Connected to mxs.mail.ru.
Escape character is '^]'.
220 Mail.Ru ESMTP
EHLO stupin.su
250-mx163.mail.ru ready to serve
250-STARTTLS
250-SIZE 73400320
250 8BITMIME
QUIT
221 mx163.mail.ru closing connection
Connection closed by foreign host.
Как вы ни старайтесь, а в заголовках письма всегда будет фигурировать домен mail.ru, даже если письмо отправлено с домена bk.ru, т.к. у почтового сервера имя не может совпадать сразу со всеми почтовыми доменами, которые он обслуживает.
Денис, вы вручную почту антивирусом проверять собрались?
Но на самом деле есть необходимость проверить аттачмент на вирустотале
Вам может помочь вот это:
https://ercpe.de/blog/virustotal-integration-for-amavis
https://github.com/ercpe/amavisvt
а можно заставить postfix ВСЮ почту, даже локальную слать через relayhost? да, чтобы она возвращалась и только когда она будет от relayhost только тогда доставлять в ящик?
Отправить комментарий