FastNetMon

Monday, 6 April 2009

Plesk + Postfix + входящая почта

Добрый день! В прошлом посте мы обсуждали, как же поставить Постфикс рядом с Плесковым qmail. В итоге мы пришли к тому, что проверяем: есть ли айпи в списке "доверенных" и только в этом случае пускаем. Гениальная, безусловно, схема, если забыть про то, что релей для локальных доменов должен быть разрешён. Нафик? А входящая почта как приниматься будет, а? То-то же!

Например, есть у нас домен uvedomi.su, поддерживаемый на нашем хостинг сервере и есть некто, желающий скинуть ему почту:


telnet hosting.ru 25
Trying xx.xx.xx.xx...
Connected to hosting.ru.
Escape character is '^]'.
220 mailhosting.ru ESMTP Postfix
HELO
501 Syntax: HELO hostname
HELO 111
250 mailhosting.ru
MAIL FROM: 1111@111.ru
250 2.1.0 Ok
RCPT TO: nrg@uvedomi.su
530 5.7.1 : Client host rejected: Authentication required


Вот такая оказия у меня вышла впервые с гуглом, который не смог доставить почту, получив такой отлуп.

Решение.
Вот мануал http://rupp.de/howto_install_postfix_before_qmail.html, где нас интересует часть про configure postfix и relay domains.

Итак, стандартно с Postfix идёт мегаскрипт /etc/postfix/dumpqmail, который конвертирует файл разрешенных для релея доменов из qmailовского /var/qmail/control/rcpthosts в Постфиксовый /etc/postfix/relaydomains. Запускаем: sudo /etc/postfix/dumpqmail, чтобы синхронизировать базы. После этого мой домен появился в Постфиксовом релей файле:

cat /etc/postfix/relaydomains | grep uvedo -i
uvedomi.su RELAY


Теперь, как понимаете, нам надо настроить запуск этой команды по крону :) Для этого в /etc/crontab добавляем:

*/5 * * * * root /etc/postfix/dumpqmail


А теперь в конфиг /etc/postfix/main.cf добавляем строчку (оно на данный момент есть там, но закомменчено, добавляем прямо там):

relay_domains = hash:/etc/postfix/relaydomains


Таким образом, Постфикс будет чекать, доверен ли домен для релея и в случае успеха будет пропускать почту без проверки по айпи.


Итого, если для дебага сейчас отключить проверку айпи (в main.cf комментим строку с smtpd_recipient_restrictions):
Наша почта снаружи до uvedomi.su пройдет успешно, а попытка релейнуть чужой домен будет отбита: [nrg@test.ru]: Relay access denied; from= to= proto=SMTP helo=<1>

А теперь самое интересное... как не обращать внимания на айпи, если домен разрешен к релею? Сейчас я НЕ знаю, как это сделать. Помогайте :(

Решение найдено, модифицируем ограничения на получателя следующим образом:

smtpd_recipient_restrictions = permit_auth_destination, check_client_access mysql:/etc/postfix/mysql-psa-smtp_poplocks.cf, reject


Итого, логика такова: если домен доступен к релею, то почта принимается (permit сразу же); если недоступен, то переходим следующему правилу (это проверка валидности айпи) и если уж и оно сваливается, то отбрасываем клиента с ошибкой "Recipient address rejected: Access denied".

Да. Постфикс написали гениальные люди, такого мощного движка управления я не видел ни в одном почтовике!

No comments :

Post a Comment

Note: only a member of this blog may post a comment.