service:postfix
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
service:postfix [27.04.2022 12:46] – [Статистика] viacheslav | service:postfix [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Postfix ====== | ||
+ | < | ||
+ | apt install postfix | ||
+ | Postfix (main.cf) was not set up. Start with | ||
+ | cp / | ||
+ | . If you need to make changes, edit / | ||
+ | needed. | ||
+ | |||
+ | After modifying main.cf, be sure to run ' | ||
+ | </ | ||
+ | |||
+ | <file bash / | ||
+ | # Имя хоста (в HELO), по умолчанию берётся из hostname -f, но можно задать принудительно | ||
+ | myhostname = mail.example.com | ||
+ | # Домен, по умолчанию берётся из myhostname до первой точки. Если myhostname не задано, | ||
+ | mydomain = example.com | ||
+ | # Домены, | ||
+ | mydestination = $mydomain | ||
+ | # Для домена и хоста: | ||
+ | mydestination = $mydomain, $myhostname | ||
+ | # Несколько значений, | ||
+ | mydestination = | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | # Добавление к исходящим адресам, | ||
+ | # По умолчанию myorigin = $myhostname, | ||
+ | myorigin = $mydomain | ||
+ | |||
+ | # Настройка адресов, | ||
+ | mynetworks_style = host # доверять только адресам сервера | ||
+ | # mynetworks_style = subnet # доверять подсетям, | ||
+ | # mynetworks_style = class # доверять классам сетей, к которым принадлежит сервер | ||
+ | # Индивидуальная настройка: | ||
+ | mynetworks = 127.0.0.0/ | ||
+ | # Вариант в файле: | ||
+ | # mynetworks = hash:/ | ||
+ | # mynetworks = cidr:/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | / | ||
+ | <file bash / | ||
+ | < | ||
+ | |||
+ | # Перенаправление локальной почты для пользователя root пользователю ituser. | ||
+ | root: ituser | ||
+ | |||
+ | # Доставка с ivan.petrov@example.com и i.petrov@example.com учётке petrov. | ||
+ | # Адрес petrov@example.com писать в псевдонимы не нужно, т. к. адрес, совпадающий с учёткой, | ||
+ | ivan.petrov: | ||
+ | i.petrov: | ||
+ | |||
+ | # Группа sales@example.com - доставка в 3 учётки. | ||
+ | sales: petrov, sidorov, ivanov | ||
+ | |||
+ | # Пересылка в другой домен: | ||
+ | outdoor: asdf@anotherdomain.com | ||
+ | |||
+ | |||
+ | # Создание индекса после правки алиасов (Postfix обращается только к индексу) | ||
+ | postalias hash:/ | ||
+ | # или | ||
+ | newaliases | ||
+ | </ | ||
+ | |||
+ | ===== Сервер с коммутируемым соединением ===== | ||
+ | Такой сервер непостоянно подключен к интернету, | ||
+ | |||
+ | В связи с этим, необходимо: | ||
+ | <file bash / | ||
+ | # 1. отключить разрешение имён | ||
+ | disable_dns_lookups = yes | ||
+ | # 2. проверить разрешения на ретрансляцию (только для частной сети) | ||
+ | mynetworks = 192.168.0.0/ | ||
+ | # 3. определить хост-ретранслятор ([] - отключить поиск MX-записи) | ||
+ | relayhost= [relay.example.com] | ||
+ | # 4. отложить передачу сообщений, | ||
+ | defer_transports = smtp | ||
+ | </ | ||
+ | 5. Инициировать доставку сообщений, | ||
+ | <file bash / | ||
+ | ## запустить или перезагрузить Postfix | ||
+ | # если Postfix запускается через chroot, скопировать | ||
+ | # resolv.conf в используемый Postfix файл resolv.conf | ||
+ | cp -p / | ||
+ | # отменить отложенную отправку, | ||
+ | postconf -e " | ||
+ | postfix reload | ||
+ | # заставить очередь выгрузить всю ожидающую отправки почту | ||
+ | postfix flush | ||
+ | </ | ||
+ | Смысл манипуляции с resolv.conf в том, чтобы сервер изменил свой файл resolv.conf при установлении соединения с Интернетом. Postfix также должен знать текущие серверы имен, поэтому команда копирует новую версию в файл, соответствующий chroot, с тем чтобы Postfix мог его найти. | ||
+ | |||
+ | При отключении надо вернуть всё обратно: | ||
+ | <file bash / | ||
+ | ## запустить или перезагрузить Postfix | ||
+ | # скопировать resolv.conf в resolv.conf, | ||
+ | # Postfix (только для chroot) | ||
+ | cp -p / | ||
+ | # включить отложенную отправку, | ||
+ | postconf -e " | ||
+ | postfix reload | ||
+ | </ | ||
+ | |||
+ | 6. Пройти аутентификацию на хосте-ретрансляторе (POP-before-SMTP или SMTP-auth)\\ | ||
+ | POP-before-SMTP - надо настраивать fetchmail, добавив триггер перед конфигурацией postfix в /etc/ppp.\\ | ||
+ | |||
+ | ==== Очереди ==== | ||
+ | Каталог очередей определяется параметром '' | ||
+ | * incoming - новые сообщения, | ||
+ | * maildrop - сообщения, | ||
+ | * active - сообщения, | ||
+ | * deferred - задержанные сообщения, | ||
+ | * hold - сообщения, | ||
+ | * corrupt - повреждённые файлы очередей. Админ может исследовать их с помощью postcat. | ||
+ | |||
+ | https:// | ||
+ | |||
+ | ==== Карты ==== | ||
+ | Ключ-значение. | ||
+ | < | ||
+ | postmaster: John | ||
+ | postmaster@example.com John | ||
+ | 192.168.254.12 REJECT | ||
+ | spammer@example.com REJECT | ||
+ | /^Subject: your account {25}[a-z]{8}/ | ||
+ | </ | ||
+ | |||
+ | Доступные типы карт можно посмотреть командой '' | ||
+ | btree | ||
+ | cidr | ||
+ | environ | ||
+ | fail | ||
+ | hash | ||
+ | inline | ||
+ | internal | ||
+ | memcache | ||
+ | nis | ||
+ | pipemap | ||
+ | proxy | ||
+ | randmap | ||
+ | regexp | ||
+ | socketmap | ||
+ | static | ||
+ | tcp | ||
+ | texthash | ||
+ | unionmap | ||
+ | unix | ||
+ | |||
+ | |||
+ | **Индексированные карты (hash, btree, dbm и др)** - двоичные БД, созданные из текстовых файлов командами newaliases, postalias и postmap. Часто используются для aliases, virtual, transport, relocated и sasl_passwd.\\ | ||
+ | **Линейные карты (PCRE, regexp, CIDR и обычные файлы)** - простые текстовые файлы, читаются сверху вниз, первое же совпадение определяет действие, | ||
+ | < | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | а здесь - нет. | ||
+ | < | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | Часто используются для header_checks, | ||
+ | |||
+ | Когда линейных карт становится много, может начать тормозить, | ||
+ | |||
+ | **Базы данных (MySQL, PostgreSQL, LDAP)** - воспринимаются так же, как индексированная карта. При работе с БД не требуется перезапускать демон, но есть недостатки - высокая задержка и риск медленной работы при высокой нагрузке. | ||
+ | |||
+ | ===== Управление сообщениями, | ||
+ | Postfix имеет три отдельных группы параметров управления содержимым, | ||
+ | - **smtpd_*_restrictions** управляют клиентским соединением и конвертом в процессе передачи сообщений (этап HELO/EHLO и заголовков конверта FROM/TO). Отбойника на этом этапе нет, т. к. клиенту отказывают в обслуживании. | ||
+ | - ***_checks** контролируют заголовок письма, | ||
+ | - **Фильтры** - передача задач другим (внешним) отбраковывающим приложениям. Фильтры универсальны – они могут контролировать любую часть сообщения, | ||
+ | |||
+ | |||
+ | ===== DKIM ===== | ||
+ | http:// | ||
+ | <code bash> | ||
+ | DKIMDIR=/ | ||
+ | DOMAIN=example.com | ||
+ | KEY=mail | ||
+ | |||
+ | # Установка | ||
+ | apt-get install opendkim opendkim-tools | ||
+ | # Каталог, | ||
+ | mkdir $DKIMDIR | ||
+ | opendkim-genkey -D $DKIMDIR -d $DOMAIN -s $KEY | ||
+ | # Права на ключи | ||
+ | chgrp opendkim $DKIMDIR/* | ||
+ | chmod g+r $DKIMDIR/* | ||
+ | gpasswd -a postfix opendkim | ||
+ | |||
+ | # Конфиг opendkim | ||
+ | tee -a / | ||
+ | Canonicalization relaxed/ | ||
+ | SyslogSuccess yes | ||
+ | KeyTable file: | ||
+ | SigningTable file: | ||
+ | SoftwareHeader yes | ||
+ | # на время отладки включим расширенное логирование: | ||
+ | LogWhy yes | ||
+ | # если вы подписываете и на других серверах: | ||
+ | # | ||
+ | # список внутренних хостов, | ||
+ | # | ||
+ | EOF | ||
+ | |||
+ | # keytable file | ||
+ | echo $KEY._domainkey.$DOMAIN $DOMAIN: | ||
+ | # signingtable file | ||
+ | echo $DOMAIN $KEY._domainkey.$DOMAIN | tee -a $DKIMDIR/ | ||
+ | |||
+ | # Postfix | ||
+ | postconf -e milter_default_action=accept | ||
+ | postconf -e milter_protocol=2 | ||
+ | postconf -e smtpd_milters=unix:/ | ||
+ | postconf -e non_smtpd_milters=unix:/ | ||
+ | </ | ||
+ | https:// | ||
+ | https:// | ||
+ | |||
+ | Открытый ключ надо прописать во внешний DNS + общую запись _domainkey. Примерный вид записей: | ||
+ | < | ||
+ | _domainkey.example.com. TXT "t=s; o=~;" | ||
+ | mail._domainkey.example.com. TXT " | ||
+ | </ | ||
+ | ADSP запись (_adsp._domainkey.example.com.) неактуальна, | ||
+ | https:// | ||
+ | |||
+ | Проверка DKIM-записи: | ||
+ | ==== opendkim.sock: | ||
+ | В логах: | ||
+ | < | ||
+ | Apr 22 15:48:37 mailsrv postfix/ | ||
+ | </ | ||
+ | |||
+ | Проблема в том, что postfix работает не от рута и у него нет доступа к / | ||
+ | |||
+ | <code bash> | ||
+ | vi / | ||
+ | Socket | ||
+ | |||
+ | mkdir -p / | ||
+ | chown opendkim: | ||
+ | service opendkim restart | ||
+ | </ | ||
+ | https:// | ||
+ | |||
+ | ===== Статистика ===== | ||
+ | За вчерашний день | ||
+ | <code bash> | ||
+ | apt install mailutils pflogsumm -y | ||
+ | pflogsumm -d yesterday / | ||
+ | </ | ||
+ | https:// | ||
+ | |||
+ | С фильтрацией по IP-отправителю (за вчерашний день) | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | logfiles="/ | ||
+ | # %_d - число без нуля в начале, | ||
+ | yesterdaylog=$(date -d " | ||
+ | yesterdaymark=$(date -d " | ||
+ | |||
+ | entries=$(egrep -h " | ||
+ | |||
+ | # ids=$(echo " | ||
+ | # Когда сообщений > | ||
+ | # report=$(egrep -h " | ||
+ | |||
+ | # Поэтому надо разбивать на порции (здесь: | ||
+ | ids=(`echo " | ||
+ | messages=$(for i in ${ids[@]}; do egrep -h " | ||
+ | report=$(echo " | ||
+ | |||
+ | # Тэг <pre> в html решает 2 задачи - сохранение отступов и моноширинный шрифт. | ||
+ | echo "< | ||
+ | mail -a ' | ||
+ | -s " | ||
+ | admin@example.com, | ||
+ | |||
+ | # Сс и Bcc надо указывать как заголовки (-a ' | ||
+ | |||
+ | # / | ||
+ | # Postfix - статистика по письмам c IP 192.168.0.2 | ||
+ | 0 8 * * * | ||
+ | </ | ||
+ | https:// | ||
+ | https:// |