Здравствуйте! Подскажите, пожалуйста, каким образом можно настроить Sendmail, чтобы осуществлялась проверка на "реальность" почтового адреса на принимающей стороне, и если адреса нет, то тело письма уже не принималось.
Посмотри в гугле "отлуп sendmail" или вот тебе один из рецептов:
Отлуп несущ. пользователю зашит в самом файле sendmail, и sendmail.cf за это не отвечает. Для того, чтобы заставить sendmail.cf проверять поле "RCPT TO:" на наличие несущ. пользователей, нам придется отредактировать /etc/mail/access, прописав в нем существующих пользователей и последней строкой отказав всем остальным именам домена. Итак, для начала редактируем /etc/mail/access, прописав в нем всех своих локальных клиентов и запретив все остальные имена. Напоминаю: для того, чтобы sendmail обращался к этому файлу необходимо в sendmail.m4 включить строку FEATURE(access_db) А для того, чтобы можно было блокировать получение почты локальными клиентами, необходимо еще добавить FEATURE(blacklist_recipients).
#Разрешаем получение почты локальным пользователями user1, user2, etc на любом локальном почтовом домене (обращаю внимание на обязательность знака @ - он сигналит sendmail о том, что это имя локального пользователя (Please note: a local username must be now tagged with an @ (this is consistent with the check of the sender address, and hence it is possible to distinguish between hostnames and usernames) ):
To:user1@ [TAB] OK To:user2@ [TAB] OK .... #Запрещаем почту для всех остальных вариантов почтовых ящиков: To:your-domain.ru [TAB] ERROR:"550 User unknown" To:your-other-name-domain.ru [TAB] ERROR:"550 User unknown"
> чтобы осуществлялась проверка на "реальность" почтового адреса
В описании локального mailer-а не убирать флаг "w" (смотреть "F=..." в Mlocal в sendmail.cf).
Если вы ничего не трогали в sendmail.cf собственноручно, то там должна быть такая проверка ! И вообще, с чего вы взяли, что ваш sendmail принимает почту для несуществующих user-ов ?
Или вам нужна проверка вообще получателя, а не именно вашего ? Т.е. если будет делаться RELAY, то чтоб sendmail знал существует ли удаленный адрес еще до приема письма ?
2 Schreibikus:
> и sendmail.cf за это не отвечает
Все таки отвечает.
<телепат он>
может быть он имеет в виду проверка наличия отправляющего
пользователя на той стороне? типа наш сервер пошел туда
сказал rcpt to: sender@domain.com и оттуда ответили 250 OK?
<телепат офф>
Мне нужно, чтобы проверка осуществлялась именно на моем почтовике, когда он получает письмо для моего домена. Чтобы он не засасывал его. Совсем. Иначе письмо попадает ассассину, и вследствие того, что фильтр не удаляет письмо, а складывает в отдельный ящик, я это письмо получаю.
2 Spirit: спасибо за замечание (Schreibikus процитировал информацию с моей страницы).
В стандартном sendmail.cf нет ни намека на сам отлуп "User unknown",
а в самом коде sendmail "User unknown" присутствует.
Мною упущено из виду, что обращение к /etc/passwd происходит через MDA
, а флаг w, который за это отвечает, выставляется именно в sendmail.cf
в строке Mlocal, P=/bin/mail, F=lsDFMmnPw, S=10, R=20, A=mail -d $u
Получается, sendmail.cf за это отвечает.
Но есть разница между этой проверкой и проверкой, добавленной самостоятельно
в Local_check_rcpt:
при стандартном sendmail.cf, когда наличие юзера проверяется через MDA, обязательно формируется отлуп
от имени MAILER-DAEMON принимающей стороны и отправляется отправителю.
Конечно, это не распростаняется на тот случай, когда локальный юзер отправляет письмо локальному юзеру.
Если же добавить свои правила в Local_check_rcpt, то отлуп произойдет на этапе
RCPT TO:, соединение будет завершено с минимальной работой на принимающей стороне,
ну а отлуп уже сформирует MAILER-DAEMON отправившей стороны и доставит своему юзеру.
> при стандартном sendmail.cf, когда наличие юзера проверяется через MDA,
> обязательно формируется отлуп от имени MAILER-DAEMON принимающей стороны
> и отправляется отправителю.
Странно, никогда такого не видел. Даже сейчас проверил - sendmail сразу (на этапе "RCPT TO:") говорит "Нет такого" и все, письмо не принимает, не говоря уже о том, чтоб слать отправителю уведомление о том, что получателя не существует. Да, для теста брал стандартнейший конфиг без всяких добавлений в Local_check_*.
Да, флаг "w" - он для sendmail-а, а не для MDA, т.е. если sendmail определил, что дальнейшая доставка должна вестись таким-то mailer-ом, и в описании этого mailer-а стоит флаг "w", то существование получателя будет определяться самим sendmail-ом. И если он увидит, что такого пользователя несуществует, естественно он не будет принимать письмо, т.е. до приема письма и передачи его delivery agent-у даже не дойдет (ибо смысл ?).