Фильтрафия спама в sendmail.
Установка sendmail
Сначала устанавливаем из портов sendmail c поддержкой cyrus sasl (система аутентификации). Это часть описана в
предыдущей сатье.
Настройка freebsd.mc
Итак, после установки sendmail, мы приступаем к созданию эффективной защиты от спамеров. План работы будет следующий:
- Включить фильтрацию по IP адресам
- Отключить прием почты с диал-апов.
- Отключить прием почты с открытых релеев.
- Включить фильтрование почты по специфическим заголовкам.
Включаем фильтрацию по IP адресам.
Это - самый простой пункт нашего плана.
Чтобы включить фильтрациб по IP адресам, необходимо раскомментировать строчку
FEATURE(dnsbl)
После этого sendmail станет проверять IP адрес отправителя.
Отключаем прием почты с диал-апов.
Пользователи, подключающиеся к Интернет по коммутируемым линиям, должны пользоваться почтовым сервером своего провайдера.
Для России такая база данных доступна на сервере http://www.dul.ru/, а для остального мира -
на сервере http://www.mail-abuse.org.
Механизм поверки IP адреса прост: если хост, представляющий собой обратно записанный IP адрес существует в зоне, то адрес является частью диал-ап пула.
Например, для адреса 195.42.160.237, мы получаем:
nslookup 237.160.42.195.dul.ru
Server: hosting.akmosoft.com
Address: 213.221.4.135
Name: 237.160.42.195.dul.ru
Address: 127.0.0.3
Этот IP адрес является частью диал-ап пула.
Чтобы научить sendmail проверять IP адрес, мы лоджны вставить в файл freebsd.mc, следующие строчки:
FEATURE(dnsbl,`dialups.mail-abuse.org',`550 Mail from $&{client_addr} rejected; see http://mail-abuse.org/dul/enduser.htm')
FEATURE(dnsbl, `dul.ru', `550 Use mail relays of your ISP')dnl
Пересобираем файл конфигурации sendmail и проверяем результат:
cd /etc/mail
make all
make instal
sendmail -bt -C /etc/mail/sendmail.cf
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> .D{client_addr}127.0.0.3
> Basic_check_relay <>
Basic_check_rela input: < >
Basic_check_rela returns: $# error $@ 5 . 7 . 1 $: 550 Use mail relays of your ISP
>
Отключаем прием почты с открытых релеев.
Здесь все аналогично проверке диал-апа.
Правила для фильтрафии будут такими (все пишется в одну строчку; знаком "\" указан перевод строки).
FEATURE(dnsbl,`blackholes.mail-abuse.org',`550 Mail from $&{client_addr} \
rejected; see http://mail-abuse.org/cgi-bin/lookup?$&{client_addr}')dnl
FEATURE(dnsbl,`relays.mail-abuse.org',`550 Mail from $&{client_addr} \
rejected; see http://work-rss.mail-abuse.org/cgi-bin/nph-rss?$&{client_addr}')dnl
FEATURE(dnsbl,`list.dsbl.org',`550 Mail from $&{client_addr} rejected; \
see http://dsbl.org/listing.php?$&{client_addr}')
FEATURE(dnsbl,`multihop.dsbl.org',`550 Mail from $&{client_addr} rejected; \
see http://dsbl.org/listing.php$&{client_addr}')
FEATURE(dnsbl,`unconfirmed.dsbl.org',`550 Mail from $&{client_addr} rejected;\
see http://dsbl.org/listing.php?$&{client_addr}')
FEATURE(`dnsbl', `relays.ordb.org', `Rejected - see http://ordb.org/')dnl
Пересобираем файл конфигурации sendmail и проверяем результат:
cd /etc/mail
make all
make instal
sendmail -bt -C /etc/mail/sendmail.cf
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> .D{client_addr}127.0.0.2
> Basic_check_relay <>
Basic_check_rela input: < >
Basic_check_rela returns: $# error $@ 5.7.1 $: 550 Mail from 127.0.0.2 rejected ;
see http://dsbl.org/listing.php?127.0.0.2
>
Фильтруем почту по содержимому заголовка.
Составим список слов (или частей слов), при наличии которых в теме письма мы будем отвергать прием почты.
define(`RxSPAMSUBJECT', `CASH|\ EARN|FAX|GUARANTEED|HGH|MILLION| \
MONEY|URGENT|XXX|LOLIT|PENIS|PORN|ADV|NOW!| \
TEEN|SLUT|DICK|!!!|WAREZ')
define(`RxSPAMTO', `rcptdomain|undisclosed|My\ Friend')
Добавим в файл freebsd.mc раздел "LOCAL_CONFIG", в котором перечислим наши регулярные выражения:
LOCAL_CONFIG
KSPAMSUBJECT regex -a@MATCH -f RxSPAMSUBJECT
KSPAMTO regex -a@MATCH -f RxSPAMTO
Ключ -f заставляет sendmail учитывать регистр при проверке регулярного выражения. Здесь он приведен исключительно ради примера.
(!) Важно!: Разделителями между названием регэкспов и их описанием должны служить знаки табуляции.
После этого мы должны добавить в файл freebsd.mc раздел "LOCAL_RULESETS", в котором будет производиться
проверка заголовков:
LOCAL_RULESETS
HX-Mailer: $>CheckMailer
HX-Server: $>CheckMailer
HSubject: $>CheckSubject
HTo: $>CheckTo
HMessage-ID: $>CheckMessageID
SCheckMailer
RAdvanced Direct Remailer $* $#error $@ 5.7.1 $: "554 Spam (ADR)"
RAdvanced Mass Sender $* $#error $@ 5.7.1 $: "554 Spam (AMS)"
RSpammer $* $#error $@ 5.7.1 $: "554 Spam (Spammer)"
R$* Bomber $* $#error $@ 5.7.1 $: "554 Spam (Bomber)"
RMega-Mailer $* $#error $@ 5.7.1 $: "554 Spam (Mega-Mailer)"
RMMailer $* $#error $@ 5.7.1 $: "554 Spam (MMailer)"
RMailer $* $#error $@ 5.7.1 $: "554 Spam (Mailer)"
RLigra Mailer $* $#error $@ 5.7.1 $: "554 Spam (Ligra Mailer)"
RDynamic Opt-In Emailer $* $#error $@ 5.7.1 $: "554 Spam (Dynamic Opt-In Emailer)"
R$* Group Spamer $#error $@ 5.7.1 $: "554 Spam (WE Group Spamer)"
RMail Sender $* $#error $@ 5.7.1 $: "554 Spam (Mail Sender)"
RMail Service $* $#error $@ 5.7.1 $: "554 Spam (Mail Service)"
RMailloop $* $#error $@ 5.7.1 $: "554 Spam (Mailloop)"
RPersMail $* $#error $@ 5.7.1 $: "554 Spam (PersMail)"
RLK SendIt $* $#error $@ 5.7.1 $: "554 Spam (LK SendIt)"
RWC Mail $* $#error $@ 5.7.1 $: "554 Spam (WC Mail)"
RZUBA ZUB $* $#error $@ 5.7.1 $: "554 Spam (ZUBA ZUB)"
RMailList Express $* $#error $@ 5.7.1 $: "554 Spam (MailList Express)"
RCaretop $* $#error $@ 5.7.1 $: "554 Spam (Caretop)"
RMailer Signature $#error $@ 5.7.1 $: "554 Spam (Mailer Si)"
Rnone $#error $@ 5.7.1 $: "554 Spam (none)"
RPG-MAILINGLIST $#error $@ 5.7.1 $: "554 Spam (PG-MAILINGLIST)"
R$* advcomtest $* $#error $@ 5.7.1 $: "554 Spam (advcomtest)"
Ryo yo mail $#error $@ 5.7.1 $: "554 Spam (yo yo mail)"
RZanziMailer $* $#error $@ 5.7.1 $: "554 Spam (ZanziMailer)"
RFiG$* $#error $@ 5.7.1 $: "554 Spam (FiG)"
RMicrosoft Outlook Express 5.0 $#error $@ 5.7.1 $: "554 Spam (Microsoft Outlook Express 5.0)"
RVersion 5.0 $#error $@ 5.7.1 $: "554 Spam (Version 5.0)"
Rnethack $@ OK
RZ-Mail-SGI $@ OK
RDipost $@ OK
R$- $#error $@ 5.7.1 $: "554 Spam (one-word mailer)"
R$* $: < $1 >
R< > $#error $@ 5.7.1 $: "554 Illegal header (empty header)"
R$* $@ OK
SCheckSubject
R$* $: $(SPAMSUBJECT $&{currHeader} $: OK $)
ROK $@ OK
R$* $#error $@ 5.7.1 $: "550 Yep!"
SCheckTo
R$* $: $(SPAMTO $&{currHeader} $: OK $)
ROK $@ OK
R$* $#error $@ 5.7.1 $: "550 No, thanks!"
SCheckMessageID
R<$+@$+> $@ < $1 @ $2 >
R$* $#error $@ 5.5.2 $: "553 Bad Message ID"
(!) Важно!: Здесь также разделителями между названием регэкспов и их описанием должны служить знаки табуляции.
Заключение.
В результате проделанной работы, при попытке отправить почту через открытый релей, будет выдано
сообщение о том, что почту принять невозможно, а прием почты будет отвергнут.
wizard!stellar:~/public_html$ telnet mystmp.relay.com 25
Trying XXX.YYY.ZZZ.KKK...
Connected to mystmp.relay.com.
Escape character is '^]'.
220 mystmp.relay.com ESMTP Sendmail 8.12.6/8.12.6; Wed, 15 Jan 2003 15:57:04 +0300 (MSK)
helo stellar
250 mystmp.relay.com Hello spammer.host.com [AAA.BBB.CCC.DDD], pleased to meet you
mail from:
550 5.7.1 Mail from AAA.BBB.CCC.DDD rejected;see http://dsbl.org/listing.php?AAA.BBB.CCC.DDD
quit
221 2.0.0 mystmp.relay.com closing connection
Connection closed by foreign host.
wizard!stellar:~/public_html$
Соответствующая этому событию запись в maillog будет примерно такой:
Jan 15 15:57:04 genius sm-mta[20038]: ruleset=check_relay, arg1=spammer.host.com,
arg2=AAA.BBB.CCC.DDD, relay=spammer.host.com [AAA.BBB.CCC.DDD], reject=5
50 5.7.1 Mail from AAA.BBB.CCC.DDD rejected;see http://dsbl.org/listing.php?AAA.BBB.CCC.DDD
Если проверка на отсутсвия IP адреса во всех базах данных прошла успешно, но
в самом теле письма содержится спамерское предложение или оно отослано программой-
массовым рассыльщиком, sendmail также отвергнет такое письмо:
telnet mystmp.relay.com 25
Trying XXX.YYY.ZZZ.KKK...
Connected to mystmp.relay.com.
Escape character is '^]'.
220 mystmp.relay.com ESMTP Sendmail 8.12.6/8.12.6; Wed, 15 Jan 2003 17:09:42 +0300 (MSK)
helo stellar
250 mystmp.relay.com Hello spammer.host.com [AAA.BBB.CCC.DDD], pleased to meet you
mail from:
250 2.1.0 ... Sender ok
rcpt to:
250 2.1.5 ... Recipient ok
data
354 Enter mail, end with "." on a line by itself
subject: super sexual offer!!!
from:
to:
super sexual offer!!!
.
550 5.7.1 Yep!
quit
221 2.0.0 hosting.akmosoft.com closing connection
В логах мы увидим такое сообщение:
Jan 15 17:10:46 genius sm-mta[20272]: h0FE9eWQ020272: ruleset=CheckSubject,
arg1=super sexual offer!!!, relay=spammer.host.com [AAA.BBB.CCC.DDD], reject=550
5.7.1 Yep!
Jan 15 17:10:55 genius sm-mta[20272]: h0FE9eWQ020272: from=,
size=116, class=0, nrcpts=1, msgid=<200301151410.h0FE9eWQ020272@hos
ting.akmosoft.com>, proto=SMTP, daemon=MSA, relay=spammer.host.com [AAA.BBB.CCC.DDD]
Jan 15 17:10:55 genius sm-mta[20272]: h0FE9eWQ020272: to=,
delay=00:00:45, pri=30092, stat=Yep!
© 2002 stellar.
При воспроизведении материала поставьте ссылку на http://stellar.df.ru.