Amavisd-new

Устанавливаем (добавить поддержку MySQL)

cd /usr/ports/security/amavisd-new
make config
make install clean
cd /usr/local/etc
cp amavisd.conf amavisd.conf_orig

Редактируем ee amavisd.conf

$mydomain = 'example.com';
$MYHOME = '/var/amavis';

Остальное оставил по дефолту.

Для Clamav убираем комменты у абзацев

@av_scanners = (
 ['ClamAV-clamd',
 \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
 qr/\bOK$/m, qr/\bFOUND$/m,
 qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
 );

@av_scanners_backup = (
 ### http://www.clamav.net/ - backs up clamd or Mail::ClamAV
 ['ClamAV-clamscan', 'clamscan',
 "--stdout --no-summary -r --tempdir=$TEMPBASE {}",
 [0], qr/:.*\sFOUND$/m, qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
 );

Добавляем в группу clamav пользователя vscan и наоборот

pw groupmod clamav -m vscan
pw groupmod vscan -m clamav

Делаем запись

echo 'amavisd_enable="YES"' >> /etc/rc.conf

и запускаем

service amavisd start

Можно вывести лог amavis-a в отдельный файл

ee /etc/syslog.conf
local6.* /var/log/amavisd-new.log
ee /usr/local/etc/amavisd.conf
$syslog_facility = 'local6';   # Syslog facility as a string

Перезапускаем и проверяем, если есть ошибки вида

Sep 25 11:50:22 tmail amavis[56730]: (!!)TROUBLE in child_init_hook: 
BDB can't connect db env. at /var/amavis/db: BDB0087 DB_RUNRECOVERY: Fatal error, 
run database recovery, No such file or directory. at (eval 93) line 338.

то меняем в amavisd.conf

$enable_db = 0;              # enable use of BerkeleyDB/libdb (SNMP and nanny)

Для связи Clamav-Spamassassin-Postfix-Amavis добавляем после определения алиасов

ee /usr/local/etc/postfix/main.cf
# Amavisd-new
content_filter = smtp-amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

и в файле master.cf дописываем вверху строку с контент фильтром

smtp inet n - n - - smtpd
 -o content_filter=smtp-amavis:[127.0.0.1]:10024

и в самый низ (после транспорта Довекота)

#with virus-scanner amavis
smtp-amavis unix - - - - 2 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 - - - - smtpd
 -o content_filter=
 -o local_recipient_maps=
 -o relay_recipient_maps=
 -o smtpd_restriction_classes=
 -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 mynetworks_style=host
 -o mynetworks=127.0.0.0/8
 -o strict_rfc821_envelopes=yes
 -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

Если в процессе отладки возникнет необходимость полностью отключить функции защиты от СПАМа, добавьте строку

@bypass_spam_checks_maps = (1);

для полного отключения защиты от вирусов предназначена строка

@bypass_virus_checks_maps = (1);

Параметры

$sa_tag_level_deflt  - (оценка, при которой к заголовкам добавляются соответствующие X-Spam-тэги), 
$sa_tag2_level_deflt - (оценка, при которой сообщения помечаются как СПАМ), $sa_kill_level_deflt - (оценка, при которой с сообщениями выполняется предопределенные действия, в нашем случае уничтожение)

имеют достаточно гуманные значения, которые вполне меня устраивают. Чем сильнее Вы уменьшите эти числа, тем лучше будет фиксироваться СПАМ, но одновременно возрастет вероятность потери валидных сообщений. Лучше всего определить эти значения экспериментальным путем.

Example:

#Если Спам - переслать в ящик
$sa_spam_subject_tag = '***Spam*** ';
#$spam_quarantine_to = 'spam@uni.ka';
$final_spam_destiny = D_PASS; # D_PASS / D_DISCARD / D_REJECT
$final_virus_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_banned_destiny = D_BOUNCE; # (defaults to D_BOUNCE)
$final_bad_header_destiny = D_PASS;

В этом примере, при очках более 10 письмо помечается как спам (дописывается в тему ***Spam*** ) и доставляется пользователю.

Если сделать

$final_spam_destiny = D_DISCARD

то письмо пользователю не доставляется, а сохраняется в директории /var/amavis/ под именем spam***.gz (там же хранятся и virus и bounce)

и если

D_REJECT

то письмо отбрасывается.

Если раскоментировать

#$spam_quarantine_to = 'spam@uni.ka';

то письмо перешлется на ящик spam@uni.ka.

Т.е. если нужно, что бы письма, помеченные как спам, пользователю не доставлялись, а пересылались на спам ящик, то:

### Если Спам - перслать в ящик
$sa_spam_subject_tag = '***Spam*** ';
$spam_quarantine_to = 'spam@uni.ka';
$final_spam_destiny = D_DISCARD
$final_virus_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_banned_destiny = D_BOUNCE; # (defaults to D_BOUNCE)
$final_bad_header_destiny = D_PASS;
D_REJECT - отклонять письма с сообщением вида

The mail system
<acc@uni.ka>: host 127.0.0.1[127.0.0.1] said: 554 5.7.0 Reject, id=38216-01 -
    spam (in reply to end of DATA command)

Команда amavisd-release осуществляет доставку попавшего в карантин письма его получателю

# cd /var/virusmails
# amavisd-release spam-yVhEw7tY3+tr.gz
250 2.0.0 Ok, id=rel-yVhEw7tY3+tr, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 93F4561C1C

Черные и белые списки

1. вариант – мягкий блэклист
в секции добавляем нужный адрес/домен и балы (позитив – черный, негатив – белый), например:

    'clusternews@linuxnetworx.com' => -3.0,
   # soft-blacklisting (positive score)
    'sender@example.net' => 3.0,
    'spam@com' => 10.0,
   },
  ], # end of site-wide tables
});

2. вариант – черные и белые списки

   },
  ], # end of site-wide tables
});
### BEGIN White and black lists!!!
read_hash(\%whitelist_sender, '/var/amavis/whitelist');
read_hash(\%blacklist_sender, '/var/amavis/blacklist');
#read_hash(\%spam_lovers, '/var/amavis/spam_lovers');
### END
# cat /var/amavis/blacklist
 126.com
 marketing@sw.solarwinds.com
 info@twitter.com
# cat /var/amavis/whitelist
 root@domen.com
 mail.domen.com
 domen.com
 root@mail.domen.com

Эти варианты можно комбинировать.

3. вариант (еще не пробовал)

1) I created the file /etc/amavisd/whitelist
where I inserted the addresses of the senders that I wanted to whitelist, one per line.
it works also for whole domains (but without the @)

Example:

user1@example.com
 user2@example.org
 example.net
 example.eu

2) in /etc/amavisd/amavisd.conf I decommented AND modified the following section:

# This policy will perform virus checks only.
 read_hash(\%whitelist_sender, '/etc/amavisd/whitelist');
 @whitelist_sender_maps = (\%whitelist_sender);

$interface_policy{'10026'} = 'VIRUSONLY';
 $policy_bank{'VIRUSONLY'} = { # mail from the pickup daemon
 bypass_spam_checks_maps => ['@whitelist_sender_maps'], # don't spam-check this mail
 bypass_banned_checks_maps => ['@whitelist_sender_maps'], # don't banned-check this mail
 bypass_header_checks_maps => ['@whitelist_sender_maps'], # don't header-check this mail
 };

 

image_pdfimage_print

Leave a Reply

Your email address will not be published. Required fields are marked *