Thank you for reading this post, don't forget to subscribe!
Проверка синтаксиса конфигурационных файлов Postfix
postfix check
Просмотр текущих значений параметров Postfix
postconf -n | grep интересующий нас параметр
Просмотр стандартных значений параметров Postfix(значений по умолчанию)
postconf -d
Очистка почтовой очереди(удаление всех писем с очереди)
postsuper -d ALL
Очистка почтовой очереди типа deferred
postsuper -d deferred
Удаление письма с конкретным идентификатором
postsuper -d ID, где ID – идентификатор письма
Удаление писем из очереди в зависимотси от ошибки
# postqueue -p | grep -B1 'rejected: Domain not found' | grep -vE '(--|reject)' | awk '{print $1}' | postsuper -d -
# postqueue -p | grep -B1 'Host not found' | grep -vE '(--|\()' | awk '{print $1}' | postsuper -d -
# postqueue -p | grep -B1 'rejected: User unknown in local recipient table' | grep -vE '(--|\()' | awk '{print $1}' | postsuper -d -
# postqueue -p | grep -B1 'Could not complete sender verify callout' | grep -vE '(--|\()' | awk '{print $1}' | postsuper -d -
Ключик
-d
в конце скрипта, можно заменить на
-h
, если хотите сделать массовое удержание или ключик
-r
, если хотите протолкнуть письма в очереди
Файл: /etc/postfix/main.cf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# Отклонять команду ETRN smtpd_etrn_restrictions = reject # Запретить исходящую почту с наших доменов, но с несуществующих у нас адресов smtpd_reject_unlisted_sender = yes # Запретить письма для неизвестных адресов получателей <span class="re1">smtpd_reject_unlisted_recipient</span> <span class="sy0">=</span><span class="re2"> yes</span> # Отключает SMTP команду VRFY. В результате чего, невозможно определить существование определенного ящика. #Данная техника <span class="br0">(</span>применение команды VRFY<span class="br0">)</span> используется спамерами для сбора имен почтовых ящиков. <span class="re1">disable_vrfy_command</span> <span class="sy0">=</span><span class="re2"> yes</span> # Требует команды helo от подсоединившихся клиентов <span class="re1">smtpd_helo_required</span> <span class="sy0">=</span><span class="re2"> yes</span> # требует окружать полученные в MAIL FROM и RCPT TO адреса угловыми скобками <>, а также, чтобы они не содержали лишних фраз <span class="re1">strict_rfc821_envelopes</span> <span class="sy0">=</span><span class="re2"> yes</span> # Всегда отправлять EHLO вначале SMTP сессии <span class="re1">smtp_always_send_ehlo</span> <span class="sy0">=</span><span class="re2"> yes</span> # Ожидание до RCPT TO перед выяснением smtpd_client_restrictions, smtpd_helo_restrictions и smtpd_sender_restrictions # или до ETRN перед выяснением smtpd_client_restrictions, smtpd_helo_restrictions. # Такое поведение еще обеспечивает лучшую читаемость логов. <span class="re1">smtpd_delay_reject</span> <span class="sy0">=</span><span class="re2"> yes</span> # Максимальное количество ошибок, которое может сделать удаленный SMTP клиент. При превышение данного числа Postfix отсоединится. <span class="re1">smtpd_hard_error_limit</span> <span class="sy0">=</span><span class="re2"> 1</span> # Интервал времени в течение которого SMTP сервер Postfix должен послать ответ, а удаленный SMTP клиент получить запрос <span class="re1">smtpd_timeout</span> <span class="sy0">=</span><span class="re2"> 30s</span> # Интервал времени, в течение которого SMTP клиент должен послать SMTP команду HELO или EHLO и получить ответ сервера. <span class="re1">smtp_helo_timeout</span> <span class="sy0">=</span><span class="re2"> 15s</span> # Интервал времени, в течение которого SMTP клиент должен послать SMTP команду RCPT TO и получить ответ сервера. <span class="re1">smtp_rcpt_timeout</span> <span class="sy0">=</span><span class="re2"> 15s</span> # ограничение на количество одновременных получателей письма, по умолчанию <span class="nu0">1000</span> :<span class="br0">)</span> <span class="re1">smtpd_recipient_limit</span> <span class="sy0">=</span><span class="re2"> 40</span> # Время хранения в очереди боунсов <span class="re1">bounce_queue_lifetime</span> <span class="sy0">=</span><span class="re2"> 1d</span> # Время хранения в очереди обычных писем, может принимать значения: s <span class="br0">(</span>seconds<span class="br0">)</span>, m <span class="br0">(</span>minutes<span class="br0">)</span>, h <span class="br0">(</span>hours<span class="br0">)</span>, d <span class="br0">(</span>days<span class="br0">)</span>, w <span class="br0">(</span>weeks<span class="br0">)</span>. <span class="re1">maximal_queue_lifetime</span> <span class="sy0">=</span><span class="re2"> 3d</span> # Минимальный интервал повторной отправки писем <span class="br0">(</span>если получатели использую грейлистинг небольшое значение этого интервала # позволяет немного уменьшить очередь, по умолчанию здесь слишком большое значение в 4000s<span class="br0">)</span> <span class="re1">minimal_backoff_time</span> <span class="sy0">=</span><span class="re2"> 180s</span> # Максимальный интервал повторной отправки писем. Письма которые уже давно лежат в очереди будут повторно # отправляться раз в <span class="nu0">6</span> часов. По умолчанию здесь наоборот маленькое значение. <span class="re1">maximal_backoff_time</span> <span class="sy0">=</span><span class="re2"> 6h</span> # Включаем поддержку sasl аутентификации <span class="re1">smtpd_sasl_auth_enable</span> <span class="sy0">=</span><span class="re2"> yes</span> # логи <span class="re1">smtpd_sasl_authenticated_header</span> <span class="sy0">=</span><span class="re2"> yes</span> # Необходимо для корректной работы клиентов, использующих устаревший метод AUTH, например outlook express <span class="re1">broken_sasl_auth_clients</span> <span class="sy0">=</span><span class="re2"> yes</span> # Запрещаем анонимную авторизацию <span class="re1">smtpd_sasl_security_options</span> <span class="sy0">=</span><span class="re2"> noanonymous</span> #Определяем свои собственные классы запрета. <span class="re1">smtpd_restriction_classes</span> <span class="sy0">=</span><span class="re2"> greylist, bolt</span> #Класс для применения грейлистинга. Подразумевается, что на порту <span class="nu0">2501</span> интерфейса 127.0.0.1 уже запущен демон грейлистинга. <span class="re1">greylist</span> <span class="sy0">=</span><span class="re2"> check_policy_service inet:127.0.0.1:<span class="nu0">2501</span>, permit</span> #Класс для запрета отправки писем из нашего домена без авторизации. <span class="re1">bolt</span> <span class="sy0">=</span><span class="re2"> reject_plaintext_session, permit</span> <span class="re1">smtpd_client_restrictions</span> <span class="sy0">=</span> # разрешаем <span class="st0">"своим"</span> все # permit_mynetworks, # проверяем валидность хостов check_client_access regexp:/etc/postfix/client_check.pcre, # разрешаем все для тех, кто пройдет SASL-авторизацию по SMTP permit_sasl_authenticated, # отклоняем письма с хостов, которые не имеют обратной записи и обратная запись которых не совпадает с прямой reject_unknown_client_hostname, # Проверяем IP клиента на наличие его в базе rbl #reject_rbl_client http.dnsbl.sorbs.net, #reject_rbl_client soks.dnsbl.sorbs.net, #reject_rbl_client smtp.dnsbl.sorbs.net, #reject_rbl_client dul.dnsbl.sorbs.net, #reject_rbl_client, #xbl.spamhaus.org, # если все вышеперечисленное подошло, идем дальше permit <span class="re1">smtpd_helo_restrictions</span> <span class="sy0">=</span> # разрешаем все для внутренних клиентов #permit_mynetworks, # разрешаем все для тех, кто пройдет SASL-авторизацию по SMTP # permit_sasl_authenticated, # проверяем отправителей # check_sender_access pcre:/etc/postfix/stupid_programs.regex, # Отклоняем запрос, когда синтаксис HELO или EHLO невернен reject_invalid_helo_hostname, # Отклоняем запрос, когда доменное имя хоста в HELO или EHLO не является полностью удовлетворяющим требованиям RFC. reject_non_fqdn_helo_hostname, # Отклоняем запрос, когда имя хоста в HELO или EHLO не имеет A или MX днс-записи reject_unknown_helo_hostname, # Если надо, проверяем по спискам rbl, есть ли домен из HELO/EHLO в них # reject_rhsbl_helo dnsbl.sorbs.net # если все вышеперечисленное подошло, идем дальше permit <span class="re1">smtpd_sender_restrictions</span> <span class="sy0">=</span> # <span class="st0">"своим"</span> можно и <span class="st0">"просто"</span> # permit_mynetworks, # см комментарий к разделу smtpd_helo_restrictions # permit_sasl_authenticated, reject_non_fqdn_sender, # Отклоняется запрос, если Постфикс не обнаруживает окончательного места назначения для адреса отправителя и адрес в MAIL FROM не содержит A/MX днс-записиили когда имеется MX запись в виде хоста нулевой длины reject_unknown_sender_domain, # если надо заблокировать # check_sender_access pcre:/etc/postfix/block_bad.regex, # Отклоняем запрос, когда письмо на адрес из MAIL FROM отбивается или когда адрес отправителя недоступен. Проверка адресов управляется сервером проверки verify <span class="br0">(</span>см. verify<span class="br0">(</span><span class="nu0">8</span><span class="br0">)</span>, также http://www.postfix.org/ADDRESS_VERIFICATION_README.html<span class="br0">)</span> #reject_unverified_sender, # Если адрес из MAIL FROM есть в rbl, то отклоняем # reject_rhsbl_sender dnsbl.sorbs.net, # если все вышеперечисленное подошло, идем дальше permit <span class="re1">smtpd_recipient_restrictions</span> <span class="sy0">=</span> # разрешаем <span class="st0">"своим"</span> все #permit_mynetworks, permit_sasl_authenticated, # см комментарий к разделу smtpd_sender_restrictions reject_non_fqdn_recipient, reject_unknown_recipient_domain, # запрещаем принимать письма для несуществующих в системе адресов reject_unlisted_recipient, #reject_plaintext_session, # Отклоняем письмо, если домены из RCPT TO содержатся в rbl #reject_rhsbl_recipient dnsbl.sorbs.net, # Отклоняет запросы, кроме тех, что относятся к релею на наш домен, указанный в |
1 2 |
$relay_domains или для локальной доставки на домены, указанные в $mydestination, $inet_interfaces, $proxy_interfaces, $virtual_alias_domains, or $virtual_mailbox_domains, |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# без этой строки сервер становится открытым релеем. reject_unauth_destination, # отдельные правила для получателей: check_recipient_access pcre:/etc/postfix/recipient_checks.pcre, # проверяем отправителей check_sender_access pcre:/etc/postfix/sender_access.regex, #reject_plaintext_session, # если все вышеперечисленное подошло, идем дальше permit <span class="re1">smtpd_data_restrictions</span> <span class="sy0">=</span> # запрещаем выдачу писем и команд в поток, как это делают нетерпеливые спамеры reject_unauth_pipelining |
В файле /etc/postfix/client_check.pcre укажите критерии, по которым будут фильтроваться клиентские хосты, причем, желательно развёрнуто указать, что надо сделать валидным хостам, если они таки попали под ограничение.
1 2 3 4 |
/(modem|dia(l|lup)|dialin|dsl|p[cp]p|cable|catv|poo(l|les)|dhcp|client|customer|user|[0-9]{6,})(-|\.|[0-9])/ REJECT Are you spamer? Please contact with postmaster@yourdoamin.tld over correct ISP. /([0-9]{,4}\-[0-9]{,4}\-[0-9]{,4}\-[0-9]{,4})/ REJECT Are you spamer? Please contact with postmaster@yourdomain.tld over correct ISP. /([0-9]{,4}\.[0-9]{,4}\.[0-9]{,4}\.[0-9]{,4}.{4,})/ REJECT Are you spamer? Please contact with postmaster@yourdomain.tld over correct ISP. |
Файл /etc/postfix/recipient_checks.pcre служит для отдельной обработки некоторых получателей, например тех, кому не нужен грейлистинг.
1 |
/^anyone\@yourdomain\.tld$/ bolt |
Соответственно, /etc/postfix/sender_access.regex регулирует обработку для отправителей. Поскольку нам не надо свой собственный домен в серый список помещать, мы разрешим отсылать ему письма после авторизации, а остальных прогоняем через серый список:
1 2 3 |
/yourdomain.tld$/ bolt /./ greylist |