Инструменты пользователя

Инструменты сайта


postfix

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

postfix [2018/07/20 03:32] (текущий)
Строка 1: Строка 1:
 +====== Postfix ======
 +
 +~~Title: Настройка почтового сервера Postfix ~~
 +{{htmlmetatags>​
 +metatag-description=(В данном руководстве указан базовый пример настройки почтового сервера. Лайфхаки и проблемы использования Postfix на реальных примерах.)
 +}}
 +
 +  * Homepage: [[http://​www.postfix.org|The Postfix Home Page]], [[http://​www.postfix.org/​addon.html|Postfix Add-on Software]]
 +
 +Postfix хороший выбор для настройки своего почтового сервера.
 +**Postfix** - это агент передачи сообщений ([[MTA]]) электронной почты при помощи протокола [[SMTP]]. В примерах используются домены example.com и example.net,​ которые согласно [[RFC]] 2606 зарезервированы для написания документации и примеров.
 +
 +  * RFC2060 - Internet Message Access Protocol
 +  * RFC2505 - Anti-Spam Recommendations for SMTP MTAs
 +  * RFC2821 - Simple Mail Transfer Protocol
 +  * RFC2476 - Message Submission
 +  * RFC2554 - SMTP Service Extension for Authentication
 +  * RFC4422 - Simple Authentication and Security Layer (SASL)
 +  * [[SMTP]]
 +  * [[DKIM]] настроить в Postfix
 +
 +{{ ::​postfix-logo.jpg?​nolink |}}
 +
 +====== Варианты конфигурации Postfix ======
 +
 +  * [[Postfix в роли cистема-спутник]] - пересылка системных сообщений на smart-host (релей для исходящей почты).
 +  * [[Postfix backup MX]] - настройка резервного почтового сервера.
 +  * [[Postfix. Почтовый сервер для нескольких доменов.]]
 +  * [[Postfix. Почтовый сервер для одного домена. Без использования БД.]]
 +
 +====== Errors ======
 +  * [[Postfix SMTP SSL/TSL]]
 +
 +====== Утилиты Postfix. Администрирование. ======
 +
 +  * Параметры конфигурации в ОС или на сайте [[http://​www.postfix.org/​postconf.5.html|Postfix Configuration Parameters]]<​file>​
 +man 5 postconf
 +</​file>​
 +  * **postfix check** - postfix проверяет свои конфигурационные файлы, если все в порядке - сообщений не будет.
 +  * **mailq** - получение идентификаторов (ID) писем в почтовой очереди. Посмотреть сколько и какие письма в очереди.
 +  * [[http://​www.postfix.org/​QSHAPE_README.html|qshape]] Print Postfix queue domain and age distribution<​file>​
 +# qshape deferred
 +                                         ​T ​ 5 10 20 40 80 160 320 640 1280 1280+
 +                                  TOTAL  3  1  0  0  0  0   ​1 ​  ​0 ​  ​1 ​   0     0
 +                                 ​tdm.mz ​ 1  1  0  0  0  0   ​0 ​  ​0 ​  ​0 ​   0     0
 +                             ​scarlet.an ​ 1  0  0  0  0  0   ​1 ​  ​0 ​  ​0 ​   0     0
 +                            omantel.com ​ 1  0  0  0  0  0   ​0 ​  ​0 ​  ​1 ​   0     0
 +
 +</​file>​
 +  * **postcat** -q - прочитать письмо в почтовой очереди (задав его идентификатор,​ полученный из mailq)
 +  * **postconf** myhostname - проверить значение параметра myhostname. С ключом e можно редактировать main.cf, например<​file>​
 +# sudo postconf -e myhostname=mail.example.com
 +</​file>​
 +  * Поиск ошибок в log с помощью регулярного выражения:<​code>​egrep '​(reject|error|warning|fatal|panic):'​ /​var/​log/​mail.log</​code>​
 +  * Посмотреть активные настройки Postfix:<​file>​
 +postconf -d
 +</​file>​
 +  * Команда на немедленную доставку писем:<​file>​
 +postsuper -r ALL; postfix flush
 +</​file>​
 +  * Команда на немедленную доставку конкретного письма по ID. ID получаем командой mailq:<​file>​
 +postsuper -r ID
 +</​file>​
 +  * Полная очистка очереди исходящих писем<​file>​
 +postsuper -d ALL
 +</​file>​
 +  * Удаление группы писем от определенного FROM (на примере MAILER-DAEMON):<​file>​
 +FreeBSD:
 +mailq | grep '​MAILER-DAEMON'​ | awk '​{print $1}' | xargs -I{} -n1 postsuper -d {}
 +Linux:
 +mailq | grep '​MAILER-DAEMON'​ | awk '​{print $1}' | xargs -I{} -n1 /​usr/​sbin/​postsuper -d {}
 +</​file>​
 +  * Удаление группы писем от определенного FROM в статусе REQUIRE:<​file>​
 +mailq | grep '​MAILER-DAEMON'​ | awk '​{print $1}' | tr -d '​*'​ | xargs -I{} -n1 postsuper -d {}
 +</​file>​
 +  * **Для серверов с несколькими IP**. Иногда бывает нужно, чтобы Postfix отправлят почту от конкретного IP. Редактируем<​file>​
 +/​etc/​postfix/​master.cf:​
 + ​smtp ​     unix  -       ​- ​      ​n ​      ​- ​      ​- ​      smtp -o smtp_bind_address=11.22.33.44
 +</​file>​
 +
 +====== main.cf ======
 +  * [[Карты Postfix]]: [[cidr]], hash, [[pcre]], [[regexp]] и т.д.
 +
 +**Директивы файла main.cf:**
 +  * **[[http://​www.postfix.org/​postconf.5.html#​inet_interfaces|inet_interfaces]]**. Postfix IP address bind configuration:<​code>​
 +# postconf -n inet_interfaces
 +inet_interfaces = all
 +</​code><​code>​
 +inet_interfaces = all
 +or
 +inet_interfaces = loopback-only
 +or
 +inet_interfaces = 192.5.17.12,​127.0.0.1
 +</​code>​
 +  * **[[http://​www.postfix.org/​postconf.5.html#​myhostname|myhostname]]** указывает полное доменное имя машины (fully-qualified domain name - FQDN), на которой функционирует Postfix. Используется в приветствие HELO, когда Postfix передает сообщения другим серверам (т.е. выступает в роли почтового клиента). По умолчанию,​ myhostname устанавливается в имя локальной машины. ​
 +  * **[[http://​www.postfix.org/​postconf.5.html#​mydestination|mydestination]]**. Сервер Postfix идентифицирует себя как место конечного назначения только для доменов,​ имена которых определены в параметре mydestination. Postfix также идентифицирует себя как место конечного назначения для адресов в форме user@[IP адрес],​ где указан один из IP адресов Postfix. В самом простом случае там должны быть указаны все возможные имена вашего сервера,​ чтобы локальная почта от ваших системных демонов приходила к вам, а не отбрасывалась <​file>​
 +mydestination = localhost.example.com,​ localhost, mail.example.com
 +</​file>​
 +  * [[http://​www.postfix.org/​postconf.5.html#​mydestination|myorigin]] - добавляется к адресу отправителя или получателя,​ если он указан не полностью,​ например root. Если значение myorigin не задано,​ то по умолчанию будет подставляться значение myhostname, например короткий адрес root превратиться в root@mail.example.com.
 +  * [[http://​www.postfix.org/​postconf.5.html#​alias_maps|alias_maps]] = hash:/​etc/​aliases - перенаправление сообщений для root в другой почтовый ящик. Использование [[newaliases]].
 +  * [[http://​www.postfix.org/​postconf.5.html#​relay_domains|relay_domains]] указывает Postfix на необходимость приема почты для этих доменов несмотря на то, что данный сервер не является местом их конечного назначения.
 +  * [[http://​www.postfix.org/​postconf.5.html#​virtual_mailbox_domains|virtual_mailbox_domains]] указывает Postfix, что он является местом конечного назначения для одного или нескольких доменов виртуальных почтовых ящиков.
 +  * [[http://​www.postfix.org/​postconf.5.html#​virtual_mailbox_maps|virtual_mailbox_maps]] список почтовых ящиков. По умолчанию почтовые ящики имеют формат mbox, чтобы задать формат Maildir нужно добавить черту "/"​ в конец имени почтового ящика.
 +  * [[http://​www.postfix.org/​postconf.5.html#​virtual_alias_maps|virtual_alias_maps]] служит для переадресации сообщений для обязательных пользователей.
 +  * smtpd_discard_ehlo_keywords:​ [[http://​g-web.livejournal.com/​2588.html|Postfix DSN]] DSN - Delivery Status Notifications,​ которая предоставляет отправителю почты уведомления о статусе его писем. Статусы могут быть - success, failure, delay, none.
 +  * [[http://​www.postfix.org/​postconf.5.html#​sender_canonical_maps|sender_canonical_maps]] Изменение Return-Path (адрес отправителя). В main.cf добавляем строку sender_canonical_maps = hash:/​etc/​postfix/​sender_canonical<​file>​
 +# nano /​etc/​postfix/​sender_canonical
 +apache@cz.host-telecom.com billing@example.com
 +# postmap /​etc/​postfix/​sender_canonical
 +</​file>​
 +===== Restrictions Postfix =====
 +  * [[http://​www.postfix.org/​SMTPD_ACCESS_README.html|Postfix SMTP relay and access control]]
 +  * [[http://​help.ubuntu.ru/​wiki/​%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%81%D0%BF%D0%B0%D0%BC%D0%B0_%D0%BD%D0%B0_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5_smtp_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D0%B0|Фильтрация спама на уровне SMTP протокола]]
 +
 +  * [[mime_header_checks]] - проверка [[MIME]] заголовков для вложенных в email файлов.
 +  * [[header_checks]] - проверки применяются к заголовку сообщения
 +  * [[http://​www.postfix.org/​postconf.5.html#​smtpd_relay_restrictions|smtpd_relay_restrictions]] - это ограничение появилось в Postfix 2.10 По умолчанию имеет значение<​file>​
 +# postconf smtpd_relay_restrictions
 +smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
 +</​file>​
 +  * [[http://​www.postfix.org/​postconf.5.html#​disable_vrfy_command|disable_vrfy_command]] = yes - установленная в yes запрещает SMTP- команду [[smtp?&#​vrfy|VRFY]],​ позволяет клиентам проверять существование получателя. ​
 +====== Возможности Postfix ======
 +
 +  * Поддержка основанных на DNS **белых списков** (ранее поддерживались только черные списки - DNSBL) и возможность выборочной блокировки через фильтрацию по маске ответов от DNSBL и DNSWL серверов. Управление белыми списками организовано через опцию permit_rhswl_client,​ а фильтрация организована через reject_rhsbl_client (например,​ можно указать "​reject_rhsbl_client zen.spamhaus.org=127.0.0.[1..10]"​);​
 +  * Возможность использования БД SQLite для хранения внутренних баз, таких как БД виртуальных пользователей,​ алиасы или списки доступа (в дополнение к таким типам хранилищ как btree, dbm и hash).
 +  * Поддержка опции "​smtpd_reject_footer",​ позволяющей указать блок текста,​ который будет добавлен к отвергнутым сервером запросам (SMTP-ответ "​reject"​).
 +  * Поддержка длинных,​ не повторяющихся,​ идентификаторов элементов очереди сообщений,​ используемых в качестве имён файлов для сохраняемых в очереди сообщений. Наиболее важным достоинством не повторяющихся идентификаторов является упрощение анализа лог-файлов. Например,​ вместо идентификатора вида "​0FCEE9247A9"​ будет использоваться более изощрённый вариант "​3Ps0FS1Zhtz1PFjb",​ включающий все буквы алфавита и разделяющий регистр символов. По умолчанию длинные идентификаторы отключены,​ для их активации следует использовать опцию "​enable_long_queue_ids";​
 +  * [[http://​www.postfix.org/​MEMCACHE_README.html|Поддержка]] системы кэширования в памяти Memcached для хранения кэшей систем [[http://​www.postfix.org/​verify.8.html|verify]] и [[http://​www.postfix.org/​postscreen.8.html|postscreen]],​ получающих доступ к данным через сервер proxymap. При использовании Memcached возможно создание конфигураций,​ при которых несколько серверов совместно используют единый кэш при проверке валидности email-адресов или выборке из списков блокировки зомби-машин,​ рассылающих спам. Memcached также можно использовать для хранения баз для проверки по серым спискам. Настройка осуществляется через директиву [[http://​www.postfix.org/​memcache_table.5.html|memcache_table]];​
 +  * Переработана команда [[http://​www.postfix.org/​postconf.1.html|postconf]]:​ добавлен вывод предупреждений о неиспользуемых параметрах "​name=value"​ в конфигурационных файлах main.cf и master.cf, что позволяет выявить опечатки в именах параметров;​ реализована поддержка динамических имён параметров,​ таких как имена, зависящие от элементов master.cf; в более дружественном для восприятия формате оформлен вывод настроек из main.cf и master.cf (postconf -nf, postconf -Mf); в "​postconf -M" добавлена поддержка фильтрации вывода,​ например,​ "​postconf -M inet";
 +  *  Реализована поддержка установки предельного времени обработки операций записи и чтения для клиента и сервера,​ что позволяет защититься от DoS-атак,​ манипулирующих большим числом вялотекущих соединений,​ при которых данные передаются очень медленно или читаются по одному байту. Если раньше таймаут задавался для системного вызова,​ то теперь его можно задать в привязке ко времени чтения/​передачи отдельной записи,​ такой как сообщение с ответом SMTP-сервера. Настройка новых таймаутов осуществляется через директивы smtpd_per_record_deadline,​ smtp_per_record_deadline и lmtp_per_record_deadline;​
 +  * В дополнение к ранее присутствующим настройкам smtpd_{client,​ helo, sender,​recipient}_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) "​[[http://​puszcza.gnu.org.ua/​software/​smap/​|socketmap]]"​ в стиле Sendmail.
 +  * В директиве recipient_delimiter теперь возможно указание нескольких символов-разделителей,​ например,​ можно одновременно использовать как разделители "​+"​ и "​-"​.
 +  * Добавлена опция postscreen_dnsbl_whitelist_threshold,​ позволяющая клиентам пропустить тесты postscreen (выполняет роль легковесного межсетевого экрана,​ предназначенного для первичного блокирования соединений от рассылающих спам зомби-машин) в зависимости от результатов проверки по белому списку через DNSBL. Применение postscreen_dnsbl_whitelist_threshold позволяет избавиться от заметных задержек в доставке почты от заведомо валидных почтовых систем,​ в которых повторные запросы не отправляются с одного и того же IP (задержка возникает из-за теста с использованием повторного реконнекта),​ например,​ так поступает Google.
 +
 +
  
postfix.txt · Последние изменения: 2018/07/20 03:32 (внешнее изменение)