- Исправление ошибки в Debian и Ubuntu
- Запуск собственного локального преобразователя DNS
- Черный список
- Как свести к минимуму негативное взаимодействие с пользователем
- Создайте вторую запись MX, указывающую на тот же IP-адрес
- Пропускать глубокие тесты протокола, если IP-адрес SMTP-клиента находится в общедоступном белом списке
- Использование Postwhite
- Моя конфигурация Postscreen в файле /etc/postfix/main.cf
- Бонусный совет для пользователей iRedMail
- Установить пользовательскую оценку для существующих правил
- Добавление собственных правил
- Правила заголовка
- Правила тела
- Добавить отрицательные баллы
- Мета-правила
- С ног на голову, или посмотреть с другой стороны баррикад
- Проверка заголовка и тела письма с помощью SpamAssassin
- Включить Postscreen в Postfix
- Измерения, используемые Postscreen против спам-ботов
- Проверка заголовков и тела электронной почты с помощью SMTP-сервера Postfix
- Проверка заголовка
- Проверка тела
- Отчет журнала Postfix
- Удаление заголовков исходящих писем
- Отклонение электронной почты, если имя хоста SMTP-клиента не имеет действительной записи A
- Белый список
- Интеграция SpamAssassin с SMTP-сервером Postfix в качестве Milter
- Включить ограничения имени хоста HELO/EHLO в Postfix
- Хотите что-то добавить?
- Запуск локального преобразователя DNS для ускорения поиска DNS
- Следующий шаг
- Характеристики спама
- Проверяем приветствие
- Блоклисты, или как делать не надо
- Немного о DNS
- Enable Deep Protocol Tests
- Reducing SMTP Server Overload
- Немного об SMTP протоколе
- Присматриваемся к клиенту
- Prevent Outgoing Spam
- Небольшие комментарии по поводу Postfix
- Analyze Postfix Logs
- URIBL_BLOCKED
- Отклонить электронную почту, если SMTP-клиент не имеет записи PTR
- Переместить спам в папку нежелательной почты
- Установить SpamAssassin
- Грейлистинг
- Postfix Reverse DNS Lookup Error on CentOS/RHEL
- Pregreet Test
- How to Minimize Bad User Experience
- Whitelist
- Create Another MX Hostname with the Same IP Address
- Reject Email If MAIL FROM Domain Has Neither MX Record Nor A Record
- Отправитель — а стоит ли ему доверять?
- Using Public Blacklists & Whitelists
Исправление ошибки в Debian и Ubuntu
предупреждение: подключиться к 127.0.0.1:10023: соединение отклонено предупреждение: проблема со связью с сервером 127.0.0.1:10023: в соединении отказано
POSTGREY_OPTS="--inet=10023"
POSTGREY_OPTS="--inet=127.0.0.1:10023"
Затем перезапустите postgrey.
sudo systemctl перезапустить postgrey
Проверить, слушает ли:
sudo netstat -lnpt | группа 10023
Запуск собственного локального преобразователя DNS
Обратите внимание, что вам следует настроить локальный преобразователь DNS
на вашем почтовом сервере при использовании общедоступных черных и белых списков, потому что большинство из них имеют лимит запросов. Если вы используете общедоступный преобразователь DNS, такой как 8.8.8.8, вы, скорее всего, достигнете лимита запросов раньше, чем думаете.
Черный список
Чтобы добавить отправителя в черный список, используйте blacklist_from
параметр, который имеет тот же формат, что и whitelist_from
.
blacklist_from [электронная почта защищена] blacklist_from *@example.org Как свести к минимуму негативное взаимодействие с пользователем
- Создайте вторую запись MX, указывающую на тот же IP-адрес.
- Если IP-адрес SMTP-клиента находится в общедоступном белом списке, пропустите глубокие проверки протокола.
- Используйте Postwhite, чтобы добавить известные хорошие IP-адреса в белый список Postscreen.
Создайте вторую запись MX, указывающую на тот же IP-адрес
Вы можете указать более одной записи MX для своего доменного имени, как показано ниже.
Тип записи Имя Почтовый сервер Приоритет MX @ mail.yourdomain.com 0 MX @ mail2.yourdomain.com 5
Отправитель попытается использовать первый почтовый сервер (с приоритетом 0). Если mail.yourdomain.com отклоняет электронную почту по серому списку, то отправитель немедленно попытается использовать второй почтовый сервер (с приоритетом 5).
Обратите внимание, что не все почтовые серверы сразу попытаются использовать второй хост MX. Некоторые почтовые серверы, такие как Gmail, будут использовать другой IP-адрес для повторной попытки, которая, конечно же, будет снова отклонена. По умолчанию Postfix попытается использовать второй хост MX. Я не знаю, так ли это в случае с Exim. Если вы используете SMTP-сервер Exim, пожалуйста, прокомментируйте ниже.
Пропускать глубокие тесты протокола, если IP-адрес SMTP-клиента находится в общедоступном белом списке
postscreen_dnsbl_whitelist_threshold = -2
Перезапустите Postfix, чтобы изменения вступили в силу.
постфикс перезапуска sudo systemctl
10 февраля 10:31:14 mail postfix/postscreen[16579]: ПОДКЛЮЧИТЬСЯ от [209.85.166.44]:38543 к [23.254.225.226]:25 10 февраля 10:31:14 mail postfix/dnsblog[16582]: адрес 209.85.166.44 указан доменом list.dnswl.org как 127.0.5.0 10 февраля 10:31:15 почта postfix/postscreen[16579]: НОВЫЙ ПРОХОД [209.85.166.44]:38543 10 февраля 10:31:15 mail postfix/smtpd[16639]: подключиться с mail-io1-f44.google.com[209.85.166.44]
На самом деле, большинство основных поставщиков почтовых ящиков (Gmail, Hotmail, Outlook, Yahoo Mail, GMX Mail, ProtonMail и т. д.) внесены в белый список на list.dnswl.org. Сюда также входят почтовые серверы в других отраслях, что можно увидеть на dnswl.org
.
- 2 – Финансовые услуги
- 3 – Поставщики услуг электронной почты
- 4 – Организации (как коммерческие [т.е. компании], так и некоммерческие)
- 5 – Поставщики услуг/сети
- 6 – Персональные/частные серверы
- 7 – Индустрия путешествий/отдыха
- 8 – Государственный сектор/правительства
- 9 – Медиа и Технологические компании
- 10 – некоторые частные случаи
- 11 – Образование, академическое
- 12 – Здравоохранение
- 13 – Производство/Промышленность
- 14 – Розничная/оптовая торговля/услуги
- 15 – Провайдеры электронного маркетинга
- 20 – Добавлено через самообслуживание без определенной категории
Использование Postwhite
Чтобы использовать Postwhite, сначала перезарядите до /usr/local/bin/
.
cd /usr/local/bin/
sudo apt install git
sudo dnf установить git
Клонируйте репозиторий SPF-Tools и Postwhite Github.
sudo git clone https://github.com/spf-tools/spf-tools.git sudo git clone https://github.com/stevejenkins/postwhite.git
Скопируйте postwhite.conf
файл в /etc/
.
sudo cp /usr/local/bin/postwhite/postwhite.conf /etc/
sudo /usr/local/bin/postwhite/postwhite

sudo nano /etc/postfix/main.cf
postscreen_access_list = allow_mynetworks cidr:/etc/postfix/postscreen_access.cidr
Добавьте новый файл белого списка.
postscreen_access_list = allow_mynetworks cidr:/etc/postfix/postscreen_access.cidr cidr:/etc/postfix/postscreen_spf_whitelist.cidr
Сохраните и закройте файл. Затем перезапустите Postfix, чтобы изменения вступили в силу.
постфикс перезапуска sudo systemctl
sudo crontab -e
@daily /usr/local/bin/postwhite/postwhite > /dev/null 2>&1 #Обновить белые списки Postscreen @weekly /usr/local/bin/postwhite/scrape_yahoo > /dev/null 2>&1 #Обновление Yahoo! IP-адреса для белых списков Postscreen
10 февраля 13:04:17 mail postfix/postscreen[24895]: ПОДКЛЮЧИТЬСЯ от [209.85.166.44]:38257 к [23.254.225.226]:25 10 февраля 13:04:17 почта postfix/postscreen[24895]: WHITELISTED [209.85.166.44]:38257 10 февраля 13:04:17 mail postfix/smtpd[26596]: подключиться с mail-io1-f44.google.com[209.85.166.44]
Моя конфигурация Postscreen в файле /etc/postfix/main.cf

Бонусный совет для пользователей iRedMail
PREGREET 14 после 0,22 из [121.226.63.86]:64689: EHLO ylmf-pc\r\n PREGREET 14 после версии 0.24 из [121.232.8.131]:55705: EHLO ylmf-pc\r\n PREGREET 14 после 0,24 из [114.232.9.57]:62783: EHLO ylmf-pc\r\n
PREGREET .* from \[\]:* EHLO ylmf-pc
Но я думаю, что время бана по умолчанию (1 час) для этого фильтра слишком низкое. Откройте /etc/fail2ban/jail.local
файл и добавьте пользовательский параметр bantime, как показано ниже.
[postfix-iredmail] включено = верно максимальное количество попыток = 1 время бана = 24 часа фильтр = postfix.iredmail logpath = /var/log/mail.log
Я установил значение времени бана на 24 часа, потому что отправитель явно использует скомпрометированные домашние компьютеры. Сохраните и закройте файл. Перезапустите fail2ban, чтобы изменения вступили в силу.
sudo systemctl перезапустить fail2ban
Установить пользовательскую оценку для существующих правил
sudo nano /etc/spamassassin/local.cf
оценка MISSING_FROM 5,0 оценка MISSING_DATE 5,0
Хотя Кому:
Поле заголовка не является обязательным в RFC 5322, я предпочитаю ставить высокую оценку, если оно отсутствует в сообщении электронной почты, потому что я никогда не видел законного электронного письма, в котором отсутствует это поле заголовка.
оценка MISSING_HEADERS 3,0
От: " [электронная почта защищена] " < [электронная почта защищена] >
Я думаю, что оценка по умолчанию для такого рода писем низкая, я предпочитаю установить ее на 3.0.
оценка PDS_FROM_2_EMAILS 3.0
оценка EMPTY_MESSAGE 5,0
оценка FREEMAIL_DISPTO 2.0
оценка FREEMAIL_FORGED_REPLYTO 3,5
оценка DKIM_ADSP_NXDOMAIN 5.0
оценка FORGED_GMAIL_RCVD 2,5
Добавление собственных правил
sudo nano /etc/spamassassin/local.cf
Правила заголовка
заголовок FROM_SAME_AS_TO ALL=~/\nОт: ([^\n]+)\nКому: \1/sm описать FROM_SAME_AS_TO Адрес отправителя совпадает с адресом получателя. оценка FROM_SAME_AS_TO 2.0
заголовок EMPTY_RETURN_PATH ALL =~ //i описать пустой адрес EMPTY_RETURN_PATH в заголовке Return Path. оценка EMPTY_RETURN_PATH 3.0
заголовок CUSTOM_DMARC_FAIL Результаты аутентификации =~ /dmarc=fail/ описать CUSTOM_DMARC_FAIL Это электронное письмо не прошло проверку DMARC оценка CUSTOM_DMARC_FAIL 3.0
Правила тела
Привет [электронная почта защищена] Привет [электронная почта защищена] Уважаемый [email protected]
тело BE_POLITE /(привет|привет|дорогой) xiao\@linuxbabe\.com/i описать BE_POLITE В этом письме не используется правильное имя для получателя оценка BE_POLITE 5.0
Добавить отрицательные баллы
body GOOD_EMAIL /(debian|ubuntu|linux mint|centos|red hat|RHEL|OpenSUSE|Fedora|Arch Linux|Raspberry Pi|Kali Linux)/i описать GOOD_EMAIL Я не думаю, что спамер будет включать эти слова в тело письма. оценка GOOD_EMAIL -4,0
Если в теле письма содержится название дистрибутива Linux, добавьте отрицательную оценку (-4,0).
Есть несколько общих фраз, которые включены в законные сообщения о возврате, поэтому я могу добавить к этим сообщениям отрицательную оценку.
тело BOUNCE_MSG /()/i описать BOUNCE_MSG Недоставленные почтовые уведомления или сообщения автоответчика оценка BOUNCE_MSG -1,5
Обратите внимание, что правила тела также включают Тему в качестве первой строки содержимого тела.
Мета-правила
тело __RESUME /(C. V|Резюме)/i мета RESUME_VIRUS (__RESUME && __MIME_BASE64) описать RESUME_VIRUS Вложение содержит вирус. оценка RESUME_VIRUS 5,5
сырое тело __MIME_BASE64 eval:check_for_mime('mime_base64_count')
описать __MIME_BASE64 Включает вложение base64 Мое мета-правило RESUME_VIRUS
сработает, когда оба подправила верны, добавляя к сообщению электронной почты 5,5 балла. Обратите внимание, что подправило часто начинается с двойного подчеркивания, поэтому само по себе оно не имеет оценки.
заголовок __AT_IN_FROM From =~ /\@/ мета NO_AT_IN_FROM !__AT_IN_FROM оценка NO_AT_IN_FROM 4.0
заголовок __DOT_IN_FROM From =~ /\./ мета NO_DOT_IN_FROM !__DOT_IN_FROM оценка NO_DOT_IN_FROM 4.0
С ног на голову, или посмотреть с другой стороны баррикад
Фильтровать спам научились, теперь же постараемся свести воедино всю информацию на тему того, что же надо делать, что бы не
попасть в спам.
Для администраторов почтовых серверов:
Всегда делайте записи MX.
Запись A для почтового сервера всегда должна иметь зеркальную запись PTR.
Хост из HELO заголовок должен иметь запись A или MX.
Всегда создавайте записи SPF (да-да, это-то как раз не обязательно, но просто правило хорошего тона).
Для всех сообщений, рассылаемых из обслуживаемого домена, ящик для обратного адреса должен занимать и принимать почту.
Для тех, кто расскажет почту (из программ, с сайтов и т.д.):
Всегда посылайте почту только с Существующим обратным адресом.
Никогда не отправляйте почту с неподконтрольного вам домена, не проверив правила SPF для него. Например, gmail.com в момент получения позволяет отправлять письма от его имени какому-либо серверу, а вот yandex.ru и mail.ru сообщают через SPF о том, что посылка от их имени со внешних серверов должна обращать на себя пристальное внимание, что истолковывается умными спам-фильтрами как повышение уровня оценки спама для данного письма.
Никогда не посылайте почту из-за неправильно настроенных SMTP
серверы. Проверка сервера на вшивость по списку — дело 5 минут, вам поможет утилита (♀выше 63)
илиnslookup
.
Проверка заголовка и тела письма с помощью SpamAssassin
заголовок MISSING_HEADERS eval:check_for_missing_to_header() описать MISSING_HEADERS Отсутствует в: заголовок
Первая строка проверяет, соответствует ли Кому:
заголовок существует в сообщении электронной почты. Вторая необязательная строка объясняет, что делает первая строка. Заглавные буквы — это название этого теста.
заголовок __HAS_DATE существует:Дата метаданные MISSING_DATE !__HAS_DATE описать MISSING_DATE Отсутствует дата: заголовок
И эти 3 строки для проверки, есть ли От:
заголовок в сообщении электронной почты.
заголовок __HAS_FROM существует: From мета MISSING_FROM !__HAS_FROM описать MISSING_FROM Missing From: заголовок
Включить Postscreen в Postfix
postconf mail_version
mail_version = 3.3.0
Отредактируйте основной файл конфигурации Postfix.
sudo nano /etc/postfix/master.cf
smtp инет n - y - - smtpd
smtp inet n - y - 1 postscreen smtpd pass - - y - - smtpd dnsblog unix - - y - 0 dnsblog tlsproxy unix - - y - 0 tlsproxy
- Первые две строки включают Postscreen. И Postscreen, и демон smtpd будут прослушивать порт 25. Postscreen сначала проверит SMTP-клиент, а затем передаст соединение демону smtpd.
- Служба dnsblog (DNS Blacklist Logger) позволяет регистрировать проверки черного списка DNS.
- Служба tlsproxy включает поддержку STARTTLS для postscreen, поэтому удаленные SMTP-клиенты могут устанавливать зашифрованное соединение, когда Postscreen включен.
Сохраните и закройте файл. (Пока не перезапускайте Postfix.)

Измерения, используемые Postscreen против спам-ботов
- Предварительный тест. Если SMTP-клиент говорит до своей очереди, остановите соединение.
- Проверка черного списка в режиме реального времени. Если IP-адрес SMTP-клиента находится в черном списке, таком как Spamhaus, прервите соединение.
- Глубокий тест протокола.
Проверка заголовков и тела электронной почты с помощью SMTP-сервера Postfix
Postfix предоставляет 4 простых параметра проверки содержимого.
- header_checks
- mime_header_checks
- nested_header_checks
- body_checks
Postfix будет проверять все входящие электронные письма при использовании любого из вышеуказанных параметров. Каждый параметр указывает на таблицу поиска, содержащую шаблоны регулярных выражений и действия. Шаблоны сравниваются со строками в сообщениях электронной почты (заголовок и тело). Если Postfix находит совпадение, выполняется указанное действие. Проверки заголовков и тела выполняются Postfix cleanup
демон.
Постфикс может использовать в основном два типа регулярных выражений.
-
regexp
: Регулярное выражение POSIX -
PCRE
: Perl-совместимое регулярное выражение
Postfix поставляется с поддержкой регулярных выражений POSIX, но PCRE намного быстрее. Чтобы использовать PCRE в Postfix, вам необходимо установить postfix-pcre
упаковка.
sudo apt install postfix-pcre
postconf -m

Проверка заголовка
Чтобы включить проверку header_checks в Postfix, откройте основной файл конфигурации.
sudo nano /etc/postfix/main.cf
header_checks = pcre:/etc/postfix/header_checks
Сохраните и закройте файл. Затем вам нужно создать /etc/postfix/header_checks
файл поиска с помощью текстового редактора командной строки, такого как Nano.
sudo nano /etc/postfix/header_checks
Вы можете добавить проверку регулярных выражений, как показано ниже.
/бесплатная ипотечная смета/ ОТКЛОНИТЬ /восстановить кредит/ ОТКЛОНИТЬ
Левая клавиша представляет собой регулярное выражение, заключенное в две косые черты. Если какая-либо из строк слева появляется в любом из заголовков сообщения электронной почты (скорее всего, они будут отображаться в заголовке Subject:), сообщение будет отклонено во время диалога SMTP. По умолчанию проверка регулярных выражений не чувствительна к регистру.
Вы также можете использовать DISCARD вместо REJECT.
/бесплатный расчет ипотечного кредита/ ОТМЕНА /восстановить кредит/ ОТМЕНИТЬ
/Кому:*(gmail.com|yahoo.com|outlook|hotmail.com).*/ ОТМЕНИТЬ /Кому:*.*(gmail.com|yahoo.com|outlook|hotmail.com)/ ОТМЕНИТЬ
Приведенные выше строки проверят, находятся ли адрес Gmail/Yahoo/Outlook/Hotmail и адрес электронной почты вашего домена в To:
заголовок одновременно. Если это правда, письмо будет удалено. Два персонажа .*
являются подстановочными знаками в регулярных выражениях, которые могут быть сопоставлены с любыми символами.
Вы также можете сделать то же самое с Cc:
(копия), если вы уверены, что адрес электронной почты не будет принимать электронные письма с несколькими получателями в Cc:
заголовок
/Cc:*(gmail.com|yahoo.com|outlook|hotmail.com).*/ ОТМЕНИТЬ /Cc:*.*(gmail.com|yahoo.com|outlook|hotmail.com)/ УДАЛИТЬ
/Кому:*/ ОТМЕНИТЬ /От:*/ УДАЛИТЬ
После того, как вы закончите редактирование файла поиска header_checks, вам нужно создать индексный файл.
sudo postmap /etc/postfix/header_checks
Затем перезапустите Postfix, чтобы изменения вступили в силу.
постфикс перезапуска sudo systemctl
Проверка тела
Помимо проверки заголовков, Postfix может проверять тело сообщения электронной почты. Включить body_checks
в Postfix откройте основной файл конфигурации.
sudo nano /etc/postfix/main.cf
body_checks = pcre:/etc/postfix/body_checks
Сохраните и закройте файл. Затем вам нужно создать /etc/postfix/body_checks
файл поиска.
sudo nano /etc/postfix/body_checks
Вы можете добавить проверку регулярных выражений, как показано ниже.
/бесплатная ипотечная смета/ ОТКЛОНИТЬ /восстановить кредит/ ОТКЛОНИТЬ
Вы можете использовать DISCARD вместо REJECT.
/бесплатный расчет ипотечного кредита/ ОТМЕНА /восстановить кредит/ ОТМЕНИТЬ
Узоры, обозначенные body_checks
проверяются по каждой строке тела сообщения. Если какая-либо из строк слева появляется в теле сообщения электронной почты, сообщение отклоняется или отбрасывается. После того, как вы закончите редактирование файла поиска body_checks, вам нужно создать файл индекса.
sudo postmap /etc/postfix/body_checks
Затем перезапустите Postfix, чтобы изменения вступили в силу.
постфикс перезапуска sudo systemctl
Отчет журнала Postfix
Pflogsumm
— отличный инструмент для создания сводки журналов Postfix. Установите его на Ubuntu с помощью:
sudo apt install pflogsumm
В CentOS/RHEL pflogsumm предоставляется postfix-perl-scripts
упаковка.
sudo dnf install postfix-perl-scripts
sudo pflogsumm -d сегодня /var/log/mail.log
Создать отчет за вчерашний день.
sudo pflogsumm -d вчера /var/log/mail.log
Если вы хотите создать отчет за эту неделю.
sudo pflogsumm /var/log/mail.log
Чтобы создавать отчеты о «проблемах» (отказы, отсрочки, предупреждения, отклонения) перед «нормальной» статистикой, используйте --problems-first
флаг.
sudo pflogsumm -d сегодня /var/log/mail.log --problems-first
Чтобы добавить адрес электронной почты с адреса к каждому списку в отчете об отклонении, используйте --rej-add-from
флаг.
sudo pflogsumm -d сегодня /var/log/mail.log --rej-add-from
Чтобы показать полную причину отказа, используйте --verbose-msg-detail
флаг.
sudo pflogsumm -d сегодня /var/log/mail.log --rej-add-from --verbose-msg-detail
Вы можете добавить задание cron, чтобы pflogsumm отправлял отчет на ваш адрес электронной почты каждый день.
sudo crontab -e
0 4 * * * /usr/sbin/pflogsumm -d вчера /var/log/mail.log --problems-first --rej-add-from --verbose-msg-detail -q
ПОЧТА=""
Обратите внимание на message reject detail
раздел, где вы можете увидеть, по какой причине эти электронные письма отклонены и есть ли ложные срабатывания. Отказы в серых списках можно безопасно игнорировать.

0 4 * * * /usr/sbin/pflogsumm -d вчера /var/log/mail.log --problems-first --rej-add-from --verbose-msg-detail -q | mutt -s "Сводка журнала Postfix"
sudo apt install mutt
sudo dnf install mutt
Удаление заголовков исходящих писем
Вы можете использовать smtp_header_checks
чтобы удалить заголовки электронной почты, которые могут содержать конфиденциальную информацию. smtp_header_checks
применяются только тогда, когда Postfix действует как SMTP-клиент, поэтому они не влияют на входящие электронные письма.
sudo nano /etc/postfix/smtp_header_checks
/^X-Статус спама:/ ИГНОРИРОВАТЬ /^X-Spam-Checker-Version:/ ИГНОРИРОВАТЬ
Сохраните и закройте файл. Затем отредактируйте основной файл конфигурации Postfix.
sudo nano /etc/postfix/main.cf
smtp_header_checks = pcre:/etc/postfix/smtp_header_checks
sudo postmap /etc/postfix/smtp_header_checks
Перезагрузите Postfix, чтобы изменения вступили в силу.
sudo systemctl перезагрузить постфикс
Отклонение электронной почты, если имя хоста SMTP-клиента не имеет действительной записи A
Легальный сервер электронной почты также должен иметь действительную запись A для своего имени хоста. IP-адрес, возвращенный из записи A, должен совпадать с IP-адресом почтового сервера. Чтобы отфильтровать электронные письма от хостов, у которых нет действительной записи A, отредактируйте основной файл конфигурации Postfix.
sudo nano /etc/postfix/main.cf
reject_unknown_reverse_client_hostname reject_unknown_client_hostname
smtpd_sender_restrictions = Permit_mynetworks разрешение_sasl_authenticated reject_unknown_reverse_client_hostname reject_unknown_client_hostname
Сохраните и закройте файл. Затем перезапустите Postfix, чтобы изменения вступили в силу.
постфикс перезапуска sudo systemctl
Обратите внимание, что reject_unknown_client_hostname
не требует HELO от SMTP-клиента. Он извлечет имя хоста из записи PTR, а затем проверит запись A.
Белый список
whitelist_from [электронная почта защищена] белый список_от *@canonical.com Интеграция SpamAssassin с SMTP-сервером Postfix в качестве Milter
sudo apt install spamass-milter
# Конфигурация Milter milter_default_action = принять milter_protocol = 6 smtpd_milters = локальный: spamass/spamass.sock non_smtpd_milters = $smtpd_milters
Если вы настроили OpenDKIM
и OpenDMARC
, то эти строки должны выглядеть так, как показано ниже. Порядок имеет значение.
# Конфигурация Milter milter_default_action = принять milter_protocol = 6 smtpd_milters = локальный: opendkim/opendkim.sock, локальный: opendmarc/opendmarc.sock, non_smtpd_milters = $smtpd_milters
Если вы не настроили OpenDMARC, то вам следует удалить local:opendmarc/opendmarc.sock,
из smtpd_milters
.
#OPTIONS="${OPTIONS} -r 15" Раскомментируйте эту строку и измените 15 на предпочитаемый вами балл отказа, например 8.
OPTIONS="${OPTIONS} -r 8" milter-reject: КОНЕЦ СООБЩЕНИЯ 5.7.1 Заблокировано SpamAssassin
Если вы хотите, чтобы отправитель увидел другой текст отказа, добавьте -R
(отклонить текст), как показано ниже.
ОПЦИИ="-u spamass-milter -i 127.0.0.1 -R SPAM_ARE_NOT_ALLOWED_HERE"
sudo systemctl перезапустить postfix spamass-milter
sudo systemctl запустить spamassassin sudo systemctl включить spamassassin
Включить ограничения имени хоста HELO/EHLO в Postfix
16 августа 04:21:13 электронная почта postfix/smtpd[7070]: подключиться с ec2-54-237-201-103.compute-1.amazonaws.com[54.237.201.103]
16 августа 04:21:13 электронная почта policyd-spf[7074]: предварить Received-SPF: None (mailfrom) identity=mailfrom; IP-адрес клиента = 54.237.201.103; привет=; [электронная почта защищена] ; получатель= Как видите, имя хоста HELO ip-172-30-0-149.ec2.internal
, который действителен только во внутренней сети AWS. У него нет действительной записи A или записи MX.
Чтобы включить ограничение имени хоста HELO/EHLO, отредактируйте основной файл конфигурации Postfix.
sudo nano /etc/postfix/main.cf
smtpd_helo_required = да
smtpd_helo_restrictions = Permit_mynetworks Permit_sasl_authenticated
reject_invalid_helo_hostname
reject_non_fqdn_helo_hostname
Чтобы отклонить электронную почту, когда имя хоста HELO/EHLO не имеет ни записи DNS A, ни записи MX, используйте
reject_unknown_helo_hostname
smtpd_helo_required = да smtpd_helo_restrictions = Permit_mynetworks разрешение_sasl_authenticated reject_invalid_helo_hostname reject_non_fqdn_helo_hostname reject_unknown_helo_hostname
Сохраните и закройте файл. Затем перезагрузите Postfix.
sudo systemctl перезагрузить постфикс
Обратите внимание, что, хотя большинство законных почтовых серверов имеют действительную запись A для имени хоста HELO/EHLO, иногда законный почтовый сервер не соответствует этому требованию. Вам нужно внести их в белый список с помощью check_helo_access
.
smtpd_helo_required = да smtpd_helo_restrictions = Permit_mynetworks разрешение_sasl_authenticated хеш check_helo_access:/etc/postfix/helo_access reject_invalid_helo_hostname reject_non_fqdn_helo_hostname reject_unknown_helo_hostname
Затем вам нужно создать /etc/postfix/helo_access
файл.
sudo nano /etc/postfix/helo_access
Внесите в белый список имя хоста HELO/EHLO законного почтового сервера, как показано ниже.
optimus-webapi-prod-2.localdomain OK va-massmail-02.rakutenmarketing.com OK
sudo postmap /etc/postfix/helo_access
И перезагрузите Postfix.
sudo systemctl перезагрузить постфикс
Хотите что-то добавить?
Вы находитесь в разделе Вики. Поэтому можно смело исключить статью и включить в нее новые данные (например, описание поддержки предлагаемых механизмов другими почтовыми серверами). Однако в большинстве случаев развиваются патологические процессы накопления и не отклоняются от основных тем — перечисления признаков
фильтрация спама на основании только
SMTP
заголовков.
Запуск локального преобразователя DNS для ускорения поиска DNS
И большинство черных списков DNS имеют ограничение на количество запросов. Запуск собственного локального преобразователя DNS для кэширования записей DNS может помочь вам не превысить лимит запросов.
Следующий шаг
Как всегда, если вы нашли этот пост полезным, то подпишитесь на нашу бесплатную рассылку новостей
чтобы получить больше советов и рекомендаций. Береги себя 🙂
Характеристики спама
- Их IP-адреса не имеют записей PTR.
- Спамер не указывает действительное имя хоста в предложении HELO/EHLO.
- Они подделывают адрес MAIL FROM.
- Обычно они не отправляют письмо повторно после неудачной доставки.
Проверяем приветствие
Итак, кто-то пожелает передать вашему серверу письмо. Передача начинается с приветствия — заголовок HELO. В HELO должно быть указано полное доменное имя (FQDN) отправителя, соответственно, если это не так — можно смело сразу же отказывать в обнаружении. В Postfix для этой недели:
reject_invalid_helo_hostname reject_non_fqdn_helo_hostname
Первый запрещает прием писем от хостов, передающих приветствие с использованием синтаксиса Author, второй — от хостов, передающих не FQDN в запросе HELO.
Однако не передают только самые глупые спамеры (и продукты MS ).
, но им, как известно, законы не писаны), в конце концов, gmail.com не составляет труда. Поэтому надо ещё немного присмотреться к HELO. Для этого служат опция
reject_unknown_helo_hostname
Которая запрещает приём писем от серверов, представляющихся адресом, для которого не существует A или MX записи.
Согласно RFC 5321
клиенты SMTP
обязаны
начинать сессию с команды EHLO
( HELO
) и представляться своим
полным доменным именем (FQDN) или
полным IP адресом в случае отсутствия доменного имени. Поскольку почтовые серверы в интернете не могут не иметь доменного имени — то все предложенные в этом разделе проверки включать можно с чистейшей совестью.
Блоклисты, или как делать не надо
Некоторые администраторы почты при фильтрации спама полагаются на так называемые DNSBL (RBL) — чёрные списки узлов, замеченных в рассылке спама. Так вот, никогда
не добавляйте никаких проверок DNSBL
на ваши почтовые сервера. Тому есть две причины: первая, и самая основная, кроется во второй части первого предложения этого раздела. В эти списки узлы заносятся совершенно беспорядочно и нет никаких гарантий, что туда не попадёт нормальный хост (на котором, может быть, в какой-то момент поселился вирус, рассылающий спам, но теперь вирус уже вылечили, или проще и гораздо реальней — один внешний IP для большой сети, в которой завёлся спамер). Вторая причина более банальна: предложенный выше механизм фильтрации гораздо эффективней любых DNSBL и при этом не полагается на непроверенные данные от третьих лиц. D NSBL, не смотря на любовь к ним многих администраторов — однозначно порочная технология, и она ни в коем случае не должна применяться в чистом виде на серверах. Для примера
.
Немного о DNS
MX записи содержат адреса серверов, на
которые должны доставляться письма для указанного домена. Однако в целях борьбы со спамом появилась технология, позволяющая указывать в DNS
также адреса серверов, с
которых могут приходить письма от указанного домена. Имя ей — Sender Policy Framework
.
Подробно вдаваться во все тонкости технологии я не буду, скажу лишь, что TXT запись
v=spf1 +mx ~all
для вашего домена скажет всем клиентам, поддерживающим проверку SPF, что письма из вашего домена вообще говоря должны приходить с серверов, указанных в MX записях. Можно сделать правило жёстче, написав вместо ~all -all
. За подробностями обращайтесь в Google и на официальный сайт SPF
.
Учтите, что письма могут идти через ретрансляторы. Многие почтовые домены в интернете являются всего лишь ретрансляторами. Поэтому жёсткий запрет в SPF записях, а так же отсеивание спама только исходя из SPF информации, являются крайне нежелательными. Однако всё же всегда прописывайте SPF запись для домена, а так же включайте проверку SPF на своих почтовых серверах.
Как настроить SPF в Postfix вам расскажет гугл, информации навалом и ошибиться нельзя, так что не будем тратить время на технический подробности.
Есть ещё пару крайне важных замечаний по поводу DNS
. Скорее всего вы знаете, что основные записи DNS
, так называемые A записи, преобразуют имя в IP адрес. Кроме них есть ещё CNAME записи, которые назначают псевдоним уже существующему имени. Именно эти два типа записей составляют основу всей системы доменных имён.
Но мало кто из пользователей знает, что есть так же обратные записи, которые преобразуют IP в доменное имя. Они носят название PTR. Так вот, есть два неписаных (строго говоря) правила, которым всё же все следуют:
Для каждой A записи должна существовать зеркальная
PTR запись, то есть по имени хоста через DNS
получаем IP, а по IP — обратно то же имя хоста.В качестве адреса в MX записи всегда должно стоять имя
(не IP!) хоста, для которого существует A запись. То есть нельзя, чтобы в MX записи стоял IP или псевдоним (CNAME).
Если вы не соблюдёте одно из этих требований — приготовьтесь к тому, что минимум четверть почты с вашего домена будет распознаваться как спам. Обусловлено это простым тезисом: благонадёжный отправитель всегда всё настраивает соблюдая правила, соответственно если правила не соблюдены — то отправителю доверять не следует, а значит и принимать от него почту — тоже.
Enable Deep Protocol Tests
- SMTP pipelining test
- Non-SMTP command test
- Bare newline test
Pipelining is an extension to the SMTP protocol. It allows the SMTP client to send multiple SMTP command at once without waiting for response from SMTP server. Postfix supports pipelining by default. To check, use telnet to connect to your mail server.
telnet mail.yourdomain.com 25
Then use the EHLO command to declare your hostname.
EHLO mail.google.com
The SMTP server’s response below indicates it support pipelining.
250-PIPELINING 250-SIZE 157286400 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
Then quit the connection.
quit
postscreen_pipelining_enable = yes postscreen_pipelining_action = enforce
postscreen_non_smtp_command_enable = yes postscreen_non_smtp_command_action = enforce
postscreen_bare_newline_enable = yes postscreen_bare_newline_action = enforce
Save and close the file. Then restart Postfix for the changes to take effect.
sudo systemctl restart postfix
Reducing SMTP Server Overload
postconf default_process_limit
default_process_limit = 100
Немного об SMTP протоколе
Электронная почта имеет много аналогий с почтой обычной. Самое для нас главное сейчас то, что вся информация на электронном «конверте» представляет из себя всего лишь два адреса: получателя и отправителя, а также штампик почтальона, конверт доставившего.
Немного отвлечёмся: представьте, что к вам придёт лицо крайне отталкивающей наружности и вручит плотно запечатанную посылку с обратным адресом «Трям из Тилимилитрямдии». Рискнёте принять и открыть? Вряд ли. Так вот, электронную почту можно тоже легко проверять и отсеивать исходя только из адресной информации, причём простор для возможных действий тут гораздо шире.
Как вам должно быть известно, почта в интеренете передаётся между почтовыми серверами по протоколу SMTP
. Любое общение по этому протоколу начинается с трёх обязательных заголовков: HELO
, MAIL FROM
и RCPT TO
. То есть перед тем, как начать передавать какие-либо данные, сервер сначала представляется (HELO), потом сообщает обратный адрес отправителя (MAIL FROM) и затем — адрес получателя (RCPT TO). Эти три заголовка и есть подпись на электронном конверте, и практически весь спам можно отсеять только исходя из их анализа. Большинство попыток передать что-то моему серверу не доходят дальше MAIL FROM, то есть письма отсеиваются ещё до фактического принятия, что значительно снижает нагрузку. То есть вместо того, чтобы открыть посылку от Тряма и обнаружить там споры сибирской язвы, я сразу посылаю почтальона куда подальше.
Итак, что же надо делать, чтобы не принимать письма, заведомо являющиеся спамом? Пойдём по порядку.
Присматриваемся к клиенту
Итак, SMTP
сессия начинается с попытки подключения от клиента. Соответственно вы получаете его IP и можете сделать кое-какие выводы только на его основании. Например, вы можете включить проверку PTR записи для клиента, для это используйте опцию
reject_unknown_client_hostname
Она требует, чтобы IP, с которого совершается соединение, резолвился в имя через PTR, а это имя резолвилось в свою очередь обратно в искомый IP.
Есть и менее жёсткое ограничение, задаваемое опцией
reject_unknown_reverse_client_hostname
В этом случае сервер будет проверять только наличие PTR записи, но не будет требовать существования соответствующей записи A.
Есть ещё один трюк. Можно заставить свой сервер отвечать клиенту не сразу, а с небольшой задержкой. Это поможет отсечь много спама, поскольку спамерам ждать некогда. В то же время нормальный SMTP
сервер никогда не порвёт соединение, не подождав хотя бы нескольких секунд. Ждать можно на любом этапе общения, но эффективней это делать сразу после получения запроса на соединение от клиента (то есть просто немного затянуть с ответом), поскольку когда вы уже начнёте общение, то задержки вряд ли заставят клиента отключиться.
Для включения таймаута служит опция
sleep seconds
Не указывайте время ожидания больше 25 секунд. По умолчанию тот же Postfix после 30-ой секунды ожидания считает, что сервер недоступен, так что разумным ограничением на используемое время задержки можно считать 20 секунд или около того.
Prevent Outgoing Spam
/^To:*fake.*/ DISCARD
sudo postmap /etc/postfix/header_checks
Reload Postfix for the change to take effect.
sudo systemctl reload postfix
Небольшие комментарии по поводу Postfix
Во-первых, как уже было сказано, все приведённые опции надо указывать в одном из четырёх *_restrictions
параметров конфигурационного файла Postfix, относящихся к заголовкам SMTP
сессии. Первый из них, smtpd_client_restrictions
отвечает за проверки на основе IP адреса клиента, оставшиеся три — smtpd_helo_restrictions
, smtpd_sender_restrictions
и smtpd_recipient_restrictions
— за соответствующие SMTP
заголовки.
При этом обратите внимание на то, что все четыре параметра применяются последовательно, и при этом если письмо отклоняется хотя бы в одном — то оно не принимается и отправителю посылается ошибка. Однако permit правила отменяют дальнейшие проверки только по данному конкретному параметру, и Postfix переходит к следующему. Поэтому если письмо успешно прошло проверку по smtpd_client_restrictions
, то оно вполне может отсеяться по smtpd_helo_restrictions
.
Кроме того, современные версии Postfix по умолчанию отклоняют письмо не раньше RCPT TO
команды. Это сделано для того, что бы в логах всегда можно было посмотреть полную информацию о письме — от кого и кому оно должно было придти. Не стоит менять такое поведение Postfix.
Ну и наконец есть возможность протестировать любую reject_*
опцию без реального отклонения писем. Для этого необходимо перед ней в соответствующем параметре конфигурационного файла Postfix указать опцию warn_if_reject
. При этом в случае срабатывания запрета в логфайл будет добавлена запись с пометкой reject_warning
, однако письмо не будет отклонено.
Подробней про возможные запрещающие опции и параметры конфигурационного файла Postfix можно почитать в официальной документации:
Если вы используете старую версию Postfix, то у вас параметры и опции могут называться немного по другому, чем приведено в этой статье. Нужные названия опций в этом случае можно найти в документации по ссылке.
Analyze Postfix Logs
Pflogsumm
is a great tool to create a summary of Postfix logs. Install it on Ubuntu with:
sudo apt install pflogsumm
On CentOS/RHEL, pflogsumm is provided by the postfix-perl-scripts
package.
sudo dnf install postfix-perl-scripts
sudo pflogsumm -d today /var/log/mail.log
Generate a report for yesterday.
sudo pflogsumm -d yesterday /var/log/mail.log
If you like to generate a report for this week.
sudo pflogsumm /var/log/mail.log
To emit “problem” reports (bounces, defers, warnings, rejects) before “normal” stats, use --problems-first
flag.
sudo pflogsumm -d today /var/log/mail.log --problems-first
To append the email from address to each listing in the reject report, use --rej-add-from
flag.
sudo pflogsumm -d today /var/log/mail.log --rej-add-from
To show the full reason in reject summaries, use --verbose-msg-detail
flag.
sudo pflogsumm -d today /var/log/mail.log --rej-add-from --verbose-msg-detail
You can add a cron job to make pflogsumm to send a report to your email address every day.
sudo crontab -e
0 4 * * * /usr/sbin/pflogsumm -d yesterday /var/log/mail.log --problems-first --rej-add-from --verbose-msg-detail -q
MAILTO=" [email protected]
" 
0 4 * * * /usr/sbin/pflogsumm -d yesterday /var/log/mail.log --problems-first --rej-add-from --verbose-msg-detail -q | mutt -s "Postfix log summary"
sudo apt install mutt
sudo dnf install mutt
URIBL_BLOCKED
X-Spam-Status: No, score=-92.2 required=5.0 tests=DATING_SPAM,DKIM_SIGNED, DKIM_VALID,HTML_FONT_LOW_CONTRAST,HTML_MESSAGE,SPF_PASS, SUBSCRIPTION_SPAM,UNPARSEABLE_RELAY,,USER_IN_WHITELIST autolearn=no autolearn_force=no version=3.4.2
host -tTXT 2.0.0.127.multi.uribl.com
2.0.0.127.multi.uribl.com descriptive text "127.0.0.1 -> Query Refused. See http://uribl.com/refused.shtml for more information [Your DNS IP: xx.xx.xx.xx]"
To fix this error, you need to run your own local DNS resolver on your mail server.
Once your local DNS resolver is up and running, test URIBL again.
хост -tTXT 2.0.0.127.multi.uribl.com
2.0.0.127.multi.uribl.com описательный текст «постоянная контрольная точка»
Отклонить электронную почту, если SMTP-клиент не имеет записи PTR
хост
хозяин 209.85.217.172
172.217.85.209.in-addr.arpa указатель доменного имени mail-ua0-f172.google.com.
подключиться с mail-ua0-f172.google.com[209.85.217.172]
Если у SMTP-клиента нет записи PTR, имя хоста будет идентифицировано как unknown
.
подключиться из неизвестного[120.41.196.220]
Чтобы отфильтровать электронные письма без записей PTR, откройте основной файл конфигурации Postfix.
sudo nano /etc/postfix/main.cf
reject_unknown_reverse_client_hostname
smtpd_sender_restrictions = Permit_mynetworks разрешение_sasl_authenticated reject_unknown_reverse_client_hostname
Сохраните и закройте файл. Затем перезапустите Postfix, чтобы изменения вступили в силу.
постфикс перезапуска sudo systemctl
Переместить спам в папку нежелательной почты
Примечание. В iRedMail это настроено «из коробки».
постфикс/lmtp
доставлено через службу голубятни
sudo apt install dovecot-sieve
Этот пакет устанавливает два файла конфигурации в /etc/dovecot/conf.d/
справочник: 90-sieve.conf
и 90-sieve-extprograms.conf
. Откройте 15-lda.conf
файл.
sudo nano /etc/dovecot/conf.d/15-lda.conf
Добавьте плагин sieve к локальному агенту доставки (LDA).
протокол лда { # Разделенный пробелами список подключаемых модулей для загрузки (по умолчанию глобальный mail_plugins). mail_plugins = сито $mail_plugins
} Сохраните и закройте файл. Если вы сможете найти 20-lmtp.conf
файл под /etc/dovecot/conf.d/
каталог, то вы также должны включить плагин sieve в этом файле, как показано ниже.
протокол lmtp { mail_plugins = сито квот
} Редактировать /etc/dovecot/conf.d/10-mail.conf
файл.
sudo nano /etc/dovecot/conf.d/10-mail.conf
mail_home = /var/vmail/%d/%n
Сохраните и закройте файл. Затем откройте 90-sieve.conf
файл.
sudo nano /etc/dovecot/conf.d/90-sieve.conf
sieve_before = /var/mail/SpamToJunk.sieve
Сохраните и закройте файл. Затем создайте скрипт sieve.
sudo nano /var/mail/SpamToJunk.sieve
требуется "файл в";
если заголовок :содержит "X-Spam-Flag" "YES"
{ файл в "Хлам"; останавливаться;
} Сохраните и закройте файл. Мы можем скомпилировать этот скрипт, чтобы он работал быстрее.
sudo sievec /var/mail/SpamToJunk.sieve
sudo systemctl перезапустить голубятню
Установить SpamAssassin
sudo apt install spamassassin spamc

sudo systemctl включить spamassassin
sudo systemctl запустить spamassassin
Грейлистинг
Иногда почтовые серверы перегружаются и не принимаются. Как вы думаете, что они реагируют на поступающие запросы в этом случае? Как ни странно так и отключается — сервер временно
недоступен, возможно позже. Ни нормальный отправитель никогда в этом случае не посчитает, что письмо доставить один нельзя со всеми вытекающими последствиями. Напротив, отправитель предпримет доставить письмо позже, поставив его в свою очередь на отправку. Этот факт можно (и без сомнения нужно использовать!) Это отсеит сразу чуть ли не весь оставшийся спам, так как спам-серверы практически никогда не предпринимают больше одного сообщения о доставке писем (иначе они бы просто «упали» от перерасхода пакетов). Эта технология называется Greylisting, и использовать ее в современных реалиях просто необходимо.
Минусом применения является небольшая (обычно не более получаса) задержка в доставке писем при первом
подключения от неизвестного хоста. То есть, если еще не известному серверу постфикса требуется передать письмо, то есть в первую очередь заявка на соединение с ошибкой о временной недоступности. Если сервер повторил попытку соединения — то письмо принимается, а сервер заносится в надёжные узлы и в дальнейшем письма от него принимаются без задержек.
Один из самых популярных способов реализации технологии грейлистинга в Postfix — это программа postgrey
, про которую можно почитать в соответствующей статье:
Postfix Reverse DNS Lookup Error on CentOS/RHEL
postfix/smtpd[14734]: connect from unknown[23.254.225.226]
To fix this, we need to copy libraries needed for reverse DNS lookup inside the chroot environment.
sudo mkdir /var/spool/postfix/lib64 sudo cp -vl /usr/lib64/libnss_* /var/spool/postfix/lib64
Then restart Postfix.
sudo systemctl restart postfix
Pregreet Test
mail postfix/postscreen[24075]: CONNECT from [156.96.118.171]:62604 to [23.254.225.226]:25 mail postfix/postscreen[24075]: 11 after 0.07 from [156.96.118.171]:62604: EHLO User\r\n mail postfix/smtpd[24076]: connect from unknown[156.96.118.171] mail postfix/smtpd[24076]: disconnect from unknown[156.96.118.171] ehlo=1 quit=1 commands=2
To reject SMTP clients that violate this rule, edit the Postfix main configuration file.
sudo nano /etc/postfix/main.cf
postscreen_greet_action = enforce
Save and close the file. Then restart Postfix.
sudo systemctl restart postfix
mail postfix/postscreen[6471]: CONNECT from [192.241.239.123]:48014 to [23.254.225.226]:25 mail postfix/postscreen[6471]: PREGREET 19 after 0 from [192.241.239.123]:48014: EHLO zg-0131a-136\r\n mail postfix/postscreen[6471]: DISCONNECT [192.241.239.123]:48014
postscreen_greet_action = drop
How to Minimize Bad User Experience
Whitelist
Postgrey ships with two whitelist files ( /etc/postgrey/whitelist_clients
and /etc/postgrey/whitelist_recipients
). The former contains a list of hostnames and the latter contains a list of recipient addresses.
postgrey[1032]: action=pass, reason=client whitelist, client_name=mail-yb0-f190.google.com
Note
: You can also see postgrey logs with this command sudo journalctl -u postgrey
.
You can add other hostnames in /etc/postgrey/whitelist_clients
file, like
facebook.com bounce.twitter.com blogger.com email.medium.com
You can get these hostnames with a tool called pflogsumm
, which I will discuss later in this article. Save and close the file, the restart Postgrey.
sudo systemctl restart postgrey
Create Another MX Hostname with the Same IP Address
You can specify more than one MX record for your domain name like below.
Record Type Name Mail Server Priority MX @ mail.yourdomain.com 0 MX @ mail2.yourdomain.com 5
The sender will try the first mail server (with priority 0). If mail.yourdomain.com rejects email by greylisting, then the sender would immediately try the second mail server (with priority 5).
Note that this requires you to set a very small delay time like 1 second in /etc/default/postgrey
(Debian & Ubuntu) or /etc/sysconfig/postgrey
(CentOS/RHEL). The delay time tells the SMTP client how many seconds to wait before sending again. If the delay time is not small enough, then the second email delivery would still be rejected.
POSTGREY_OPTS="--inet=127.0.0.1:10023 --delay=1"
OSTGREY_DELAY="--delay=1"
sudo systemctl restart postgrey
Also beware that not all mail servers would immediately try the second MX host.
Reject Email If MAIL FROM Domain Has Neither MX Record Nor A Record
sudo nano /etc/postfix/main.cf
reject_unknown_sender_domain
smtpd_sender_restrictions = permit_mynetworks permit_sasl_authenticated reject_unknown_sender_domain reject_unknown_reverse_client_hostname reject_unknown_client_hostname
Save and close the file. Then restart Postfix for the change to take effect.
sudo systemctl restart postfix
Note that I placed this restriction above other reject
restrictions. From my experience, if it is below other reject
restrictions, it won’t work. ( Maybe this only happens on my email server.)
Отправитель — а стоит ли ему доверять?
Итак, сервер успешно вам представился, следующим пунктом программы идёт адрес отправителя. Из него тоже можно извлечь массу полезной информации. Сразу хочу заметить, что адрес отправителя вовсе не обязан быть из того же домена, что и сам сервер. Это распространённое заблуждение, поэтому имейте ввиду, что это не так. Один почтовый сервер спокойно может обслуживать несколько доменов.
Однако если в адресе отправителя указан домен, который вовсе не существует, то письмо совершенно очевидно принимать не стоит. И уж точно не стоит принимать письмо, в котором в качестве обратного адреса указано нечто, вообще адресом не являющееся. За отказ в принятии для таких писем отвечают две опции:
reject_non_fqdn_sender reject_unknown_sender_domain
Первая — проверка адреса на написание, вторая — проверка существования домена.
Уже неплохо, но можно сделать кое-что ещё. Можно запросить сервер, обслуживающий указанный адрес отправителя, на предмет существования на нём пользователя с этим адресом. Действительно, вроде бы неплохая идея удостовериться в том, что обратный адрес действительно существует, иначе нам вполне может придти письмо от эфемерного фантома, о котором никто и не слыхивал.
Технически это реализуется очень просто: наш сервер открывает встречную SMTP
сессию, пытаясь послать письмо по адресу отправителя. Если удаётся успешно пройти этап посылки RCPT TO с этим адресом, т.е. если принимающий сервер вдруг не заявляет, что указанного ящика на нём нет, то считается, что присланный нам обратный адрес существует. Данные (то есть письмо) при проверке естественно никакие не передаются, сессия прерывается после RCPT TO.
За такую проверку обратного адреса отвечает опция
reject_unverified_sender
Из сказанного выше следует, что для любого адреса, с которого вы рассылаете почту из своего домена, должен существовать ящик на вашем сервере. Иначе ваши письма не пройдут проверку обратного адреса на стороне получателя и соответственно не будут доставлены по назначению. Это актуально для всяких рассылок и прочей вроде как односторонней коммуникации, не требующей ответа. Всегда создавайте ящики для всех адресов, с которых вы рассылаете почту. Если вы не хотите получать ответы на какой-то адрес, то просто посылайте письма на него в /dev/null, но принимать эти письма вы обязаны
.
У обратной проверки адреса отправителя есть пару тонкостей: во-первых настроенный на обратную проверку адреса сервер очень легко можно использовать как посредника при DoS атаках. И правда: достаточно послать на ваш сервер много писем с несуществующими отправителями из какого-нибудь одного конкретного домена, и ваш сервер запросит у обслуживающего этот домен сервера информацию о существовании всех перечисленных отправителей. Правда злоумышленник с таким же успехом может атаковать нужный ему сервер напрямую, так что реально вы вряд ли сможете сильно помочь кому-то в организации DoS атаки. Ну а во-вторых документы RFC
вообще говоря обязывают принимать почту с пустым MAIL FROM
(см. RFC 2505
).
Using Public Blacklists & Whitelists
postscreen_dnsbl_threshold = 3 postscreen_dnsbl_action = enforce postscreen_dnsbl_sites = zen.spamhaus.org*3 b.barracudacentral.org=127.0.0.[2.11]*2 bl.spameatingmonkey.net*2 bl.spamcop.net dnsbl.sorbs.net
postscreen_dnsbl_sites = zen.spamhaus.org*3 b.barracudacentral.org=127.0.0.[2.11]*2 bl.spameatingmonkey.net*2 bl.spamcop.net dnsbl.sorbs.net swl.spamhaus.org*-4, list.dnswl.org=127.[0.255].[0.255].0*-2, list.dnswl.org=127.[0.255].[0.255].1*-4, list.dnswl.org=127.[0.255].[0.255].[2.3]*-6
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, . . reject_rhsbl_helo dbl.spamhaus.org, reject_rhsbl_reverse_client dbl.spamhaus.org, reject_rhsbl_sender dbl.spamhaus.org,
Save and close the Postfix main configuration file. Then restart Postfix for the changes to take effect.
sudo systemctl restart postfix
warning: dnsblog_query: lookup error for DNS query 161.223.143.185.list.dnswl.org: Host or domain name not found. Name service error for name=161.223.143.185.list.dnswl.org type=A: Host not found, try again
If it’s on the whitelist, the message will look something like this:
postfix/dnsblog[21188]: addr xx.xx.xx.xx listed by domain list.dnswl.org as 127.0.10.0
postfix/dnsblog[11951]: addr 202.66.174.152 listed by domain list.dnswl.org as 127.0.0.255

