Сьогодн╕: 04-гру-2008 На сайт╕ працю╓ система Орфо. В╕дм╕тьте текст та натисн╕ть Ctrl-Enter Пошук на Google:
Linux.org.ua
укра╖н╕зац╕я в╕льного ПЗ
новини перекладачам правопис
словник розсилки форум
Домашня | Зм╕ни | ╤ндекс | Пошук | Перейти до 


Розд╕ли:

╤нш╕ матер╕али цього сайту:
*Служба новин @ linux.org.ua
*Укра╖н╕зац╕я програмного забезпечення
*Засоби для перекладач╕в
*Перев╕рка правопису
*Переклад з рос╕йсько╖ на укра╖нську
*Проект англо-укра╖нського словника техн╕чних терм╕н╕в
*Документац╕я
*Поштов╕ розсилки
*Форум
*Рекомендован╕ посилання
*Команда

linux.org.ua

Боротьба з╕ спамом за допомогою Sendmail

Sendmail 8.9 ╕ вище ма╓ непоган╕ вбудован╕ можливост╕ для боротьби з╕ спамом, як╕ лише необх╕дно вв╕мкнути. Ми будемо використовувати DNSBL - блокування адреси по DNS.

Налаштування sendmail за допомогою m4

Основний конф╕гурац╕йний файл для sendmail - sendmail.cf ма╓ дуже складний для розум╕ння синтаксис. Тому для спрощення процесу редагування його конф╕гурац╕╖ використову╓ться макропроцесор m4 (пакет m4) ╕ наб╕р макрос╕в (пакет sendmail-cf).

Генерування ново╖ конф╕гурац╕╖ в╕дбува╓ться дуже просто, ось рядок з мого Makefile:

sendmail.cf: sendmail.mc
        m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc >sendmail.cf

Як╕ переваги такого п╕дходу:

  • конф╕гурац╕йний файл спрощу╓ться до к╕лькох рядк╕в;
  • можна використовувати б╕бл╕отеку вже готових р╕шень;
  • можна створювати сво╖ макроси;
  • синтаксис файлу набагато прост╕ший та зрозум╕л╕ший.

Необх╕дн╕ опц╕╖, приклад конф╕гурац╕╖

Макроси, як╕ нас ц╕кавлять, м╕стяться у каталоз╕ /usr/share/sendmail-cf/feature/, Ми не будемо розглядати ╖х ус╕, розглянемо лише потр╕бн╕ нам.

Отже, нам потр╕бно налаштувати типову конф╕гурац╕ю, яка склада╓ться з поштового сервера ╕ к╕лькох комп'ютер╕в у локальн╕й мереж╕, як╕ повинн╕ мати право в╕дсилати пошту. Решт╕ такий доступ ма╓ бути заборонений. Кр╕м того, ми бажа╓мо максимально обмежити надходження спаму.

Приклад тако╖ конф╕гурац╕╖:

sendmail.mc


OSTYPE(linux)
DOMAIN(generic)

MAILER(local)
MAILER(smtp)
define(`confDOMAIN_NAME', `ourdomain.net')
define(`confDEF_USER_ID', `8:12')
define(`confPID_FILE', `/var/run/sendmail.pid')
define(`confSMTP_LOGIN_MSG', `$j Sendmail $v/$Z $b Hello, hacker - have a nice day')
define(`confTO_IDENT', `0') dnl Не опитувати identd на в╕ддален╕й машин╕

DAEMON_OPTIONS(`Name=MTA,Addr=external.ourdomain.net,Port=smtp')
DAEMON_OPTIONS(`Name=MTA,Addr=internal.ourdomain.net,Port=smtp')
DAEMON_OPTIONS(`Name=MTA,Addr=localhost,Port=smtp')

FEATURE(`no_default_msa')
FEATURE(`smrsh',`/usr/sbin/smrsh')
FEATURE(`relay_hosts_only')
FEATURE(`access_db')
FEATURE(`blacklist_recipients')

FEATURE(dnsbl) dnl Використову╓мо blackholes.mail-abuse.org
FEATURE(dnsbl, `relays.ordb.org', `"550 Your relay is filtered by relays.ordb.org "')
FEATURE(dnsbl, `xxx.yyy.zzz', `"550 Your relay is filtered by xxx.yyy.zzz "')


Розглянемо цю конф╕гурац╕ю детальн╕ше:

define(`confTO_IDENT', `0')

Цей параметр забороня╓ опитувати identd на в╕ддален╕й машин╕, так як хакери можуть п╕дробити його в╕дпов╕дь так, начебто лист в╕дсила╓ться користувачем з нашого комп'ютера чи домена ╕, в╕дпов╕дно, вс╕ наш╕ перев╕рки будуть позбавлен╕ сенсу.

FEATURE(`no_default_msa')

Починаючи з верс╕╖ 8.10, sendmail п╕дтриму╓ серв╕с MSA (Mail Submission Agent - Агент В╕дправки Пошти). Ця опц╕я забороня╓ п╕дтримку MSA. Якщо ваш поштовий кл╕╓нт п╕дтриму╓ MSA (наприклад, моя Бальза п╕дтриму╓, так як вона використову╓ libesmtp), то ви можете закоментувати цю опц╕ю, але не лякайтеся, коли команда nestat -an вам видасть, що sendmail слуха╓ 587-й порт по протоколу TCP. п╕дморгу╓

FEATURE(`smrsh',`/usr/sbin/smrsh')

Використовувати для запуску програм /usr/sbin/smrsh зам╕сть /bin/sh. Smrsh в╕др╕зня╓ться в╕д sh тим, що дозволя╓ запускати обмежений наб╕р програм, як╕ перел╕чен╕ в каталоз╕ /etc/smrsh (просто створ╕ть посилання на т╕ програми, як╕ можна запускати з sendmail). Такий п╕дх╕д дозволя╓ знизити ризик ураження системи при нев╕рному налаштуванн╕ sendmail, дуже рекоменду╓ться.

FEATURE(`relay_hosts_only')

Типово sendmail дозволя╓ пересилати пошту вс╕м комп'ютерам з домен╕в, як╕ перел╕чен╕ в /etc/mail/relay-domains. Ця опц╕я вимага╓, щоб кожен комп'ютер був перел╕чений особисто. Таким чином не можна, зав╕вши власний сервер DNS, прикинутися комп'ютером з нашого домену ╕ в╕дсилати через нас пошту.

FEATURE(`access_db')

Цей макрос вказу╓ використовувати /etc/mail/access.db для перев╕рки поштових адрес. Його формат ╕ створення розписан╕ нижче.

FEATURE(`blacklist_recipients')

Ця опц╕я вказу╓ перев╕ряти не лише адресу в╕дправника, але й адресу отримувача. Тобто можна заборонити приймати вс╕ листи адресован╕ до певно╖ адреси, не зважаючи на те, що вони приходять з р╕зних адрес (наприклад поштов╕ розсилки). Ця опц╕я корисна, коли спамер весь час зм╕ню╓ адресу в╕дправника, але залиша╓ незм╕нною адресу отримувача. Детальн╕ше розказу╓ться нижче.

FEATURE(dnsbl, `xxx.yyy.zzz', `"550 Your relay is filtered by xxx.yyy.zzz "')

Цей макрос вказу╓, який сервер DNS використовувати для перев╕рки сервера - в╕дправника пошти. Якщо пошта в╕дправля╓ться з╕ spammer.host.com ╕ sendmail отриму╓ в╕дпов╕дь, що адреса spammer.host.com.xxx.yyy.zzz знайдена, то в╕н блоку╓ вс╕ операц╕╖ з цим комп'ютером. Списки таких сервер╕в можна знайти в ╕нтернет╕.

Формат файлу /etc/mail/access

Файл /etc/mail/access.db буду╓ться за допомогою тако╖ команди:

makemap hash /etc/mail/access.db  

Але у мо╖й поставц╕ sendmail у каталоз╕ /etc/mail валя╓ться Makefile, так що мен╕ достатньо набрати make, щоб перебудувати ус╕ .db-файли, як╕ необх╕дно.

Вигляд типового файла /etc/mail/access:

bigmany@               ERROR:"550 Fucking spammer"
abuse@                 REJECT
192.168                RELAY
[192.168.13.13]        REJECT
friendhost.net         RELAY
spammer@host.net       REJECT
friend@spamhost.net    OK
spammer@host.net       ERROR:"550 Spam"
spamhost.net           REJECT

Ми вказу╓мо, що

  • вс╕ хто ма╓ IP-адресу 192.168.xxx.xxx (цей д╕апазон адрес зарезервовано для використання у локальних мережах, вони не можуть бути використан╕ у ╤нтернет╕) - можуть в╕дсилати пошту куди завгодно (не варто щось забороняти сво╓му начальству - воно не оц╕нить посм╕шка ), але користувача з 192.168.13.13 це не стосу╓ться;
  • хлопц╕ з friendhost.net наш╕ друз╕ ╕ ми дозволя╓мо ╖м пересилати пошту але лише ╖м, ╕нш╕ комп'ютери у домен╕ friendhost.net (напр. spammer.friendhost.net) не матимуть такого права, так як ми включили relay_hosts_only ;
  • spammer з host.net не ма╓ права надсилати нам пошту, про це можна сказати або за допогою ключового слова REJECT ╕ додаткового необов'язкового коментаря, або за допомогою цифрового коду в╕дпов╕д╕ ╕ коментаря;
  • заборонено доступ для ус╕х з spamhost.net, вс╕х перел╕чувати - забагато чест╕;
  • friend з spamhost.net ма╓ право надсилати нам пошту, незважаючи на те, що в╕н ма╓ таку непристойну адресу;
  • Хлопець з ╕м'ям bigmany вже вс╕х д╕став, тому ми в╕дкида╓мо будь-яку пошту, яка в╕дправлена в╕д його ╕мен╕, зв╕дк╕ля б вона не надходила.

Формат право╖ частини файлу

Ключове слово Роз'яснення
OK Приймати пошту нав╕ть коли ╕нш╕ правила забороняють це, наприклад якщо пошта в╕дправля╓ться з не╕снуючого домену.
RELAY Приймати пошту, яка адресована до або приймати пошту в╕д зазначено╖ адреси. Також це вважа╓ться як безмовний OK для решти перев╕рок.
REJECT В╕дкинути пов╕домлення з типовим пов╕домленням про помилку.
DISCARD В╕дкинути пов╕домлення використовуючи поштовий кл╕╓нт $#discard. Якщо це вказано для адреси в╕дправника, то в╕дкида╓ться усе, що отриму╓ться з ц╕╓╖ адреси. Якщо це вказано для адреси отримувача, то в╕дкида╓ться лише адреса отримувача, а не все пов╕домлення.
### будь-який текст Код помилки зг╕дно RFC 821 ╕ якийсь коментар до не╖, рекоменду╓ться вживати роширену форму з перф╕ксом ERROR, як показано нижче.
ERROR:### будь-який текст Так само.
ERROR:D.S.N:### будь-який текст Так само, але додатково вказу╓ться ще код D.S.N зг╕дно RFC 1893

Якщо вв╕мкнена опц╕я blacklist_recepients, то можна також використовувати преф╕кси:

Преф╕кс Роз'яснення
Connect: зв╕дки з'╓днання
From: в╕дправник
To: отримувач

Тобто можна написати таке:

From:spammer@host.net   REJECT
To:friend.net           RELAY
Connect:friend.net      OK
Connect:friend.net      RELAY
From:friend@host.net    OK
From:spamhost.net       REJECT

Що дозволя╓ точн╕ше розмежовувати спам ╕ нормальну пошту.

УВАГА: Порядок запис╕в нема╓ значення, sendmail використову╓ найдовше (найбл╕ьш повно задане) значення, яке зб╕га╓ться з адресою.

УВАГА: sendmail використову╓ для перев╕рки адресу з команди mail from: протоколу SMTP а не з заголовку листа, тому не зважаючи на те, що у вашому поштовому кл╕╓нт╕ буде написано From: spammer@host.net, sendmail пропускатиме так╕ листи, якщо кл╕╓нт п╕д час сес╕╖ представиться як mail from: friend@host.net. Тому див╕ться джерельний текст листа для того, щоб взнати реальну адресу в╕дправника - вона вказана у першому рядку, наприклад:

From friend@host.net Wed Oct 16 19:15:07 2002
...
From: spammer@host.net
...

Тестування конф╕гурац╕╖

Перев╕рка правил

Для перев╕рки правил можна запустити sendmail у режим╕ тестування:

sendmail -bt
> check_mail <spammer@host.net>
> check_mail <friend@spamhost.net>
> check_rcpt <spammer@host.net>
> check_rcpt <friend@spamhost.net>

Для першо╖ адреси ви ма╓те отримати у останньому рядку код помилки, для друго╖ адреси - нормальний код в╕дпов╕д╕.

Детальн╕ше про це розпов╕да╓ться тут.

Перев╕рка дозволеност╕ пересилання лист╕в

Ви можете запустити для тестування ваш sendmail з новою конф╕гурац╕╓ю на ╕ншому порту, щоб не заважати робот╕ д╕ючого, командою:

sendmail -Ctest.cf -bd -oOP=4321
╤ використати телнет чи поштовий кл╕╓нт для його тестування.
telnet localhost 4321

Для тестування, чи sendmail дозволя╓ спамерам розсилати листи через ваш сервер, можна використати дек╕лька програм:

  • Test Relay - (моя власна програма) ма╓ дуже простий синтаксис для тест╕в, ма╓ б╕льше десятка тест╕в взятих з╕ стороннього джерела.
  • ckspam - ма╓ дек╕лька тест╕в, як╕ жорстко вшит╕ у програму, перев╕ря╓ також деяк╕ ╕нш╕ реч╕.
  • rlytest - м╕стить лише один тест.

╤нш╕ методи боротьби з╕ спамом

Створення в╕ртуальних поштових адрес

Найпрост╕ший спос╕б завести соб╕ додаткову поштову адресу без зайво╖ мороки - це в╕дредагувати файл поштових псевдон╕м╕в /etc/aliases ╕ пом╕стити туди рядок приблизно такого виду:

forspam: myrealbox
forspam2: myreabox1, myrealbox2, myrealbox@another.host.net

Перший елемент у рядку - це ваш поштовий псевдон╕м, другий реальна адреса(-и). Якщо ви бажа╓те п╕дписатися на якусь розсилку але ви не певн╕, що ваша адреса не попаде у руки спамер╕в, то створ╕ть соб╕ псевдон╕м. Коли в╕н вам набридне, ви просто його витрете ╕ заведете соб╕ новий. Не забудьте п╕сля зм╕ни файлу /etc/aliases виконати команду newaliases з правами адм╕н╕стратора (root).

Використання автов╕дпов╕дача

Недол╕ком в╕ртуально╖ поштово╖ адреси ╓ те, що весь спам, який на не╖ приходитиме, автоматично пересилатиметься вам. Але це можна поправити за допомогою procmail та vacation. Суть ╕де╖ у тому, що скрипт на procmail пропуска╓ (та автоматично сорту╓) вс╕ листи, як╕ ╓ у ваш╕й адресн╕й книз╕ а на вс╕ ╕нш╕ листи в╕дпов╕да╓ vacation (програма-автов╕дпов╕дач, якою користуються коли йдуть у в╕дпустку). У лист╕, який генеру╓ться vacation можна вказати ╕ншу поштову адресу для контакту чи альтернативний метод для зв'язку (номер аськи чи моб╕лки). Я рекомендував би використовувати BSD-vacation-v2.

Використання можливост╕ REDIRECT у sendmail

Часто виника╓ необх╕дн╕сть дати свою електронну адресу для контакту у публ╕чних джерелах. Такими адресами, звичайно ж, користуються не лише звичайн╕ користувач╕ а й спамери. ╤сну╓ ефективний метод ╖х в╕дс╕ювання на основ╕ можливост╕ REDIRECT. Для цього неох╕дно створити у файл╕ поштових псевдон╕м╕в /etc/aliases запис такого виду:

contact.name: real.name@server.net.REDIRECT

Ви можете безпечно давати вашу адресу contact.name@serverSTOPSPAM.net для опубл╕кування в ╕нтернет╕. Кожен, хто над╕шле листа на цю адресу, отрима╓ у в╕дпов╕дь листа з помилкою в╕д sendmail про те, що справжня адреса користувача real.name@serverSTOPSPAM.net. Спамери, як правило, н╕коли не читають в╕дпов╕д╕ (просто тому, що вони не вказують реальну адресу в╕дправника), тому ця адреса до них не попадатиме. Натом╕сть людина, яка в╕дправила вам листа ма╓ шанс прочитати цю в╕дпов╕дь ╕ переслати листа на нову адресу. Перевагою такого п╕дходу над опрацюванням листа через procmail/formail/vacation у тому, що перев╕рка адреси зд╕йсню╓ться ще до отримання т╕ла листа, що економить траф╕к.

Не забудьте п╕сля зм╕ни файлу /etc/aliases виконати команду newaliases з правами адм╕н╕стратора (root). Перев╕рте, чи ваш sendmail.mc включа╓ рядок FEATURE(redirect).

Використання коду тимчасово╖ помилки

Можна використовувати код тимчасово╖ помилки, для того щоб змусити в╕ддалений сервер повторити спробу доставлення листа ще раз через годину. Спамерськ╕ системи, звичайно ж, себе такими речами не обтяжують ╕ повторного листа в╕д них (з такими ж параметрами, як попередн╕й) ви не дочека╓тесь.

Детальн╕ше про це розпов╕да╓ться на http://projects.puremagic.com/greylisting/ .

Ф╕льтрування за заголовками

Ви також можете в╕дкидати пошту базуючись на заголовках, наприклад багато пов╕домлень з╕ спамом м╕стять заголовок Errors-to: (принайм╕ у мо╖й колекц╕╖ таких лист╕в багато). Ось приклад, який в╕дкида╓ ус╕ листи з такими заголовками:


        LOCAL_CONFIG
        Kstorage macro


        LOCAL_RULESETS
        HErrors-to: $>CheckErrorsTo



        SCheckErrorsTo
        # Record the header presence
        R$*                     $: $(storage {ErrorsToCheck} $@ OK $) $1
        R< $+ @ $+ >            $#error $: 553 Header Error
        R$*                     $@ OK

        Scheck_eoh
        # Check the macro
        R$*                     $: < $&{ErrorsToCheck} >
        # Clear the macro for the next message
        R$*                     $: $(storage {ErrorsToCheck} $) $1
        # Has a Errors-To: header
        R< $+ >                 $#error $: 553 Header Error
        # Otherwise, relay the mail
        R$*                     $@ OK

(Не тестував ще - хто протесту╓, пов╕домте результат).

Також ф╕льтрування за заголовками легко реал╕зу╓ться за допомогою procmailformail, читайте документац╕ю на ц╕ програми.

Ф╕льтрування за вм╕стом

Для ф╕льтрування за вм╕стом можна використовувати procmail та утил╕ти для частотного анал╕зу тексту. ╥х опис виходить за рамки цього документу.

У sendmail недавно з'явилася можлив╕сть п╕дключати сво╖ утил╕ти, як╕ можуть працювати над вм╕стом листа, через libmilter ╤ПП(API). Велику к╕льк╕сть програм, як╕ працюють через цей ╤ПП, можна знайти на FreshMeat. Наприклад ╓ модуль для Перла, який дозволя╓ писати так╕ ф╕льтри на Перл╕, його можна взяти тут (або на CPAN).


Автор: Адм╕н╕стратор Володимир Л╕с╕вка
Сп╕вавтори:  

Верс╕я: 1.1

Ця стор╕нка дозволена для редагування, якщо ви знайдете помилку у текст╕ чи бажа╓те доповнити цей текст, не надсилайте мен╕ листа - виправте помилку тут (╕ негайно) чи додайте сво╖ коментар╕. Пов╕домлення про це прийде мен╕ автоматично. Не забудьте додати себе до списку сп╕вавтор╕в унизу стор╕нки.


Ваше пов╕домлення з'явиться п╕сля ц╕╓╖ форми у зворотньому порядку (нов╕ш╕ зверху)

| Редагувати | Долучити | Для друку | Зм╕ни | Б╕льше |

Тема Faq.SendmailAntiSpamHowto; Верс╕я : r1.19 - 31-лип-2005 07:25 GMT - Main.guest