А теперь сравним первое сообщение и это. Появилось много нового, как в описании системы, так и в списке решаемых проблем.По поводу организации почтовой системы:
Все ваши проблемы начались в тот момент, когда у вас появился внешний почтовый сервер, который принимает почту абсолютно для всех. Оттуда и "8000 ответов" от ексченжа.
Далее, проблема с тем, что письма идут из гетмайла через релей наружу - так это от большого ума данного софта + его настройки - откуда он знает, надо ли пересылать письмо наружу или нет, если адресатов в письме несколько? Он не знает, информация о конверте-то уже потерялась. У Вас наверняка не пройдут различные рассылки.
Так что проблема того, что письма могут пойти наружу - это не проблема постфикса, а проблема гетмайл. А точнее - проблема архитектуры.
>В сети имеется exchange - для внутреннего оборота
>писем и отправки наружу через гейт на линухе. На него вся
>почта с постфикса и пересылается. Т.к. 2003 эксчендж, по крайней мере,
>не умеет вырубать полностью DSN, то дабы не копить в день
>по 8000 ответов во freeze состоянии, было принято решение фильтровать сообщения
>на recipient'ов еще "на входе". Для этого интегрируем postfix и LDAP/AD.
Итак, план реализации для Вас должен быть таков:
1.Выставляете постфикс "в мир", чтобы он сам принимал почту для Вашего внешнего домена.
(можно пробросом порта. Следите за тем, как он себя будет идентифицировать в мире, чтобы он был server.domain.ru а не server.domain.local)
1.1 Прописываете МХ запись вашего домена на айпи, 25 порт которого пробрасывается на постфикс.
2. Для того,чтобы постфикс не принимал почту для несуществующих пользователей и не ложил LDAP запросами, читаем:
http://www.postfix.org/ADDRESS_VERIFICATION_README.html
куски конфига оттуда:
/etc/postfix/main.cf:
smtpd_recipient_restrictions =
permit_mynetworks
reject_unauth_destination
...
reject_unknown_recipient_domain
reject_unverified_recipient
...
# Note: avoid hash files here. Use btree instead.
address_verify_map = btree:/var/lib/postfix/verify
unverified_recipient_reject_code = 550
relay_domains = domain.ru
После того, как Вы поймете, на что влияет каждая строчка вышеприведенной вырезки из конфига, Вы сможете получить почтовый сервер, который будет отказываться принимать почту для несуществующих пользователей, проверяя их наличие через запрос к ексченжу(если эксченж примет письмо - значит мы для него это письмо примем. В том числе примем и на алиасы). Соответственно, решатся проблемы "(не)отправки 8000 DSN" и отправки почты от гетмыла во внешние домены. Вдобавок к этому, ускорится процесс доставки почты, поскольку не будет необходимости запуска самого процесса гетмайл.
После приема почты постфиксом, её можно завернуть на разного рода антиспамовые процедуры.
Мне понравилось описание "Fighting Spam with Postfix" (http://able.com.ua/~gnut/fighting-spam.html) Там же описаны и дополнительные процедуры, которые помогут не принимать почту откуда попало.
NB: В этом, вышеописанном случае, постфикс будет выступать как почтовый релей.
>
>У юзера в АД часто есть алиасы, поэтому просто запрос в АД
>(те методы, что обычно предложены в примерах) не очень подходил для
>организации данной системы. "Некий скрипт" - это известный getadsmtp.pl-скрипт, измененный с
>username@domain.ru OK на username@domain.ru smtp:[xxx.xxx.xx.xx], способный вытаскивать абсолютно все мыльца +
>много писали о том, что локальный поиск зачастую бывает быстрее, чем
>ЛДАП-запрос в базу по каждому письму (коих даже после спамфильтра бывает
>очень много).
Проверка получателя должна быть _до_ приема текста письма, соответственно до проверки спамфильтром. Тогда и DSN не будет, повторюсь.
Локальный поиск быстрее, если он осуществляется по индексированной БД. В противном случае он может оказаться медленнее.
> И что тоже бывало, может из-за кривости настройки, письма
>проскакивали даже после проверки лдапом. В логах же винды было сообщение
>отказа лдап-пользователю линуха. С данной настройкой все работает со 100% точностью
>+ скрипт обращается к лдап-базе раз в час, что уменьшает трафик
>(с выше 1000 мыльников) и не досаждает АД (контора большая, основано
>все на терминалах - трафу внутреннего дофига, ферма постоянно обращается к
>АД - нагрузка).
Для этого надо лечить АД, чтобы держала нагрузку. Возможно имеет смысл сделать репликацию дерева на дополнительные сервера. Непонятно что значит "с выше 1000 мыльников" - надеюсь Вы этим термином назвали почтовые ящики, а не почтовые сервера ;-)
>[оверквотинг удален]
>с DNS-записью аля foo.893.domen.aaa.ru и локальный xxxx.local.
>
>Почта на линукс (из интернета не виден, стоит за циской) доставляется заборщиком
>(getmail), во время приема им же прогонятеся через clamd и spamassassin.
>После отдается прокмылу для фильтрации вложений и мелких дополнений для увеличения
>шанса отсеить "грязное" письмо. Эта связка пашет на ура. Дальше прокмыло
>ЛОКАЛЬНО отдает все это добро постфиксу. Что требуется от постфикса:
>
>1. Убить письмо, если адресата нет в сгенерированном файле адресов без оповещения
>отправившего его человека.
Криво. Вы забываете о честных пользователях, которые тоже могут ошибаться, и будут сильно удивлены если их отправленное письмо, принятое Вашим сервером, "где-то потерялось".
>2. Полный запрет на всевозможные релеи, кроме: с эксченджа в инет без
>каких-либо проверок и локальной отправки от прокмыла на эксчендж с проверкой
>на юзера.
Этого от постфикса требовать не надо, а надо делать по-другому, например как описано Выше.
Если сильно захочется сделать так, как хотите Вы - тогда запустите несколько smtpd/(или целиком постфиксов) на разных портах/адресах/машинах для разных целей - локальной и внешней пересылки.
>3. Замена внутреннего доменного имени root@имя_серва.xxxx.local на внешний адрес имя_серва@domain.ru для локальных
>мыльц, отправляемых только в сторону эксченджа с ошибками/локальными сообщениями.
ИМХО это делается через стандартнейшие алиасы.
>4. Исключить в заголовках писем проходящих наружу через постфикс любые упоминания о
>локальном домене: Received, Message-ID, Return-Path и т.д. Заменить их, например, на
>имя_серва@domen.ru
Не знаю, как это реализуется чистыми средствами постфикса. Возможно это будет
masquerade_domains =
Скорее всего придется использовать что-то другое.
ЗЫ Потратил более часа на написание ответа и выверку его по документации постфикса и настройкам своих серверов.