Ранее я уже настраивал Postfix в Debian: Postfix как локальный SMTP-ретранслятор. Здесь я выложу ту же заметку, адаптированную применительно к FreeBSD.
Установим Postfix из портов:
# cd /usr/ports/mail/postfix
В процессе установки этого порта оставим отмеченными только опции SASL2 и TLS. Как зависимость опции SASL2 будет установлен также порт security/cyrus-sasl2. У этого порта я оставил отмеченными только опции CRAM, DIGEST, LOGIN и PLAIN.
Настроим Postfix для отправки почты с подменой отправителя и аутентификацией на сервере провайдера. Настроим в файле /usr/local/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/mail/aliases alias_database = hash:/etc/mail/aliases # Карта соответствия локальных отправителей ящикам на почтовом сервере ISP sender_canonical_maps = hash:/usr/local/etc/postfix/sender_maps # Включаем использование аутентификации на сервере провайдера smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/usr/local/etc/postfix/passwords # Включаем выбор учётных данных на сервере провайдера в зависимости от отправителя smtp_sender_dependent_authentication = yes sender_dependent_relayhost_maps = hash:/usr/local/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
Теперь создадим необходимые карты. Укажем в файле /etc/mail/aliases, на какие ящики на сервере провайдера перенаправлять почту для локальных пользователей:
postmaster root root recipient@domain.tld
Почта для пользователя root будет перенаправляться в ящик recipient@domain.tld.
Укажем в файле /usr/local/etc/postfix/sender_maps, какой ящик на сервере провайдера использовать для отправки почты от локального отправителя:
root sender@domain.tld
Когда пользователь root попытается отправить письмо, то на сервер провайдера оно уйдёт от отправителя sender@domain.tld.
Укажем в файле /usr/local/etc/postfix/sender_relays, какой сервер следует использовать для отправки писем от определённого отправителя:
sender@domain.tld [mailserver.domain.tld]:587
Когда пользователь root попытается отправить почту, письмо, в соответствии с настройками в файле /usr/local/etc/postfix/sender_maps, будет отправлено с адреса sender@domain.tld. Письмо от этого отправителя нужно отправить через порт 587 сервера mailserver.domain.tld.
Укажем в файле /usr/local/etc/postfix/passwords учётные данные каждого из ящиков на сервере провайдера:
sender@domain.tld sender:password
Когда пользователь root попытается отправить почту, письмо, в соответствии с настройками в файле /usr/local/etc/postfix/sender_maps, будет отправлено с адреса sender@domain.tld. Письмо от этого отправителя, в соответствии с настройками в файле /usr/local/etc/postfix/sender_relays, нужно отправить через порт 587 сервера mailserver.domain.tld. В соответствии с настройками в этом файле для аутентификации на сервере провайдера нужно будет использовать имя пользователя sender и пароль password.
Для файла /usr/local/etc/postfix/passwords стоит задать разрешения, ограничивающие возможность подсмотреть пароли локальными пользователями системы:
# chown root:root /usr/local/etc/postfix/passwords # chmod u=rw,g=r,o= /usr/local/etc/postfix/passwords
При каждом обновлении файлов карт нужно не забывать обновлять их двоичные копии одной из следующих команд:
# postalias /etc/mail/aliases # postmap /usr/local/etc/postfix/sender_maps # postmap /usr/local/etc/postfix/sender_relays # postmap /usr/local/etc/postfix/passwords
Двоичные копиии имеют то же имя, но с расширением .db. Права доступа к оригинальному файлу полностью переносятся и на его двоичную копию.
Теперь нужно отключить использование sendmail и включить postfix. Для этого отредатируем файл /etc/rc.conf, вписав в него следующие опции:
postfix_enable="YES" sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO"
Для отключения служебных периодически запускаемых скриптов sendmail впишем в файл /etc/periodic.conf следующие опции:
daily_clean_hoststat_enable="NO" daily_status_mail_rejects_enable="NO" daily_status_include_submit_mailq="NO" daily_submit_queuerun="NO"
В процессе установки порта postfix предлагается заменить содержимое файла /etc/mail/mailer.conf. Если вы отказались, можно исправить упущение, вписав в него следующие настройки:
# # Execute the Postfix sendmail program, named /usr/local/sbin/sendmail # sendmail /usr/local/sbin/sendmail send-mail /usr/local/sbin/sendmail mailq /usr/local/sbin/sendmail newaliases /usr/local/sbin/sendmail
Теперь, когда с настройкой покончено, настало время остановить sendmail и запустить вместо него postfix. Для этого выполним следующие команды:
# /etc/rc.d/sendmail stop # /usr/local/etc/rc.d/postfix start
Осталось проверить правильность работы системы. Попробуем отправить тестовое письмо от имени пользователя root пользователю root:
# mail -s test root test .
На ящик recipient@domain.tld должно прийти письмо от ящика sender@domain.tld.