Я установил базовый почтовый сервер, используя PostFix с Dovecot / IMAP. Но у меня возникла проблема с настройкой черного списка.
ниже мой постфикс main.cf
smtpd_recipient_restrictions = check_sender_access mysql:/etc/postfix/blacklist.cf reject_unauth_destination
blacklist.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 - это индивидуальный пользователь, а электронная почта - адрес из черного списка.
Что я хочу сделать, так это получить совпадение адресов из базы данных со ссылкой на получателя в почте. Если я жестко закодирую значение электронной почты для чего-то, что существует в базе данных, он сможет отклонять письма от заблокированного пользователя.
Однако, если я использую %u
(который, как я полагаю, относится к получателю), он вообще не может блокироваться.
Таблицы поиска в Postfix - это поисковые запросы по ключу-значению. Это означает, что у вас есть ключ и вы получаете значение после поиска. В вашем случае (check_sender_access) ключ является отправителем; и только отправитель. Таким образом, ваше требование иметь два ключа (отправителя и получателя) не может быть выполнено с помощью Postfix.
Единственный способ решить эту проблему - Делегирование политики, где у вас есть несколько ключей (отправитель, получатель, IP, имя хоста, helo, ...) для поиска.
Но, с другой стороны, полагаться на адрес отправителя - очень плохая идея, так как его проще всего подделать.