Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> почтовые системы —> smfsav

smfsav - проверка адреса отправителя

Автор: Bart Tapolsky.


Smfsav - проверка адреса отправителя

1 Введение
2 Технология
3 Установка smfsav для sendmail
4 Настройка фильтра на postfix

Введение

Зачем нужна проверка адреса отправителя на почтовых серверах? SMTP протокол фактически не гарантирует доставку письма, но всячески способствует хотя бы косвенно уведомить отправителя о возможных проблемах. Ниже приведена схема, по которой работает SMTP сервер:

1. Сервер получает письмо и пытается доставить получателю
2. Если возникает ошибка, создается отчет об ошибках и отправляется отправителю
3. Если возникает ошибка при отправке письма отправителю, сервер пытается отправить отчет своему postmaster'у
4. Если недоступен адрес postmaster'a, в логи добавляется событие "savemail panic" и обработка письма вместе с отчетом останавливается

Как видите, SMTP сервер пытается, во чтобы то ни стало, доставить письмо получателю или известить компетентых людей об ошибках. Если у вас есть почтовый сервер, обратите внимание, сколько писем у него в очереди. Скорее всего, вы увидите письма от MAILER-DAEMON или postmaster на непонятные адреса типа <klausdefargt093fstb@poweroverhealthing.ee>. Потому что спаммеры зачастую в своих письмах указывают неверный обратный адрес, а заодно и неверный адрес получателя. Согласно вышеуказанной схеме, отчет должен уйти отправителю, вот и висит он, потому что некуда ему идти. Механизм проверки адреса отправителя вовсе не гарантирует, что адрес отправителя в письме - это настоящий адрес отправителя, но позволит нам хотя бы удостовериться, что это рабочий адрес, и, как минимум, на него можно будет отправить отчет о недоставке.

Технология

Обычная SMTP сессия выглядит примерно так:

<= 220 Server ESMTP ready
=> HELO mx.yandex.ru
<= 250 server.firma.ua Hello mx.yandex.ru [212.89.22.56], pleased to meet you
=> MAIL FROM:<invalid@address.com>
<= 250 2.1.0 Ok
=> RCPT TO:<petrov@firma.ua>
<= 250 2.1.5 Ok
=> DATA
<= 354 Enter mail, end with "." on a line by itself
=> text
=> of 
=> mail
=> .
<= 250 2.0.0 mAA8JNbB099896 Message accepted for delivery
=> QUIT
<= 221 2.0.0 server.firma.ua closing connection

Фильтр, отвечающий за проверку адреса получателя, вызывается почтовым сервером после команды MAIL FROM и делает примерно следующие действия:
Получает список MX записей для домена address.com

nslookup -type=MX address.com
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
address.com     mail exchanger = 10 spam04.affinitypath.com.
address.com     mail exchanger = 20 spam01.affinitypath.com.

Подключается к одному из них и производит следующий диалог с сервером:

<= 220 Server ESMTP ready
=> HELO server.firma.ua
<= 250 spam04.affinitypath.com Hello server.firma.ua [11.22.33.44], pleased to meet you
=> MAIL FROM:<validator@firma.ua>
<= 250 2.1.0 Ok
=> RCPT TO:<invalid@address.com>
<= 550 User not found.
=> QUIT
<= 221 2.0.0 spam04.affinitypath.com closing connection

Возращает отправителю ошибку без приема письма. Сессия будет выглядеть примерно так:

<= 220 Server ESMTP ready
=> HELO mx.yandex.ru
<= 250 server.firma.ua Hello mx.yandex.ru [212.89.22.56], pleased to meet you
=> MAIL FROM:<invalid@address.com>
<= 550 Sender address verification failed
=> QUIT
<= 221 2.0.0 server.firma.ua closing connection

Установка smfsav для sendmail

Установите smfsav из исходников (сорцы возьмите на http://smfs.sourceforge.net/smf-sav.html), либо из портов FreeBSD:

make install clean -C /usr/ports/mail/smfsav

Поправьте в конфиге smfsav.conf, который скорее всего будет в /usr/local/etc:

PublicName      dns_имя_вашего_сервера #Узнайте командой nslookup ваш_внешний_IP
SafeCallBack    postmaster@firma.ua #Заведомо рабочий адрес в вашем домене

Запустите сервис

/usr/local/etc/rc.d/smfsav start

Пропишите фильтр в конфиг sendmail'a /etc/mail/your_hostname.mc

INPUT_MAIL_FILTER(`smfsav', `S=unix:/var/run/smfsav/smfsav.sock, T=S:30s;R:4m')

Пересоберите конфиги и перезапустите сервер

make all install stop start -C /etc/mail

Все, ждите сообщений в логах!

# tail -f /var/log/maillog |grep smf
Nov 10 10:37:52 gt smf-sav[60084]: sender check failed: <tefighter70@icqmail.com>, 83.9.68.148, abzw148.adsl.tpnet.pl, [00:00:06]
Nov 10 10:40:09 gt smf-sav[60084]: sender check failed: <yu@basf.com>, 89.254.215.113, line113-49.adsl.kirov.ru, [00:00:03]
Nov 10 10:41:05 gt smf-sav[60084]: sender check failed: <simeon@basf.com>, 89.20.23.89, [89.20.23.89], [00:00:04]
Nov 10 10:44:32 gt smf-sav[60084]: sender check failed: <www.@ruthschris.com>, 85.72.60.199, oikopano.static.otenet.gr, [00:00:03]
Nov 10 10:45:08 gt smf-sav[60084]: sender check succeeded: <fields@whsllc.com>, 59.90.187.144, [59.90.187.144], [00:00:02]

Настройка фильтра на postfix

Такой механизм уже есть в стандартной поставке postfix'a, добавьте нужное значение в следующий параметр конфига main.cf:

smtpd_sender_restrictions = ..., reject_unverified_sender

----
Оригинал статьи: http://unixpages.net/wiki/Smfsav_-_проверка_адреса_отправителя
http://unixpages.net



размещено: 2008-11-10,
последнее обновление: 2008-11-10,
автор: Bart Tapolsky


aemon, 2009-08-27 в 17:11:55

Касательно использования вместе с Postfix дельные замечания по адресу

lexore, 2010-04-14 в 17:14:03

> Фильтр, отвечающий за проверку адреса получателя, вызывается почтовым сервером после команды MAIL FROM и делает примерно следующие действия.

Правильно: за проверку отправителя.

Ну и ссылку хорошо бы поправить:
http://smfs.sourceforge.net/smf-sav.html),



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0403 секунд
Из них PHP: 27%; SQL: 73%; Число SQL-запросов: 77 шт.
Исходный размер: 24909; Сжатая: 6475