Я бы хотел, чтобы Postfix проверял поле «отправитель» каждого исходящий smtp mail (перед отправкой), чтобы отправитель соответствовал любой из действительных созданных учетных записей (пользователей почты) любого из доменов, размещенных на сервере (в качестве условия для одобрения отправки).
Причина этого в том, что всякий раз, когда один домен заражается сценарием (-ами) отправителя спама, он обычно использует такой шаблон, как 'random-name'@infected-domain.tld , поэтому, применив фильтр отправителя-пользователя, это может снизить влияние на репутацию сервера и, таким образом, предотвратить попадание в черный список так же быстро, как это происходит сейчас (всякий раз, когда один из размещенных доменов заражен вредоносными скриптами).
Итак, здесь я прошу не об ограничениях конкретного домена, а об ограничениях для конкретных пользователей для поля «Почта от:» перед его отправкой с помощью Postfix (не при получении входящей почты).
Редактировать 1
Наконец, я догадался, что проблема в том, что / usr / sbin / sendmail может отправлять с помощью Postfix без аутентификации, не так ли? Или он настроен где-то еще без моего ведома?
Пожалуйста, не могли бы вы помочь мне с какой-нибудь полезной и понятной документацией по sendmail? Я не нашел ничего действительно полезного, чтобы понять, как это работает, тем более для многопользовательской среды, такой как Plesk 11.5.
Вот почему я хотел бы фильтровать прямо из Postfix, потому что это центральная точка, в которой можно полагаться или отправлять электронные письма.
Редактировать 2
Наконец, поискав, я отказался от директивы для Postfix 2.4+. авторизованные_submit_users => http://www.postfix.org/postconf.5.html#authorized_submit_users
Он проверяет только UID процесса / usr / sbin / sendmail, который является пользователем зараженного домена.
Добавление:
authorized_submit_users = !unknown, static:all
не решает проблему.
Редактировать 3
Работаю с
#/etc/postfix/main.cf
header_checks = regexp:/etc/postfix/header_checks
И параметры фильтрации регулярных выражений, используя отрицательный взгляд вперед:
#/etc/postfix/header_checks
/^From: ".*(?!user1|user2|user3).*@infected-domain.tld/ REJECT
Любая идея? Могу я открыть другую тему?
Решено!
Я предоставил индивидуальное решение для этого конкретного случая, ответив на него сам ниже. Спасибо всем за информацию, сотрудничество и поддержку!
Наконец я нашел решение фильтровать исходящий спам с помощью header_checks, хотя я не знаю, насколько это может быть эффективно и действенно.
Предупреждение:
From:
).From:
), это выражение регулярного выражения не может быть эффективным.При условии /usr/sbin/sendmail
используется зараженным скриптом для рассылки спама, всякий раз, когда он использует случайные несуществующие почтовые учетные записи (например, fake1@my-domain.tld), а не реальные учетные записи в качестве отправителей (например, user1@my-domain.tld), заголовки почты могут быть проверены с помощью встроенной проверки содержимого postfix header_checks
следующим образом:
#/etc/postfix/main.cf
# add it for example before TLS paramaters
# Anti-SPAM options
header_checks = pcre:/etc/postfix/header_checks
Регулярное выражение в файле header_checks должно исключать любого реального пользователя домена (то есть user1, user2, ...):
#/etc/postfix/header_checks
/^From:((?![^@]*?user1|[^@]*?user2|[^@]*?user3|[^@]*?webmaster)[^@]*?)@my-domain\.tld/ REJECT invalid sender
Пояснение к регулярному выражению (при любых изменениях может использоваться это тестер регулярных выражений):
[^@]
любой персонаж кроме @
[^@]*?
любой персонаж, кроме @
, ноль или более раз, ленивый нежадный (*?
).(?!user1|user2|etc)
негативный взгляд вперед с альтернативами: исключение реальных пользователей домена.(?![^@]*?user1|[^@]*?user2|etc)
разрешить символы перед адресом электронной почты каждого пользователя.Перед любым изменением его можно протестировать (первый проходит, второй отклоняется):
$ postmap -q "From: user1@my-domain.tld" pcre:/etc/postfix/header_checks
$ postmap -q "From: fake@my-domain.tld" pcre:/etc/postfix/header_checks
REJECT invalid sender
$
Или даже его можно проверить, используя файл с заголовками сообщений, захваченных во время заражения (примечание: здесь важен тире):
$ postmap -q - pcre:/etc/postfix/check_headers < captured_headers.txt
From: "fake1@my-domain.tld REJECT invalid sender
From: "fake2@my-domain.tld REJECT invalid sender
$
После тестирования, если он соответствует желаемому результату, просто перезапустите Postfix:
# service postfix restart
* Stopping Postfix Mail Transport Agent postfix [ OK ]
* Starting Postfix Mail Transport Agent postfix [ OK ]
Чтобы проверить, как это происходит, одна из возможных команд:
# tail -n 10000 /var/log/mail.log | grep reject
or
# tail -n 10000 /var/log/mail.log | grep 'invalid sender'
Надеюсь, это поможет кому-нибудь еще.
РЕДАКТИРОВАТЬ
Некоторые исправления регулярного выражения:
#/etc/postfix/header_checks
/^From:(?![^@]*?user1@|[^@]*?user2@|[^@]*?user3@|[^@]*?webmaster@)([^@]*?@my-domain\.tld)/
REJECT invalid sender $1
Проверка postmap работает хорошо, но postfix не фильтрует поддельных пользователей электронной почты для домена (последнее заражение он не фильтрует). Я не знаю, почему.
Смотреть на эта диаграмма, есть три независимый входы, где электронная почта может вводить postfix, sendmail (через самовывоз), smtpd и qmqpd. Последний вход здесь использовали редко.
Когда электронная почта отправляется через smtpd, то источник электронной почты скорее всего извне (исключение при подключении из 127.0.0.1). Внешняя электронная почта считалась ненадежный очевидно. Итак, у постфикса есть стандартные функции для его блокировки, такие как проверка RBL, проверка открытого реле, создание белых / белых списков и другие. Видеть Postfix SMTP relay и контроль доступа.
По умолчанию считался IP-адрес сервера и 127.0.0.1 доверенный потому что тот, кто может подключиться с этого хоста, может вызвать дальнейшие разрушения помимо спама. Например: если сценарий был загружен на веб-сервер, они могут вызвать удаление корневого веб-сайта, установку бэкдора и другие.
Другой доверенный вход почты был через sendmail / почта программа. В основном, когда php вызывает почтовую функцию или вы вызываете почту с терминала, вы указываете sendmail помещать электронную почту в очередь postfix. Sendmail не может быть запущен, если некоторые люди не имеют доступа к вашему ящику, например, загруженный скрипт.
Теперь мы готовы ответить на ваш главный вопрос: как мне проверить отправителя по базе данных?
Для подключения smtpd вы можете использовать функцию постфикса Postfix SMTP relay и контроль доступа check_sender_access, чтобы снова проверить вашу пользовательскую базу данных. Я не могу сообщить вам подробности, поскольку я никогда не использовал Plesk. Для команды sendmail / mail вам нужен постфикс проверка содержания (фильтр содержимого очереди milter или после), так как указанные выше фильтры не зависят от источника электронной почты.
Я делаю это в amavisd-new. У меня есть установка amavis для сканирования всей электронной почты независимо от того, откуда она пришла (локальная или внешняя). Эти типы спам-сообщений имеют массу плохих заголовков, которые легко можно обнаружить в amavisd. Вам придется отключить несколько проверок заголовков, которые многие почтовые клиенты (например, Outlook) не выполняют правильно.
Этот пост также может быть вам полезен, если он относится к методам аутентификации plesk. проверить заголовок для аутентифицированного отправителя в постфиксе
В этом вопросе они проверяют отправителя, прошедшего проверку подлинности, но все, что вам нужно будет добавить, это правило сопоставления заголовка проверенного пользователя с заголовком отправителя.
Функция, о которой вы говорите, уже существует в Plesk 12 "из коробки".