
Я настроил базовый почтовый сервер с помощью PostFix с Dovecot/IMAP. Но у меня возникли некоторые проблемы с настройкой черного списка.
ниже мой постфикс main.cf
smtpd_recipient_restrictions = check_sender_access mysql:/etc/postfix/blacklist.cf reject_unauth_destination
черный список.cf
user = mailuser
password = mailuser2011
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 'REJECT' FROM blacklist WHERE email='%s' AND id=( SELECT id FROM virtual_users WHERE email='%u')
В моей таблице SQL есть 2 столбца для черного списка. А именно id
и , email
где id — это индивидуальный пользователь, а email — адрес в черном списке.
Я хочу получить соответствие адреса из базы данных со ссылкой на получателя в почте. Если я жестко закодирую значение электронной почты на что-то существующее в базе данных, то он сможет отклонять письма от заблокированного пользователя.
Однако если я использую %u
(я предполагаю, что это относится к получателю), блокировка вообще не происходит.
решение1
Таблицы поиска в Postfix являются Key-Value-Lookups. Это означает, что у вас есть ключ и вы получаете значение после поиска. В вашем случае (check_sender_access) ключом является отправитель; и только отправитель. Поэтому ваше требование иметь два ключа (отправитель и получатель) не может быть выполнено с Postfix.
Единственный способ решить эту проблему —Делегирование политики, где у вас есть несколько ключей (отправитель, получатель, IP, имя хоста, helo, ...) для выполнения поиска.
Но с другой стороны, полагаться на адрес отправителя — очень плохая идея, поскольку его легче всего подделать.