🐹 CentOS 7: Программа Postfix 3 для отправки электронной почты с внутреннего системного «почтового ящика».
Опубликовано 2019-07-24 · Обновлено 2021-05-09
Содержание:
1. Описание программы.
Агент передачи почты. Postfix является свободным программным обеспечением, создавался как альтернатива Sendmail. Postfix 3 нужен для отправки электронной почты через SMTP, SMTPS и STARTTLS.
2. Проверка версии программы.
Первое, что нужно сделать, так это проверить версию установленной программы Postfix в нашей системе. Это легко сделать с помощью специальной команды:
Как видно из ответа, у нас в системе установлена версия Postfix 2. Большинству пользователей вполне хватит и этой версии, но она имеет очень ограниченные возможности при работе с устаревшей службой SMTPS, также известной как SMTP over SSL (на TCP-порту 465). Если кратко, то это означает, что – всякий раз, когда мы пытаемся подключиться к SMTP-серверу с помощью такого протокола, то это, скорее всего, не удастся с последующим сообщением об ошибке и записью в файле /var/ log/maillog :
CLIENT wrappermode (port smtps/465) is unimplemented instead, send to (port submission/587) with STARTTLS
К сожалению, такую проблему не преодолеть в версии Postfix 2, она изначально не поддерживает SMTP на SSL через TCP-порт 465. Наш единственный шанс сделать всё, как нужно — это специальные соединения, либо использовать TCP-порт 587 и использовать STARTTLS, который поддерживается изначально, либо перенаправить соединение через Stunnel или другие инструменты, которые могут выполнять туннелирование SSL.
К счастью, настройка SSL tunnel — это не единственный вариант: мы же можем перейти на Postfix 3, который имеет встроенную поддержку SMTPS благодаря своей новой функции режима TLS Wrapper Mode.
3. Удаление Postfix 2 / Sendmail / sSMTP.
Следующее, что нам нужно сделать, это убедиться, что на нашем сервере нет других программ для отправки почты, если мы действительно не хотим оставить для Postfix 3 и одну (или несколько) из них. В случае, если нам этого не нужно, мы можем легко удалить их с помощью следующей команды:
Хотя удаление через yum этих программ является обязательным шагом для установки Postfix 3 предполагая, что мы хотим установить более новую версию – мы также можем выбрать команду systemctl отключить и systemctl остановить sSMTP и/или Sendmailinstead их удаления. Единственное, что здесь важно сделать, это убедиться, что ни один из них не будет запущена и запущена вообще, иначе они не позволят нашему Postfix 3 быть установленным и работать должным образом.
4. Установка репозитория Ghettoforge.
Если не установить репозиторий Ghettoforge, то мы не сможем ничего установить!
Чтобы установить его, мы должны добавить сторонний репозиторий — Ghettoforge, хотя можно выбрать репозиторий c официальной страницы пакетов и портов Postfix.
Алгоритм установки Ghettoforge содержится в статье «CentOS 7: Репозитории: Ghettoforge».
Адреса на всякий случай:
5. Установка Postfix 3.
После того, как сделали данные манипуляции, ставим Postfix 3.
Установим программу для создания формы письма mailx.
Подключаем сервис в автозагрузку:
# systemctl enable postfix
# systemctl start postfix
Проверим версию, на всякий случай, что он там поставил?
Проверим работает ли он сейчас?
# systemctl status postfix
Отлично! То, что нужно!
6. Настройка Postfix 3.
Создадим резервную копию файла конфигурации:
# cp /etc/postfix/main.cf /etc/postfix/main.cf.original
Добавляем в конец конфигурационного файла /etc/postfix/main.cf вот эти строки.
Если почтовый домен совпадает с hostname сервера, меняем параметр mydestination
Если этого не сделать, сервер не сможет слать письма в свой домен, так как будет искать адресатов в таблице локальных пользователей — разумеется безуспешно.
Теперь настроим параметры личного почтового ящика, через который будет общаться с нами сервер.
Компилируем таблицы в понятный постфиксу формат:
# systemctl restart postfix
Отправляем тестовое письмо:
Открываем лог и ждем строку:
Если это видим — значит все работает.
7. Перенаправляем почту root’а на e-mail.
Было закрыто решеткой:
Стало открыто, без решетки:
После изменений необходимо запустить программу чтобы перестроить таблицу алиясов адресов назначения.
8. Проверка внутреннего почтового ящика и отправка сообщений.
8.1. Проверим что у нас скопилось на внутреннем почтовом ящике.
Накопилось 4 письма. Посмотреть их можно введя порядковый номер после ‘ & ‘.
Для выхода из режима просмотра писем нужно набрать команду выхода:
Теперь отправляем почту Пользователю root:
и ждём этого письма на указанном ящике!
Еще можно отсылать всякую полезную служебную информацию.
8.2. Отправим информацию о заполненности дисков сервера:
На почту прейдет письмо вида:
8.3. Проверка открытых портов с помощью nmap.
Поставьте nmap на какой-то внешний хост и с него по cron раз в неделю запускайте проверку с отправкой результата вам на почту:
P.S. для этого требуется установить nmap дополнительно.
9. Возможные ошибки.
Если что-то пошло не так:
Feb 21 21:34:04 example postfix/smtp[12070]: warning: SASL authentication failure: No worthy mechs found Feb 21 21:34:04 example postfix/smtp[12070]: 914EF41295: SASL authentication failed; cannot authenticate to server smtp.yandex.ru[213.180.204.38]: no mechanism available
Необходимо доустановить в систему недостающие SASL-библиотеки:
Feb 21 21:37:40 example postfix/smtp[12233]: 98E6A412B0: SASL authentication failed; server smtp.yandex.ru[213.180.204.38] said: 530 5.7.7 Email sending without SSL/TLS encryption is not allowed. Please see: http://help.yandex.ru/mail/mail-clients/ssl.xml
В конфигурационном файле забыт параметр:
Feb 21 21:42:13 example postfix/smtp[12394]: 914EF41295: to=, relay=smtp.yandex.ru[87.250.250.38]:25, delay=564, delays=532/0.07/33/0, dsn=4.7.8, status=deferred (SASL authentication failed; server smtp.yandex.ru[87.250.250.38] said: 535 5.7.8 Error: authentication failed: Please accept EULA first. https://mail.yandex.ru/for/example.com)
Надо этим пользователем зайти «руками» через браузер и прямо на первом экране поставить галочку напротив «EULA».
Если так и не удалось устранить проблему, то зайдите в логи почтового агента и изучите причину неудач.
Посмотрите, что может идти не так.
Например что-то вроде этого:
Это, вероятно, означает, что вы настроили Postfix 3 на использование значения myhostname и/или mydomain, которое соответствует доменной части электронной почты цели, таким образом, заставляя его искать локального целевого пользователя вместо удаленной проверки электронной почты. Чтобы исправить это, замените эти значения или добавьте резервную ретрансляцию, которая сообщит postfix, что делать, если нет локальных пользователей, соответствующих этому имени:
После внесения этого исправления, перезапустите сервис postfix.
Особенности работы Postfix
Добрый день, сообщество. В этой статье хочу поговорить о Postfix – о том, каковы принципы его работы, и о возможностях диагностики проблем. В силу специфики работы приходится с ним сталкиваться — либо для решения своих задач, либо для понимания того, как работает чужая инфраструктура. В интернете о Postfix много информации, однако в основной массе это готовые конфиги для развертывания почтового сервера с нуля. Здесь же я постараюсь охватить основные аспекты администрирования Postfix.
Известно, что Postfix разработан как альтернатива Sendmail. ПО повышало производительность, обеспечивало устойчивость, гибкость и безопасность решения. Все основные Linux-дистрибутивы включают Postfix, в Mac OS X, начиная с версии 10.3, программа также используется вместо Sendmail.
Главные особенности
Архитектура
Postfix состоит из нескольких небольших, совместно работающих программ, которые посылают сетевые сообщения, принимают сообщения, осуществляют локальную доставку почты и другие действия. Связь между программами обеспечивается с помощью сокетов Unix или алгоритмов FIFO. Архитектура отличается от Sendmail, где всю работу нужно выполнять одной большой программе.
Самые важные программы показаны в блок-схеме:
За прием почты на порту SMTP отвечает smtpd. Он же проверяет, авторизован ли клиент для отправки почты. Если письмо отправляется локально, через совместимость с /usr/lib/sendmail, файл будет записан в каталог /var/spool/postfix/maildrop. Этот каталог сканируется программой pickup, которая обрабатывает найденные файлы. Входящая почта обрабатывается программой cleanup. Она добавляет отсутствующие заголовки и переписывает адреса в соответствии с картами canonical и virtual. Прежде чем поместить письмо в очередь, incoming программа cleanup передает письмо программе trivial-rewrite, которая также выполняет незначительные исправления в адресах, добавляя домен и частично заполненный адрес.
Электронные письма, ожидающие доставки, находятся под управлением qmgr – администратора очередей:
Incoming – входящая почта;
Active – доставляемая почта;
Deferred – письма, доставка которых не осуществилась ранее;
Hold – письма, заблокированные в очереди администратором;
Corrupt – письма, которые невозможно прочитать.
Анализатор очередей обычно выбирает сообщение для обработки на основе алгоритма FIFO.
Также он поддерживает и более сложный алгоритм — например, отбирает события только с определенных адресов.
Чтобы не перегружать хост приемки, после доставки писем Postfix использует алгоритм медленного запуска, который позволяет контролировать скорость доставки. Отсроченные письма получают метку с обозначением времени повторной отправки. Время увеличивается экспоненциально, благодаря этому вы можете избежать траты ресурсов на сообщения, которые не удается доставить. Состояние недосягаемых мест кешируется — во избежание новых попыток.
Отправка почты идет при поддержке trivial-rewrite, утилита qmgr принимает решение, куда должно быть отправлено сообщение. Решение о маршруте может быть аннулировано transport картой.
Доставка с помощью SMTP осуществляется, конечно, smtp-программой. Lmtp осуществляет локальную пересылку почты по протоколу LMTP, использующим семантику ESMTP (https://tools.ietf.org/html/rfc2033). LMTP изменен так, что для управления локальной очередью почтовый сервер не нужен.
Задача local – локальная доставка почты. Программа распознает в таблице aliases и выполняет инструкции из файла .forward получателя. Сообщения могут быть направлены по другому адресу, переданы внешней программе на обработку или сохраниться в почтовых папках пользователей.
Программа virtual доставляет письма в виртуальные почтовые ящики – ящики, представляющие собой адреса назначения. Наконец, программа pipe реализует доставку через внешние программы.
Взаимодействие между пользователем и системой обработки регулируется утилитами:
sendmail, mailq, newaliases — интерфейс совместимости postfix и sendmail.
]# sendmail user@example.com
from test@test.com
user@example.com
HI.
.
Поставьте «.» И нажмите Enter — sendmail попытается отправить письмо.
postfix – запускает и прекращает работу системы обработки почты;
]# postfix status
postfix/postfix-script: the Postfix mail system is running: PID: 16765
postalias — создает и модифицирует таблицы псевдонимов;
postmap – создает, модифицирует, запрашивает таблицы преобразований;
onedomain.ru smtp:10.1.2.10
twodomain.ru smtp:10.1.3.10
Утилиты фактически создают индексированные карты файлов. Повторить запуск при изменениях в файлах aliases и transport;
Postcat –напечатает содержимое файла из очереди;
Postsuper и postqueue – управляют почтовыми очередями. Первая используется для высокопривилегированных операций. Например, удаление очереди:
Postconf – инструментальное средство, позволяющее конфигурировать postfix- конфиг main.cf. Без аргументов выводит все параметры в текущей конфигурации. Если передать значение параметра – выведет значение этого параметра. С ключом –d напечатает default-настройки, а не сконфигурированные.
]# postconf virtual_mailbox_limit
virtual_mailbox_limit = 51200000
С ключом –n напечатает только значения, отличные от типовых.
Главным файлом Postfix является main.cf. Он конфигурирует серверные программы и определяет таблицы преобразований, на которые содержит ссылки. Содержит более 300 параметров. Для запуска почтового сервера в средней организации достаточно лишь несколько из них. В документацию рекомендуется включать лишь параметры, содержащие нестандартные значения.
Базовая возможная настройка
Супер-простая конфигурация – пустой файл. Как ни странно, вполне приемлемая и приводит к тому, что создается почтовый сервер, осуществляющий локальную доставку почты в пределах домена локального хоста. Любые нелокальные сообщения посылаются дистанционным серверам.
Второй вариант – null клиент. Система не выполняет локальную доставку, а направляет исходящую почту на указанный почтовый сервер. При этом конфиге указывается несколько параметров: mydomain – определяющий домен компьютера; myorigin — определяющий почтовый домен, добавляемый к почтовым адресам. Третьим параметром будет mydestination, определяющий локальные почтовые домены (они же canonical домены). Если домен получателя соответствует mydestination, письмо доставит программа local (при условии что файла .forward не найдено). Если в mydestination несколько записей, они рассматриваются как псевдонимы одного домена. Null клиенту локальная доставка не нужна, поэтому параметр mydestination — пустой. Также программа local проведет поиск псевдонима адреса в таблицах alias_maps. Наконец, параметр relayhost оповещает Postfix о том, что нелокальные сообщения нужно посылать на указанный компьютер, а не адресатам. Квадратные скобки говорят о том, что указанная строка обрабатывается как имя компьютера, то есть A не MX запись DNS. Null клиент не должен получать почту с других систем – комментируем строчку smtpd в файле master.cf – программа smtpd не запустится.
Преобразования и виртуальные домены
Аспекты поведения 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. Легитимные почтовые сервера протокол принимают, а рассылки спама могут не принять и дискредитировать себя. Однако сейчас технология уже не столь надежна. Есть злоумышленники, способные обработать легитимную почту.
Фильтрация – для проверки самого Body письма Postfix использует regexp выражения в реальном времени. А также может передавать сообщения другим программам. Postfix поддерживает SpamAssasin и фильтры подобного рода.
До сих пор в версиях Posfix удавались лишь DDOS атаки.
Отладка
Если возникла проблема с почтой, первым делом можно заглянуть в журнальные файлы Posfix. Каждая Postfix-программа регистрирует запись в журнале для обработанного сообщения.
Идентификатор письма 96987C3CFB40 — общий для каждой строки. Postfix присвоит его, как только сообщение попадает в систему и никогда не изменяет. Таким образом, при поиске в журнале можно сосредоточиться на поиске ID, затем с помощью grep отследить маршрут.
Другим местом поиска является сама очередь. Утилита postqueue –p (или аналогичный вывод mailq) печатает содержимое очереди.
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: for ; Thu, 2 Jul 2020 12:48:45 +0300 (MSK)
regular_text: MIME-Version: 1.0
regular_text: From: user@domain.ru
regular_text: To: usr111@test.com
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
*** HEADER EXTRACTED deferred/9/96987C3CFB40 ***
*** MESSAGE FILE END deferred/9/96987C3CFB40 ***
qshape – новый инструмент свежих версий – показывает сводную статистику содержимого и подводит итог – количество минут, в течение которых сообщение отправляется. Например, для итога по домену отправителя запустите qshape –s, а отклоненные письма можно посмотреть через параметр qshape deferred.
В примере таблицы можно увидеть, что 4 сообщения на gmail висят в очереди более 120 минут.
Рикошет – вызывается параметром soft_bounce. Это конфигурационный параметр. Postfix будет отправлять временные сообщения при отправке сообщений об ошибках типа: user_unknown или relay_denied. Это эффективное средство, позволяющее отслеживать местонахождение сообщения после изменений конфигурации и не терять их. Все, что вы отклоните, в конечном итоге вернется отправителю. Не забудьте это отключить после завершения проверки.
Для проверки доступа в Postfix есть расширение xclient, имитирующее отправку сообщений из другого места. Включается в main.cf параметром smtpd_autorized_xclient_hosts.
Postfix можно легко установить и запустить. Но быстро разобраться и решить проблему его внедрения в незнакомой структуре, удастся лишь при понимании тонкостей его работы. Надеюсь, кому-то эта статья поможет сэкономить время и силы на выявление причин проблем. И понять, почему почтовая система работает таким образом, а не иначе.
Установка и настройка почтового сервер с PostfixAdmin
Set up a mail server with PostfixAdmin
Это первая публикация. которая описывает создание необходимых записей DNS и объясняет, как установить и настроить Postfix Admin, Nginx с бесплатным сертификатом Let’s Encrypt, PHP и MySQL.
Прежде чем приступить
В качестве предварительных условий, чтобы следовать этой серии, вам потребуется:
Настройки DNS
Для работы вашей почтовой системы необходимо настроить следующие записи DNS:
Обратный DNS (PTR)
Большинство почтовых серверов выполняют обратный поиск DNS по IP-адресу, который пытается подключиться к ним, и могут не принимать электронные письма от сервера, если не установлена запись PTR.
В большинстве случаев записи PTR можно установить через веб-интерфейс вашего хостинг-провайдера или связавшись со службой поддержки и попросив их настроить правильную запись PTR для вас.
Вы можете использовать команду dig, чтобы узнать обратный DNS данного IP-адреса.
Создать системного пользователя
Поскольку мы настраиваем почтовый сервер с виртуальными пользователями, нам нужен один системный пользователь, который будет владельцем всех почтовых ящиков и будет использоваться виртуальными пользователями для доступа к своим почтовым сообщениям на сервере.
Следующая команда создаст новую группу и имя пользователя vmail и установит для домашнего каталога пользователя значение /var/mail/vmail :
Все виртуальные почтовые ящики будут храниться в /var/mail/vmail каталоге.
Установите Nginx PHP и MySQL
Выполните следующую команду, чтобы установить Nginx, PHP и все необходимые модули PHP:
Вам будет предложено создать корневой пароль MySQL во время установки.
Скачать и настроить Postfix Admin
На момент написания статьи, 3.1 это последняя стабильная версия Postfix Admin.
Загрузите архив Postfix Admin с помощью следующей команды wget :
После завершения загрузки распакуйте архив :
Переместите исходные файлы администратора Postfix в /var/www каталог и создайте templates_c каталог (кэш smarty):
И Nginx, и PHP-FPM работают под пользователем, www-data поэтому нам нужно сменить владельца /var/www/postfixadmin этого пользователя:
Postfix Admin будет использовать базу данных MySQL для хранения информации о пользователях, доменах и конфигурации приложения.
Авторизуйтесь на сервере БД MySQL :
Создайте нового пользователя и базу данных MySQL используя следующие команды:
Вместо того, чтобы редактировать конфигурацию Postfix Admin по умолчанию, мы создадим новый файл с именем, config.local.php который перезапишет настройки приложения по умолчанию:
Откройте файл с вашим текстовым файлом:
Вставьте следующий код php:
В приведенной выше конфигурации мы определяем тип базы данных и учетные данные для входа. Также мы указываем псевдонимы по умолчанию, отключаем fetchmail и включаем квоту.
Затем выполните следующую команду, чтобы создать схему для базы данных Postfix Admin:
После того, как база данных заполнена, мы можем продолжить и создать нашего первого пользователя PostfixAdmin superadmin, используя postfixadmin-cli инструмент.
Этот пользователь будет иметь права администратора для изменения любого домена или настройки приложения.
Вывод должен выглядеть примерно так:
Не забудьте изменить пароль ( P4ssvv0rD ) для учетной записи superadmin на более безопасный.
Установите бесплатный SSL-сертификат Let’s Encrypt
Мы собираемся использовать сертификат SSL для доступа к нашей установке Postfix Admin и включить шифрование Dovecot и Postfix SSL / TLS.
После того, как вы сгенерировали сертификат SSL, следуя приведенному выше учебнику, отредактируйте свой блок сервера Nginx следующим образом:
Перезагрузите службу Nginx, чтобы изменения вступили в силу:
Вывод
В этом руководстве вы установили Postfix Admin.













