7 Effective Tips for Blocking Email Spam with Postfix SMTP Server

7 Effective Tips for Blocking Email Spam with Postfix SMTP Server Хостинг
Содержание
  1. Исправление ошибки в Debian и Ubuntu
  2. Запуск собственного локального преобразователя DNS
  3. Черный список
  4. Как свести к минимуму негативное взаимодействие с пользователем
  5. Создайте вторую запись MX, указывающую на тот же IP-адрес
  6. Пропускать глубокие тесты протокола, если IP-адрес SMTP-клиента находится в общедоступном белом списке
  7. Использование Postwhite
  8. Моя конфигурация Postscreen в файле /etc/postfix/main.cf
  9. Бонусный совет для пользователей iRedMail
  10. Установить пользовательскую оценку для существующих правил
  11. Добавление собственных правил
  12. Правила заголовка
  13. Правила тела
  14. Добавить отрицательные баллы
  15. Мета-правила
  16. С ног на голову, или посмотреть с другой стороны баррикад
  17. Проверка заголовка и тела письма с помощью SpamAssassin
  18. Включить Postscreen в Postfix
  19. Измерения, используемые Postscreen против спам-ботов
  20. Проверка заголовков и тела электронной почты с помощью SMTP-сервера Postfix
  21. Проверка заголовка
  22. Проверка тела
  23. Отчет журнала Postfix
  24. Удаление заголовков исходящих писем
  25. Отклонение электронной почты, если имя хоста SMTP-клиента не имеет действительной записи A
  26. Белый список
  27. Интеграция SpamAssassin с SMTP-сервером Postfix в качестве Milter
  28. Включить ограничения имени хоста HELO/EHLO в Postfix
  29. Хотите что-то добавить?
  30. Запуск локального преобразователя DNS для ускорения поиска DNS
  31. Следующий шаг
  32. Характеристики спама
  33. Проверяем приветствие
  34. Блоклисты, или как делать не надо
  35. Немного о DNS
  36. Enable Deep Protocol Tests
  37. Reducing SMTP Server Overload
  38. Немного об SMTP протоколе
  39. Присматриваемся к клиенту
  40. Prevent Outgoing Spam
  41. Небольшие комментарии по поводу Postfix
  42. Analyze Postfix Logs
  43. URIBL_BLOCKED
  44. Отклонить электронную почту, если SMTP-клиент не имеет записи PTR
  45. Переместить спам в папку нежелательной почты
  46. Установить SpamAssassin
  47. Грейлистинг
  48. Postfix Reverse DNS Lookup Error on CentOS/RHEL
  49. Pregreet Test
  50. How to Minimize Bad User Experience
  51. Whitelist
  52. Create Another MX Hostname with the Same IP Address
  53. Reject Email If MAIL FROM Domain Has Neither MX Record Nor A Record
  54. Отправитель — а стоит ли ему доверять?
  55. 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 

postscreen whitelisting 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

postscreen public whitelist

Бонусный совет для пользователей 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 

С ног на голову, или посмотреть с другой стороны баррикад

Фильтровать спам научились, теперь же постараемся свести воедино всю информацию на тему того, что же надо делать, что бы не
попасть в спам.

Для администраторов почтовых серверов:

  1. Всегда делайте записи MX.

  2. Запись A для почтового сервера всегда должна иметь зеркальную запись PTR.

  3. Хост из HELO заголовок должен иметь запись A или MX.

  4. Всегда создавайте записи SPF (да-да, это-то как раз не обязательно, но просто правило хорошего тона).

  5. Для всех сообщений, рассылаемых из обслуживаемого домена, ящик для обратного адреса должен занимать и принимать почту.

Для тех, кто расскажет почту (из программ, с сайтов и т.д.):

  1. Всегда посылайте почту только с Существующим обратным адресом.

  2. Никогда не отправляйте почту с неподконтрольного вам домена, не проверив правила SPF для него. Например, gmail.com в момент получения позволяет отправлять письма от его имени какому-либо серверу, а вот yandex.ru и mail.ru сообщают через SPF о том, что посылка от их имени со внешних серверов должна обращать на себя пристальное внимание, что истолковывается умными спам-фильтрами как повышение уровня оценки спама для данного письма.

  3. Никогда не посылайте почту из-за неправильно настроенных 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 включен.
Читайте также:  How to add repository from shell in Debian?

Сохраните и закройте файл. (Пока не перезапускайте Postfix.)

postfix enable postscreen

Измерения, используемые 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 

postfix pcre perl compatible regular expression

Проверка заголовка

Чтобы включить проверку 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
раздел, где вы можете увидеть, по какой причине эти электронные письма отклонены и есть ли ложные срабатывания. Отказы в серых списках можно безопасно игнорировать.

best postfix spam filter

 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 может помочь вам не превысить лимит запросов.

Следующий шаг

Как всегда, если вы нашли этот пост полезным, то  подпишитесь на нашу бесплатную рассылку новостей
чтобы получить больше советов и рекомендаций. Береги себя 🙂

Характеристики спама

  1. Их IP-адреса не имеют записей PTR.
  2. Спамер не указывает действительное имя хоста в предложении HELO/EHLO.
  3. Они подделывают адрес MAIL FROM.
  4. Обычно они не отправляют письмо повторно после неудачной доставки.

Проверяем приветствие

Итак, кто-то пожелает передать вашему серверу письмо. Передача начинается с приветствия — заголовок 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. Так вот, есть два неписаных (строго говоря) правила, которым всё же все следуют:

  1. Для каждой A записи должна существовать зеркальная
    PTR запись, то есть по имени хоста через DNS
    получаем IP, а по IP — обратно то же имя хоста.

  2. В качестве адреса в 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] 
" 

postscreen deep protocol tests

 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.

Читайте также:  Ошибка 0x80004005 как исправить на ПК с Windows 10

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 

spamassassin content filter

 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 

Оцените статью
Хостинги