«Борьба со спамом, средствами самого Postfix» и «Exim4»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
Нет описания правки
 
imported>Vix
Нет описания правки
 
Строка 1: Строка 1:
По материалам статьи [http://www.mactime.ru/Environ/WebObjects/mactime.woa/wa/Main?textid=5409&level1=mactimes Антиспам без оружия, или настройка Postfix]
'''Установка и настройка'''


'''Пролог:''' спам - чума 21 века. В данной статье приведены практические рекомендации, позволяющие избавиться от этой чумы.
Прежде всего обновите локальный список пакетов с помощью вашего пакетного менеджера, например на Ubuntu и Debian это можно сделать с помощью apt:
==Имеем:==
apt-get update
стандартную конфигурацию почтовой системы,  '''Postfix + SASL + CYRUS'''.
==Задача: ==
минимизировать трафик, поступаемый вместе со спамом, а также уменшить кол-во спама, попадающего в почтовые ящики конечных пользователей.
==Требуемая политика для Postfix:==
*разрешена отправка писем с адресов внутренней сети
*разрешен прием писем снаружи для адресатов внутри
*прием писем только от существующих и корректных адресатов
*прием писем только для имеющихся на сервере адресатов
*для отправки писем FROM: *@mysite.ru с невнутренних хостов требовать обязательную авторизацию, без авторизации письма отклонять
==Применяемые технические решения:==
*разрешать внутренним ип-адресам отправлять письма на несуществующие email-адреса (рассылка рекламного отдела)
*проверять существование и корректность адреса отправителя
*проверять существование и корректность адреса получателя
*проверять корректность IP-адреса сервера передающего письм
*проверять наличие IP-адреса отправителя в списках DNSBL
*отклонять письма с IP-адресов, определяемых как динамические (dialup & adsl)
*проверять заголовок письма на предмет наличия аттачя, содержащего файлы с неразрешенными типами расширений
для “особо продвинутых” респондентов применять “белые списки”


==Настройки:==
Для установки выполните команду:
файл /etc/postfix/main.cf:
apt-get install exim4
===Часть 1 - настройка сети===
<pre>myorigin = proba.ru
mydestination = $myhostname, $myorigin,  localhost.$mydomain, localhost, $mydomain
alias_database = hash:/etc/postfix/aliases
# список подсетей, которым разрешена отправка писем, и на
# письма с которых многие проверки не распространяются.
# здесь не должно быть подсетей, которые не являются “внешними”
mynetworks = 127.0.0.0/8,
    172.16.130.0/24,
    172.16.131.0/24,
    172.16.137.0/24,
    172.16.132.0/24


relay_domains = $mydestination
Примечание: если вам необходимо использовать ACL и другие расширенные функции, то установите exim4-daemon-heavy:
apt-get install exim4-daemon-heavy


# Через кого пересылаем почту
Чтобы перейти к настройке, выполните команду:
#relayhost = [mail.qqq.ac.ru]
dpkg-reconfigure exim4-config
relayhost =
</pre>


===Часть 2 - защита от спама===
Нажмите Ok для начала настройки.
<pre># запрещаем проверку отправителем существование адреса получателя
'''РЕШЕНИЕ ПРОБЛЕМ'''
# на этапе передачи заголовка
<hr>
disable_vrfy_command = yes
* '''defer (-53): retry time not reached for any host'''
Повреждены ваши exim db Это возможно связанно с недоступостью почтового сервера какой-то время.


# разрешаем дополнительные проверки пока отправитель
'''решение:'''
# передает RCPT TO: и MAIL FROM: заголовки. Для детализации mail.log
smtpd_delay_reject = yes
########smtpd_delay_reject = no


# требуем от отправителя представиться
cd /var/spool/exim/db
# (на том, как себя представляет передающий комп,
rm -f retry retry.lockfile
# основаны многие эффективные проверки "на вшивость"
rm -f wait-remote_smtp wait-remote_smtp.lockfile
# автоматических рассылок от зомби и троянов)
service exim restart
smtpd_helo_required = yes


В дальнейшим имеет смысл: внести изменения в /etc/exim/exim.conf
в раздел


# ограничения на приветствие отправителя
begin retry
smtpd_helo_restrictions =
*                      rcpt_451    F,1h,15m
     # отсекаем кривые адреса
*                      refused     F,1h,2m
    reject_invalid_hostname,
*                      timeout_connect    F,2h,2m; F,6h,1h; F,4d,6h
    # разрешаем "своим" почти все
*                      *          F,2h,2m; G,16h,1h,1.5; F,4d,6h
    permit_mynetworks,
    # "Белый Список" должен быть впереди остальных проверок
    # отсекаем приветствия отправителя от моего имени
    # а также прописываем разрешения для "продвинутых"
    check_helo_access hash:/etc/postfix/helo_access,
    # отсекаем тех, кто представляется ИП-адресом.
    # это явное нарушение RFC, но практика показала, что это один из явных признаков спама.
    check_helo_access regexp:/etc/postfix/helo_regexp,
    # отсекаем почту с хостов (вида вроде news.intranet.),
    # не имеющих полноценного доменного
    # имени вида что-то.домен.домен_верхнего_уровня
    reject_non_fqdn_hostname,
    # требуем отправителя представиться доменным именем,
    # имеющим полноценный IP-адрес
    reject_unknown_hostname,
    # если все вышеперечисленное подошло, идем дальше
    permit


также обратите внимание на запуск с какой опцией он стартует: -q5m
* [https://www.linuxshop.ru/forum/f7/t31431--resheno-remote-smtp-defer-53-retry-time-not-reached-for-any-host-exchange-exim.html взято тут]


# ограничения, проверяемые на этапе MAIL FROM:
* Для решения проблемы с ssl в exim4.conf.template изменить:
smtpd_sender_restrictions =
...
    # принимаем почту на отправку с "чужих" хостов, если пользователь
REMOTE_SMTP_SMARTHOST_TLS_VERIFY_HOSTS = *
    # авторизовался по логину/паролю
    permit_sasl_authenticated,
    # "своим" можно и "просто"
    permit_mynetworks,
    # разрешаем или запрещаем "продвинутым"
    regexp:/etc/postfix/sender_access,
    # см комментарий к разделу smtpd_helo_restrictions
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    check_sender_access mysql:/etc/postfix/sql/access.cf,
    # если все вышеперечисленное подошло, идем дальше
    permit


# ограничения, проверяемые на этапе RCPT TO:
на
smtpd_recipient_restrictions =
...
    permit_sasl_authenticated,
REMOTE_SMTP_SMARTHOST_TLS_VERIFY_HOSTS = !*
    permit_mynetworks,
    # запрещаем выдачу писем в поток, как это делают
    # нетерпеливые спаммеры
    reject_unauth_pipelining,
    # см комментарий к разделу smtpd_sender_restrictions
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    # запрещаем или разрешаем "продвинутым"
    regexp:/etc/postfix/recipient_access,
    # !!! !!! !!! !!! !!!
    # запрещаем прием и передачу писем, не относящихся к нам
    # без этой строчки сервер становится open-relay
    reject_unauth_destination,
    # !!! !!! !!! !!! !!!
    # если все вышеперечисленное подошло, идем дальше
    permit


# проверяем, а не является (по признакам ДНС-имен) ли
* Если нужно жестко указать порт smtp, то:
# динамически-назначаемым IP-адрес хоста-отправителя (определяемого
...
# по соединению, а не по приветствию или разрешенному ДНС/IP-адресу)
dc_smarthost='mail.myhost.ru::25'
smtpd_client_restrictions =
...
    # разрешаем "своим" почти все
    permit_mynetworks,
    # прописываем адреса "продвинутых" в белом списке
    hash:/etc/postfix/client_access,
    # в файле dul_checks регулярные выражения доменных имен,
    # наиболее часто используемых для обратных зон блоков
    # динамически назначаемых адресов и
    # широкополосных клиентских подключений
    regexp:/etc/postfix/dul_checks,
    # проверяем IP-адрес отправителя по спискам DNSBL (www.ordb.org)
    reject_rbl_client list.dsbl.org,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client cbl.abuseat.org,
    reject_rbl_client psbl.surriel.com,
    reject_rbl_client spamsources.fabel.dk,
    reject_rbl_client opm.blitzed.org,
    reject_rbl_client combined.njabl.org,
    #####reject_rbl_client relays.ordb.org,
    reject_rbl_client dul.ru,
    reject_rbl_client dialup.balcklist.jippg.org,
    reject_rbl_client relays.mail-abuse.org,
    reject_rbl_client dnsbl.sorbs.net,
    # требуем определяемого обратного ДНС-имени IP-адреса хоста-client
    reject_unknown_client,
    permit


# запрещаем прием писем с вирями (по расширениям файлов) в атачах
'''ИСТОЧНИКИ:'''
header_checks = regexp:/etc/postfix/header_checks
<hr>
 
* [https://qna.habr.com/q/146009 Exim и внешний SMTP сервер, как заставить ходить почту?]
# See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
* [https://1cloud.ru/help/linux/nastrojka-exim4 Настройка EXIM4 для отправки почтовых сообщений в Linux]
#
* [https://serverspace.by/support/help/nastroika-exim-4-na-ubuntu/ Ubuntu. Настройка Exim4]
unknown_local_recipient_reject_code = 550
 
# запрещаем прием писем с картинками ведущим по ссылкам в IFRAME
body_checks = regexp:/etc/postfix/body_checks
# После добавления следующей строки, спам вообще почти пропал.
address_verify_sender = $double_bounce_sender
</pre>
===Часть 3 для abills===
Показываю тут эту часть, что бы хоть в одном месте весь файл был целиком.<br />
По описанию этой части смотри [[Настройка почтового сервера на базе Postfix + abills + mysql]].
<pre>smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
 
#Максимально допустимый размер вложения 20Мб
message_size_limit = 20971520
 
 
local_recipient_maps = $virtual_mailbox_maps
#local_recipient_maps = unix:passwd.byname $alias_maps
 
transport_maps = mysql:/etc/postfix/sql/transport.cf
 
alias_database = hash:/etc/postfix/aliases
 
virtual_alias_maps = mysql:/etc/postfix/sql/aliases.cf
virtual_gid_maps = static:1001
virtual_mailbox_base = /var/mail/virtual
 
virtual_mailbox_domains = mysql:/etc/postfix/sql/virtual_domains.cf
#virtual_mailbox_domains = mysql:/etc/postfix/sql/virtual_mailbox.cf
virtual_mailbox_maps = mysql:/etc/postfix/sql/virtual_mailbox.cf
 
# Ограничение размера под почту 500 Мб
virtual_mailbox_limit = 524288000
# Generate maildirsize files or not
virtual_create_maildirsize = yes
 
# Limits only INBOX part (usefull when
# using when you have IMAP users)
virtual_mailbox_limit_inbox = yes
 
# maps of soft disk quotas
virtual_mailbox_limit_maps = mysql:/etc/postfix/sql/virtual_mailbox_limits.cf
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = yes
 
 
# Limits only INBOX part (usefull when
# using when you have IMAP users)
# I use Courier IMAP compatibles files.
virtual_maildir_extended = yes
 
 
# I use Courier IMAP compatibles files.
virtual_maildir_extended = yes
 
# Usefull for Courier IMAP..
#virtual_maildir_suffix = Maildir/
 
virtual_minimum_uid = 1001
virtual_uid_maps = static:1001
 
virtual_mailbox_extended = yes
 
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
</pre>
===Часть 4 - описание путей, подключение антивируса===
<pre>
После подключения и настройки ClamAV следующие 2 строки надо разремить
#content_filter = scan:127.0.0.1:10025
#receive_override_options = no_address_mappings
 
debug_peer_level = 3
 
debugger_command =
        PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
        ddd $daemon_directory/$process_name $process_id & sleep 5
 
sendmail_path = /usr/sbin/sendmail.postfix
 
newaliases_path = /usr/bin/newaliases
 
mailq_path = /usr/bin/mailq
 
setgid_group = postdrop
html_directory = /usr/share/doc/postfix/html
 
manpage_directory = /usr/share/man
readme_directory = /usr/share/doc/postfix/README_FILES
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib64/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
#default_privs = nobody</pre>
===Описание файлов для раздела борьба со спамом===
теперь указанные в кач-ве параметров файлы:
 
/etc/postfix/helo_access
<pre>example.com REJECT you are not in my local networks
80.80.80.80 REJECT you are not in my local networks
dc.DOM OK broken M$ Widnows server</pre>
последняя строка иллюстрирует пример “продвинутого” респондента, чей компьютер выдает бесмысленное приветствие helo, а почту от такого респондента принимать надо.
 
/etc/postfix/dul_checks
<pre>/81-177-70-6\.donnetwork\.ru/i            OK 81-177-70-6.donnetwork.ru (@aaanet.ru)
/([0-9]*-){3}[0-9]*(\..*){2,}/i            553 SPAM_ip-add-rr-ess_networks
/([0-9]*\.){4}(.*\.){3,}.*/i              553 SPAM_ip-add-rr-ess_networks
/.*\..*\...\.comcast\.net/i                553 SPAM_comcast-net
/.*yahoobb.*\.bbtec\.net/i                553 SPAM_yahoobb_bbtec-net
/[0-9]{12}\.bbtec\.net/i                  553 SPAM_host_bbtec-net
/.*\.broadband\.hu/i                      553 SPAM_broadband-hu
/client.*\..*\..*/i                        553 SPAM_CLIENT
/cable.*\..*\..*/i                        553 SPAM_CABLE
/pool.*\..*\..*/i                          553 SPAM_POOL
/dial.*\..*\..*/i                          553 SPAM_DIAL
/ppp.*\..*\..*/i                          553 SPAM_PPP
/dslam.*\..*\..*/i                        553 SPAM_DSLAM
/dhcp.*\..*\..*/i                          553 SPAM_DHCP
/adsl\.r61\.net/i                          OK adsl.r61.net
/adsl\.infotecstt\.ru/i                    OK adsl.infotecstt.ru
/[\.-]dsl.*\..*\..*/i                      553 SPAM_DSL
/[ax]dsl.*\..*\..*/i                      553 SPAM_XDSL
/.*([0-9]*\.){4}cableonline\.com\.mx/i    553 SPAM_IP-cableonline-com-mx
/.*\.([0-9]*\.){4}ip\.holtonks\.net/i      553 SPAM_ip-holtonks-net
/([0-9]*-){3}[0-9]*\.fibertel\.com\.ar/i  553 SPAM_IP-fibertel-com-ar
/.*[0-9]*-[0-9]*\.fibertel\.com\.ar/i      553 SPAM_IP-fibertel-com-ar
/[0-9]*\.user\.veloxzone\.com\.br/i        553 SPAM_user-veloxzone-com-br
/[0-9]*\.customer\.alfanett\.no/i          553 SPAM_customer-alfanett-no
/.*([0-9]*-){3}[0-9]*\.telecom\.net\.ar/i  553 SPAM_host-telecom-net-ar
/.*(-[0-9]*){2}\.telpol\.net\.pl/i        553 SPAM_host-telpol-net-pl
/(.*\.){2}maxonline\.com\.sg/i            553 SPAM_host-maxonline-com-sg
/(.*-){2}.*\.fairgamemail\.us/i            553 SPAM_host-fairgamemail-us
/[0-9]*[0-9]*-\.wispnet\.net/i            553 SPAM_host-wispnet-net
/.*-.*(\..*){2}\.ne\.jp/i                  553 SPAM_host-ne-jp
/[0-9]*\..*\.ne\.jp/i                      553 SPAM_h09t-ne-jp
/(.*\.){3}ad\.jp/i                        553 SPAM_host-ad-jp
/(.*\.){4}revip\.asianet\.co\.th/i        553 SPAM_revip-asianet-co-th
/[0-9]*\..*\.virtua\.com\.br/i            553 SPAM_host-virtua-com-br
/([0-9]*-){3}[0-9]*\.exatt\.net/i          553 SPAM_host-exatt-net
/([0-9]*\.){4}ip\.alltel\.net/i            553 SPAM_host-ip-alltel-net
/[0-9]{6,}\.chello\.../i                  553 SPAM_host-chello
/.*[0-9]*\..*\.chello\.../i                553 SPAM_host-chello-xx
/.*\..*\.t-dialin\.net/i                  553 SPAM_t-dialin-net
/.*\..*\.t-ipconnect\.de/i                553 SPAM_t-ipconnect-de
/([0-9]*-){2,3}[0-9]*\..*\.cgocable\.net/i 553 SPAM_host-cgocable-net
/.*\..*\.shawcable\.net/i                  553 SPAM_host-shawcable-net
/p[0-9]*\.mp[0-9]*\.aaanet\.ru/i          553 SPAM_aaa_modem_pool
/([0-9]*-){2}[0-9]*\.ip\.adsl\.hu/i        553 SPAM_ip-adsl-hu
/([0-9]{1,3}\.){2}broadband4\.iol\.cz/i    553 SPAM_broadband-iol-cz
/.*\.yandex\.ru/i                          OK yandex.ru
</pre>
/etc/postfix/sender_access
<pre>/.*@aaanet\.ru/i OK
/.*@.*tele2\.../i REJECT</pre>
здесь задаем маски адресов, от кого мы хотим получать корреспонденцию несмотря на то, что домены этих адресов могут быть неопределены.<br />
Нижняя строчка также иллюстрирует блокировку распространненного спама, якобы от пользователей Tele2.
 
/etc/postfix/recipient_access
<pre>/.*@friends\.ru/i OK
/.*evil\.org/i REJECT</pre>
разрешаем отправку писем на эти адреса
 
/etc/postfix/header_checks
<pre>/^content-(type|disposition):.*name[[:space:]]*=.*\.(dll|vbs|pif|com|bat|scr|lnk)/ REJECT Prohibited attachement file name extension: $2</pre>
конечно, вирь может прийти в виде файла с расширением EXE или ZIP, но это могут быть и нормальные файлы
 
/etc/postfix/body_checks
<pre>/^ < iframe src=(3D)?cid:.* height=(3D)?0 width=(3D)?0>$/ REJECT IFRAME vulnerability exploit</pre>
 
файл /etc/postfix/helo_regexp:
<pre>/([0-9]{1,3}(\.|-)){3}[0-9]{1,3}/i      REJECT IP-able helo SPAM</pre>
запрещаем ИП-адрес в качестве HELO.
Это явное нарушение RFC, но практика показала, что это работает без сбоев.
 
после создания файлов helo_access, client_access и dul_checks необходимо выполнить
<pre>server# postmap helo_access
server# postmap client_access
server# postmap dul_checks
server# postfix check</pre>
и если все прошло без ругани, то
<pre>server# postfix reload </pre>
и можно смотреть лог-файл на предмет ошибок и наличие ошибочных срабатываний (if ever any :) ).
 
В моем примере я несколько дней изучал журналы /var/log/mail.log на предмет ложных срабатываний, и не обнаружил ни одного случая блокировки нормальной почты по вине нашего сервера (один из респондентов пытался отправлять письма с просроченного домена, записи о котором оставались в whois и были убраны из DNS). Следует отметить, что встречались очень искусные попытки мимикрии под реальные емайл-адреса, которые тем не менее легко проверялись с помощью whois-запросов.
 
В течение двух недель также выявились “продвинутые” респонденты, которые отсылали письма с адресов, не имеющих ДНС-имен или с некорректным HELO.
Для них всех были добавлены записи в “белые списки”, что также решило проблему.
 
Как показал опыт, DNSBL-проверки отсекают примерно 70% спама в процессе приема заголовков, и на этом экономится трафик не принятых тел писем спамов (примерно 20-50 kb на каждой попытке, а их может быть примерно 30-50 тыс в неделю).
 
Удивительное рядом, но на проверках HELO/EHLO отсекается большинство хитрых спаммеров, которые пытаются замаскироваться под приличный сервер(10% от общего числа писем). А на проверках по выражениям dul_checks вместе с требованием существования и корректности обратного ДНС-имени хоста-отправителя эффективно отсекаются хосты-зомби с динамическими адресами.
 
Это особенно актуально в связи с тем, что динамически выделяемые IP-адреса технически не очень эффективно попадают в DNSBL-списки, так как часто к моменту проверки на open-relay'ность некоторого адреса на нем уже “сидит” совершенно другой комп. Зато по обратным доменным именам такие адреса легко распознаются :), и это не зависит от спаммеров, а только от ISP.
 
Приведенные настройки обеспечили эффективную фильтрацию спама, уменьшив его кол-во на порядок (с 300-500 спамов в сутки до 10-15 на один ящик электронной почты).
 
Для сервера с 30 почтовыми ящиками (примерно 5 тыс принятых и 10 тыс отклоненных писем в неделю) кумулятивная экономия трафика составляет примерно 300 мб в неделю, или около полутора гигабайт в месяц.
 
Стоит отметить, что вместе с “закручиванию гаек” для проверок на этапе SMTP-соединений осуществлялись offline-меры по борьбе со спамом. Среди них анализ тенденций по журналу mail.log, отсылка spam-report'ов на www.spamcop.net и DSBL-проверки IP-адресов из спамных писем.
 
"Спам - явление социальное, и только объединившись и действуя сообща, мы сможем его победить" (Кто-то из великих)
 
* [https://miac.volmed.org.ru/wiki/index.php?title=%D0%91%D0%BE%D1%80%D1%8C%D0%B1%D0%B0_%D1%81%D0%BE_%D1%81%D0%BF%D0%B0%D0%BC%D0%BE%D0%BC,_%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B0%D0%BC%D0%B8_%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE_Postfix&action=edit '''ИСТОЧНИК''']

Версия от 19:39, 20 июля 2022

Установка и настройка

Прежде всего обновите локальный список пакетов с помощью вашего пакетного менеджера, например на Ubuntu и Debian это можно сделать с помощью apt:

apt-get update

Для установки выполните команду:

apt-get install exim4

Примечание: если вам необходимо использовать ACL и другие расширенные функции, то установите exim4-daemon-heavy:

apt-get install exim4-daemon-heavy

Чтобы перейти к настройке, выполните команду:

dpkg-reconfigure exim4-config

Нажмите Ok для начала настройки. РЕШЕНИЕ ПРОБЛЕМ


  • defer (-53): retry time not reached for any host

Повреждены ваши exim db Это возможно связанно с недоступостью почтового сервера какой-то время.

решение:

cd /var/spool/exim/db
rm -f retry retry.lockfile
rm -f wait-remote_smtp wait-remote_smtp.lockfile
service exim restart

В дальнейшим имеет смысл: внести изменения в /etc/exim/exim.conf в раздел

begin retry
*                      rcpt_451    F,1h,15m
*                      refused     F,1h,2m
*                      timeout_connect    F,2h,2m; F,6h,1h; F,4d,6h
*                      *           F,2h,2m; G,16h,1h,1.5; F,4d,6h

также обратите внимание на запуск с какой опцией он стартует: -q5m

  • Для решения проблемы с ssl в exim4.conf.template изменить:
...
REMOTE_SMTP_SMARTHOST_TLS_VERIFY_HOSTS = *

на

...
REMOTE_SMTP_SMARTHOST_TLS_VERIFY_HOSTS = !*
  • Если нужно жестко указать порт smtp, то:
...
dc_smarthost='mail.myhost.ru::25'
...

ИСТОЧНИКИ: