Розд╕ли:
╤нш╕ матер╕али цього сайту:
Служба новин @ linux.org.ua
Укра╖н╕зац╕я програмного забезпечення
Засоби для перекладач╕в
Перев╕рка правопису
Переклад з рос╕йсько╖ на укра╖нську
Проект англо-укра╖нського словника техн╕чних терм╕н╕в
Документац╕я
Поштов╕ розсилки
Форум
Рекомендован╕ посилання
Команда
|
Sendmail 8.9 ╕ вище ма╓ непоган╕ вбудован╕ можливост╕ для боротьби з╕ спамом,
як╕ лише необх╕дно вв╕мкнути. Ми будемо використовувати DNSBL - блокування адреси по DNS.
Основний конф╕гурац╕йний файл для 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 "')
Розглянемо цю конф╕гурац╕ю детальн╕ше:
Цей параметр забороня╓ опитувати identd на в╕ддален╕й машин╕, так як хакери можуть п╕дробити його в╕дпов╕дь так, начебто лист в╕дсила╓ться користувачем з нашого комп'ютера чи домена ╕, в╕дпов╕дно, вс╕ наш╕ перев╕рки будуть позбавлен╕ сенсу.
Починаючи з верс╕╖ 8.10, sendmail п╕дтриму╓ серв╕с MSA (Mail Submission Agent - Агент В╕дправки Пошти). Ця опц╕я забороня╓ п╕дтримку MSA. Якщо ваш поштовий кл╕╓нт п╕дтриму╓ MSA (наприклад, моя Бальза п╕дтриму╓, так як вона використову╓ libesmtp), то ви можете закоментувати цю опц╕ю, але не лякайтеся, коли команда nestat -an вам видасть, що sendmail слуха╓ 587-й порт по протоколу TCP.
Використовувати для запуску програм /usr/sbin/smrsh зам╕сть /bin/sh. Smrsh в╕др╕зня╓ться в╕д sh тим, що дозволя╓ запускати обмежений наб╕р програм, як╕ перел╕чен╕
в каталоз╕ /etc/smrsh (просто створ╕ть посилання на т╕ програми, як╕ можна запускати з sendmail). Такий п╕дх╕д дозволя╓ знизити ризик ураження системи при нев╕рному налаштуванн╕ sendmail, дуже рекоменду╓ться.
Типово sendmail дозволя╓ пересилати пошту вс╕м комп'ютерам з домен╕в, як╕ перел╕чен╕ в /etc/mail/relay-domains. Ця опц╕я вимага╓, щоб кожен комп'ютер був перел╕чений особисто. Таким чином не можна, зав╕вши власний сервер DNS, прикинутися комп'ютером з нашого домену ╕ в╕дсилати через нас пошту.
Цей макрос вказу╓ використовувати /etc/mail/access.db для перев╕рки поштових адрес.
Його формат ╕ створення розписан╕ нижче.
Ця опц╕я вказу╓ перев╕ряти не лише адресу в╕дправника, але й адресу отримувача. Тобто можна заборонити приймати вс╕ листи адресован╕ до певно╖ адреси, не зважаючи на те, що вони приходять з р╕зних адрес (наприклад поштов╕ розсилки). Ця опц╕я корисна, коли спамер весь час зм╕ню╓ адресу в╕дправника, але залиша╓ незм╕нною адресу отримувача. Детальн╕ше розказу╓ться нижче.
Цей макрос вказу╓, який сервер DNS використовувати для перев╕рки сервера - в╕дправника пошти. Якщо пошта в╕дправля╓ться з╕ spammer.host.com ╕ sendmail отриму╓ в╕дпов╕дь, що адреса spammer.host.com.xxx.yyy.zzz знайдена, то в╕н блоку╓ вс╕ операц╕╖ з цим комп'ютером. Списки таких сервер╕в можна знайти в ╕нтернет╕.
Файл /etc/mail/access.db буду╓ться за допомогою тако╖ команди:
makemap hash /etc/mail/access.db
Але у мо╖й поставц╕ sendmail у каталоз╕ /etc/mail валя╓ться Makefile, так що мен╕ достатньо набрати make, щоб перебудувати ус╕ .db-файли, як╕ необх╕дно.
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
(Не тестував ще - хто протесту╓, пов╕домте результат).
Також ф╕льтрування за заголовками легко реал╕зу╓ться за допомогою procmail ╕ formail, читайте документац╕ю на ц╕ програми.
Для ф╕льтрування за вм╕стом можна використовувати procmail та утил╕ти для частотного анал╕зу тексту. ╥х опис виходить за рамки цього документу.
У sendmail недавно з'явилася можлив╕сть п╕дключати сво╖ утил╕ти, як╕ можуть працювати над вм╕стом листа, через libmilter ╤ПП(API). Велику к╕льк╕сть програм, як╕ працюють через цей ╤ПП, можна знайти на FreshMeat. Наприклад ╓ модуль для Перла, який дозволя╓ писати так╕ ф╕льтри на Перл╕, його можна взяти тут (або на CPAN).
Верс╕я: 1.1
Ця стор╕нка дозволена для редагування, якщо ви знайдете помилку у текст╕ чи бажа╓те доповнити цей текст, не надсилайте мен╕ листа - виправте помилку тут (╕ негайно) чи додайте сво╖ коментар╕. Пов╕домлення про це прийде мен╕ автоматично. Не забудьте додати себе до списку сп╕вавтор╕в унизу стор╕нки.
|
|