Slackware 10.2, адро 2.6.14. Насколько я понимаю, у меня работает smtp аутентификация при пересылке почты. А как сделать так, чтобы она работала и для локальных пользователей машины, ну т.е. чтобы почта в /var/spool/mail/username попадала только от smtp-аутентифицированных пользователей?Пока у меня в /var/spool/mail принимается почта от любого пользователя из локальной сети. Нужно, чтобы это можно было делать только при вводе логина и пароля.
Заранее спасибо.
Вот - мои программы и настройки:
# sendmail -d0.1 -bv root | grep "SASL"
NAMED_BIND NETINET NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF
# sendmail -d0.1 -bv root | grep "Ver"
Version 8.13.4# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 myhost.mydomain ESMTP Sendmail 8.13.4/8.13.4; Wed, 11 Jan 2006 14:28:54 +0300
ehlo localhost
250-myhost.mydomain Hello localhost.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5
250-DELIVERBY
250 HELP========== sendmail-tls-sasl.mc =========
dnl# This is the a sendmail .mc file for Slackware with TLS support.
dnl# To generate the sendmail.cf file from this (perhaps after making
dnl# some changes), use the m4 files in /usr/share/sendmail/cf like this:
dnl#
dnl# cp sendmail-slackware-tls.mc /usr/share/sendmail/cf/config.mc
dnl# cd /usr/share/sendmail/cf
dnl# sh Build config.cf
dnl#
dnl# You may then install the resulting .cf file:
dnl# cp config.cf /etc/mail/sendmail.cf
dnl#
include(`../m4/cf.m4')
VERSIONID(`TLS supporting setup for Slackware Linux')dnl
OSTYPE(`linux')dnl
dnl#
dnl# You will need to create the certificates below with OpenSSL first:
define(`confCACERT_PATH', `/etc/mail/certs/')
define(`confCACERT', `/etc/mail/certs/CA.cert.pem')
define(`confSERVER_CERT', `/etc/mail/certs/smtp.cert.pem')
define(`confSERVER_KEY', `/etc/mail/certs/smtp.key.pem')
dnl# These settings help protect against people verifying email addresses
dnl# at your site in order to send you email that you probably don't want:
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
dnl# Uncomment the line below to send outgoing mail through an external server:
dnl define(`SMART_HOST',`mailserver.example.com')
dnl# No timeout for ident:
define(`confTO_IDENT', `0')dnl
dnl# Enable the line below to use smrsh to restrict what sendmail can run:
dnl FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
dnl# See the README in /usr/share/sendmail/cf for a ton of information on
dnl# how these options work:
FEATURE(`use_cw_file')dnl
FEATURE(`use_ct_file')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(`access_db', `hash -T<TMPF> /etc/mail/access')dnl
FEATURE(`blacklist_recipients')dnl
FEATURE(`local_procmail',`',`procmail -t -Y -a $h -d $u')dnl
FEATURE(`always_add_domain')dnl
FEATURE(`redirect')dnl
dnl#
dnl# Turn this feature on if you don't always have DNS, or enjoy junk mail:
dnl FEATURE(`accept_unresolvable_domains')dnl
dnl#
dnl# Allow SASL authentication/relaying:
define(`confAUTH_OPTIONS', `A p y')dnl
define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
FEATURE(`no_default_msa')dnl
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
DAEMON_OPTIONS(`Port=smtps, Name=MSA-SSL, M=E')dnl
dnl#
EXPOSED_USER(`root')dnl
dnl# Also accept mail for localhost.localdomain:
LOCAL_DOMAIN(`localhost.localdomain')dnl
MAILER(local)dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
smtp-аутентификация - это когда при соединении с сервером исходящей почты необходимо указывать имя и пароль пользователя.
если вам нужно имено это, закройте релей через свой сервер для всех компьютеров вашей локальной сети (для всех остальных - тем более), воленс-неволенс всем отправителям почты через ВАШ сервер придется использовать smtp-аутентификацию
>если вам нужно имено это, закройте релей через свой сервер для всех
>компьютеров вашей локальной сети (для всех остальных - тем более)А не разъясните поподробнее, как это нужно сделать?
Конф. файл я приводил в предыдущем сообщении. Там, наверное, нужно что-то удалить или добавить. Вот я, собственно, и прошу помощи, т.к. не способен разобраться с таким количеством настроек, их сочетаний и способов их включения, которое наблюдается в sendmail.
Я, конечно, прочитал кучу howto, но из них очень трудно сделать вывод о том, почему sendmail продолжает принимать почту без аутентификации ;(
разрешение пересылки почты (или запрет:) через сервер устанавливается в файле access
192.168.0 RELAY
это разрешает пересылку почты через ваш сервер со всех машин сети 192.168.0.0/24
также в файле relay-domains можно указать индивидуальные ip-адреса, с которых разрешается пересылка почты
а для smtp-аутентификации необходимо еще перенастроить почтовый клиент - указать в настройках, что для сервера ИСХОДЯЩЕЙ почты требуется имя и пароль
>разрешение пересылки почты (или запрет:) через сервер устанавливается в файле access
>192.168.0 RELAY
>это разрешает пересылку почты через ваш сервер со всех машин сети 192.168.0.0/24А у меня этот файл - пустой. Нужно ли в него что-то дописать?
>
>также в файле relay-domains можно указать индивидуальные ip-адреса, с которых разрешается пересылка
>почтыА этого файла нет вообще. Нужно ли его создать? Как сказать sendmail-у, чтобы он потом прочитал из него данные?
>а для smtp-аутентификации необходимо еще перенастроить почтовый клиент - указать в настройках,
>что для сервера ИСХОДЯЩЕЙ почты требуется имя и парольЭто все сделано. Аутентификация, TLS, SSL - все работает. Я только не могу сделать ее принудительной. Т.е. если я выключаю эту аутентификацию на клиенте, на сервере sendmail все равно продолжает принимать почту от этого клиента. Хочется, чтобы почта принималась _только_ после аутентификации - вот в чем проблема.
Должен пояснить. Этот сервер, по задумке, локальный, т.е. не для пересылки почты, а для обмена почтой внутри группы. Аутентификация нужна именно для приема почты, а не для пересылки. Хотя ф-цию пересылки, в дальнейшем, я планирую тоже включить, но сначала, мне нужно сделать так, чтобы аутентификация _требовалась_ во всех случаях, когда на этот сервер что-то пытаются передать.
Заранее спасибо за ответы.
запрет на пересылку (relaying) почты действует только при попытке отправить письмо ЧЕРЕЗ ВАШ СЕРВЕР куда-то дальше. Пустой файл access в вашем случае означает, что пересылка почты через ваш сервер запрещена для всех. Для собственных локальных пользователей почта принимается всегда (по крайней мере, я не знаю, как это можно запретить).
нужного вам варианта наверное можно достичь, если разнести серверы входящей и исходящей почты на разные компьютеры, но это несколько затратно:)
>Для собственных
>локальных пользователей почта принимается всегда (по крайней мере, я не знаю,
>как это можно запретить).
>нужного вам варианта наверное можно достичь, если разнести серверы входящей и исходящей
>почты на разные компьютеры, но это несколько затратно:)Да уж. Что-то мне подсказывает, что повальной аутентификации все же можно добиться. sendmail - такая гибкая система, и вот на тебе - нет элементарной возможности принимать почту только от аутентифицированных пользователей. Не верится что-то.
>Да уж. Что-то мне подсказывает, что повальной аутентификации все же можно добиться.
>sendmail - такая гибкая система, и вот на тебе - нет
>элементарной возможности принимать почту только от аутентифицированных пользователей. Не верится что-то.
>сендмайл - очень старая разработка, в недалеком прошлом и релеинг в нем по умолчанию был открытым для всех, а уж в полном доверии к локальным пользователям и сомнений нет. может стоит рассмотреть альтернативные варианты - postfix например или exim
>>Да уж. Что-то мне подсказывает, что повальной аутентификации все же можно добиться.
>>sendmail - такая гибкая система, и вот на тебе - нет
>>элементарной возможности принимать почту только от аутентифицированных пользователей. Не верится что-то.
>>
>
>сендмайл - очень старая разработка, в недалеком прошлом и релеинг в нем
>по умолчанию был открытым для всех, а уж в полном доверии
>к локальным пользователям и сомнений нет. может стоит рассмотреть альтернативные варианты
>- postfix например или eximпоиск по форуму, ответы уже были с подробностями
>поиск по форуму, ответы уже были с подробностямиПрошу помощи в поиске. Может быть вы вспомните, где это было?
В свое оправдание могу только написать, что:
На самом деле, я уж поискал еще до того как спрашивать. Самое близкое из того что я нашел было здесь: http://www.opennet.me/base/net/sendmail_sasl2.txt.html
Но это все не то - там только про пересылку, а нужна _тотальная_ smtp - аутентификация. Там вон что было написано:>Правильно, пора подправить файл /etc/mail/access. Там
>наверняка стоит строчка типа:
>192.168.1 RELAY
>Где 192.168.1 - адрес сетки ваших пользователей, а RELAY означает что
>Почту с этой сетки можно отправлять через sendmail. Вот эту строчку-то
>и надо убрать. Что у нас тогда получится ? А получится то, что никому
>отправлять почту наружу нельзя, ... кроме тех, кто прошел
>аутентификацию.В комментариях к этой статье было еще:
>Да и еще учтите, что установив SMTP-аутентификацию вы не ограничите
>движение почты внутри вашего почтового домена, т.е. адресат >vasya@mydomain.ru спокойно и без авторизации отправит письмо на
>petya@mydomain.ru или kolya@subdomain.mydomainru, т.к. эти адреса будут
>являться конечными для sendmail-а обслуживающего ваш домен mydomain.ruТ.е. такое решение не подходит.
Вот еще ссылки обсуждений, которые я смотрел, но ничего похожего не нашел ;(
http://www.opennet.me/base/net/sendmail_sasl2.txt.html
http://www.opennet.me/base/net/sasl_smtp_auth.txt.htmlВот эта статья тоже неплохая - простенько и со вкусом, но тоже не решает проблемы аутентификации для локальной почты
http://www.opennet.me/base/net/sendmail_sasl.txt.htmlВ http://www.sendmail.org/~ca/email/auth.html тоже только для relay. Вчастности, в разделе "Require AUTH" можно прочитать "You can require the use of SMTP AUTH for relaying by simply turning off other means of relaying for incoming mail, e.g., the access map or class R."
Черт возьми, я отказываюсь в это верить. Неужели любая программа в локальной сети может беспрепятственно забивать почтовые ящики локальных пользователей и нет спасенья?
Можно дописать правила
>Можно дописать правилаЭто было бы здорово! А не подскажете, что посмотреть по написанию правил?
Уточню: нужно чтобы почта от локального клиента локальному тоже требовала auth?
>Уточню: нужно чтобы почта от локального клиента локальному тоже требовала auth?Да.
Ну получай :) Предупреждаю: не проверялось.
Я буду в инете еще час, так что пробуй скорее.
Между левой и правой частью - TAB
Да, возможно этому есть более правильное решение, то есть без написания правилLOCAL_CONFIG
Ksyslog syslogLOCAL_RULESETS
SLocal_check_rcpt
# empty address?
R<> $#error $@ nouser $: "553 User address required"
R$@ $#error $@ nouser $: "553 User address required"#Добавляем адрес отпрвителя
R$* $: $1 $| $&f#Канонизируем адреса
R$* $| $* $: $2 $| $>Parse0 $>3 $1
R$* $| $* $: $2 $| $>Parse0 $>3 $1#Ксли отправитель и получатель локальные, отправляем их на проверку в CheckLocalAuth
R$+<@$=w.> $| $+<@$=w.> $: $>CheckLocalAuth#Другие варианты fqdn-адресов пропускаем (внеш-внеш, внутр-внеш, внеш-внутр)
R$+<@$+> $| $+<@$+> $@ $1#Алиасы, MAILER-DAEMON и др. лок. получатели без доменной части - в ту же проверку
R$+ $| $+ $: $>CheckLocalAuth#Контрольная проверка - кто там не охвачен нашими правилами: если сработает - покажешь, подправим
R$* $: $(syslog syslog:PROBLEM: $1 $) $1SCheckLocalAuth
#Почту с самого сервера пропускаем
R$* $: $&{client_addr}
R127.0.0.1 $@OK#Если авторизация имела место - пропускаем
R$* $: < $&{auth_authen} >
R< $+ > $@ OK#Все остальное блокируем
R$* $#error: $: 553 Sorry, you must use smtp-authentication. Please, contact to postmaster.
>Ну получай :) Предупреждаю: не проверялось.
>Я буду в инете еще час, так что пробуй скорее.Не, я прям щас проверять не буду ;) Сначала посмотрю описания настроек, которые там используются, чтобы самому эти правила научиься писать, а то вон как ты шустро из этих закорючек нужные правила набил ;) Заодно и ошибки половлю, ежели они там имеются.
Спасибо.
>>Ну получай :) Предупреждаю: не проверялось.
>>Я буду в инете еще час, так что пробуй скорее.
>
>Не, я прям щас проверять не буду ;) Сначала посмотрю описания настроек,
>которые там используются, чтобы самому эти правила научиься писать, а то
>вон как ты шустро из этих закорючек нужные правила набил ;)ну несколько дней вам точно потребуется :)
так что зря упустили шанс который вам предлагали
>Заодно и ошибки половлю, ежели они там имеются.
>
>Спасибо.
>>разрешение пересылки почты (или запрет:) через сервер устанавливается в файле access
>>192.168.0 RELAY
>>это разрешает пересылку почты через ваш сервер со всех машин сети 192.168.0.0/24
>
>А у меня этот файл - пустой. Нужно ли в него что-то
>дописать?
>
>>
>>также в файле relay-domains можно указать индивидуальные ip-адреса, с которых разрешается пересылка
>>почты
>
>А этого файла нет вообще. Нужно ли его создать? Как сказать sendmail-у,
>чтобы он потом прочитал из него данные?
>
>>а для smtp-аутентификации необходимо еще перенастроить почтовый клиент - указать в настройках,
>>что для сервера ИСХОДЯЩЕЙ почты требуется имя и пароль
>
>Это все сделано. Аутентификация, TLS, SSL - все работает. Я только не
>могу сделать ее принудительной. Т.е. если я выключаю эту аутентификацию на
>клиенте, на сервере sendmail все равно продолжает принимать почту от этого
>клиента. Хочется, чтобы почта принималась _только_ после аутентификации - вот в
>чем проблема.
>
>Должен пояснить. Этот сервер, по задумке, локальный, т.е. не для пересылки почты,
>а для обмена почтой внутри группы. Аутентификация нужна именно для приема
>почты, а не для пересылки. Хотя ф-цию пересылки, в дальнейшем, я
>планирую тоже включить, но сначала, мне нужно сделать так, чтобы аутентификация
>_требовалась_ во всех случаях, когда на этот сервер что-то пытаются передать.
>
>
>Заранее спасибо за ответы.define(`confAUTH_OPTIONS', `A')
define(`confAUTH_OPTIONS', `A')а у меня так и есть - все равно пускает без аутентификации.