EXIM + Антиспам во FreeBSD

Автор: alexyz

Ни с тем, ни с другим не сталкивался, потому и надо бы записать как получится. Для начала, надо отметить, что у exim-a весьма просто настраиваются отказы спамерам по RBL (Relay Block/Black List), то есть если спамер засветил свой ip, то он попадает в этот список после чего, от него перестают принимать письма все нормальные почтовые сервера. Система, надо сказать, отличная, но в наше время червей и троянов, которым лишь бы пробраться к к честному юзеру и рассылать спам с его девственного IP, такой защиты как RBL недостаточно. Но как один из рубежей, блокировка по RBL необходима. Итак помещаем в конфиг:

acl_check_rcpt:

accept hosts = 192.168.0.0/24 : 127.0.0.1

deny local_parts = ^.*[@%!/|] : ^\.

accept local_parts = postmaster

domains = +local_domains

require verify = sender

deny message = SPAMM !!! Access denied - $sender_host_address listed by dns.rfc-ignorant.org

dnslists = dns.rfc-ignorant.org

deny message = SPAMM !!! message from $sender_host_address rejected - see http://njabl.org/

dnslists = dnsbl.njabl.org

deny message = SPAMM !!! rejected because $sender_host_address for bad WHOIS info, see list.dsbl.org

dnslists = list.dsbl.org

deny message = SPAMM !!! rejected because $sender_host_address is in a black list at sbl.spamhaus.org

dnslists = sbl.spamhaus.org

deny message = SPAMM !!! rejected because $sender_host_address is in a black list at dul.ru

dnslists = dul.ru

deny message = SPAMM !!! Spam blocked see: http://www.spamcop.net/w3m?action=checkblock&ip=$sender_host_address

dnslists = bl.spamcop.net

deny message = SPAMM !!! rejected because $sender_host_address is in a black list at relays.ordb.org

dnslists = relays.ordb.org

deny message = SPAMM !!! rejected, $sender_host_address Open Proxy, see: $dnslist_domain $dnslist_text

dnslists = dnsbl.void.ru

accept domains = +local_domains

endpass

message = unknown user

verify = recipient

accept domains = +relay_to_domains

endpass

accept hosts = +relay_from_hosts

accept authenticated = *

deny message = relay not permitted

Этого уже будет достаточно, чтобы отсеить больше половины спама. Вторым этапом будет установка spamassassin.

root@localhost# cd /usr/ports/mail/p5-Mail-SpamAssassin

root@localhost# make config

Выбираем там:

Run spamd as root (recommended)

DomainKeys support

Build with SSL support for spamd/spamc

Add Vipul's Razor support

Add SPF query support

и после этого:

root@localhost# make install clean

Процесс установки займет какое-то время - 15-20 минут.

После установки СА копируем конфиг

#cd /usr/local/etc/mail/spamassassin

#cp local.cf.sample local.cf

Отредактируем по необходимости конфиг:

(читаем документацию: http://spamassassin.apache.org/full/3.2.x/doc/Mail_SpamAssassin_Conf.html )

#ee /usr/local/etc/mail/spamassassin/local.cf

Добавляем к заголовку текст "*****SPAM*****"

rewrite_header Subject *****SPAM*****

можно поставить 0 - с письмом, помеченным как спам ничего произойдет, а просто будет изменен заголовек. Если поставить 1 - будет создано новое письмо, в которое будет прикреплено письмо-спам. Если 2 - также будет прикреплено письмо, но теперь уже в текстовом формате, а не оригинал report_safe 1

задаем доверенные адреса: 192.168.*.* and 127.*.*.*

trusted_networks 192.168/16 127/8

После whitelist_from можно задать адреса, которые ОШИБОЧНО помечаются как спам. Можно задать адреса через пробел.

whitelist_from *@yandex.ru

whitelist_from *@mail.ru

#blacklist_from - в точности наоборот

#blacklist_from *@spam.ru

p.s. создатели не рекомендуют использовать whitelist_from/blacklist_from :

Use of this setting is not recommended, since it blindly trusts the message, which is routinely and easily forged by spammers and phish senders. The recommended solution is to instead use whitelist_auth or other authenticated whitelisting methods, or whitelist_from_rcvd. Use this to supplement the whitelist_from addresses with a check against the Received headers. The

first parameter is the address to whitelist, and the second is a string to match the relay's rDNS #whitelist_allows_relays joe@example.com example.com

#whitelist_from_rcvd *@axkit.org sergeant.org

Если кто-то из пользователей(some_user) хочет получать все письма (спамовые или нет), то:

#all_spam_to some_user@ltech.ru

Есть возможность включить Bayesian-анализатор

#use_bayes 1

#bayes_auto_learn 1

#bayes_path /usr/local/etc/mail/spamassassin/bayes/bayes

spam - это письма, которые точно являются спамом. Таких писем должно быть 50 штук в директории, скажем /usr/local/etc/mail/spamassassin/spam. ham- это неспамовые письма. Тоже нужно 50 штук. Поместим их в /usr/local/etc/mail/spamassassin/ham

Письмо не должны содержать "fwd", "re"

#bayes_min_spam_num 50

#bayes_min_ham_num 50

#bayes_ignore_header X-Spam-Flag

#bayes_ignore_header X-Spam-Status

Директивой required_score 5.0 (по-умолчанию, 5.0) устанавливается максимальное количество баллов, при котором сообщение считается спамом.

required_score 5.0

Если получаем письма на русс. или на англ. языках, то пишем ok_locales ru en. По-умолчанию стоит all(все языки)

ok_locales ru en

С конфигой СА закончили. Теперь отредактируем конфиг exim:

#ee /usr/local/etc/exim/configure

Должны быть строки

acl_smtp_data = acl_check_data

spamd_address = 127.0.0.1 783

И в секции "acl_check_data" перед clamav (если таковой имеется)добавим

warn message = X-Spam-Report: $spam_report X-Spam-Score:$spam_score X-Spam-Score-Int:$spam_score_int

condition = ${if <{$message_size}{200k}{1}{0}}

hosts = !+relay_from_hosts

spam = spamd:true

deny message = Sorry! We don't need your spam!

hosts = !+relay_from_hosts

condition = ${if >{$spam_score_int}{69}{1}{0}}

Опишем:

{$message_size}{200k} - объем спам-письма (у кого было было больше, можете поправить)

{if >{$spam_score_int}{69} - это балл, который дает СА письму, умноженный на 10 Т.к. exim не понимает десятичные числа. А в конфиге СА- мы можем использовать десятичные числа.

Итак, если письмо набирает в СА более 6.9 баллов, то exim не пропускает его: Письмо закидывается в rejectlog.

Строка hosts = !+relay_from_hosts означает, что адреса из relay_from_hosts не будут обрабатываться.

deny message = Sorry! We don't need your spam! - Если письмо-спам, отправитель получит вот такое вот сообщение:

#cat /var/log/exim/rejectlog

2007-10-07 07:55:56 1IeNFA-000PUI-5C H=(meteo.ru) [62.118.197.30]:2423 I=[87.255.7.50]:25 F= rejected after DATA: Sorry! We don't need your spam!

Envelope-from:

Envelope-to:

....

X-Spam-Report: Spam detection software, running on the system "mail.ltech.ru", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see The administrator of that system for details.

Content preview: ДАЁМ ДЕНЬГИ [495] 585-09-12 Делаем Ипотеку 9 % годовых без гражданства РФ БЕЗ работы в России, без подтверждения доходов. Ипотека в Москве - ПОМОЩЬ В ПОЛУЧЕНИИ Под залог квартиры, коттеджей за

....

X-Spam-Score:10.5

X-Spam-Score-Int:105

Где X-Spam-Score- это оценка, которую дал СА письму,а X-Spam-Score-Int=X-Spam-Score*10 - используем в конфиге exim

------------

P.S. что будет если письмо будет оценено между 5.0 < X-Spam-Score < 6.9

То адресат получит письмо с заголовком ****SPAM**** (см. конфиг СА).

------------

P.P.S. для безопасности СА запускаем под юзером spamd:

Отредактируем строку в скрипте /usr/local/etc/rc.d/sa-spamd, т.е.

добавим "-u spamd"

command_args="-u spamd -d -r ${pidfile}"

------------

P.P.P.S.

Чтобы добавить пользователей белый/черный списки редактируем конфиг СА: whitelist_from my_girl@gmail.com no_spam@wtfdomain.ru

whitelist_from *@microsoft.com

blacklist_from whoareu@goaway.com *@nafig.ru

------------

P.P.P.P.S. В дальнейшем мы настроим связку Exim + GreyList

(Exim желательно устанавливать с поддержкой SPF=Sender Policy Framework -

очень интересное решение для борьбы с подделкой адреса отправителя)

Благодарности: DarkHost(exim, GreyList, SA), yarodin (courier)...

Последнее изменение: понедельник, 29 октября 2007 г. 15:15:48

http://www.ounix.ru/index.php?page=article&id=9

Обновлено: 12.03.2015