LINUX.ORG.RU
ФорумAdmin

Postfix SMTP relay поиск получателя в MySQL

 , ,


0

1

Доброго дня!

Есть Postfix smtp relay, который принимает почту из Интернета и пересылает на внутренний почтовый сервер.

Есть доступ к удалённому MySQL серверу на котором есть база данных с именем «vmail» и есть таблицы:

1. Таблица: domain Колонка: domain
2. Таблица: alias Колонка: address
3. Таблица: mailbox Колонка: username

Нужно настроить фильтр входящей почты,
сначала проверять знаем ли мы домен получателя (*@example.com), если не знаем то отбрасываем соединение,
далее если домен знаем то ищем полное имя получателя в двух таблицах alias (Колонка: address) и mailbox (Колонка: username), например user@example.com, если получатель с таким именем найден то почта уходит на наш внутренний релей.

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

Пожалуйста помогите с настройкой, кто разбирается, заранее спасибо!

Какой-то мудрёный алогоритм, что, в БД нет поля, которое просто содержит адрес получателя?

В проверке домена, ИМХО, смысла нет, обычно и спамеры и нормальные почтовики шлют почту по MX-записям и правильных писем намного больше, чем «левых».

Погуглите «/etc/postfix/mysql-check-recipient-access.cf» и поправьте sql-запрос, чтобы он по адресату возвращал OK или REJECT, как-то так:

select ifnull((select 'OK' as access from alias where address = '%s'), 'REJECT');

mky ★★★★★
()
Ответ на: комментарий от mky

Минимально, нужно искать адрес получателя в двух таблицах:
Таблица: mailbox поле: username
Таблица: alias поле: address

Как прописать запрос для поиска по двум таблицам?
И совсем дурацкий вопрос, что приписать в конфиге самого postfix?

Nuclerdragon
() автор топика
Ответ на: комментарий от Nuclerdragon

Вам нужно в конфиг постфикса прописать:

smtpd_recipient_restrictions = ... mysql:/etc/postfix/mysql-recipient-access.cf

Вместо многоточия другие проверки, которые уже есть в конфиге.

А в файле /etc/postfix/mysql-recipient-access.cf писать параметры подключения к БД и запрос:

user = postfix  
password = postfix  
hosts = localhost  
dbname = mail  
query = SELECT   Бла-бла-бла

Запрос (query) придумывайте сами, я не особый специалист по SQL и по телепатии. Мне не понятно, что именно хранится у вас в таблицах и зачем кроме адреса postfix должен искать username, если почта передаётся дальше.

Запрос должен возвращать OK или REJECT.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.