Sendmail vs. spam, Linux, Операційні системи, статті

Олександр Михайлов

Кожен день в мою поштову скриньку (природно електронний) приходить кілька листів (в найгірші дні – кілька десятків) небажаної кореспонденції – спаму. Якби я був звичайним користувачем, то знайти відповідний метод боротьби з ним не становило б труднощів, але я не звичайний користувач, я адміністратор досить немаленькою мережі.

Щодня на мій поштовий сервер приходить не одна сотня небажаних листів, створюючи великий паразитний трафік і забиваючи поштові скриньки користувачів (особливо тих, хто пише свій службовий e-mail на кожному зустрічному форумі і в будь підвернулася онлайн-анкети). В цьому випадку спам-фільр необхідно встановлювати прямо на поштовому сервері організації.

Для реалізації цього ми скористаємося можливостями поштового сервера Sendmail входить в поставку FreeBSD і Linux за замовчуванням і тому найбільш часто використовуваного (порядку 75% від загального числа поштових серверів обслуговуються з помошью SendMail).

База доступу Sendmail

Починаючи з Sendmail 8.9, в настройках за замовчуванням ретрансляція листів через поштовий сервер заборонена для будь-яких вузлів і перед початком використання нового поштового сервера необхідно обов’язково встановити, хто може здійснювати ретрансляцію пошти через нього. Звичайно це тільки комп’ютери локальної мережі та вузли знаходяться в Вашому домені.

Найпростіший спосіб зробити це – використовувати базу доступу, яка знаходиться у файлі / etc / mail / access /. За допомогою бази доступу можна обмежити ретрансляцію пошти через свій сервер. Вона повинна містити список поштових адрес, доменів та ip-адрес вузлів яким дозволено чи, навпаки, заборонено відправляти пошту, використовуючи даний сервер.

При установці Sendmail разом з операційною системою (як це відбувається зазвичай з FreeBSD) конфігураційний файл sendmail.cf звичайно вже містить необхідні команди для використання бази доступу, але іноді доводиться включати цю опцію вручну.

Для цього додайте команду FEATURE(access_db)dnl в ваш файл sendmail.mc і з допомогою препроцесора m4 створіть новий конфігураційний файл sendmail.cf

m4 ./sendmail.mc > sendmail.cf

А потім скопіюйте новий файл конфігурації в каталог / etc / mail, не забувши зберегти (на всякий випадок) попередній варіант.

mv /etc/mail/sendmail.cf /etc/mail/sendmail.cf.old
cp ./sendmail.cf /etc/mail/sendmail.cf

І перезапустіть Sendmail:

killall -HUP sendmail

Файл бази доступу (/ etc / mail / access) складається з рядків містять пари значень, розділених пробілами або табуляцією. Перше значення повинно бути електронною адресою, ім’ям домену або ip-Адреc (можна задавати цілі мережі), друге – кодовим позначенням дії. Дія може бути наступним:

Типовий файл access зазвичай вигдядіт так:
# Наша локальна мережа – адреси 192.168.xx
192.168 RELAY
# Сервера, що знаходяться у вашому домені
domain.ru RELAY
# Хтось, кому дозволено користуватися нашим # Поштовим сервісом звідки завгодно
masha@mail.ru RELAY
# Домени спамерів
cyberspammer.com 550 Spam
listbuilder.com 550 Spam
spamer.com 550 Spam
# Чиясь мережу з якої активно розсилають спам.
195.161.xxx.xxx 550 Spam
# Недобре закривати весь mail.ru, тому доводиться # Закривати окремі адреси
spam@mail.ru 550 Spam

Замість повідомлення <550 Spam> можна написати REJECT, поведінка SendMail від цього не зміниться, але докладні повідомлення про помилки можуть бути корисними при аналізі лог-файлів Sendmail (/ var / log / maillog).

Для прискорення обробки листів SendMail використовує Хешування бази доступу в форматі BerkeleyDB, яке проводиться з допомогою утиліти makemap:

makemap hash /etc/mail/access.db < /etc/mail/access

Тепер пошту Вашим користувачам зможуть посилати все, крім тих доменів або ip-адрес які Ви особливо вкажете. На жаль цей спосіб ефективний лише для запобігання розсилки спаму через Ваш сервер, і для кожного відомого Вам спамерського домену або сервера, який надсилає листи Вашим користувачам доведеться писати свою рядок в / etc / mail / access, що досить трудомістко.

Блокування <Черних> списків

Для вирішення проблеми ведення списків серверів, з яких розсилається спам в SendMail 8.9 була введена підтримка <Списків DNSBL> (DNS-based blacklists). Чорні списки так званих <Відкритих реле>, Тобто серверів за допомогою яких спамери можуть безкарно розсилати мільйони листів підтримуються різними організаціями як на комерційній основі, так і у вільному доступі. Перша система такого роду була створена Полом Вікс і в даний час перетворена в комерційну службу. Вартість передплати на послуги mail-abuse.org становить близько 1500 $ в рік, будучи досить значною для маленьких компаній. На щастя існують інші, некомерційні організації, що мають схожий сервіс. Розглянемо використання подібних сервісів на прикладі системи Open Realy Database (ordb.org).

В системах заснованих на DNSBL ip адреси відкритих реле зберігаються в базі DNS сервера у вигляді записів типу А (Address) в зворотному порядку. Наприклад, якщо сервер має ip-адреса 1.2.3.4 то в базі ORDB буде такий запис:

4.3.2.1.relays.ordb.org IN A 127.0.0.2

В даному випадку наявність подібної записи вказує на те, що сервер 1.2.3.4 допускає вільне пересилання пошти ким завгодно і пошта з нього повинна бути заблокована. Адреса 127.0.0.2 використовується лише як заповнювача (т.к. поле адреси в DNS не може бути порожнім).

Для того, щоб Ваш сервер Sendmail блокував пошту з вузлів, ip адреси яких міститися в в базі даних relays.ordb.org необхідно додати наступну директиву в Ваш файл конфігурації sendmail.mc:

Для SendMail 8.10 і вище:
FEATURE(`dnsbl’, `relays.ordb.org’, `Rejected – see http://ordb.org/’)dnl
Для SendMail 8.9:
FEATURE(`rbl’, `relays.ordb.org’)dnl

A потім перезібрати і встановити новий файл sendmail.cf

Для SendMail 8.8 і нижче для додавання цієї можливості Вам доведеться вручну редагувати файл sendmail.cf (він розташовується в каталозі / etc / mail). Додайте в процедуру Basic_check_relay (вона позначена великою літерою S – SBasic_check_relay) такі правила:

R$* $: $&{client_addr}
R$-.$-.$-.$- $: &lt?&gt $(host $4.$3.$2.$1.relays.ordb.org. $: OK $)
R &lt?&gt OK $: OKSOFAR
R &lt?&gt $+ $#error $@ 5.7.1 $: Rejected – see http://ordb.org/

Зверніть увагу, що додавати ці правила потрібно після всіх існуючих правил в цій процедурі. Визначити, де закінчуються правила, поміщені в процедуру SBasic_check_relay, можна по по початку наступної процедури, ім’я якої позначено символом & ltS>, наприклад SLocal_check_mail (зазвичай саме Local_check_mail йде відразу після Basic_check_relay, якщо звичайно Sendmail не налаштований якось дуже нестандартно).

Після того, як буде готовий новий файл конфігурації, вам необхідно перезапустити SendMail:

killall -HUP sendmail 

В даний час набув поширення ще один спосіб розсилки спаму, який використовує не відкриті поштові сервера, а пряму доставку на сервер одержувача (ця можливість є в таких програмах масової розсилки, як Advanced Direct Remailer, Advanced Mass Sender). Така розсилка зазвичай проводиться з використанням анонімного Dial-Up підключення, спамер купує картку доступу в інтернет, розсилає безліч листів і безслідно зникає. Для боротьби з такого роду розсилками необхідно блокувати пошту приходить з адрес, що належать безпосередньо модемним пулів провайдерів доступу. Такого роду сервіс в російському сегменті підтримує проект Dial-Up Users List. Провайдери, що підтримують цю ініціативу вносять у загальну базу ip-адреси, що видаються при підключенні до їх модемним пулів.

Налаштування Вашого сервера для використання сервісу dul проводиться аналогічно ordb (що власне і не дивно, бо обидва використовують один і той-же механізм dnsbl), в файл sendmail.mc додайте:

Для SendMail 8.10 і вище:
FEATURE(`dnsbl’, `dul.ru’)dnl
Для SendMail 8.9:
FEATURE(`rbl’, `dul.ru’)dnl

Існує ще велика кількість подібних сервісів, про багатьох з них розказано на сайті spamhaus.org, також там підтримується система під назвою The Spamhaus Block List.

З Російських систем блокування спаму цікава DRBL – Distributed Real-time Blocking List, Вона використовує не центральний сервер, а розподілену мережу блокуючих серверів, в яку можуть вступити всі охочі. На жаль, система досить складна в установці та налаштування.

Допоміжні заходи

Крім подібних <Радикальних> методів боротьби може бути корисним застосування допоміжних засобів, таких як блокування певних поштових програм і блокування листів, не містять поля To: або містять в ньому значення (Sendmail вставляє це значення, якщо в заголовках прийнятого листа немає поля To).

Блокування листів розсилаються за допомогою програм масової розсилки можна проводити за допомогою заголовка X-Mailer. Звичайні листи містять в цьому заголовку назва поштової програми відправника. Наприклад або . Багато програм масової розсилки дозволяють довільно задавати цей заголовок або просто не вказують його. Проте в настройках за замовчуванням у багатьох програм такий заголовок присутній і багато початківці спамери його не змінюють. Так що шанс виловити спам з допомогою подібних фільтрів існує. Як показує практика зазвичай ловиться Advanced Mass Sender.

Для фільтрації відомих програм масової розсилки на підставі заголовка X-Mailer включіть в ваш файл sendmail.mc в розділ LOCAL_RULES наступні правила:

HX-Mailer: $>CheckMailer
HX-Server: $>CheckMailer

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 Em
ailer)”
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)”


# Цей Outlook має версію види: 5.0.23123244
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

Після внесення відповідних змін пересоберіте свій файл sendmail.cf і встановіть його. Ви можете обійтися без перекомпіляції конфігураційного файлу, просто додавши ці правила в кінець самого файлу конфігурації – розділ LOCAL_RULES переноситься в нього при складанні без змін.

Також можна блокувати листи з порожнім заголовком і з порожнім або неправильно сформованим полем Message-ID (воно повинно бути в форматі ідентифікатор @ домен). Швидше за все вони відправлені спамерами. Це можна зробити за допомогою наступних правил:

HTo: $>CheckTo
HCC: $>CheckTo
HMessage-ID: $>CheckMessageID
# Перевіримо поле To на “undisclosed-recipients;” або “undisclosed recipient” # Комбінації можуть бути практично довільними.
SCheckTo
R$*Recipient$* $#error $@ 5.7.1 $: “554 Unspecified Mailbox ID”
R$*Undisclosed$* $#error $@ 5.7.1 $: “554 Unspecified Mailbox ID”
# Перевіримо правильність формату поля Message-ID
SCheckMessageID
R<$+@$+> $@ < $1 @ $2 >
R$* $#error $@ 5.5.2 $: “553 Bad Message ID”

Інші методи боротьби зі спамом

Існують ще багато різних методів боротися зі спамом, використовуючи можливості Вашого сервера Sendmail. Коротко зупинюсь на деяких з них.

1. Використання Procmail

Procmail – це гнучке і потужний засіб фільтрації пошти. Procmail сопобен фільтрувати пошту по великому числу правил і може впорається і з спамом. Програма SpamBouncer використовує можливості Procmail для блокування листів за певними правилами, а саме блокуються листа:


2. Використання MilterAPI

Sendmail надає програмний інтерфейс Milter для легкого створення спеціалізованих поштових фільтрів. Цей інтерфейс дозволяє контролювати всі етапи роботи з листом, від установки з’єднання і до його розриву і може використовуватися для створення антивірусних сканерів, блокування спаму і багато чого іншого.

Проект SpamAssassin Milter Plugin використовує можливості пакета SpamAssassin для ідентифікації спаму і MilterIP для його знищення.

SpamAssasin – Система, створена виключно для ідентифікації спаму, а його блокування зазвичай здійснюється сторонніми програмами, наприклад за допомогою правил Procmail. SpamAssassin використовує набір правил, а також чорні списки DNSBL для максимально точного розпізнавання спамерів.

Висновок

У статті я свідомо не торкався моральних і юридичних аспектів проблеми спаму, описуючи рішення, що застосовуються для захисту локальних мереж і поштових доменів належать організаціям, які не є провайдерами доступу. Провайдерам ж при використанні подібних методів фільтрації спаму як мінімум необхідно розробити механізм відсилання повідомлень про блокування спаму користувачам. Це часто знімає багато можливі заперечення користувачів проти введення подібних систем фільтрації пошти.


Посилання по темі:

www.antispam.ru – Хороший проект присвячений спаму, розглядаються як загальні питання, так і конкретні рекомендації для адмінів і користувачів.
ofisp.org/antispam.html – Архів, мабуть, самого серйозного списку розсилки, присвяченого проблемам спаму. Відмінний ресурс для професіоналів, багато технічної інформації по темі.
spamhaus.org – Великий англійський проект з даної тематики, багато корисної інформації, працює з провайдерами по всьому світу.
mail-abuse.org – Комерційна служба Mail Abuse Prevention System LLC (MAPSSM), організована, Полом Вікс, піонером DNSBL.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*