Настройка postfix mac os

Обновлено: 06.07.2024

По умолчанию, Postfix пытается посылать почту в напрямую используя, запросы к DNS, в частности записи типа MX.

relay_domains список доменов, на которые разрешена пересылка писем
relayhost имя и порт сервера для пересылка на него писем

Если имя заключено в квадратные скобки [] — то Postfix не предпринимает попытку поиска записей типа MX.

Псевдонимы

Для псевдонимов (Aliases) требуется инициализации БД (файл с расширением . db )

ФайлКоманда
/ etc / aliases newaliases

Если возникает ошибка

postfix : warning : dict_nis_init : NIS domain name not set - NIS lookups disabled

Нужно установить переменную:/etc/postfix/main.cf

Маскарад адресов

Замена одного домена или адреса другим, удобно использовать, если нужно скрыть внутренние домены при отправке почты на внешние адреса./etc/postfix/main.cf

Компиляция generic . db :

Задается в Байтах, значение по умолчанию 10240000

Копирование всей почты

Отправка скрытых копий всех писем (Blind carbon copy) на определенный адрес./etc/postfix/main.cf

В данном примере использован локальный адрес: bcc @ localhost . localdomain

Команды

При решении некоторых задач можно воспользоваться возможностью работы с несколькими экземплярами (instance) сервера.

Для работы нужно добавить такие строки:/etc/postfix/main.cf

multi_instance_wrapper = $ < command_directory >/ postmulti - p - g ИМЯ _ ГРУППЫ reload multi_instance_directories = / etc / postfix - mx / etc / postfix - 1 / etc / postfix - n

в переменной multi_instance_directories указывается экземпляры программы, в примере использованы следующие:

  • / etc / postfix - mx
  • / etc / postfix - 1
  • / etc / postfix - n

Для того, чтобы при запуске/останове и перезапуске Postfix и по команде

нужно параметре multi_instance_wrapper нужно указать имя группы ( ИМЯ _ ГРУППЫ ) в куда входя нужные экземпляров программы.

Также для того, чтобы разрешить работу с несколькими экземплярами можно использовать команду

image

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

Известно, что Postfix разработан как альтернатива Sendmail. ПО повышало производительность, обеспечивало устойчивость, гибкость и безопасность решения. Все основные Linux-дистрибутивы включают Postfix, в Mac OS X, начиная с версии 10.3, программа также используется вместо Sendmail.

Главные особенности

  • Фокус Postfix в том, что можно начинать работу без приготовлений (базовые конфигурационные файлы включают в себя пару строк).
  • Для эффективной фильтрации писем применяются регулярные выражения PCRE (Perl compatible regular expression).
  • Программа Postfix совместима с Sendmail: файлы aliases и .forward имеют схожий формат и семантику.
  • Postfix общается по протоколу ESMTP, поддерживает виртуальные домены и фильтрацию спама.
  • Не используется язык подстановки адресов как в Sendmail. Вместо этого производится поиск в плоских файлах таблиц или базе данных MySQL.

Архитектура

Запуск и контроль всех процессов выполняет программа master. В ее конфиге — master.cf -перечислены вспомогательные программы и информация о том, как и когда их нужно запустить.

Самые важные программы показаны в блок-схеме:

image

Электронные письма, ожидающие доставки, находятся под управлением qmgr – администратора очередей:

Incoming – входящая почта;

Active – доставляемая почта;

Deferred – письма, доставка которых не осуществилась ранее;

Hold – письма, заблокированные в очереди администратором;

Corrupt – письма, которые невозможно прочитать.

Также он поддерживает и более сложный алгоритм — например, отбирает события только с определенных адресов.

Программа virtual доставляет письма в виртуальные почтовые ящики – ящики, представляющие собой адреса назначения. Наконец, программа pipe реализует доставку через внешние программы.

Взаимодействие между пользователем и системой обработки регулируется утилитами:

sendmail, mailq, newaliases — интерфейс совместимости postfix и sendmail.

postfix – запускает и прекращает работу системы обработки почты;

postalias — создает и модифицирует таблицы псевдонимов;

postmap – создает, модифицирует, запрашивает таблицы преобразований;

cat /etc/postfix/transport

Утилиты фактически создают индексированные карты файлов. Повторить запуск при изменениях в файлах aliases и transport;

Postcat –напечатает содержимое файла из очереди;

Postsuper и postqueue – управляют почтовыми очередями. Первая используется для высокопривилегированных операций. Например, удаление очереди:

Postconf – инструментальное средство, позволяющее конфигурировать postfix- конфиг main.cf. Без аргументов выводит все параметры в текущей конфигурации. Если передать значение параметра – выведет значение этого параметра. С ключом –d напечатает default-настройки, а не сконфигурированные.

С ключом –n напечатает только значения, отличные от типовых.

Главным файлом Postfix является main.cf. Он конфигурирует серверные программы и определяет таблицы преобразований, на которые содержит ссылки. Содержит более 300 параметров. Для запуска почтового сервера в средней организации достаточно лишь несколько из них. В документацию рекомендуется включать лишь параметры, содержащие нестандартные значения.

Базовая возможная настройка

Преобразования и виртуальные домены

Аспекты поведения Postfix определяются использованием таблиц поиска, отражающих ключи как значения тип: путь или просто как списки. Например, таблица alias_maps:dbm:/etc/mail/aliases.

Обратите внимание, синтаксис ключ: значение обеспечивает совместимость с Sendmail.

Помимо традиционного файла базы данных бинарного формата dbm, источником данных для таблицы преобразований может быть ldap, regexp выражения, postgres, Mysql и многое другое.

Если вам нужно обслуживать почтовый домен, то можно сделать это тремя путями:

— Указать домен в mydestination – доставка пойдет по схеме, описанной выше;

— Указать домен в параметре virtual_alias_domains. Домен получит собственное адресное пространство. Потребуется обеспечить возможность преобразования адресов в реальные (карта virtual_alias_maps);

— Указать домен в virtual_mailbox _domains. Здесь также будет собственное именное пространство. Но управление списком пользователей будет независимым от системных учеток. Потребуется указать параметр virtual_mailbox _maps c таблицей действительных пользователей в домене.

Защита и доступ

Postfix защищает себя на нескольких уровнях. Большинство серверных Postfix-программ могут выполняться в среде с измененным корневым каталогом (chroot). Они являются отдельными программами без связи Родитель-дочерний. Ни одна из них не имеет бита setuid. Каталог, в который направлена почта, открыт для записи группе postdrop, для нее — программа postdrop setgid.

Что касается доступа, почтовые домены ретранслируют почту на сторонние адреса только для надежных агентов. Открытая ретрансляция с неизвестных адресов, как известно, не сулит ничего хорошего. Postfix по умолчанию закрыт как ретранслятор. Стандартные настройки сильно ограничены, возможно вам придется ослаблять ограничения. Доступы конфигурируются списками ограничения доступа access restriction list. Важнейшим параметром будет smtpd_recipient_restrictions, так как адресом получателя куда проще управлять. По крайней мере, можно установить локальный ли он.

Вот список ограничений для проверки ретрансляции:

Check_client_address – проверяет адрес ПК клиента;

Check_recipient_access – проверяет почтовый адрес получателя;

Permit_mynetworks – предоставляет доступ к адресам в параметре mynetworks;

Reject_anauth_destination – отклоняет почту для нелокальных получателей – ретрансляция отсутствует.

Одна из мер защиты – строгая реализация протокола ESMTP. Легитимные почтовые сервера протокол принимают, а рассылки спама могут не принять и дискредитировать себя. Однако сейчас технология уже не столь надежна. Есть злоумышленники, способные обработать легитимную почту.

Черные списки основаны на информации из DNS – разрешаются директивой reject_rhsbl_sender – после указывается DNS-сервер, также reject_rbl_client , только проверяет имя PC, а не доменное имя.

До сих пор в версиях Posfix удавались лишь DDOS атаки.

Отладка

Другим местом поиска является сама очередь. Утилита postqueue –p (или аналогичный вывод mailq) печатает содержимое очереди.

-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------

90190C3B9B9F 2242 Mon Jul 27 19:50:05 MAILER-DAEMON

(connect to 10.70.85.12[10.70.85.12]:25: No route to host)

95E96C3CFB5A 2307 Mon Jul 27 19:50:05 MAILER-DAEMON

(delivery temporarily suspended: connect to 10.70.85.12[10.70.85.12]:25: No route to host)

956FAC3CFB46 2311 Mon Jul 27 19:50:05 MAILER-DAEMON

(delivery temporarily suspended: connect to 10.70.85.12[10.70.85.12]:25: No route to host)

96987C3CFB40 2311 Mon Jul 27 19:50:05 MAILER-DAEMON

(delivery temporarily suspended: connect to 10.70.85.12[10.70.85.12]:25: No route to host)

97944C3CFB5E 2311 Mon Jul 27 19:50:05 MAILER-DAEMON

(delivery temporarily suspended: connect to 10.70.85.12[10.70.85.12]:25: No route to host)

postcat –qv 96987C3CFB40 Найдет письмо по ID, покажет заголовок и дополнительную информацию:
[root@iwtm611

postcat: name_mask: all

postcat: inet_addr_local: configured 2 IPv4 addresses

postcat: inet_addr_local: configured 2 IPv6 addresses

*** ENVELOPE RECORDS deferred/9/96987C3CFB40 ***

message_size: 2311 201 1 0 2311

message_arrival_time: Mon Jul 27 19:50:05 2020

create_time: Mon Jul 27 19:50:05 2020

regular_text: Received: from Vvpc (unknown [10.254.1.250])

regular_text: by iwtm611.local (Postfix) with ESMTP id BCB42C3CFB62

regular_text: MIME-Version: 1.0

regular_text: Date: 2 Jul 2020 12:48:40 +0300

regular_text: Subject: test

regular_text: Content-Type: text/plain; charset=utf-8

regular_text: Content-Transfer-Encoding: base64

regular_text: Message-Id: <20200702094845.BCB42C3CFB62@iwtm611.local>

*** HEADER EXTRACTED deferred/9/96987C3CFB40 ***

*** MESSAGE FILE END deferred/9/96987C3CFB40 ***

Postfix можно легко установить и запустить. Но быстро разобраться и решить проблему его внедрения в незнакомой структуре, удастся лишь при понимании тонкостей его работы. Надеюсь, кому-то эта статья поможет сэкономить время и силы на выявление причин проблем. И понять, почему почтовая система работает таким образом, а не иначе.


Проблема
Итак, используя Server Admin, вы настроили почту в 5 кликов.

Переходим к теории.
Причиной паники была нетерпеливость. Mac OS X 10.6 Server использует грейлистинг (greylisting).
Apple верна себе в плане глубины документации, и в 134-страничном Mail Service Admin v10.6.pdf грейлистинг, который сервер использует по умолчанию даже не упоминается.

Что такое грейлистинг?

Почитать подробнее про грейлистинг можно здесь, а здесь – найти набор решений для разных почтовых серверов.

Что конкретно делает ПО на нашем сервере?
При попытке принять письмо наш сервер отмечает IP адрес сервера отправителя, почтовый адрес отправителя и почтовый адрес получателя в виде связки. Если он не находит эту связку в своей базе, он записывает ее:

Кстати, что это за ПО?

Скрипт /usr/libexec/postfix/greylist.pl из поставки Postfix, никак не модернизированный программистами Apple.
База /private/var/lib/postfix/greylist.db.

Запись в /etc/postfix/main.cf
smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks reject_unauth_destination check_policy_service unix:private/policy permit

Чтобы увидеть в деталях, что происходит, добавьте опцию -v (greylist.pl -v), принимайте почту и смотрите /var/log/mail.log
Проделаем это и еще раз проанализируем письмо от Стива к Стиву:


Как полностью отключить greylisting?
Это то к чему многие сразу и прибегают.
GUI средств для этого нет.

Вернее, вы можете снять галочку Enable junk mail filtering, но это отключит и SpamAssassin и ряд проверок postfix.

Отредактируйте /etc/postfix/main.cf
В разделе smtpd_recipient_restrictions удалите check_policy_service unix:private/policy и перезапустите почтовый сервер.

Можно использовать другой механизм postfix и поставить его в очереди перед грейлистингом.
Добавим в /etc/postfix/main.cf
в раздел smtpd_recipient_restrictions
check_sender_access hash:/etc/postfix/sender_access

Все строка теперь выглядит так:
smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks reject_unauth_destination check_sender_access hash:/etc/postfix/sender_access check_policy_service unix:private/policy permit

Есть ли более продвинутые способы контроля грейлистинга?
Да, например, вместо системных средств можно использовать postgrey (есть и в MacPorts).

RFC2554 - SMTP Service Extension for Authentication

RFC4422 - Simple Authentication and Security Layer (SASL)

mailq - получение идентификаторов (ID) писем в почтовой очереди. Посмотреть сколько и какие письма в очереди.

postcat -q - прочитать письмо в почтовой очереди (задав его идентификатор, полученный из mailq)

postconf myhostname - проверить значение параметра myhostname. С ключом e можно редактировать main.cf, например

Поиск ошибок в log с помощью регулярного выражения:

Команда на немедленную доставку конкретного письма по ID. ID получаем командой mailq:

Удаление группы писем от определенного FROM (на примере MAILER-DAEMON):

Для серверов с несколькими IP. Иногда бывает нужно, чтобы Postfix отправлят почту от конкретного IP. Редактируем

Директивы файла main.cf:

inet_interfaces. Postfix IP address bind configuration:

mydestination. Сервер Postfix идентифицирует себя как место конечного назначения только для доменов, имена которых определены в параметре mydestination. Postfix также идентифицирует себя как место конечного назначения для адресов в форме user@[IP адрес], где указан один из IP адресов Postfix. В самом простом случае там должны быть указаны все возможные имена вашего сервера, чтобы локальная почта от ваших системных демонов приходила к вам, а не отбрасывалась

relay_domains указывает Postfix на необходимость приема почты для этих доменов несмотря на то, что данный сервер не является местом их конечного назначения.

virtual_mailbox_domains указывает Postfix, что он является местом конечного назначения для одного или нескольких доменов виртуальных почтовых ящиков.

virtual_mailbox_maps список почтовых ящиков. По умолчанию почтовые ящики имеют формат mbox, чтобы задать формат Maildir нужно добавить черту "/" в конец имени почтового ящика.

smtpd_discard_ehlo_keywords: Postfix DSN DSN - Delivery Status Notifications, которая предоставляет отправителю почты уведомления о статусе его писем. Статусы могут быть - success, failure, delay, none.

sender_canonical_maps Изменение Return-Path (адрес отправителя). В main.cf добавляем строку sender_canonical_maps = hash:/etc/postfix/sender_canonical

Restrictions Postfix

smtpd_relay_restrictions - это ограничение появилось в Postfix 2.10 По умолчанию имеет значение

disable_vrfy_command = yes - установленная в yes запрещает SMTP- команду VRFY, позволяет клиентам проверять существование получателя.

Возможность использования БД SQLite для хранения внутренних баз, таких как БД виртуальных пользователей, алиасы или списки доступа (в дополнение к таким типам хранилищ как btree, dbm и hash).

Поддержка опции "smtpd_reject_footer", позволяющей указать блок текста, который будет добавлен к отвергнутым сервером запросам (SMTP-ответ "reject").

Поддержка системы кэширования в памяти Memcached для хранения кэшей систем verify и postscreen, получающих доступ к данным через сервер proxymap. При использовании Memcached возможно создание конфигураций, при которых несколько серверов совместно используют единый кэш при проверке валидности email-адресов или выборке из списков блокировки зомби-машин, рассылающих спам. Memcached также можно использовать для хранения баз для проверки по серым спискам. Настройка осуществляется через директиву memcache_table;

Переработана команда postconf: добавлен вывод предупреждений о неиспользуемых параметрах "name=value" в конфигурационных файлах main.cf и master.cf, что позволяет выявить опечатки в именах параметров; реализована поддержка динамических имён параметров, таких как имена, зависящие от элементов master.cf; в более дружественном для восприятия формате оформлен вывод настроек из main.cf и master.cf (postconf -nf, postconf -Mf); в "postconf -M" добавлена поддержка фильтрации вывода, например, "postconf -M inet";

В дополнение к ранее присутствующим настройкам smtpd__restrictions добавлена директива smtpd_relay_restrictions, которая позволяет снизить вероятность появления открытого релея из-за ошибок при определении правил блокирования спама. По умолчанию задействованы настройки для полного сохранения обратной совместимости (smtpd_relay_restrictions = permit_mynetworks, reject_unauth_destination; для новых установок smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination);

Добавлена поддержка проверочных таблиц (lookup table) "socketmap" в стиле Sendmail.

В директиве recipient_delimiter теперь возможно указание нескольких символов-разделителей, например, можно одновременно использовать как разделители "+" и "-".

Добавлена опция postscreen_dnsbl_whitelist_threshold, позволяющая клиентам пропустить тесты postscreen (выполняет роль легковесного межсетевого экрана, предназначенного для первичного блокирования соединений от рассылающих спам зомби-машин) в зависимости от результатов проверки по белому списку через DNSBL. Применение postscreen_dnsbl_whitelist_threshold позволяет избавиться от заметных задержек в доставке почты от заведомо валидных почтовых систем, в которых повторные запросы не отправляются с одного и того же IP (задержка возникает из-за теста с использованием повторного реконнекта), например, так поступает Google.

Mail

Понадобилось сделать Postfix с SMTP аутентификацией. Раньше не настраивал, перерыл кучу статей. Очень сумбурно всё изложено, поэтому пришлось написать свой вариант. Если кто-то знает хорошую инструкцию по данному вопросу без лишней воды — пишите в комментариях.

Я хотел реализовать обычный рассыльщик писем без приёма почты. Никаких POP3 и IMAP, чистый SMTP. При этом не хотелось устанавливать какие-то лишние компоненты. Я уверен, что задачу можно было выполнить проще, кто подскажет — молодец.

Окружение

Операционная система

Используем операционную систему Ubuntu Server 20.04 LTS. Если кому-то нужна инструкция по установке, то вот ссылка:

Итак, ОС установлена.

postfix

Почта

Почтовый сервер Postfix.

Аутентификация SMTP

Для аутентификации использую Cyrus. Пользователей SMTP будем хранить в локальной базе sasldb (Cyrus SASL Berkeley DB database).

Домен

Я создам для тестирования отдельный домен третьего уровня testsender.internet-lab.ru, настрою DNS и буду слать письма с адреса info@testsender.internet-lab.ru. Пароль пользователя "888776". После выхода статьи пароль сменю :)

Настройка DNS

postfix

postfix

postfix

Настроим SPF и DMARC, чтобы письма можно было отправлять со своего IP адреса.

postfix

Установка Postfix

Установим Postfix самым простым способом из репозитория без настроек.

Общий тип почтовой настройки выбираем "Без настройки":

postfix

postfix

Установлен postfix версии 3.4.10.

Настройка Postfix

Создаём главный файл настроек /etc/postfix/main.cf:

Создаём файл /etc/postfix/aliases:

postfix

Проверка отправки письма

postfix

Отправляем письмо без аутентификации.

postfix

Письмо ушло в postfix. Смотрим логи postfix:

postfix

status=sent, письмо отправлено. Уже хорошо, система заработала. Получатель, конечно, попытался далее переслать письмо мне на ящик в gmail, но не смог.

postfif

Не понравилось ему, что нет заголовка "From". Но это уже другая история. Кстати, можно обойти проблему, отправив письмо с помощью VBS, накидал скрипт:

postfix

Письма дошло, можно двигаться дальше.

Аутентификация

Для начала настроим пользователей для аутентификации. Для администрирования пользователей базы sasldb понадобится пакет sasl2-bin.

Ещё нужны модули libsasl2-2 и libsasl2-modules, но они уже есть:

bash

postfix

Редактируем файл /etc/default/saslauthd.

Механизм аутентификации sasldb:

postfix

Для postfix указываем опцию:

postfix

Вместе с пакетом sasl2-bin устанавливаются утилиты для работы с пользователями sasldb: saslpasswd2, sasldblistusers2, testsaslauthd.

postfix

Посмотреть список пользователей в базе:

postfix

Утилита testsaslauthd позволяет проверить аутентификацию:

postfix

Упс, что-то не работает. На самом деле всё просто, мы в опциях /etc/default/saslauthd сменили директорию /var/run/saslauthd на /var/spool/postfix/var/run/saslauthd, утилита работает с /var/run/saslauthd. Исправим проблему, правильнее всего монтировать директорию в нужное место, добавляем в /etc/fstab:

postfix

После перезагрузки проверяем аутентификацию:

postfix

Мы добились успешной аутентификации созданного нами пользователя.

Аутентификация в Postfix

Сама база пользователей sasldb находится в /etc/sasldb2.

postfix

Для того, чтобы Postfix мог читать из базы, пользователю postfix нужно дать права на файл sasldb2. Файл sasldb2 принадлежит группе sasl. Добавим пользователя postfix в группу sasl:

Находим директорию /etc/postfax/sasl:

postfix

Создаём в директории /etc/postfax/sasl файл smtpd.conf:

postfix

postfix

И видим, что Postfix по умолчанию поставляется с поддержкой cyrus и dovecot. Я выбрал cyrus. Ставим пакет cyrus-common:

postfix

Спрашивают про какие-то буферы. Говорю Yes.

Настраиваем аутентификацию в Postfix. Модифицируем файл настроек /etc/postfix/main.cf. Добавляем:

Проверка отправки письма с аутентификацией

postfix

Строка AUTH PLAIN LOGIN символизирует наличие возможности аутентификации.

Отправляем письмо с аутентификацией. Для этого нам понадобится перевести логин и пароль в формат Base64. Можно найти онлайн декодер.

  • Логин "info@testsender.internet-lab.ru" в Base64 — "aW5mb0B0ZXN0c2VuZGVyLmludGVybmV0LWxhYi5ydQ= 888776" в Base64 — "ODg4Nzc2".

postfix

Читайте также: