Настройка связки Postfix + amavisd-new + SpamAssassin

Пришла пора настроить какую-то спам-систему на своем сервере. Выбор пал на SpamAssasin. Что ж, приступим.

Установка и настройка amavisd-new

# cd /usr/ports/security/amavisd-new
# sudo make install clean

Тут просто огромное количество опций, которые можно выбрать перед установкой. Я особо с ними не разбирался, по этому оставил все как есть.
При установке, данный порт сразу же ставит и порт p5-Mail-SpamAssassin и Razor.

После установки, добавляем в rc.conf две строчки:

spamd_enable="YES"
amavisd_enable="YES"

После установки, в /usr/local/etc/ у нас появилось аж шесть amavisd*. Нам нужен amavisd.conf. Правми его:

use strict;

#СЕКЦИИ:
# Секция I    - Настройки демона и настройки MTA
# Секция II   - Специфичные настройки MTA
# Секция III  - Логи
# Секция IV   - Уведомления/DSN, доставка, карантин
# Секция V    - Различные списки, включая белые и черные.
# Секция VI   - Лимиты ресурсов
# Секция VII  - Внешние программы, модули и антивирусы
# Секция VIII - Отладка
# Секция IX   - Политики (динамическая смена политики)

#
# Секция I - Настройки демона и настройки MTA
#

# Устанавливаем переменную MYHOME
# Она не используется программой, а нужна лишь другим переменным ниже
$MYHOME = '/var/amavis';

# Переменная $mydomain так же никогда не используется программой напрямую
# Нужна другим переменным ниже
$mydomain = 'vcore.ru';

#$myhostname = 'host.vcore.ru';

# Указываем от какого имени и группы будет запускаться демон
$daemon_user  = 'vscan';
$daemon_group = 'vscan';

# Рабочая директория демона и временная директория,
# куда распаковывается почта
$TEMPBASE = "$MYHOME/tmp";

# Директория, где хранится база данных
$db_home = "$MYHOME/db";

# Директория, где будет работать SpamAssassin
$helpers_home = "$MYHOME/var";

# Переменная, которая указывает, где хранятся временные файлы
# SA, некоторых фильтров и т.д.
$ENV{TMPDIR} = $TEMPBASE;

# Используем BerkeleyDB/libdb (SNMP и nanny)
$enable_db = 1;
# Если $enable_db=1, то используем libdb-based кэш
$enable_global_cache = 1;

# Настройки MTA
# Настройки, которые подходят для Postfix
# Куда направлять проверенную почту
$forward_method = 'smtp:[fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][127.0.0.1]:10025';
# Куда направлять уведомления
$notify_method = $forward_method;

# Настройки Net::Server
# $max_servers должно соответствовать ширине канала вашего MTA
# Например, поле 'Max procs' в файле master.cf должно быть равно 20-ти:
# smtpd_amavis unix - - n - 2 smtp
#
# Количество процессов
$max_servers = 20;
# Завершать процесс, если он не завершил свою обработку за N секунд
$child_timeout = 20*60;

# Это быстрый путь, чтобы полностью отключить некоторые участки кода,
# которые нам не нужны (они даже не будут включены в код).
# Мы выключаем антивирус, т.к. антивирусной проверкой занимается ClamAV.
# Так же в самом низу удалим разделы @av_scanners и @av_scanners_backup
@bypass_virus_checks_maps = (1);

# Список с локальными доменами
# @local_domains_map отвечает за то, чтобы определять является ли
# отправитель локальным или нет, т.е., другими словами, является ли
# сообщение входящим или исходящим.
# Эти значения на очень многое влияют. Смотрите файл README.lookups.
@local_domains_maps = ( [".$mydomain"] );

#
# Секция II - Специфичные настройки MTA
#

# Настройки протокола клиента Amavis-Client
$unix_socketname = "$MYHOME/amavisd.sock";

# На какой порт подключается SMTP-сервер Postfix
$inet_socket_port = 10024;

# Кому разрешено подключаться к Amavisd
# Если MTA находится на этом же серваке, то используйте либо одну
# опцию, либо другую (можно сразу же две)
$inet_socket_bind = '127.0.0.1';
@inet_acl = qw( 127.0.0.1 );

# $mynetworks содержит список IP-адресов SMTP-клиентов, которые
# принадлежат внутренней сети (т.е. почта идет от них).
@mynetworks = qw( 127.0.0.0/8 192.168.0.0/16 );

#
# Секция III - Логи
#

# Если равно 1, то используем syslog, если 0 - файл
# Файл указывается в переменной $LOGFILE
$DO_SYSLOG = 1;

# Куда сохранять логи (mail, daemon, user, local0, ... local7)
$syslog_facility = 'mail';
# Уровень логов (emerg, alert, crit, err, warning, notice, info, debug)
$syslog_priority = 'crit';

# Файл, куда пишем логи, если не используем syslog
$LOGFILE = "$MYHOME/amavis.log";

# Замечание: уровени логов четко не регулируются. Этот список, чтобы иметь
# хоть примерное представление об уровне логов.
# 0: сообщения о запуске/остановке/сбоях, найденных вирусах
# 1: аргументы, передаваемые от клиентов
# 2: вывод сообщение от антивируса, тайминги
# 3: сервер, клиент
# 4: разбор сообщения
# 5: отладочная информация
$log_level = 0;

# Отключает by-message записи в логах с уровнем 0
#$log_templ = undef;
# Отключает by-recipient записи в логах с уровнем 0
$log_recip_templ = undef;

#
# Секция IV - Уведомления/DSN, доставка, карантин
#

# В какую кодировку перекодировать тело письма и заголовок
$hdr_encoding = 'windows-1251';
$bdy_encoding = 'windows-1251';

# Указываем что делать с зараженными или спам письмами
# Теперь быстренько разберемся что делает каждое значение:
#
# D_PASS почта дойдет до получателя, независимо от того какой она является
#
# D_DISCARD почта не дойдет до получателя, получатель не будет об этом уведомлен.
#  Иными словами, мы теряем письма. Для правильно настроенного почтовика
#  это нежелательно, но иногда необходимо.
#
# D_BOUNCE почта не будет доставлена получателю, уведомление о невозможности
#  доставить письмо будет выслано отправителю (уведомление вышлет amavisd)
#  Уведомление не вышлется, если название вируса совпадает со значением
#  $viruses_that_fake_sender_maps, или сообщениям из списка рассылок
#  (bult|list|junk), или для писем с уровнем спама, превышающим значение,
#  указанное в $sa_dsn_cutoff_level
#
# D_REJECT почта не будет доставлена получателю, уведомление о невозможности
#  доставить письмо должно будет выслаться SMTP или MTA, если этого
#  не произойдет, то уведомление вышлет amavisd (как в примере выше).
#  Не использовать с Postfix!!!
$final_banned_destiny   = D_BOUNCE;
$final_spam_destiny   = D_BOUNCE;
$final_bad_header_destiny = D_PASS;

# Чтобы отследить статус, присваиваемым письмам, шлем уведомление админу
$dsn_bcc = '[email protected]';

# Куда отсылать уведомление о спаме
$spam_admin = "admin@$mydomain";

# От кого шлем уведомления (может быть пустым)
$mailfrom_notify_admin    = "virusalert@$mydomain";
$mailfrom_notify_recip    = "virusalert@$mydomain";
$mailfrom_notify_spamadmin = "spam.police@$mydomain";

# Указываем заголовок письма
# Согласно rfc2822, не может быть пустым
$hdrfrom_notify_sender = ""Система фильтрации спама на $myhostname" ";

# Если не указано, то указывает адрес отправителя
$mailfrom_to_quarantine = '';

# Куда кладем зараженные письма
$QUARANTINEDIR = '/var/virusmails';

# Отсылаем копию каждого письма сюда
#$archive_quarantine_method = $notify_method;
#$archive_quarantine_to_maps = ( '[email protected]' );

# Эти опции позволяют поместить письмо в MIME-контейнер формата
# 'Content-type: multipart/mixed', где первая часть - это text/plain
# с небольшим объяснением, а вторая часть - это оригинальное письмо
$defang_virus  = 1;
$defang_banned = 1;
# Используется для плохих заголовков
$defang_by_ccat{+CC_BADH.",3"} = 1;  # NUL или CR символы в заголовке
$defang_by_ccat{+CC_BADH.",5"} = 1;  # заголовок больше чем 998 символов
$defang_by_ccat{+CC_BADH.",6"} = 1;  # ошибка синтаксиса заголовка

# Не доверять следующим файлам или распаковщикам, которые могут их распаковать
# Предоставить антивирусу оригинал вместе с распакованным файлом
@keep_decoded_original_maps = (new_RE(
  qr'^MAIL-UNDECIPHERABLE$', # перепроверить всю почту, если она содержит нерасшифровымае части
  qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i,
));

# Проверяем почту на содержание запрещенных форматов MIME
# Если находим, то запрещаем целое письмо
$banned_filename_re = new_RE(
### БЛОКИРУЕТСЯ ВЕЗДЕ
  qr'^.(exe-ms|dll)$',                   # запрещенные типы файлов, рудиментарный
### БЛОКИРОВАТЬ СЛЕДУЮЩИЕ ФАЙЛЫ, КРОМЕ ТЕХ, КОТОРЫЕ СОДЕРЖАТСЯ В UNIX АРХИВАХ:
  [ qr'^.(rpm|cpio|tar)$'       => 0 ],  # разрешать любые в Unix-оподобных архивах
  qr'..(pif|scr)$'i,                     # запрещенные расширения
### БЛОКИРОВАТЬ СЛЕДУЮЩИЕ ФАЙЛЫ, КРОМЕ ТЕХ, КОТОРЫЕ СОДЕРЖАТСЯ В АРХИВАХ
  qr'^application/x-msdownload$'i,        # блокируем эти форматы MIME
  qr'^application/x-msdos-program$'i,
  qr'^application/hta$'i,
  # блокируем некоторые двойные расширения в файлах
  qr'.[^./]*[A-Za-z][^./]*.s*(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)[.s]*$'i,
  qr'..(exe|vbs|pif|scr|cpl)$'i,             # запрещенные расширения - основные
);

#
# Секция V - Различные списки, включая белые и черные
#

# Отключаем поддержку белых и черных списков в MySQL
$sql_select_white_black_list = undef;

# Что это так делает, я так толком и не понял. Судя по всему, это приставки, которые
# добавляются к файлам, и письмам
@addr_extension_virus_maps      = ('virus');
@addr_extension_banned_maps     = ('banned');
@addr_extension_spam_maps       = ('spam');
@addr_extension_bad_header_maps = ('badh');

# Вместо того, чтобы тупо использовать белые и черные списки, мы используем систему баллов
# Чем больше очков, тем больше вероятность попасть в черный список
@score_sender_maps = ({ # список хешей получателей;
                        # все результаты суммируются

# ## таблицы получателей (ПОМЕТКА: положительные: черный список, отрицательные: белый)
# '[email protected]'  => [{'[email protected]' => 10.0}],
# '[email protected]'  => [{'.ebay.com'                 => -3.0}],
# '[email protected]'  => [{'[email protected]' => -7.0,
#                           '.cleargreen.com'           => -5.0}],

  ## глобальные опции для отправителей (символ '.' соответствует любому отправителю)
  '.' => [  # первый отправитель, соответствующий списку, определяет количество очков

   new_RE(  # таблица regexp-type, содержащая лишь спамовые выражения
    [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i         => 5.0],
    [qr'^(greatcasino|investments|lose_weight_today|market.alert)@'i=> 5.0],
    [qr'^(money2you|MyGreenCard|new.tld.registry|opt-out|opt-in)@'i=> 5.0],
    [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i   => 5.0],
    [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i  => 5.0],
    [qr'^(your_friend|greatoffers)@'i                                => 5.0],
    [qr'^(inkjetplanet|marketopt|MakeMoney)d*@'i                    => 5.0],
   ),

   { # массив из адресов
     '[email protected]'                        => -3.0,
     '[email protected]'              => -3.0,
     '[email protected]'                    => -3.0,
     '[email protected]'                  => -3.0,
     'securityfocus.com'                      => -3.0,
     '[email protected]'       => -3.0,
     '[email protected]'      => -3.0,
     '[email protected]'      => -3.0,
     '[email protected]'=> -3.0,
     '[email protected]' => -3.0,
     'spamassassin.apache.org'                => -3.0,
     '[email protected]'   => -3.0,
     '[email protected]'        => -3.0,
     '[email protected]'     => -3.0,
     '[email protected]'   => -3.0,
     '[email protected]' => -3.0,
     '[email protected]'                => -3.0,
     '[email protected]'               => -3.0,
     '[email protected]'                  => -3.0,
     '[email protected]'          => -3.0,
     '[email protected]'           => -3.0,
     '[email protected]'       => -3.0,
     '[email protected]'          => -3.0,
     '[email protected]'            => -3.0,
     '[email protected]'            => -3.0,
     '[email protected]'                => -5.0,
     '[email protected]'           => -3.0,
     'returns.groups.yahoo.com'               => -3.0,
     '[email protected]'           => -3.0,
     lc('[email protected]')    => -3.0,
     lc('[email protected]') => -5.0,

     # вероятно-плохие отправители (положительная оценка)
     '[email protected]'                     =>  3.0,
     '.example.net'                           =>  1.0,

   },
  ],  # конец глобального списка
});

# Считываем файлы, с белыми и черными списками
read_hash(%whitelist_sender, '/var/amavis/whitelist');
read_hash(%blacklist_sender, '/var/amavis/blacklist');
read_hash(%spam_lovers, '/var/amavis/spam_lovers');

#
# Секция VI - Лимиты ресурсов
#

# Количество уровней для распаковки архивов
$MAXLEVELS = 14;
# Количество файлов, которые можно извлечь из архива
$MAXFILES = 1500;

# Чтобы защититься от слишком больших писем, мы ставим ограничения
# на общий размер всех распакованных частей письма (в байтах)
$MIN_EXPANSION_QUOTA  = 100*1024;
$MAX_EXPANSION_QUOTA  = 300*1024*1024;
$MIN_EXPANSION_FACTOR = 5;
$MAX_EXPANSION_FACTOR = 500;

#
# Секция VII - Внешние программы, модули и антивирусы
#

# Указываем пути до нужных нам программ
$path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin';
# Можно так же указать саму программу
# Например, утилита file(1)
$file = 'file';

@decoders = (
  ['mail', &do_mime_decode],
  ['asc',  &do_ascii],
  ['uue',  &do_ascii],
  ['hqx',  &do_ascii],
  ['ync',  &do_ascii],
  ['F',    &do_uncompress, ['unfreeze','freeze -d','melt','fcat'] ],
  ['Z',    &do_uncompress, ['uncompress','gzip -d','zcat'] ],
  ['gz',   &do_uncompress,  'gzip -d'],
  ['gz',   &do_gunzip],
  ['bz2',  &do_uncompress,  'bzip2 -d'],
  ['lzo',  &do_uncompress,  'lzop -d'],
  ['rpm',  &do_uncompress, ['rpm2cpio.pl','rpm2cpio'] ],
  ['cpio', &do_pax_cpio,   ['pax','gcpio','cpio'] ],
  ['tar',  &do_pax_cpio,   ['pax','gcpio','cpio'] ],
  ['deb',  &do_ar,          'ar'],
  ['zip',  &do_unzip],
  ['7z',   &do_7zip,       ['7zr','7za','7z'] ],
  ['rar',  &do_unrar,      ['rar','unrar'] ],
  ['arj',  &do_unarj,      ['arj','unarj'] ],
  ['arc',  &do_arc,        ['nomarch','arc'] ],
  ['zoo',  &do_zoo,        ['zoo','unzoo'] ],
  ['lha',  &do_lha,         'lha'],
  ['cab',  &do_cabextract,  'cabextract'],
  ['tnef', &do_tnef_ext,    'tnef'],
  ['tnef', &do_tnef],
  ['exe',  &do_executable, ['rar','unrar'], 'lha', ['arj','unarj'] ],
);

# Настройки SpamAssassin

# Указываем SA, что можно выполнять онлайн тесты
$sa_local_tests_only = 0;

# Не передавать SA письма с размеров больше 64k
$sa_mail_body_size_limit = 64*1024;

# Добавляем в заголовок, что это спам, при количестве баллов больше или равном 2
$sa_tag_level_deflt = 2.0;
# Добавляем в заголовок 'spam detected'
$sa_tag2_level_deflt = 6.31;
# Отвергаем спам при количестве баллов больше или равном 6.9
$sa_kill_level_deflt = 6.9;
# Количество очков, при котором письмо просто выкидывается
$sa_dsn_cutoff_level = 9;

# Если ранее отправитель получал от получателя письмо, то с оценки
# списывается N количество баллов
$penpals_bonus_score = 8;
# Не проверять, если письмо классифицирована как супер-мега-спам
$penpals_threshold_high = $sa_kill_level_deflt;

# Что добавлять к теме сообщения, когда количество баллов привышает уровень tag2
$sa_spam_subject_tag = '***СПАМ*** ';

#
# Секция VIII - Отладка
#

# Включить отладку SA (вывод в STDERR)
$sa_debug = '1,all';

#
# Секция IX - Политики (динамическая смена политики)
#

$policy_bank{'MYNETS'} = {         # почта, отправленная из @mynetworks
  originating => 1,                # равно 1 по умолчанию, но на всякий случай, установим в 1
  os_fingerprint_method => undef,  # не опрашивать p0f для клиентов из нашей сети
};

# MTA должен сам будет перенаправить всю почту от авторизовнных пользователей или из
# внутренней сети на выделенный TCP порт (например, 10026) для фильтрации
$interface_policy{'10026'} = 'ORIGINATING';

$policy_bank{'ORIGINATING'} = {  # почта, которая была отправлена нашими пользователями
  originating => 1,              # указываем, что почта была получена от нашего smtp-клиента
  allow_disclaimers => 1,        # включаем поддержку отказов; если поддерживается, то
                                 # сообщаем админу о спаме исходящем от нашей сети
  virus_admin_maps => ["admin@$mydomain"],
  spam_admin_maps  => ["admin@$mydomain"],
  warnbadhsender   => 1,
                                 # перенаправляем на smtp сервис, обеспечивающий подписку DKIM
  forward_method => 'smtp:[127.0.0.1]:10027',
                                 # заставляем MTA конвертировать все в 7-бит
  smtpd_discard_ehlo_keywords => ['8BITMIME'],
  bypass_banned_checks_maps => [1],      # разрешаем посылать файлы с любыми именами и расширениями
  terminate_dsn_on_notify_success => 0,  # не убирать опцию NOTIFY=SUCCESS
};

$interface_policy{'SOCK'} = 'AM.PDP-SOCK';

# Использовать с amavis-release через сокет или с amavis-milter.c, созданный Petr Rehor
# (с amavis-milter.c из этого порта или старым amavis.c клиентом используйте 'AM.CL'):
$policy_bank{'AM.PDP-SOCK'} = {
  protocol => 'AM.PDP',
  auth_required_release => 0,  # не требовать secret_id для amavisd-release
};

1;  # insure a defined return

Так же удалим в этом файле два раздела @av_scanners и @av_scanners_backup (в самом конце). Антивирусной проверкой у нас занимается clamav.

Создадим следующие файл-списки: whitelist, blacklist и spam_lovers. Эти файлы будут содержать по одному адресу e-mail или имени домена на одной строчке (написанные маленькими буквами), тех получателей или отправителей, которых мы будем обрабатывать специально. Записи в фале-списке: blacklist автоматически воспринимаются как SPAM. Отправители в фал-списке: whitelist не проходят проверку на SPAM. Получатели в файл-списке: spam_lovers в основном те пользователи, которые не участвуют в системе блокировки спама:

# touch /var/amavis/blacklist
# touch /var/amavis/whitelist
# touch /var/amavis/spam_lovers

Вы можете добавить вашу учетную запись postmaster в файл-список: spam_lovers, т.к. в соответствии с RFC postmaster всегда должен принимать почту, направленную ему.

# echo [email protected] >> /var/amavis/spam_lovers

Настройка SpamAssasin

/usr/local/etc/mail/spamassassin/local.cf:

# Добавлять метку *****SPAM***** к заголовку спамовых писем
rewrite_header Subject *****SPAM*****

# Сохранять спам как MIME-вложение (message/rfc822) вместо того,
# чтобы изменять оригинал сообщения (0: выкл, 2: использовать text/plain)
report_safe 2

# Указываем какие подсети будут "доверенными", письма с которых не будут
# считаться спамом
trusted_networks 192.168.0.

# Указываем оценку, при которой письма считаются спамом
required_score 5.0

# Включаем Bayesian обучение системы
use_bayes 1
# Указываем путь до базы bayes
bayes_path /root/.spamassassin/bayes

# SA будет автоматически добавлять сообщения, распознанные
# как SPAM на 100% или на 100% как не SPAM сообщения, в
# Baysian базу данных
bayes_auto_learn 1

# Отключаем разные сетевые проверки
skip_rbl_checks         0
# Указываем SA использовать Razor версии 2
use_razor2              1
# Указываем SA использовать DCC (Distributed Checksum Clearinghouse)
use_dcc                 1
# Указываем SA не использовать Pyzor (мы его и не ставили)
use_pyzor               0

# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
# - english russian
#ok_languages            en ru

# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
#ok_locales              en ru

Настройка Razor

Что такое Razor? Razor — это достаточно большая антиспам-сеть. Чтобы начать ее использовать, нам надо зарегистрироваться в ней. Это делается двумя командами. Первая создает конфиг файл в папке /root/.razor, а вторая собственно регистрируется в сети.

# sudo razor-admin -create
# sudo razor-admin -register [email protected]

Для работы Razor надо открыть два порта:
TCP 2703 — Исходящий трафик от MTA на Razor серверы
TCP 7 — Исходящий ping от MTA на Razor серверы

Настройка и установка DCC

Ставим:

# cd /usr/ports/mail/dcc-dccd
# sudo make install clean

Добавляем запись в /etc/rc.conf:

dccifd_enable="YES"

Копируем файл /usr/local/dcc/dcc_conf.dist в /usr/local/dcc/dcc_conf. Если этого не сделать, то при старте dcc будет выскакивать сообщение:

/usr/local/etc/rc.d/dcc-start: WARNING: /usr/local/dcc/dcc_conf is not readable

Правим /usr/local/dcc/dcc_conf:

DCCIFD_ENABLE=on

Чтобы SpamAssassin запускался без ошибок и не ругался:

[60175] info: config: failed to parse line, skipping, in "/usr/local/etc/mail/spamassassin/local.cf": use_dcc 1

надо в файл /usr/local/etc/mail/spamassassin/init.pre добавить строчку:

loadplugin Mail::SpamAssassin::Plugin::DCC

Если мы поднимаем локальный сервак с «серыми листами», то для работы необходимо открыть udp порт 6277. Мы этого не делаем. Чтобы убедиться в работоспособности, выполняем команду:

# cdcc 'info'

Вы должны увидеть что-то типа:

dcc1.dcc-servers.net,-      RTT+1000 ms  anon
#  136.161.101.6,-                                   dcc-servers.net ID 102
#     100% of  1 requests ok  239.65+1000 ms RTT       100 ms queue wait
# *194.228.41.73,-                                          CTc-dcc1 ID 1030
#     100% of  1 requests ok  157.75+1000 ms RTT       100 ms queue wait
#  208.201.249.233,-                                       sonic.net ID 1117
#     100% of  1 requests ok  296.68+1000 ms RTT       100 ms queue wait

Это значит, что есть связь с серваками. Но в конце, например, у меня была запись:

127.0.0.1,-                 RTT-1000 ms  32768 3055487221y2254
#  127.0.0.1,-
#      not answering

Мы не поднимали локальный сервак. Надо эту запись удалить. Сначала в файле /usr/local/dcc/map.txt.dist закомментируем строки с 127.0.0.1, потом выполним команду:

# cdcc 'load /usr/local/dcc/map.txt.dist'

Опрашиваем серваки снова. Облом. Наш сервак все еще опрашивается. Тогда просто удалим записи:

# cdcc "delete 127.0.0.1 Greylist"
# cdcc "delete 127.0.0.1"

Все. Локальный сервак больше не опрашивается. Это хорошо.

Настраиваем Postfix

Суть всей этой цепочки такова. Postfix получает письмо, потом он отсылает его amavisd на порт 10024, amavisd делает все проверки, потом отсылает его обратно postfix на порт 10025. Чтобы такая цепочка заработала, надо отредактировать файл /usr/local/etc/postfix/master.cf. Добавляем туда следующие строчки:

amavisfeed unix    -       -       n       -       20     smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20

127.0.0.1:10025 inet n    -       n       -       -     smtpd
    -o content_filter=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o smtpd_end_of_data_restrictions=
    -o smtpd_restriction_classes=
    -o mynetworks=127.0.0.0/8
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
    -o local_header_rewrite_clients=

А в /usr/local/etc/postfix/main.cf добавим:

content_filter=amavisfeed:[127.0.0.1]:10024

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *