Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Кратко о задаче
Чтобы инсталлировать приложение, наберите:
Запустится конфигурирование. Вам начнут задавать вопросы. Среди профилей, которые вам предложат, выберите 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.net
mydestination=mail.$mydomenНо, как правило, явные значения предпочтительней. Так как параметров используется меньше, их проще менять и вероятность ошибки ниже.
Задача DSN Postfix — оповестить о статусе доставки корреспонденции: успех, неудача, задержка или не отправлено.
Вы можете запретить оповещения:
/etc/postfix/main.cf:
smtpd_discard_ehlo_keywords=silent-discard, dsnИли разрешить лишь отобранным:
/etc/postfix/main.cf:
smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/esmtp_accessПеречень выбранных сетей — в файле esmtp_access. Например:
192.168.0.0/25 silent-discard
0.0.0.0/0 silent-discard, dsn-
С помощью утилиты postcat Postfix вы сможете просматривать содержимое сообщений, которые застряли в очереди.
-
С помощью qshape Postfix можно увидеть письма, стоящие в очереди по каждому из доменов.
-
Просмотр очереди:
-
Узнать количество писем в очереди:
-
Установить наименование сервера
Имя узнается с помощью команды:
Если имя не установлено, или не такое, его можно прописать:
echo "server" > /etc/hostname
hostname -F /etc/hostnameСправка. Hostname сервера не совпадает с его доменом. Например, server.example.com — полное имя домена, а server — его hostname.
Postfix: настройка отправки почты
Для того чтобы отправленные через MTA письма не попали под спам, а пришли адресату, вам будут нужны:
- внешний белый IP-адрес, приобретенный или взятый в аренду;
- реальный домен, вы настроите его поддомен как имя сервера и будете управлять настройками DNS.
При настройке обязательно указываются такие параметры: myhostname, mydomain и mydestination.
Хост и домен прописываются так:
myhostname = mail. example.org
mydomain = example.orgЕсли не указать название хоста, система определит его сама, но лучше прописать явно. Имя домена получится из названия хоста, если отбросить левую часть до первой точки. Поэтому можно не прописывать его вручную. Mydomain — это публичное наименование почтового сервиса. К адресу, откуда отсылается корреспонденция, автоматически дописывается домен локальной почты:
Прописываем почтовые домены, к которым сервер доставит почту. В mydestination перечисляются DNS-имена, для которых этот почтовый сервер сможет принимать корреспонденцию. Их лучше обрабатывать механизмом virtual, так что значения не присваиваем.
my destination =
localhost
$myhostnameЗатем подключаем виртуальные домены, чтобы доставить почту:
Так как обычная локальная доставка нас не интересует, оставляем перечень адресатов без значений.
1. Прописываем сетевые интерфейсы, работающие на приеме почты, например, все:
Выбираем из ipv4, ipv6, all нужный нам протокол:
2. Указываем доверенные сети, где разрешены практически любые соединения:
mynetworks =
127.0.0.0/7
[::ffff:127.0.0.0]/108
[::1]/121
192.168.0.0/93. Если вы планируете отправлять корреспонденцию через relay, пропишите это в relayhost.
Справка. Relay — это узел, перенаправляющий входящую почту. В его задачи входит:
- получение корреспонденции;
- хранение на протяжение указанного периода;
- пересылка писем получателю или другому relay.
Relay для отправляемой корреспонденции:
relayhost = smtp.myprovider.netТак как вы отправляете всю переписку на релей, вам нет смысла опрашивать DNS. Поэтому отключаем эти запросы:
disable_dns_lookups = yes4. Прописываем домены, на которые разрешим пересылать сообщения от клиентов недоверенных сетей. Возможен один из вариантов:
relay_domains = $mydestination-
Запрет пересылки корреспонденции от посторонних:
-
Отправление корреспонденции своим доменам:
relay_domains = $mydomainСправка. По умолчанию, Постфикс:
- переправляет корреспонденцию исключительно авторизованным доменам;
- воспринимает авторизованными те домены, что прописаны в mydestination.
Чем интересен этот почтовый сервер?
- Его исходный код открыт, а файлы конфигурации состоят всего из двух строк. Он готов отправлять сообщения сразу же после установки, но в нем нет встроенного механизма авторизации.
- Если не установить плагин Dovecot, любой желающий может подсоединиться к почтовику и начать отправлять или получать письма со всех ящиков.
- Возможна настройка виртуальных доменов.
- Фильтруется спам.
- Postfix и Sendmail — две совместимые программы. Персональные файлы пользователей с расширением *.forward и алиасы, хранящие пути перенаправления e-mail пользователей, имеют сходную семантику и формат.
- Server Postfix комуницирует не только по SMTP, POP3 и IMAP, а также по расширенному протоколу ESMTP. В Постфиксе адреса не подставляются, а «вытягиваются» из табличных файлов или SQL-базы пользователя.
Если вы хотите добавить еще одного user postfix,**** то самым**** простым способом будет введение новой учетки в систему, об остальном почтовый клиент позаботится сам.
Чтобы создать нового пользователя, в терминале Ubuntu наберите команду:
Добавленный пользователь сможет пользоваться почтовиком. Такой метод подходит небольшим организациям. Если же в организации много пользователей, систему наращивают.
- Устанавливаем MySQL, в которой будет храниться информация о пользователях.
- Добавляем Постфикс Admin — интерфейс администрирования и управления почтовым клиентом.
- Переносим учетные записи пользователей в базу данных.
Этот процесс подробнее описан в блоге Simple-Server, разбирается настройка Postfix и Dovecot.
Меняем темы писем с Postfix Pcre
В Постфикс можно заменять темы писем. Для этого потребуется доустановить библиотеку pcre, введя в терминале команду:
Рассмотрим пример, где почтовик приписывает имя сервера к теме сообщения.
1. Добавляем в файл конфигурации запись:
header_checks = pcre:/etc/postfix/rewrite_subject2. Создаем файл rewrite_subject в подкаталоге etc/postfix.
3. Записываем в этот файл правило, по которому наименование сервера припишется к теме письма.
/^Subject: (.*)$/ REPLACE Subject: $1 (from server.domain.tld)/^Subject: (.*)$/— регулярное выражение, которое совпадет с текстом заголовка, идущего после слова «Subject».(.*)— любая из тем письма, ее значение присвоится переменной $1.REPLACE— замена текста.
Результатом этой команды будет замена заголовка на «заголовок + имя сервера».
4. Перезапускаем почтовый сервер, чтобы изменения вступили в силу.
Справка. Регулярные выражения pcre можно применять не только для правки заголовков, но и для фильтрации сообщений.
Алиасы и преобразования адресов
Alias, или никнейм — это короткое имя, которое легко запомнить. Оно присваивается сложным и длинным наименованиям.
Имя адресата может быть таким же, как и имя пользователя системы, но также их можно извлечь из таблицы алиасов. Например:
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliasesВо время первой установки почтового клиента таблица пополняется записью с алиасом суперпользователя root. Ему будут отправляться все письма, отправленные на системные адреса или администратору (по умолчанию им становится первый зарегистрированный пользователь).
При установке Postfix “с нуля” в этой таблице создаётся алиас на имя root для доставки всей корреспонденции, предназначенной администратору и поступающей на другие системные адреса, на имя реального пользователя, который осуществляет функции администратора. Изначально им становится первый зарегистрированный в системе реальный пользователь. Таблица алиасов отличается от остальных таблиц, используемых Postfix; имена слева, которые являются ключами для поиска, отделяются от значений справа двоеточиями. Адресаты справа перечисляются через запятую и могут быть адресами, командами (обозначаются символом | в начале правой части; сообщение подаётся на стандартный поток ввода команды) и именами файлов:
Рассмотрим на примере, как выглядит таблица.
Fitzwilliam Darcy: fitzwilliam
accountant: accountant@chiefcomputer
result: calendars, plans, reports
view: | postcat -q mail_idСлева, до двоеточия — имена, выступающие как поисковые ключи. Справа могут быть адреса, имена файлов и команды (в этом случае в начале правой части ставится символ |).
Утилита postalias создает базы псевдонимов и обрабатывает запросы к ним. Чтобы построить рабочую таблицу, наберите команду:
postalias /etc/postfix/aliasesВиртуальные почтовые ящики
Это альтернатива ящикам, созданным для каждого из пользователей системы. Если на обслуживании вашего почтовика числятся сотни клиентов, то будет непрактично создавать всем им системные учетные записи для работы с почтой. Чтобы воспользоваться виртуальными п/я, вам нужно будет подкорректировать настройки программы и прописать окружение операционки.
Рассмотрим общий принцип функционирования виртуальных ящиков в системе. Если сервер почты не является релеем, то вся почтовая информация записывается на диск. При использовании постфиксом системных учеток, почтовые записи можно распознать по уникальным идентификаторам. Но, когда эксплуатируются виртуальные п/я, потребуется каким-то образом сообщить приложению о необходимости сохранения почтовой информации под определенной учеткой ОС.
Идентификаторы пользователей и групп, а также их права можно задать с помощью параметров virtual_uid_maps, virtual_gid_maps. Кроме того, необходимо прописать папку, в которой будет храниться почта.
Класс виртуальных п/я создан для того, чтобы доставлять корреспонденцию для hosted_domains. Транспорт, который доставляет письма, прописывается в параметре Postfix virtual transport. По молчанию ему присвоено значение virtual, что обозначает доставку виртуальным агентом. Параметр mailbox_domains отвечает за наименования доменов, а в maps указываются допустимые адресаты.
Журнальные файлы по умолчанию хранятся в файле mail.log, расположенном в подкаталоге /var/log/mail.log.
Если вы или ваш провайдер изменили их местоположение, то для возврата к первичным настройкам потребуется выполнить apt-get install rsyslog и перезапустить службы постфикса.
По каждому из писем в логах фиксируются базовые данные: отправитель и адресат, а также факт и время обработки. Анализируя файлы журналов, вы можете:
- выяснить, отправлялось ли письмо с указанного адреса;
- изучить статистику работы с почтовиком;
- узнать объем сообщений, прошедших через SMTP.
Из этих строк не всегда можно понять, какое послание было обработано, так как одному и тому же получателю их могло быть отправлено несколько. Рассмотрим, как добавить в логе заголовки, которые смогут идентифицировать письмо с помощью директивы header_checks.
1. Создаем в подкаталоге etc/postfix файл header_checks и пишем в него правило для проверки заголовков:
/^X-Message-(.*)$/ Information $12. Проверяем. Если нет ошибок в формате файла, то по команде:
postmap -q “X-Message-Result: 79461” pcre:/etc/postfix/header_checks
Information Result: 794613. Подключим этот файл в почтовый сервер:
postconf –e header_checks=pcre:/etc/postfix/header_checks postfix reloadИтог: для всех посланий, содержащих такой заголовок, в журнальных записях запишется последняя часть заголовка, по которой можно распознать письмо.
Соответствует стилю UNIX:
- приложения просты;
- количество функций минимально;
- выполнение — быстрое и надежное.
В Sendmail работает одно большое приложение, а в Постфикс — компактные программы, функционирующие совокупно. Они связаны алгоритмами FIFO и сокетами Unix. Каналы обмена размещены в защищенном каталоге. К функциям программ относятся отправление/прием сетевых сообщений и локальная доставка корреспонденции.
Разбиение на подсистемы хорошо тем, что неиспользуемые модули отключаются. Все демоны завершаются не сами по себе, такую команду дает master. Когда почтовый сервер простаивает, демоны, которые в данный момент не нужны, прекращают работу и не занимают память. Если они понадобятся, master-демон может запустить их снова.
Запускает и контролирует процессы утилита master. В ее конфигурационном файле master.cf записаны сведения о вспомогательных программах и очередности их запуска. Процесс master активизируется, когда система стартует, и «живет», пока она работает. Он запускает остальные модули по требованию и перезапускает те, что из-за проблем были завершены аварийно.
В приложение входит набор утилит, которые работают через командную строку. Эти утилиты заточены на решение административных задач. С их помощью вы сможете обращаться к картам, просматривать очереди, ставить в нее сообщения и извлекать их, а также модифицировать конфигурацию. У всех их есть общая характеристика — post в начале имени, так что вы легко найдете их в таблице.
| postsuper | Поддержание очередей администратором с правами root. Снятие и повторная отправка сообщений. |
|---|---|
| postqueue | Управление очередями обычными администраторами. Если сравнить с postsuper, часть функционала урезана. |
| postconf | Просмотр состояния переменных, входящих в конфиг. |
| postlog | Запись информации в журналы. Пригодится при создании скриптов. |
| postcat | Просмотр очередей. |
| postmap | Запросы к дополнительным таблицам. Формирование вспомогательных таблиц по текстовым данным. Конверсия текста в таблицу. |
| postlock | Работа с блокировками. |
| postkick | Передача сигналов внутри почтового сервера. Взаимодействие скриптов с приложением. |
| spawn | Подключение сторонних приложений для фильтрации сообщений. |
| proxymap | Централизованные запросы к служебным таблицам. Предоставление доступа в обход ограничений chroot. |
| smtpd | Прием корреспонденции через порт SMTP. Проверка авторизации пользователя перед отправкой почты. |
| pickup | Сканирование каталога локальных писем. Обработка найденных файлов. |
| cleanup | Обработка входящей почты. Добавление заголовков. Формирование адреса по картам virtual и canonical. |
| mailq | Просмотр списка писем в очередях. |
| trivial-rewrite | Небольшая правка адресов. Дописывание домена и не полностью заполненного адреса. |
| qmgr | Администратор очередей для корреспонденции, ожидающей доставки. |
Поддержание очередей администратором с правами root.
Снятие и повторная отправка сообщений.
Управление очередями обычными администраторами. Если сравнить с postsuper, часть функционала урезана.
Просмотр состояния переменных, входящих в конфиг.
Запись информации в журналы. Пригодится при создании скриптов.
Запросы к дополнительным таблицам.
Формирование вспомогательных таблиц по текстовым данным.
Конверсия текста в таблицу.
Передача сигналов внутри почтового сервера.
Взаимодействие скриптов с приложением.
Подключение сторонних приложений для фильтрации сообщений.
Централизованные запросы к служебным таблицам.
Предоставление доступа в обход ограничений chroot.
Прием корреспонденции через порт SMTP.
Проверка авторизации пользователя перед отправкой почты.
Сканирование каталога локальных писем.
Обработка найденных файлов.
Обработка входящей почты.
Формирование адреса по картам virtual и canonical.
Просмотр списка писем в очередях.
Небольшая правка адресов.
Дописывание домена и не полностью заполненного адреса.
Администратор очередей для корреспонденции, ожидающей доставки.
Как письма попадают в почтовую систему
1. Чаще всего — через сеть. Сначала их получает в postfix SMTP-демон. Проводится проверка на спам, если эту функцию включил администратор.
Затем запускается процесс cleanup, отвечающий за зачистку. Он проверяет, правильно ли оформлено сообщение и допустимый ли у него формат. Цель — не допустить переполнение буфера, которое может быть причиной атак.
Trivial-rewrite дописывает служебные заголовки и приводит адреса к стандартному виду. Они становятся такими: имя_юзера@поддомен.домен.
Обработанное письмо записывается в каталог incoming, выделенный для хранения входящей очереди.
2. Послание может быть отправлено с локальных серверов скриптами или командой, например, такой:
echo "text of the letter" | mail Dragon@domain.net -s "I wish you happiness"3. Письмо появилось как ответ системы. Отправителю сообщается, что его послание не удалось доставить.
4. Письмо возникло как уведомление администратору. Сообщается, что есть проблемы c протоколом SMTP или настройки нарушены. Чтобы доставить письмо, сначала запускается процесс cleanup, а потом оно ставится в очередь.
Сообщения, поставленные в очередь incoming, должны быть доставлены адресатам.
Queue manager — менеджер очередей. Когда приходит сигнал о прибытии новой почты, он ставит ее в активную очередь active и отправляет запрос демону trivial-rewrite. Он сообщает, локальный это адрес или удаленный. Дополнительные сведения находятся в файле Postfix transport.
Менеджер очередей на основе анализа данных выбирает программы доставки. Перечислим их.
- Агент Local доставляет корреспонденцию внутри системы. Несколько таких процессов запускаются одновременно.
- Virtual — урезанная версия Local. Виртуальная доставка применима к п/я в формате mailbox. С *.forward и системными псевдонимами работа не предусмотрена.
- SMTP подключается, если послание адресовано удаленному клиенту. Менеджер очередей передает сведения о получателе: наименование очереди, адресные данные, домен или хост. По завершении пересылки выдается ее статус, например, успешно, фатальная ошибка или временная ошибка.
- LMTP доставляет корреспонденцию локальному/удаленному серверу, предназначенному для сбережения п/я. Принцип работы LMTP аналогичен SMTP, но протоколы разные.
- Интерфейс Pipe mailer работает с транспортными агентами со стороны, например, с UUCP.
Если доставка сорвалась, Queue manager отсылает это послание в директорию, выделенную отложенным сообщениям. Спустя какое-то время будет предпринята повторная проба. Если вам нужно попытаться отправить письмо раньше, запустите команду postfix flush.
Corrupt — очередь, куда отсылаются сообщения, которые повреждены, не читаются или у них недействительный формат. Подозрительные данные изолируются, пока администратор не примет решение о дальнейших действиях.
Очередь hold — для тех писем, которые были приостановлены. Из этого состояния их можно вывести специальной командой.
Queue manager умеет функционировать в различных режимах/стратегиях, или комбинировать их.
- Leaky bucket. При этой стратегии число писем в активной очереди ограничивается.
- Fairness. Если не заполнена активная очередь, то берутся письма, залежавшиеся в отложенной и входящей очередях.
- Slow start. Режим направлен на предотвращение заторов, которые происходят, когда получатель задерживается с обработкой запросов. Подстройка проводится путем регулирования числа попыток одновременной отправки.
- Round robin. Queue manager рассортировывает по очередям корреспонденцию в соответствии с местом доставки.
- Exponential backoff. Та почта, что не отправилась с первого раза, уходит в отложенную очередь. Ее тайм-аут после последующих неудачных попыток умножается на 2. Это позволяет не тратить ресурсы на нерабочие узлы.
- Кэширование статуса. Queue manager работает с таблицей, в которой содержатся статусы неудачных попыток доставки.
Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.