URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 53047
[ Назад ]

Исходное сообщение
"postfix + sasl"

Отправлено jekpol , 03-Фев-05 13:41 
Поставил Postfix + sasl2 + mysql. Все работает, но при отправке из почтового клиента (установленного на этой же машине) пользователю из собственного домена сервер пропускает как с паролем так и без пароля. Как сделать так, чтобы для всех абсолютно требовалась аутентификация при отправке сообщения?

Содержание

Сообщения в этом обсуждении
"postfix + sasl"
Отправлено unk , 03-Фев-05 13:44 
Настроить...
Покажи postconf -n



"postfix + sasl"
Отправлено jekpol , 03-Фев-05 14:04 
>Настроить...
>Покажи postconf -n

smtpd_sasl_auth_enable=yes
smtpd_sasl_security_options=noanonymous
smtpd_sasl_local_domain=
smtpd_client_restrictions=permit_sasl_authenticated
smtpd_sender_restrictions=permit_sasl_authenticated
broken_sasl_auth_clients=yes
smtpd_recipient_restrictions=permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
disable_vrfy_command=yes


"postfix + sasl"
Отправлено open , 03-Фев-05 14:13 
может из smtpd_recipient_restrictions
убрать permit_mynetworks ?

>>Настроить...
>>Покажи postconf -n
>
>smtpd_sasl_auth_enable=yes
>smtpd_sasl_security_options=noanonymous
>smtpd_sasl_local_domain=
>smtpd_client_restrictions=permit_sasl_authenticated
>smtpd_sender_restrictions=permit_sasl_authenticated
>broken_sasl_auth_clients=yes
>smtpd_recipient_restrictions=permit_sasl_authenticated,
>permit_mynetworks,
>reject_unauth_destination
>disable_vrfy_command=yes



"postfix + sasl"
Отправлено jekpol , 03-Фев-05 14:20 
>может из smtpd_recipient_restrictions
>убрать permit_mynetworks ?
Убрал. То-же самое. Указываю в клиенте без имени польз и пароля. Отправляется без проблем



"postfix + sasl"
Отправлено unk , 03-Фев-05 14:42 
И это все???
>smtpd_client_restrictions=permit_sasl_authenticated
>smtpd_sender_restrictions=permit_sasl_authenticated
Чего вы этим хотите добиться?

Можно так:
smtpd_restriction_classes = int, ext
int = permit_sasl_authenticated, reject
ext = permit
smtpd_sender_restrictions = pcre:/etc/postfix/access
smtpd_recipient_restrictions = permit_sasl_authenticated,
    reject_unauth_destination
/etc/postfix/access:
/example\.ru/ int
/.*/ ext


"postfix + sasl"
Отправлено jekpol , 03-Фев-05 14:58 
>И это все???
>>smtpd_client_restrictions=permit_sasl_authenticated
>>smtpd_sender_restrictions=permit_sasl_authenticated
>Чего вы этим хотите добиться?
>
Сделал smtpd_sender_restrictions=permit_sasl_authenticated,reject
заработало. Без пароля теперь не отправляет!
А как можно разрешить присылать мне почту из домена, попавшего в черный список relay.ordb.org, который у меня используется в конфе?



"postfix + sasl"
Отправлено unk , 03-Фев-05 15:05 
>Сделал smtpd_sender_restrictions=permit_sasl_authenticated,reject
>заработало. Без пароля теперь не отправляет!
Это вы глупость сделали - как к вам внешняя почта ходить будет???

>А как можно разрешить присылать мне почту из домена, попавшего в черный
>список relay.ordb.org, который у меня используется в конфе?
Прописать в нужное smtpd_*_restrictions = check_client_access hash:/etc/postfix/whitelist
whitelist:
1.2.3.4 OK


"postfix + sasl"
Отправлено jekpol , 03-Фев-05 15:11 
>>А как можно разрешить присылать мне почту из домена, попавшего в черный
>>список relay.ordb.org, который у меня используется в конфе?
>Прописать в нужное smtpd_*_restrictions = check_client_access hash:/etc/postfix/whitelist
>whitelist:
>1.2.3.4 OK

Спасибо!

Опа! А можно еще например по другому, чем это?
smtpd_restriction_classes = int, ext
int = permit_sasl_authenticated, reject
ext = permit
smtpd_sender_restrictions = pcre:/etc/postfix/access
smtpd_recipient_restrictions = permit_sasl_authenticated,
reject_unauth_destination
/etc/postfix/access:
/example\.ru/ int
/.*/ ext


"postfix + sasl"
Отправлено unk , 03-Фев-05 15:14 
>Опа! А можно еще например по другому, чем это?
Можно. Если вы сумеете объяснить что вам нужно.

"postfix + sasl"
Отправлено jekpol , 03-Фев-05 15:18 
>>Опа! А можно еще например по другому, чем это?
>Можно. Если вы сумеете объяснить что вам нужно.
Мне нужно, чтобы все без исключения пользователи, которые отправляют почту через этот почтов. сервер проходили авторизацию. Авторизация настроена через sasl+mysql
и работает, проверено.

"postfix + sasl"
Отправлено unk , 03-Фев-05 15:24 
Чем вас не устраивает то что я написал???

"postfix + sasl"
Отправлено jekpol , 03-Фев-05 15:32 
>Чем вас не устраивает то что я написал???


Просто не все понятно.
Строка /my\.domain/int - это отправка сообщений из моего домена по авторизации?
А /.*/ext -это прием почты из вне?


"postfix + sasl"
Отправлено unk , 03-Фев-05 15:40 
>Просто не все понятно.
1 Смотрите: вам надо разделить локальных и внешних отправителей.
2 требовать авторизацию от локальных на все, от внешних только на релеинг.
Отделить локальных пользователей можно по: е-mail'у, домену, ip.

В этом примере они разделяются по домену c помощью регулярных выражений, отправитель попадающий под маску /my\.domain/ считается локальным, а все остальные внешними.
>Строка /my\.domain/int - это отправка сообщений из моего домена по авторизации?
>А /.*/ext -это прием почты из вне?


"postfix + sasl"
Отправлено jekpol , 03-Фев-05 15:45 
>>Просто не все понятно.
>1 Смотрите: вам надо разделить локальных и внешних отправителей.
>2 требовать авторизацию от локальных на все, от внешних только на релеинг.
>
>Отделить локальных пользователей можно по: е-mail'у, домену, ip.
>
>В этом примере они разделяются по домену c помощью регулярных выражений, отправитель
>попадающий под маску /my\.domain/ считается локальным, а все остальные внешними.
>>Строка /my\.domain/int - это отправка сообщений из моего домена по авторизации?
>>А /.*/ext -это прием почты из вне?


Большое спасибо! Теперь все понял.


"postfix + sasl"
Отправлено jekpol , 03-Фев-05 15:51 
А если клиент будет авторизовываться не из моего домена, а скажем где-то из дома, его пропустит?



"postfix + sasl"
Отправлено unk , 03-Фев-05 15:55 
>А если клиент будет авторизовываться не из моего домена, а скажем где-то
>из дома, его пропустит?
Покажите итоговый конфиг postconf -n (полностью)



"postfix + sasl"
Отправлено jekpol , 03-Фев-05 16:43 
>>А если клиент будет авторизовываться не из моего домена, а скажем где-то
>>из дома, его пропустит?
>Покажите итоговый конфиг postconf -n (полностью)

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/lib/postfix
debug_peer_level = 1
default_destination_concurrency_limit = 10
disable_vrfy_command = yes
home_mailbox = Maildir/
html_directory = no
in_flow_delay = 1s
inet_interfaces = all
local_destination_concurrency_limit = 2
local_recipient_maps = unix:passwd.byname $virtual_alias_maps $virtual_mailbox_maps
mail_owner = postfix
mail_spool_directory = /var/spool/mail
mailbox_size_limit = 10240000
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
maps_rbl_reject_code = 550
maximal_queue_lifetime = 5h
message_size_limit = 4096000
mydestination = localhost, $myhostname, $mydomain, localhost.$mydomain, mysql:/etc/postfix/mysql-mydestination.cf
mydomain = belabraziv.ru
myhostname = mail.belabraziv.ru
mynetworks = 192.168.0.0/16, 127.0.0.0/8
mynetworks_style = host
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.1.5-r1/readme
relay_domains = $transport_maps
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_recipient_restrictions = permit_sasl_authenticated,reject_unauth_destination,reject_invalid_hostname,check_client_access hash:/etc/posfix/whitelist,reject_rbl_client relays.ordb.org
smtpd_restriction_classes = int, ext
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = belabraziv.ru
smtpd_sasl_security_options = noanonymous
smtpd_sender_restrictions = pcre:/etc/postfix/access
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_cert_file = /etc/postfix/newcert.pem
smtpd_tls_key_file = /etc/postfix/newreq.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
transport_maps = mysql:/etc/postfix/mysql-transport.cf
unknown_local_recipient_reject_code = 550
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
virtual_create_maildirsize = yes
virtual_gid_maps = mysql:/etc/postfix/mysql-virtual-gid.cf
virtual_mailbox_base = /
virtual_mailbox_limit = 10240000
virtual_mailbox_limit_inbox = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-mailboxsize.cf
virtual_mailbox_limit_override = yes
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_maildir_extended = yes
virtual_minimum_uid = 1000
virtual_overquota_bounce = yes
virtual_uid_maps = mysql:/etc/postfix/mysql-virtual-uid.cf


"postfix + sasl"
Отправлено unk , 03-Фев-05 17:01 
>>>А если клиент будет авторизовываться не из моего домена, а скажем где-то
>>>из дома, его пропустит?
С этим конфигом у вас работает так:
Если клиент в "MAIL FROM" сказал, что он из вашего домена, то авторизация нужна для всех действий, иначе авторизация нужна только для релеинга.



"postfix + sasl"
Отправлено jekpol , 03-Фев-05 18:19 
>>>>А если клиент будет авторизовываться не из моего домена, а скажем где-то
>>>>из дома, его пропустит?
>С этим конфигом у вас работает так:
>Если клиент в "MAIL FROM" сказал, что он из вашего домена, то
>авторизация нужна для всех действий, иначе авторизация нужна только для релеинга.
>
Так эта конфа пойдет для того, чтобы почта нормально получалась для моего домена из вне, а чтобы отправлять почту нужно авторизовываться в любом случае, даже если я не принадлежу этому домену


"postfix + sasl"
Отправлено unk , 03-Фев-05 18:34 
>Так эта конфа пойдет для того, чтобы почта нормально получалась для моего
>домена из вне, а чтобы отправлять почту нужно авторизовываться в любом
>случае, даже если я не принадлежу этому домену
У вас какая-то очень странная терминология...
Если я правильно понял, ваш вопрос, то да.


"postfix + sasl"
Отправлено jekpol , 03-Фев-05 18:47 
>>Так эта конфа пойдет для того, чтобы почта нормально получалась для моего
>>домена из вне, а чтобы отправлять почту нужно авторизовываться в любом
>>случае, даже если я не принадлежу этому домену
>У вас какая-то очень странная терминология...
>Если я правильно понял, ваш вопрос, то да.


Может я неправильно выражаюсь, но просто я запутался, во всех советах которые почитал по форуму пишут по разному по схожей проблеме. Последний раз попробую объяснить мою простую задачу: принимать почту от всех для моего домена, за исключением черных списков из ordb.org, а отправлять только от тех, кто сможет авторизоваться независимо от того от куда пришел (из собственного домена или из вне). Так понятно?


"postfix + sasl"
Отправлено unk , 03-Фев-05 19:04 
Нет не понятно. что значит "отправлять" в вашем понимании???
если smtp(8), то это одно, если smtpd(8) в ситуациях когда "RCPT TO: <не@ваш.домен>" (это называется relaying), то это совершенно другое.
Hint: письма не берутся из воздуха - с точки зрения postfix все письма сначала являются входящими.


"postfix + sasl"
Отправлено jekpol , 03-Фев-05 19:13 
>Нет не понятно. что значит "отправлять" в вашем понимании???
>если smtp(8), то это одно, если smtpd(8) в ситуациях когда "RCPT TO: <не@ваш.домен>" (это называется relaying), то это совершенно другое.
>Hint: письма не берутся из воздуха - с точки зрения postfix все
>письма сначала являются входящими.


Отправлять в моем понимании, это - доставлять почту (в моем непростом случае доставлять почту на любой почтовый адрес в интернете от авторизованных клиентов клиентов, т.е релеить только от аутентифиц-х клиентов, для остальных только доставлять почту на мой домен)


"postfix + sasl"
Отправлено jekpol , 03-Фев-05 19:17 
Вы же здесь на форуме советовали вот это другому человеку:
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_recipient_restrictions = permit_tls_clientcerts,permit_sasl_authenticated,
permit_mynetworks,reject_unauth_destination,reject_unknown_recipient_domain
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sender_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject

а мне сказали,что строка smtpd_client_restrictions = permit_sasl_authenticated не нужна, а строка
smtpd_sender_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject вообще запретит прием почты из вне


"postfix + sasl"
Отправлено unk , 03-Фев-05 19:27 
>Вы же здесь на форуме советовали вот это другому человеку:
>...
>а мне сказали,что строка smtpd_client_restrictions = permit_sasl_authenticated не нужна, а строка
Там был только пример...
вы показали РЕАЛЬНЫЙ конфиг, в "smtpd_client_restrictions = permit_sasl_authenticated"  без других условий смысла нет.

>smtpd_sender_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject вообще запретит прием почты из вне
Я такого не говорил!!!
Вот что вы мне написали:
>Сделал smtpd_sender_restrictions=permit_sasl_authenticated,reject
>заработало. Без пароля теперь не отправляет!
Это действительно запрет приема от всех клиентов без SASL



"postfix + sasl"
Отправлено jekpol , 03-Фев-05 19:32 
Большое спасибо, что помогли разобраться!



"postfix + sasl"
Отправлено unk , 03-Фев-05 19:20 
>Отправлять в моем понимании, это - доставлять почту (в моем непростом случае
>доставлять почту на любой почтовый адрес в интернете от авторизованных клиентов
>клиентов, т.е релеить только от аутентифиц-х клиентов, для остальных только доставлять
>почту на мой домен)
Уже лучше :)
для этого достаточно написать так:
smtpd_recipient_restrictions = permit_sasl_authenticated,
     reject_unauth_destination
И все.

"postfix + sasl"
Отправлено Andrey , 03-Фев-05 19:14 
>Может я неправильно выражаюсь, но просто я запутался, во всех советах которые
>почитал по форуму пишут по разному по схожей проблеме. Последний раз
>попробую объяснить мою простую задачу: принимать почту от всех для моего
>домена, за исключением черных списков из ordb.org, а отправлять только от
>тех, кто сможет авторизоваться независимо от того от куда пришел (из
>собственного домена или из вне). Так понятно?

И таких админов берут на работу... :-) Эх.
В примере указано, что если в "mail from:" будет в виде имя@ваш_домен, то будет запрашиваться авторизация.


"postfix + sasl"
Отправлено jekpol , 03-Фев-05 19:21 

>И таких админов берут на работу... :-) Эх.
>В примере указано, что если в "mail from:" будет в виде имя@ваш_домен,
>то будет запрашиваться авторизация.


Я не просил бы не оскорблять, я с postfix столкнулся впервые и просто хочу понять, а не бездумно прописывать непонятные опции


"postfix + sasl"
Отправлено Andrey , 03-Фев-05 19:24 
>
>>И таких админов берут на работу... :-) Эх.
>>В примере указано, что если в "mail from:" будет в виде имя@ваш_домен,
>>то будет запрашиваться авторизация.
>
>
>Я не просил бы не оскорблять, я с postfix столкнулся впервые и
>просто хочу понять, а не бездумно прописывать непонятные опции

Вообще то всё понятно написали, сам с postfix столкнулся недавно. До этого работал с sendmail. Вы молодой человек в терминологии разбиритесь (вы как раз выражаетесь не очень понятно) и разбиритесь с тем, как работает протокол SMTP.


"postfix + sasl"
Отправлено Andrew , 07-Фев-05 10:54 
В развитие темы (все вышеописанное в треде отлажено и работает) :

>>>В примере указано, что если в "mail from:" будет в виде имя@ваш_домен,
>>>то будет запрашиваться авторизация.

Есть задача - принимать к отправке почту от пользователей, прошедших авторизацию по имени NAME, только если в их письмах поля "From:" и (опционально) "Reply-To:" содержат NAME@мой_домен.

А то есть любители, используя свой бюджет, рассылать письмя с чужим обратным адресом. Административное решение проблемы не подходит - уже использую, нужно автоматизировать.


"postfix + sasl"
Отправлено unk , 07-Фев-05 14:57 
>Есть задача - принимать к отправке почту от пользователей, прошедших авторизацию по
>имени NAME, только если в их письмах поля "From:" и (опционально)
>"Reply-To:" содержат NAME@мой_домен.
Вам нужен фильтр который проверит корректность этих тэгов.
Фильтру нужно будет передать $sasl_username, сделать это можно например так:
1. запускать фильтр через pipe(8)
2. policy сервер который возвращает "action=PREPEND X-SASL-User: $sasl_user"



"postfix + sasl"
Отправлено Andrew , 07-Фев-05 16:59 
>1. запускать фильтр через pipe(8)
>2. policy сервер который возвращает "action=PREPEND X-SASL-User: $sasl_user"

Хм, вот вроде нашел (Postfix 2.1.5):
smtpd_sender_restrictions = reject_sender_login_mismatch
$smtpd_sender_login_maps = unix:passwd.byname

Вот описание :
Reject the request when $smtpd_sender_login_maps specifies an owner for the MAIL FROM address, but the client is not (SASL) logged in as that MAIL FROM address owner; or when the client is (SASL) logged in, but the client login name doesn't own the MAIL FROM address according to $smtpd_sender_login_maps

Но при применении этой функции, вне зависимости от обратного адреса (валидного или "левого"), в виде name и в виде name@my_domain, в клиенте (The BAT!) выходит сообщение : Ошибка отправления почты. Сервер ответил : sender address rejected : not owned by user <name>. В логах аналогичное сообщение, ошибка 553. Возможно, неправильно определен файл для smtpd_sender_login_maps, попытки подключить хэш вручную созданного файла (список юзеров в стиле name <tab> OK или name@my_domain <tab> OK) были неудачны. Куда копнуть ?


"postfix + sasl"
Отправлено unk , 07-Фев-05 17:07 
Это не имеет ни какого отношения к полям "From:" и "Reply-To:" в заголовке письма. Т.е. вашу задачу так не решить.
Эта опция позволяет сопоставить sasl login name и адрес из "MAIL FROM:"