| Предыдущая версия |
— | postfix [2025/07/06 12:39] (текущий) – внешнее изменение 127.0.0.1 |
---|
| ====== Postfix ====== |
| |
| ~~Title: Настройка почтового сервера Postfix ~~ |
| {{htmlmetatags> |
| metatag-description=(В данном руководстве указан базовый пример настройки почтового сервера. Лайфхаки и проблемы использования Postfix на реальных примерах.) |
| }} |
| |
| [[https://www.postfix.org|Postfix]] хороший выбор для настройки своего почтового сервера. |
| **Postfix** - это агент передачи сообщений ([[MTA|MTA]]) электронной почты при помощи протокола [[SMTP]]. В примерах используются домены example.com и example.net, которые согласно [[RFC]] 2606 зарезервированы для написания документации и примеров. |
| |
| * RFC2060 - Internet Message Access Protocol |
| * RFC2505 - Anti-[[Spam|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 протокола]] |
| |
| * [[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 контроль содержимого письма ===== |
| * [[mime_header_checks]] - проверка [[MIME]] заголовков для вложенных в email файлов. |
| * [[header_checks]] - проверки применяются к заголовку сообщения |
| * [[body_checks]] |
| ====== Возможности 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. |
| |
| |
| |