теряем время: работа postfix.

среда, 14 июля 2010 г.

работа postfix.

Попасть почта в postfix может 4-мя способами:
1. Локально, через оболочку sendmail: sendmail вызывает утилиту postdrop,
которая складывает письмо в папку maildrop
2. Через SMTP соединение - от демона smtpd
3. После преобразования уже полученного письма через файлы alias'ов, письмо
вновь попадает в postfix
4. Внутренние сообщения, defer и bounce.

После того, как почта попала в Postfix, она попадает к демону cleanup (напрямую
от smtpd или же через утилиту pickup, которая извелкает почту из директории
maildrop, которая туда попала от демона postdrop). Cleanup исправляет заголовки
почтового письма, приводя его к стандарту, сотрудничая с trivial-rewrite. И уже
готовенькое письмецо складывает в папку incoming, попутно сообщая
query-менеджеру о новом поступлении.

Query-менеджер (qmqr) распределят письмо по агентам доставки, также, как и
cleanup, сотрудничая с trivial-rewrite.

Доставка осуществляется через агенты:
1. Локальному пользователю, у которого есть shell доступ - через агента local.
Домены, для которых POstfix будут осуществлять локальную доставку, перечислены в
mydestination. Для них просматривается файл алиасов и .forward.
2. Virtual alias - это чисто виртуальные пользователи, просто происходит
преобразование почтового адреса. Для них не смотрится ни файла алиасов, ни тем
более .forward. Перечислены в virtual_alias_domains и virtual_alias_maps.
3. Virtual mailbox - по-моему, самый полезный, позволяет принимать почту для
пользователей без shell-доступа. Перечислены в файле virtual_mailbox_domains и
virtual_mailbox_maps
4. Relay. Это когда почта отправляет другому MTA. Испльзуется как вторая MX
запись. Описаны в relay_domains.
Почта для перечисленных выше случаев доставляется от ЛЮБОГО почтового агента
безо всякой аутентификации. Если же почтовое письмо не доставляется по
указанному адресу, это означает только одно - через Postfix посылают почту
левому MTA, и в таком случае:
5. Почта отправляется через агента smtp, перед этим пользователь обязан пройти
аутентификацию, иначе наш почтовик превратится в Open-Relay.

Сконфигурировать можно и другим агенты, для этого идем в файл master.cf и его
правим.

Запуск: postfix start - запускает главного демона master, который уже запускает
все остальные демоны.
Postfix reload - после внесения изменений, но перед этим надо сделать
postfix check - проверить синтаксис
newaliases - создать базу из текстового файла. Осталось в наследство от
sendmail. Путь к файлу указан в alias_database (alias_maps кроме текстового
файла может содержать, например, nis, этим они и отличаются).
postconf - посмотреть текущие настройки, возможны опции
-e изменить настройки
-d посмотреть настройки по-умолчанию
-m посмотреть доступные типы lookup-database
postmap - создать lookup-database, полезные опции
-q посмотреть значение по ключу
postalias - специально для создания файла алиасов, аналог newaliases

Формат файла aliases

local_part: local_part | /path/to/file | \| /path/to/progrma |
:include:/path/to/file

Не всегда можно направить почту в файл или программу: используйте
allow_mail_to_files и allow_mail_to_commands, допустимые аргументы: alias,
forward, include

Доставка по локальным адресам осуществляется с привилегиями, которые установлены
у файла aliases, за исключением пользователя root, для него доставка всегда с
привилегиями default_priv, то есть по-умолчанию с никакими. Вывод, всегда
перенаправляйте почту от root :)

И не забудьте направить alias_maps и alias_database на файл с алиасами.


Всегда нужно править:
$myhostname - имя хоста
$mydomain - имя домена
$myorigin - логично указывать = $mydomain, добавляется ко всей почте, которая
идет с локального хоста, например, юзвер rodriges шлет почту командой mail
j_p_montoya@mail.ru, в таком случае поле From будет rodriges@$myorigin. Также
добавлется по-умолчанию к принятой почте без домена.
$mydestination - как сказано выше, для всех доменов доставка осуществляется
локально. Есть смысл указать = $mydomain, тогда почтовик будет принимать почту
для всего домена.
$mynetworks - с этих сетей можно отправлять почту куда угодно, другими словами,
предоставлять услугу relay

Также следует ужесточить требование к демону smtpd - ведь через него чаще всего
поступают письма, следовательно, нужно быть готовым к DOS.
smtpd_recipient_limit - сколько может быть адресатов у одного письма, то есть
кол-во записей RCPT: по-умолчанию 1000, что явно много
message_size_limit - макс. размер письма, принятого не только по smptd, но и
локально.

Если клиент, подключенный к smptd ведет себя неправильно, вступают в силу
smtpd_soft_error_limit - число нарушенний, после него интервал ответу
увеличивается на
smtpd_error_sleep_time, а по достижению кол-ва ошибок
smtpd_hard_error_limit происходит disconnect

Рано, но все же напишу.

canonical_maps = hash:/ Пусть к файлу, где ожидается

user@domain.tld other
user other
@domain. tld other

Этот файл обрабатыватся самым первым при приеме или отправке письма и
переписывает и заголовки и конверт. Можно ограничить его действие

sender_canonical_maps и recipient_canonical_maps, только при отправке или
приеме. Меняются полностью все совпадения.

Елси домен или пользователь уже не живут у нас, но какое-то время нужно
поддерживать приемственность, заполняем
relocated_maps = hash:///, формат тот же, что и в recipient_maps, если на этот
адрес приходит письмо, postfix в ответ шлет bounce с указанием, что адрес больше
не поддерживается и новым адресом. Причем здесь может быть указано любое имя в
домене, даже тот аккаунт, которого никогда не было

Query-Manager (qmqr)
Содержит свои очереди:
1. Incoming - необработанные новые письма
2. Active - письма в обработке
3. Deferred
4. Bounced
5. Corrupted - незнаю, говорят, здесь могут появляться письма, что
свидетельствует о проблемах

Если есть временые проблемы, письмо идет в deferred, если Postifix получает
отлуп от сервера, письмо идет с ошибкой идет обратно отправителю, при этом
возвращается не все письмо, а лишь
bounce_size_limit байт, которое по умолчанию равно 50000.

Если же письмо идет в deferred, оно помечается временем, когда стоит вновь его
отправить. Каждая неудачная попытка увеличивает время следующей отправки (в
диапазоне minimal_backoff_time...maximum_backkoff_time), пока время не достигнет
maximum_query_lifetime, после чего отправителю возвращается письмо, что доставка
невозможно.

Очередь deferred сканируется каждые query_run_delay секунд, по умолчанию 1000.

Интересная особенность qmqr - он никогда не ломится понапрасну, то есть если от
сервера нет ответа, он замораживает все попытки. Когда же сервер начинает
отвечать, сначала из очереди извлекаются не более
initial_destination_concurrency писем, которые доставляются одновременно, и если
все проходит нормально, число параллельных доставок через всех агентов плавно
увеличивается до значения default_destination_concurrency_limit. Если же
требуется для разных агентов разное значение параллельно доставляемых писем
изменяеми AGENT_destination_concurrency_limit, где AGENT - имя агента, напримерм
smtp, local, virtual.

И, наконец, контроль. Postfix может отсылать письма на аккауте postmaster при
событиях, которые указаны в
notify_classes bounce 2bounce delay policy(это если нарвался на анти-спам)
protocol resource software.
Вообщем письма шлются на адреса, которые можно задавать, но это уже лишнее
error_notice_recipient
delay_notice_recipient
bounce_notice_recipient
2bounce_notice_recipient
Так, написал для галочки.

Естественно, очередь можно смотреть и направлять в нужное русло :)
mailq - посмотреть содержимое очереди
postqueue -p - то же самое.
Если письмо в активной очереди, оно помечено '*', в очереди hold - '!', в
deferred - ничем не помечено, их то и видим чаще всего.
postqueue -f - сразу же отправить все письма
postquere -s domain - сразу же отправить почту для данного домена, но, чтобы это
работало, нужно указать домен в
fast_flush_domains, по умолчанию там только $relay_domains

Смотрим письмо командой
postcat -q ID, и, если письмо не нравиться, удаляем его
postuser -d ID, где ID смотрим postqueue -p, или же командой
postuser -ALL, удаляем ВСЕ письма
postuser -h ID, postuser -H ID - поместить / убрать письмо из очереди HOLD.
postuser -r ALL - заново письмо заочередить??????

С центральной осью разобрались.


Local Delivery

Есть 2 типа ящиков - mailbox и Maildir. mailbox использовать не надо, для него
есть параметр
mail_spool_directory, который указывает на директорию, где будет хранится
почта.
Внутри этой директории по имени локального пользователя создается один
файл, куда и будт бросаться вся почта.
home_mailbox - это путь внути домашнего каталога, где будет почта храниться,
если на коце есть /, например MailDir/. то почта будет в Maildir формате, если
нет - в mailbox.

Все пользователи, для которых почта доставляется локально, перечислены в
local_recipient_maps, который по-умолчанию ссылается на файл с паролями и
$alias_maps. то бишь алиасы. Если пользователя нет в local_recipient_maps.
почта
отвергается.

если имя принимателя раскрывается алиасом, почта снова попадает в postfix. Если
указана
forward_path. то перед доставкой просматривается содержимое файла, и также
здесь
возможно перенаправление письма. Формат файла .forward такой-же, как и правая
часть файла aliases (т.е. name@tld,ru : name : /file : :include:/file : | path
to command. доставка в файл или команду осуществляется с правами, которые
установлены у файла .forward. за исключением, если файлом владеет root - тогда
доставка с правами default_priv.

Локальная доставка осуществляется агентом
local по доменам, указанных в mydestination. Имена пользователей в этом случае
совпадают, например, a.com & b.com, почта на root@a.com & root@b.com попадут в
один ящик.

LMTP - Local Mail Transport Protocol.

Интересная особенность. Например, если применяется pop/imap сервер, который
хранит письма не в формате mailbox/maildir. Для того, чтобы postfix доставила
письма в нестандартный ящик, применяется протокол lmtp - сервер pop/imap
принимает по lmtp письма от postfix и складывает их в свой формат. Используется
3 параметра

mailbox_transport - вначале письмо попадает агенту local. который раскрывает
alias & .forward и уже после этого передает указанному доставщику, который
должен быть прописан в файле master.cf
local_transport - то же, что и mailbox_transport, только без передачи письма
local, т.е. без раскрытия alias & .forward
fallback_transport - почта попадает к local. и если есть локальный пользователь
доставляется локально, если его нет - то применяется указанный транспорт.

Virtual delivery

Если нужно, чтобы один локальный пользователь принимал почту для нескольких
доменов, нужно просто прописать эти домены в mydestination и все.

virtual_alias_domains - указать домены
virtual_alias_maps - указать пользователей, при этом почта доставляется
локальным пользователям с shell-доступом.

В этом случае почту все равно разносит агент local


Чисто виртуальный вариант, когда у пользователей нет shell доступа, и почту
можно забрать только по pop/imap

virtual_mailbox_domains
virtual_mailbox_maps - путь к файлу, где
info@domain.tld domain.tld/info
test@dom.tld test.tld/test/

при этом доставка осуществляется агентом virtual. который не читает ни файл
alias не файл .forward

virtual_mailbox_base - относительно этой директории находятся каталоги, куда
складывается почта. Внимание, нужно создать каталог по названию домена внутри
virtual_mailbox_base
и дать на него те, права, что указаны в virtual_uid_maps/virtual_gid_maps,
ничего более внутри
делать не надо, Postfix все сам разрулит

virtual_uid_maps
virtual_gid_maps - либо static:. либо путь к файлу, где
info@domain.tld 4000
test@dom.tld 4001

Как уже сказано, агент virtual не читает файлы алиасов, но все же сделать алиас
можно, имхо, это трюк
такой. Для этого нужно указать в
virtual_alias_maps
alias@domain resolver@domain
Работает, опять же имхо, это так: Агент local читает virtual_alias_maps, и вновь
создает письмо в Postfix, где оно уже доставляется агентом virtual. В общем,
хитро :)

И напоследок снова о LMTP, здесь все тоже самое

virtual_mailbox_domains,
virtual_mailbox_maps
virtual_transport = lmtp :)

почта принимается для доменов virtual_mailbox_domains, пользователи перечислены
в virtual_mailbox_maps и вместо транспорта virtual применяется агент lmtp


Mail Relaying

Елси postfix указан не как основной MX, то все, что нужно - это добавить нужные
домены в relay_domains, тогда в случае выхода из строя основного MX почта будет
приниматься postfix и храниться в нем до тех пор, пока не поднимется основной MX
или же не наступи maximum_query_lifetime - максимальное время хранения письма в
очереди.

Все почтовый ящики указаны в
relay_recipient_maps
user1@domain any_record
user2@domain any_record
@domain.ru any_record

Если основная MX поднялась и нужно сразу доставить почту, postquery -s domain,
при этом domain должен быть указан в fast_flush_domains. Для быстрой доставки
используется демон flush, который нужные письма в нужном месте.

Если такая
transport_maps
mail@domain transport:host:port
domain transport:host:port
, которая явно определяет, что и куда нужно доставить, переписывая действие по
умолчанию, в таблице ключ может быть весь домен или один e-mail, справа должно
быть название транспорта, хост и порт. Если с хост указано доменное имя,
производится сначала DNS запрос MX и, в случае неудачи, запрос A. Если нужно
сразу A - указываеть доменное имя в квадратных скобках. Если не доменное имя, а
IP - тоже в квадратных скобках. Если не указан порт - по-умолчанию доставляется
на 25 порт. Есть специальный транспорт error, он отвергает любую почту с
ошибкой, которая указана за ним.

Если почта должна быть доставлена почтовым серверам, которые только иногда
выходят в коннект, можно использовать defer_transports, но об этом в другой раз
:)

Inbound Mail Gateway - Это когда в сети есть один сервер, смотрящий в интернет и
несколько других серверов, не смотрящих туда :) Соответственно, на Gateway все
домены, расположенные на внутренних серверах указываются в relay_domains, можно
еще добавить relay_domains_maps, и в транспортной таблице делаются записи

domain1 relay:[mail.local1]
domain2 relay:[mail.local2]

Соответственно, этим несчастным внутренним серверам нужно посылать почту на
Oubound Gateway, для чего на них прописысаются
relay_host=gateway,
а на gateway разрешают этим самым несчастным пользоваться relays, добавляя IP в
mynetworks

Spam Detection

backscatter - несчастное лицо, которому шлются bounce.
false-positive - ложное определение легитивного письма как СПАМ


Определение Спама на уровне коннекта к демону smtpd

smtpd_client_restriction - Это правило работает сразу же после подключения
клиента к серверу, до того, как сервер выдаст приветственное сообщение
smtpd_helo_restriction - проверяется домен helo
smtpd_sender_restriction - проверяет адрес/домен отправитеся
smtpd_recipient_restriction - проверяет адрес/домен получателя
smtpd_data_restriction - проверяет ээээ ?????
header_checks - проверка заголовков
body_checks - проверка тела письма

Обычно postfix не посылает клиента до момента rcpt to, даже если проверка
сработала на helo. Если это надо поменять,
smtpd_delay_reject = no

Есть такой
soft_bounce, который вместо кодов 5хх возвращает 4хх, его можно (?) использовать
для тестирования новых правил. А вот полезная фича
warn_if_reject - надо поставить это перед каждым правилом, тогда вместо
срабатывания reject, почта проходит дальше, но в логах остается запись.

А вот и они, наши герои - правила, их можно указывать в любом из smtpd_*
параметров

I. Проверка клиента.

check_client_access
check_helo_access - все они указывают на lookup таблицы, где возможны слева:
123.123.234.245 - IP адрес
domain.ru - домен
123.23 - подсеть

check_sender_access
check_recipient_access - все они указывают на lookup таблицы, где возможны
слева:
mail@mail.ru - полный адрес
mail@ - адрес для всех доменов
mail.ru - все адреса для одного домена

Справа в этих четырёх правилах может стоять следующее:

OK - почта принимается
reject текст - почта bounce вместе с опциональным текстом
discard текс - для отправителя почта считается доставленной, но на деле она
убивается
DUNNO - пропустить это правило
HOLD - положить письмо в очередь hold
FILTER transport:host - письмо отправляется в фильтр ???
4xx текст
5хх текст - письмо reject вместе с кодом ошибки

permit_auth_destination - возвращает OK, если получатель находится в
$mydestination, $virutal_alias_domains, $virtual_mailbox_domains,
$inet_interfaces, $relay_domains. Если нет,
возвращает DUNNO, а не REJECT

reject_unauth_destination - обратное к pertim_auth_destination

permit_mynetworks - если адрес отправителя находится в $mynetworks

permit_sasl_authenticated - разрешить доступ пользователям, прошедшим
SASL-аутентификацию
reject_sender_login_mismatch - это тоже относится к SASL - когда пользователю,
прошедшему
аутентификацию, разрешено в MAIL FROM: указывать только конкретный адрес, чтобы
избежать подделок,
и пользователь нарушает это правило.

II. Проверка синтаксиса.

reject_invalid_hostname - если имя хоста после HELO не является корректным,
вернуть REJECT
reject_non_fqdn_hostname - если имя хоста после HELO не является FQDN, вернуть
REJECT
reject_non_fqdn_sender
reject_non_fqdn_recipient - аналогично
smtpd_helo_required - требовать, чтобы клиент представился
strict_rfc821_envelopes - требовать, чтобы письмо удовлетворяло всем
требованиям.

III. DNS проверки
жесткие, но их нужно включать

reject_unknown_client - проверят PTR по IP клиента и проверяет, чтобы обратка
совпала с прямым именем. Замечательное правило.
reject_unknown_hostname - проверяет, есть ли A или MX записи у домена,
указанного в HELO
reject_unknown_recipient_domain
reject_unknown_sender_domain - тоже самое

IV. BlackLists

??????

Content-checking

header_checks
body_checks - regexp:/path/to/file

слева стоит регулярное выражение, справа
OK
REJECT message
DISCARD message
HOLD
FILTER transport:nexthop
IGNORE - просто удалить строчку из заголовков/тела
WARN message - сделать запись в логах, и пропустить

Важно. Чтобы не загружать процессор, проверки проводятся:
line_length_limit - только если строка имеет размер меньше указанного
body_checks_size_limit - только столько байт в теле проверяется
header_size_limit - только столько байт проверяется в заголовках

Restriction classes

Restriction classes создают правила, которые можно использовать в _правой_ части
lookup таблиц доcтупа.

Вначале мы создаем произвольные классы, перечисляя их в
smtpd_restriction_classes = uno, dos, tres

после мы определяем для каждого класса правила (как для команды smtpd_*)

uno = reject_unauth_destination, permit_mynetworks

После чего можем их использовать в любой таблице доступа

mail@mail.ru uno
ttest@mail.ru dos

Например, укажем этот файл в check_recipient_access.
Немного примеров

1.
smtpd_restriction_classes = accessive, den
smtpd_recipient_restricions = check_recipient_restriction =
hash:/etc/postfix/res
accessive = permit_mynetworks, reject
den = deny

/etc/postfix/res
test1@salsero.spb.ru accessive
test2@salsero.spb.ru den

теперь письма на test1@salsero.spb.ru могут посылать только клиенты из
$mynetworks. Более общий случай:
smtpd_restriction_classes = accessive, den
smtpd_recipient_restricions = check_recipient_restriction hash:/etc/postfix/res
accessive = check_sender_restriction hash:/etc/postfix/sen, reject
den = deny

/etc/postfix/res
test1@salsero.spb.ru accessive
test2@salsero.spb.ru den

/etc/postfix/sen
test@hotmail.ru accept
test@mail.ru reject
Теперь на test1@salsero.spb.ru можно слать только с адреса test@hotmail.ru и
точка


Ну вот, еще одна глава пройдена :).

SASL

Нужно вначале определить SASL machanisms, также известные как credentials (какие
методы аутентификации поддерживает SASL) и SASL frameworks (каким образом SASL
хранит пароли)

Sasl mechanisms
plain - логит/пассворт без пароля, сжатае mime-64
login - устаревшее
digest-md5 - клиент получает открытый ключ от сервера, шифрует строчку, посылает
обратно серверу, тот с помощью закрытого ключа ее расшифровывает
Kerberos - хз

Для включение механизма SASL
smtpd_sasl_auth_enable = yes
конечно, предварительно скомпилировав postifix с его поддержкой

Отличная фича - пользователь прошел аутентификацию и начал рассылать спам с
различными mail from. Защищаемся,
smtpd_sender_login_maps
mail@mail.ru mail.mail.ru
test@hotmail.ru test.hotmail.ru

Где слева стоит адрес, с которого и только с которого может отправлять почту
пользователь, прошедший
регистрацию под ником, стоящим справа. чтобы это заработало, мы добавляем
reject_authenticated_sender_login_mismatch в smtpd_sender_restrictions


smtpd_sasl_security_options - здесь будут указывать SASL machanisms, которые
будут доступны клиенту при аутентификации, значения
noplaintext - если не разрешена аутентификация PLAIN
noanonymous - обязательно включить, иначе зачем вообще все это
nodictionary - против атак по словарю, ничего более сказать не могу
noactive - защита против Man-In-The-Middle

Есть еще возможность проводить аутентификацию не во время приема, а во время
отправки почты, например, если используется релей и нужно все равно провести
аутентификацию
Включаем механизм
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps
domain имя_пользователя:пароль

Создаем файл /usr/lib/sasl2/smtpd.conf следующего содержания
pwcheck_method: auxprop
и создаем пользователей командой:
saslpasswd2 rodriges@salsero.spb.ru
Просмотреть список пользователей можно командой
sasldblistusers2

TLS

will be soon

Content Filtering

Фильтрация есть в 3-ёх видах:
1. против вирусов/очевидного спама/подделок
применяется уже после приема письма. исп.
header_checks & body_checks
2. фильтрация происходит сразу же после приема письма - плохая мысль, поскольку
работает только на плохо загруженных серверах и не предусмотрено борьбы с DOS
3. Фильтрация происходит после приема письма и выполняется внешней программой.
Вот об этом и поговорим, точнее, о том, как интегрировать внешнии программы для
проверки на вирусы и спам с postfix

1-вы вариант: простой

Схема такая письмо из очереди попадает на обработку по pipe во скипт/программу,
откуда уже через sendmail попадает снова в очередь. Очевидно, чтобы не было
зацикливания, для локальной почты, то есть от демона pickup, проверка должна
быть отключена. Итак, как это реализуется:
1.a. Вариант почта _сразу_ попадает в программу фильтрации. В файле master.cf
создаем транспорт типа pipe, user - от чьего имени будет запускаться программа
argv - путь к программе и аргумента, последним всегда идет -e - весь вывод
программы направляется другой программе, указанной в аргументе. В нашем случае
это sendmail. В argv раскрываются следующие макросы: ${sender} - адрес
отправителя и ${recipient} - адрес получателя. Достоинсво - простота, недостаток
- если что пойдет не так - пиши пропало.
spamassassin unix - n n - 20 pipe user=nobody argv=/usr/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}
smtp inet n - n - - smtpd
-o content_filter=spamassassin:
1.b. почти что и подпункт a, но письмо вначале направляет в скипт, а в скрипте
его можно прогнать через много-много программ, проверяющих письмо на спам и
вирусы.
spamassassin unix - n n - 10 pipe
flags=Rq user=filter argv=/path/to/script -f ${sender} -- ${recipient}
smtp inet n - n - - smtpd
-o content_filter=spamassassin:

Скрипт примерно такого содержания:

1 #!/bin/sh
2
3 # Simple shell-based filter. It is meant to be invoked as follows:
4 # /path/to/script -f sender recipients...
5
6 # Localize these.
7 INSPECT_DIR=/var/spool/filter
8 SENDMAIL="/usr/sbin/sendmail -i"
9
10 # Exit codes from
11 EX_TEMPFAIL=75
12 EX_UNAVAILABLE=69
13
14 # Clean up when done or when aborting.
15 trap "rm -f in.$$" 0 1 2 3 15
16
17 # Start processing.
18 cd $INSPECT_DIR || {
19 echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
20
21 cat >in.$$ || {
22 echo Cannot save mail to file; exit $EX_TEMPFAIL; }
23
24 # Specify your content filter here.
#25 # filter < in.$$ || {
33
26 # echo Message content rejected; exit $EX_UNAVAILABLE; }
27
28 $SENDMAIL "$@" < in.$$
29
30 exit $?

2-ой вариант: продвинутый

идея его в том, что передать письмо не через pipe, а через smtp!! приведем на
примере amavisd-new

smtp inet n - n - - smtpd
-o content_filter=amavisd:[127.0.0.1]:10024
amavisd unix - - n - - smtp
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
То есть все письма пойдут по IP 127.0.0.1 на порт 10024. Осталось лишь сделать,
чтобы письмо возвращались в postfix через порт 10025. Для этого в настройках
amavisd-new делаем
$forward_method = 'smtp:127.0.0.1:10025';
А уже amavisd-new вызовет бессчетное кол-во проверок.

[tune smptd]
disable_vrfy_command (no) - стоит поставить в yes, чтобы адреса не собирали
smtpd_noop_commands (empty) - список команд, на кот. сервер тупо отвечает 250
OK
strict_rfc821_envelopes (no) - стоит поставить в yes, не принимает письма без <>

[ресурсы]
line_length_limit (2048) - строки переносятся, если они больше указанной длины
queue_minfree (0) - сколько нужно свободного места, чтобы почта принималась
message_size_limit (10240000) - макс. размер письма, включая заголовки
smtpd_recipient_limit (1000) - максимальное число получателей для одного письма
smtpd_timeout (300s) - время ожидания ответа от клиента перед отключением
с версии 2.2
smtpd_client_connection_count_limit (50) - скоко подключений одновременно с 1 ip
smtpd_client_connection_rate_limit (0) - сколько любому клиенту разрешено
попыток подключений в течении опр. времени ???
smtpd_client_message_rate_limit (0) - сколько клиенту разрешено отправить
сообщенией за опр. отрезок времение, неважно, будет ли они для сервера или
пойдут дальше
smtpd_client_recipient_rate_limit (0) - макс. число адресов принимателя, кот.
разрешено сделать клиенту
smtpd_client_event_limit_exceptions ($mynetworks) - те сети, которым сделано
исключения из всех ограничений
anvil_rate_time_unit (60s) - в течении этого времени указанные выше команды
считают "определенным временем"

[борьба с глючными клиентами]
smtpd_soft_error_limit (10)
smtpd_hard_error_limit (20)
smtpd_error_sleep_time (1s) - на это время будет задержан прием почты, если
кол-во ошибок в интервале smtpd_soft_error_limit..smtpd_hard_error_limit
smtpd_junk_command_limit (100) - кол-во "пустых" команд (NOOP VRFY ETRN RSET),
которых может сделать клиент, прежде чем счетчик закапает

[access control]
smtpd_delay_reject (yes) - сразу ли отшивать клиента
smtpd_delay_reject (yes)
smtpd_helo_required (no)
smtpd_helo_restrictions (empty)
smtpd_sender_restrictions (empty)
smtpd_recipient_restrictions (permit_mynetworks,reject_unauth_destination)

[прочий бред]
smtpd_banner ($myhostname ESMTP $mail_name) - что светиться при встрече

[tune smtp]
smtp_always_send_ehlo (yes)
smtp_never_send_ehlo (no) - так и надо оставить - всегда представляться перед
отправкой почты
smtp_defer_if_no_mx_address_found (no) - если нет mx, отложить отправку. Не
надо, пусть сразу отвергнет почту
smtp_quote_rfc821_envelope (yes) - всегда ли окружать адресата <>. Да, оставить
как есть
smtp_skip_5xx_greeting (yes) - вести себя вежливо и не пытаться ломиться снова

[ресурсы]
smtp_connect_timeout (30s) - соединение
smtp_helo_timeout (300s) - хело
smtp_mail_timeout (300s) - mail from
smtp_rcpt_timeout (300s) - rcpt to
smtp_data_init_timeout (120s) - data
smtp_data_xfer_timeout (180s) - sending data
smtp_data_done_timeout (600s) - waiting for '.'
smtp_quit_timeout (300s) - waiting for 'quit'
smtp_destination_recipient_limit ($default_destination_recipient_limit) -
скольким адресатам можно доставить почту за одно подключение
smtp_destination_concurrency_limit ($default_destination_concurrency_limit) -
сколько может быть одновременных параллельних подключений к одному IP
smtp_helo_name ($myhostname) - имя, которым представлятьсяъ
smtp_bind_address (empty) - через какие интерфейсы слать письма

Комментариев нет: