Я пытаюсь заблокировать спамеров, фильтруя некоторые поля в заголовке письма, но это не работает. Спамер добавляет случайные домены в заголовки, но «пользователь» всегда один и тот же, например: www-data@domain1.com , www-data @ domain2 и так далее. Я не ожидаю, что кто-то будет отправлять легальные письма с именем отправителя «www-data», так что я в порядке, если все они будут отклонены.
Регулярное выражение, которое я пытаюсь использовать, но не работает:
/^(From|Return-Path|Reply-To):.*www-data@.*/ DISCARD known spam sender in $1: header: $2
У меня есть другие правила, которые также фильтруют другие аспекты, например создание моего собственного домена, который работает:
/^(From|Return-Path|Reply-To):.*\b(@mydomain\.com)\b/ DISCARD forged sender address in $1: header: $2
Что я делаю не так? Спасибо!
www-data
- это имя пользователя веб-сервера, которое часто используется для транзакционной электронной почты, например для уведомлений Википедии, поэтому вам следует учитывать, что вы можете блокировать законную почту, а также почту, отправляемую с взломанных серверов. В любом случае вы обычно не видите его в From
заголовок. Скорее всего, он находится в отправителе конверта, и может быть поэтому ваше регулярное выражение не работает - оно ищет не в том месте.
Чтобы заблокировать отправителей конвертов, добавьте check_sender_access
стол в smtpd_sender_restrictions и укажите localpart @, который нужно отклонить. Вам не нужно использовать регулярное выражение, хотя при необходимости вы можете использовать pcre:
тип стола.
В регулярных выражениях вы должны избегать @
, лайк \@
. Также обратите внимание, что в вашем первом примере нет шаблона $2
, потому что у вас только одна скобка. Чтобы получить больше информации man 5 postconf
, или посмотрите на SMTPD_ACCESS_README
.