Этот почтовый агент выполняет те же функции, что и Sendmail, но более устойчив, гибок и безопасен. Он появился в 1999 году. Разработчики постоянно совершенствуют свой продукт. В версию Postfix 3 встроена поддержка отправки почты как через устаревшую службу SMTPS, так и через протокол SMTP, а также поддерживается расширение для создания зашифрованных соединений STARTTLS.
Вместо Sendmail — Postfix Mac Os, начиная с версии 10.3. Этот почтовик также входит в состав инсталляционного пакета Linux. Поговорим о том, как установить и настроить Постфикс, об основных особенностях его работы и архитектуре.
Чтобы инсталлировать приложение, наберите:
apt-get install postfix
Запустится конфигурирование. Вам начнут задавать вопросы. Среди профилей, которые вам предложат, выберите Internet Site — тогда программа сконфигурирует конфиг main.cf и сразу же запустится. Иначе вам придется конфигурировать самостоятельно.
Справка. Main.cf может содержать свыше 330 строк.
После инсталляции программные настройки запишутся в подкаталог /etc/postfix. Здесь же будет храниться main.cf — главный конфигурационный файл.
Решим, как будет использоваться клиент mail Postfix: чтобы пересылать корреспонденцию на иной хост или хранить одну часть локально, а другую — пересылать.
Обычная локальная доставка, которая базируется на авторизации и учитывает юзеров вашей системы, не отличается гибкостью. Но мы ее рассмотрим, так как с этими командами взаимодействуют другие.
Зайдите в подкаталог etc/postfix и раскройте файл конфигурации main.cf. Вы увидите строки такого вида:
имя_параметра = значение
Их можно закомментировать, прописав в начале #.
Если параметру может быть присвоено больше одного значения, это записывается одним из способов:
имя_параметра = знач1 знач2 знач3имя_параметра = знач1, значение2, значение3имя_параметра = знач1 знач2 знач3имя_параметра = знач1, знач2, знач3
Если значения перечисляются в столбик, как в двух последних способах, то в начале записи должен быть пробел.
После присваивания значения можно указать перед его именем $ и использовать его величину в других выражениях. Для этого укажите $имя_параметра там, где требуется «вытащить» значение.
Это может быть выглядеть так:
mydomen = example.netmydestination=mail.$mydomen
Но, как правило, явные значения предпочтительней. Так как параметров используется меньше, их проще менять и вероятность ошибки ниже.
Проверка синтаксиса конфигурационных файлов Postfix
Просмотр текущих значений параметров Postfix
Просмотр стандартных значений параметров Postfix(значений по умолчанию)
Изменение значения параметра message_size_limit без перезагрузки
(работает и после перезагрузки postfix)
То же самое можно достичь прописав в
Работа с очередью
Просмотр очереди сообщений
Просмотр кол-ва сообщений в очереди
Альтернативный вариант — посчитать файлы в соответствующем каталоге:
Отправка всех сообщений, находящихся в очереди
Отправка сообщения с конкретным идентификатором
Отправка всех сообщений для конкретного домена
Подсчет кол-ва писем в очереди для/от конкретного адресата
Просмотр активных отправителей
Сортировка почты по домену отправителя
из списка почтовой очереди mailq берем первый попавшийся номер письма от нужного нам домена,с которого идет рассылка большого кол-ва сообщений и определяем имя пользователя, с которого идет рассылка
Просмотреть параметры сообщения и причины проблем с отправкой для заданного
идентификатора сообщения в очереди:
Аналогично,но более подробно
Очистка почтовой очереди(удаление всех писем с очереди)
Очистка почтовой очереди типа deferred
Удаление письма с конкретным идентификатором
Удаление писем из очереди в зависимотси от ошибки
в конце скрипта, можно заменить на
, если хотите сделать массовое удержание или ключик
, если хотите протолкнуть письма в очереди. Все зависит от поставленных задач.
Удаление с очереди писем, отправленных с конкретного адреса
Удаление почты для конкретного получателя/отправителя(получатель-поле 8 или отправитель- поле 7)
Постановка письма на «удержание» (перевод в режим hold – postfix не будет пытаться отправить письмо получателю в таком режиме)
– все сообщения перевести в режим hold
– все письма с очереди deferred перевести в режим hold
Снятие письма с режима «удержание»
– все сообщения перевести с режима hold в режим deferred
Просмотр списка писем в очереди по доменам получателя
Срок хранения bounce в очереди 1 сутки
(максимальное время письма в очереди после которого письмо cчитается недоставленным)( default: 5d)
Пробовать доставить обычные сообщения в течении трех дней
(максимальное время нахождения письма в очереди, после которого отправителю будет отправлен отчет о недоставке) (default: 5d)
Минимальный интервал повторной отправки сообщений в очереди
(минимальное время между попытками доставить письмо) (default: 300s)
Максимальный интервал повторной отправки сообщений в очереди
(максимальное время между попытками доставить письмо в статусе deferred)
Период запуска менеджера очереди
Комментирование и размещение ссылок запрещено.
Помимо копирования входящих сообщений рассмотрим пересылку на другой ящик, копирование исходящих сообщений. Также упомяну про настройку Postfix relay.
- Копирование входящих сообщений
- Копирование исходящих сообщений
- Копирование всех сообщений
- Пересылка сообщений
- Почтовый relay
- Просмотр и отправка сообщений
- Удаление сообщений
- Работа с очередью
- Настройка отправки почты
- Алиасы и преобразования адресов
- Postfix Mail Queue Commands for Reviewing Emails
- 1- Display the mail queues, deferred and pending
- 2- View message (contents, header and body) in Postfix queue
- How to delete queued mail from the postfix mail queue
- 3- Tell Postfix to process the queue now
- 4- Delete queued mail
- 5- Delete mail from the queue selectively
- Виртуальные почтовые ящики
- Архитектура
- Концепция подсистем
- Некоторые утилиты
- Как письма попадают в почтовую систему
- Как происходит доставка
- Итоги
- Postfix logs
- Добавление пользователей
- Меняем темы писем с Postfix Pcre
- Особенности работы
Копирование входящих сообщений
Редактируем файл конфигурации Postfix main.cf
Добавляем строку с указанием расположения файла настроек копирования входящих сообщений
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc_map
Далее создаем файл с настройками копирования сообщений
Содержимое файла будет таким
Параметров копирования сообщений в recipient_bcc_map может быть сколько угодно, главное не забывать каждую новую запись начинать с новой строки.
После внесенных изменений в файл recipient_bcc_map делаем его хеш карту
И напоследок перезапустим сервис postfix
systemctl restart postfix
Копирование исходящих сообщений
Для копирования исходящих сообщений в Postfix необходимо в файл main.cf добавить строку со значением sender_bcc_maps
Открываем файл /etc/postfix/main.cf
sender_bcc_maps = hash:/etc/postfix/sender_bcc_map
В файле по пути /etc/postfix/sender_bcc_map будут находиться правила копирования исходящих сообщений. Создадим его
Добавим в файл следующие записи
Создадим хеш карту файла sender_bcc_map
Перезапустим почтовый сервис postfix
Копирование всех сообщений
Откроем файл main.cf для внесения изменений
Добавим строку с параметром always_bcc
Пересылка сообщений
Для пересылки входящих сообщений на определенный адрес необходимо отредактировать файл /etc/postfix/main.cf
Добавить следующую строку
virtual_alias_maps = hash:/etc/postfix/virtual
Теперь в файле /etc/postfix/virtual будут храниться настройки пересылки сообщений. Также в данном файле обычно используются короткие имена postmap и abuse для пересылки сообщений отправленных на данные ящики.
Отредактируем файл /etc/postfix/virtual
Создадим хеш файла virtual
Почтовый relay
В данном пункте рассмотрим настройку Postfix в качестве почтового ретранслятора. Это означает что сервер не будет пытаться сам отправить письма адресату, а будет их перенаправлять на другой сервер.
Редактируем файл /etc/postfix/main.cf
Добавляем строку relayhost
Также вместо доменного имени можно указать IP адрес. Оба варианта приемлемы.
Готово. В данной статье мы рассмотрели копирование сообщений Postfix, а также пересылку и ретрансляцию.
Хотите отблагодарить автора статьи? Это даст ему дополнительный стимул к написанию новых статей.
Доброго дня дорогие читатели. Использую в своей работе почтовые сервера на postfix. Приведу тут пожалуй самые часто используемые команды. Управление очередью сообщений Postfix нужны как говорится на каждый день. Итак приступим.
Просмотр и отправка сообщений
Вывести список писем в очереди
или второй вариант
Список сообщений выводится в формате таблицы. Слева направо: уникальный код сообщения, размер сообщения, дата и время постановки сообщения в очередь. На следующей строке адрес сервера получателя и состояние отправки. Последней строчкой идет адрес получателя.

Пример сообщения в очереди Postfix
Команда mailq выводит все сообщения в очереди полным списком. По окончании вывода внизу указывается строка с объемом всех сообщений в очереди и их количеством. В примере ниже видно, что в очереди находится 52 сообщения общим объемом 26834 Кбайт.
— 26834 Kbytes in 52 Requests.
Для быстрой проверки количества сообщений в очереди можно использовать grep
И на выходе получим одну строчку с количеством сообщений в очереди и их объемом.
Вывести всю информацию по сообщению в очереди
Принудительная отправка всех сообщений в очереди
После этой команды будет предпринята повторная попытка отправить все сообщения в очереди.
Принудительная отправка сообщения в очереди с указанным идентификатором
Перезапуск очереди для повторной обработки сообщений
Принудительная отправка сообщений в очереди относящихся к определенному домену
Установка периодичности повторной отправки сообщений
postconf -e «queue_run_delay = 20m»
где 20m — количество минут.
Установка времени приостановки отправки сообщений
Сообщения не отправленные по причине временных неисправностей. Например принимающий сервер не отвечает или просит повторить запрос позже и т.п. Такое поведение также применяет для фильтрации СПАМа greylist
postconf -e «minimal_backoff_time = 20m»
postconf -e «maximal_backoff_time = 60m»
где minimal_backoff_time — минимальное времяmaximal_backoff_time — максимальное время
Установить время до удаления сообщения из очереди
Это время в течении которого postfix будет пытаться отправить сообщение. После окончания указанного периода сообщение будет безвозвратно удалено. В примере указано 2d — тоесть два дня
postconf -e «maximal_queue_lifetime = 2d»
После изменения в конфигурации Postfix не забываем перезагружать сервис для применения настроек
Удаление сообщений
Удалить письмо из очереди
Удалить письмо из очереди можно по его идентификатору, его можно узнать используя команду mailq. Подробнее можно прочитать выше.
Удалить все сообщения
Удалить все сообщения по определенному отправителю
И напоследок, список директорий где Postfix хранит сообщения в очереди пока их не отправит, либо не удалит.
Управление очередью сообщений Postfix можно автоматизировать. В дальнейшем рассмотрим скрипты на данную тему.
Официальный сайт Postfix где есть много информации на английском языке. Следите за нашим почтовым разделом, будет много интересного.
DSN Postfix — оповестить о статусе доставки корреспонденции: успех, неудача, задержка или не отправлено.
Вы можете запретить оповещения:
Или разрешить лишь отобранным:
/etc/postfix/main.cf:smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/esmtp_access
Перечень выбранных сетей — в файле esmtp_access. Например:
192.168.0.0/25 silent-discard0.0.0.0/0 silent-discard, dsn
Работа с очередью
Имя узнается с помощью команды:
Если имя не установлено, или не такое, его можно прописать:
Справка. Hostname сервера не совпадает с его доменом. Например, server.example.com — полное имя домена, а server — его hostname.
Настройка отправки почты
Для того чтобы отправленные через MTA письма не попали под спам, а пришли адресату, вам будут нужны:
При настройке обязательно указываются такие параметры: myhostname, mydomain и mydestination.
Хост и домен прописываются так:
myhostname = mail. example.orgmydomain = example.org
Если не указать название хоста, система определит его сама, но лучше прописать явно. Имя домена получится из названия хоста, если отбросить левую часть до первой точки. Поэтому можно не прописывать его вручную. Mydomain — это публичное наименование почтового сервиса. К адресу, откуда отсылается корреспонденция, автоматически дописывается домен локальной почты:
myorigin = $mydomain
Прописываем почтовые домены, к которым сервер доставит почту. В mydestination перечисляются DNS-имена, для которых этот почтовый сервер сможет принимать корреспонденцию. Их лучше обрабатывать механизмом virtual, так что значения не присваиваем.
my destination = localhost$myhostname
Затем подключаем виртуальные домены, чтобы доставить почту:
Так как обычная локальная доставка нас не интересует, оставляем перечень адресатов без значений.
1. Прописываем сетевые интерфейсы, работающие на приеме почты, например, все:
inet_interfaces = all
Выбираем из ipv4, ipv6, all нужный нам протокол:
inet_protocols = all
2. Указываем доверенные сети, где разрешены практически любые соединения:
3. Если вы планируете отправлять корреспонденцию через relay, пропишите это в relayhost.
Справка. Relay — это узел, перенаправляющий входящую почту. В его задачи входит:
Relay для отправляемой корреспонденции:
relayhost = smtp.myprovider.net
Так как вы отправляете всю переписку на релей, вам нет смысла опрашивать DNS. Поэтому отключаем эти запросы:
disable_dns_lookups = yes
4. Прописываем домены, на которые разрешим пересылать сообщения от клиентов недоверенных сетей. Возможен один из вариантов:
relay_domains = $mydestination
relay_domains = $mydomain
Справка. По умолчанию, Постфикс:
Алиасы и преобразования адресов
Alias, или никнейм — это короткое имя, которое легко запомнить. Оно присваивается сложным и длинным наименованиям.
Имя адресата может быть таким же, как и имя пользователя системы, но также их можно извлечь из таблицы алиасов. Например:
alias_maps = hash:/etc/postfix/aliasesalias_database = hash:/etc/postfix/aliases
Во время первой установки почтового клиента таблица пополняется записью с алиасом суперпользователя root. Ему будут отправляться все письма, отправленные на системные адреса или администратору (по умолчанию им становится первый зарегистрированный пользователь).
Рассмотрим на примере, как выглядит таблица.
postalias создает базы псевдонимов и обрабатывает запросы к ним. Чтобы построить рабочую таблицу, наберите команду:
Postfix Mail Queue Commands for Reviewing Emails
How to review the email message your server is trying to send.
There are two queues within Postfix: pending and differed.
The pending queue includes all messages that have been submitted to postfix which have not yet been sent out and handed off to the recipient server.
The differed mail queue holds all messages that have soft-failed and need to be retired (temporary failure). Postfix will retry sending the deferred queue on set intervals (this is configurable, but is set to 5 minutes as a default).
1- Display the mail queues, deferred and pending
To save the output to a text file you can run:
Either of these commands will show you all queued messages.
NB: this command shows the sender and recipients and ID, not the message itself. The ID is particularly useful if you want to inspect the message itself.
2- View message (contents, header and body) in Postfix queue
To view a message with the ID XXXXXXX
(you can see the ID from the queue)
postcat -vq XXXXXXXXXX
Or to save it in a file
With these commands you should be able to review your mail queue and make sure that intended messages are being sent and have not been rejected.
How to delete queued mail from the postfix mail queue
Now that we have learned the necessary steps to reviewing your mail queue, the final 3 tips will demonstrate how to delete queued mail.
3- Tell Postfix to process the queue now
This will cause Postfix to immediately attempt to send all queued messages.
4- Delete queued mail
Delete all queued mail
Delete only the differed mail queue messages (i.e. only the ones the system intends to retry later)
5- Delete mail from the queue selectively
This is not something that is natively included with the standard Postfix tools however can be done with a bit of Perl scripting.
NB: This perl script seems to be free, and is all over the internet however I could not find out where it originates or who wrote it but my thanks go to them!
Виртуальные почтовые ящики
Это альтернатива ящикам, созданным для каждого из пользователей системы. Если на обслуживании вашего почтовика числятся сотни клиентов, то будет непрактично создавать всем им системные учетные записи для работы с почтой. Чтобы воспользоваться виртуальными п/я, вам нужно будет подкорректировать настройки программы и прописать окружение операционки.
Рассмотрим общий принцип функционирования виртуальных ящиков в системе. Если сервер почты не является релеем, то вся почтовая информация записывается на диск. При использовании постфиксом системных учеток, почтовые записи можно распознать по уникальным идентификаторам. Но, когда эксплуатируются виртуальные п/я, потребуется каким-то образом сообщить приложению о необходимости сохранения почтовой информации под определенной учеткой ОС.
Идентификаторы пользователей и групп, а также их права можно задать с помощью параметров virtual_uid_maps, virtual_gid_maps. Кроме того, необходимо прописать папку, в которой будет храниться почта.
Класс виртуальных п/я создан для того, чтобы доставлять корреспонденцию для hosted_domains. Транспорт, который доставляет письма, прописывается в параметре Postfix virtual transport. По молчанию ему присвоено значение virtual, что обозначает доставку виртуальным агентом. Параметр mailbox_domains отвечает за наименования доменов, а в maps указываются допустимые адресаты.
Архитектура
Соответствует стилю UNIX:
Концепция подсистем
В Sendmail работает одно большое приложение, а в Постфикс — компактные программы, функционирующие совокупно. Они связаны алгоритмами FIFO и сокетами Unix. Каналы обмена размещены в защищенном каталоге. К функциям программ относятся отправление/прием сетевых сообщений и локальная доставка корреспонденции.
Разбиение на подсистемы хорошо тем, что неиспользуемые модули отключаются. Все демоны завершаются не сами по себе, такую команду дает master. Когда почтовый сервер простаивает, демоны, которые в данный момент не нужны, прекращают работу и не занимают память. Если они понадобятся, master-демон может запустить их снова.
Запускает и контролирует процессы утилита master. В ее конфигурационном файле master.cf записаны сведения о вспомогательных программах и очередности их запуска. Процесс master активизируется, когда система стартует, и «живет», пока она работает. Он запускает остальные модули по требованию и перезапускает те, что из-за проблем были завершены аварийно.
Некоторые утилиты
В приложение входит набор утилит, которые работают через командную строку. Эти утилиты заточены на решение административных задач. С их помощью вы сможете обращаться к картам, просматривать очереди, ставить в нее сообщения и извлекать их, а также модифицировать конфигурацию. У всех их есть общая характеристика — post в начале имени, так что вы легко найдете их в таблице.
Как письма попадают в почтовую систему
1. Чаще всего — через сеть. Сначала их получает в postfix SMTP-демон. Проводится проверка на спам, если эту функцию включил администратор.
Затем запускается процесс cleanup, отвечающий за зачистку. Он проверяет, правильно ли оформлено сообщение и допустимый ли у него формат. Цель — не допустить переполнение буфера, которое может быть причиной атак.
Обработанное письмо записывается в каталог incoming, выделенный для хранения входящей очереди.
2. Послание может быть отправлено с локальных серверов скриптами или командой, например, такой:
3. Письмо появилось как ответ системы. Отправителю сообщается, что его послание не удалось доставить.
4. Письмо возникло как уведомление администратору. Сообщается, что есть проблемы c протоколом SMTP или настройки нарушены. Чтобы доставить письмо, сначала запускается процесс cleanup, а потом оно ставится в очередь.
Как происходит доставка
Сообщения, поставленные в очередь incoming, должны быть доставлены адресатам.
Queue manager — менеджер очередей. Когда приходит сигнал о прибытии новой почты, он ставит ее в активную очередь active и отправляет запрос демону trivial-rewrite. Он сообщает, локальный это адрес или удаленный. Дополнительные сведения находятся в файле Postfix transport
Менеджер очередей на основе анализа данных выбирает программы доставки. Перечислим их.
Если доставка сорвалась, Queue manager отсылает это послание в директорию, выделенную отложенным сообщениям. Спустя какое-то время будет предпринята повторная проба. Если вам нужно попытаться отправить письмо раньше, запустите команду postfix flush.
Corrupt — очередь, куда отсылаются сообщения, которые повреждены, не читаются или у них недействительный формат. Подозрительные данные изолируются, пока администратор не примет решение о дальнейших действиях.
Очередь hold — для тех писем, которые были приостановлены. Из этого состояния их можно вывести специальной командой.
Queue manager умеет функционировать в различных режимах/стратегиях, или комбинировать их.
Итоги
Настройте для пересылки почты собственный клиент, если планируете:
Число отказов снизится, а вероятность доставки возрастет с уменьшением количества посредников при пересылке писем.
Postfix, server пересылает корреспонденцию либо напрямую, непосредственно на почтовый сервер адресата, либо через relay (посредника). Почтовик легко устанавливается и запускается, но нужно понимать тонкости его работы, чтобы внедрить или разобраться в проблемах.
Postfix logs
Журнальные файлы по умолчанию хранятся в файле mail.log, расположенном в подкаталоге /var/log/mail.log.
Если вы или ваш провайдер изменили их местоположение, то для возврата к первичным настройкам потребуется выполнить apt-get install rsyslog и перезапустить службы постфикса.
По каждому из писем в логах фиксируются базовые данные: отправитель и адресат, а также факт и время обработки. Анализируя файлы журналов, вы можете:
Из этих строк не всегда можно понять, какое послание было обработано, так как одному и тому же получателю их могло быть отправлено несколько. Рассмотрим, как добавить в логе заголовки, которые смогут идентифицировать письмо с помощью директивы
1. Создаем в подкаталоге etc/postfix файл header_checks и пишем в него правило для проверки заголовков:
/^X-Message-(.*)$/ Information $1
2. Проверяем. Если нет ошибок в формате файла, то по команде:
postmap -q “X-Message-Result: 79461” pcre:/etc/postfix/header_checks
Information Result: 79461
3. Подключим этот файл в почтовый сервер:
postconf –e header_checks=pcre:/etc/postfix/header_checks postfix reload
Итог: для всех посланий, содержащих такой заголовок, в журнальных записях запишется последняя часть заголовка, по которой можно распознать письмо.
Добавление пользователей
Чтобы создать нового пользователя, в терминале Ubuntu наберите команду:
Добавленный пользователь сможет пользоваться почтовиком. Такой метод подходит небольшим организациям. Если же в организации много пользователей, систему наращивают.
Этот процесс подробнее описан в блоге cloud.timeweb.com, разбирается настройка Postfix и Dovecot.
Меняем темы писем с Postfix Pcre
В Постфикс можно заменять темы писем. Для этого потребуется доустановить библиотеку pcre, введя в терминале команду:
apt install postfix-pcre
Рассмотрим пример, где почтовик приписывает имя сервера к теме сообщения.
1. Добавляем в файл конфигурации запись:
header_checks = pcre:/etc/postfix/rewrite_subject
2. Создаем файл rewrite_subject в подкаталоге etc/postfix.
3. Записываем в этот файл правило, по которому наименование сервера припишется к теме письма.
/^Subject: (.*)$/ REPLACE Subject: $1 (from server.domain.tld)
Результатом этой команды будет замена заголовка на «заголовок + имя сервера».
4. Перезапускаем почтовый сервер, чтобы изменения вступили в силу.
Справка. Регулярные выражения pcre можно применять не только для правки заголовков, но и для фильтрации сообщений.
Особенности работы
Чем интересен этот почтовый сервер?

