Поставил Postfix + sasl2 + mysql. Все работает, но при отправке из почтового клиента (установленного на этой же машине) пользователю из собственного домена сервер пропускает как с паролем так и без пароля. Как сделать так, чтобы для всех абсолютно требовалась аутентификация при отправке сообщения?
Настроить...
Покажи postconf -n
>Настроить...
>Покажи postconf -nsmtpd_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
может из 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
>может из smtpd_recipient_restrictions
>убрать permit_mynetworks ?
Убрал. То-же самое. Указываю в клиенте без имени польз и пароля. Отправляется без проблем
И это все???
>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
>И это все???
>>smtpd_client_restrictions=permit_sasl_authenticated
>>smtpd_sender_restrictions=permit_sasl_authenticated
>Чего вы этим хотите добиться?
>
Сделал smtpd_sender_restrictions=permit_sasl_authenticated,reject
заработало. Без пароля теперь не отправляет!
А как можно разрешить присылать мне почту из домена, попавшего в черный список relay.ordb.org, который у меня используется в конфе?
>Сделал 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
>>А как можно разрешить присылать мне почту из домена, попавшего в черный
>>список 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
>Опа! А можно еще например по другому, чем это?
Можно. Если вы сумеете объяснить что вам нужно.
>>Опа! А можно еще например по другому, чем это?
>Можно. Если вы сумеете объяснить что вам нужно.
Мне нужно, чтобы все без исключения пользователи, которые отправляют почту через этот почтов. сервер проходили авторизацию. Авторизация настроена через sasl+mysql
и работает, проверено.
Чем вас не устраивает то что я написал???
>Чем вас не устраивает то что я написал???
Просто не все понятно.
Строка /my\.domain/int - это отправка сообщений из моего домена по авторизации?
А /.*/ext -это прием почты из вне?
>Просто не все понятно.
1 Смотрите: вам надо разделить локальных и внешних отправителей.
2 требовать авторизацию от локальных на все, от внешних только на релеинг.
Отделить локальных пользователей можно по: е-mail'у, домену, ip.В этом примере они разделяются по домену c помощью регулярных выражений, отправитель попадающий под маску /my\.domain/ считается локальным, а все остальные внешними.
>Строка /my\.domain/int - это отправка сообщений из моего домена по авторизации?
>А /.*/ext -это прием почты из вне?
>>Просто не все понятно.
>1 Смотрите: вам надо разделить локальных и внешних отправителей.
>2 требовать авторизацию от локальных на все, от внешних только на релеинг.
>
>Отделить локальных пользователей можно по: е-mail'у, домену, ip.
>
>В этом примере они разделяются по домену c помощью регулярных выражений, отправитель
>попадающий под маску /my\.domain/ считается локальным, а все остальные внешними.
>>Строка /my\.domain/int - это отправка сообщений из моего домена по авторизации?
>>А /.*/ext -это прием почты из вне?
Большое спасибо! Теперь все понял.
А если клиент будет авторизовываться не из моего домена, а скажем где-то из дома, его пропустит?
>А если клиент будет авторизовываться не из моего домена, а скажем где-то
>из дома, его пропустит?
Покажите итоговый конфиг postconf -n (полностью)
>>А если клиент будет авторизовываться не из моего домена, а скажем где-то
>>из дома, его пропустит?
>Покажите итоговый конфиг 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
>>>А если клиент будет авторизовываться не из моего домена, а скажем где-то
>>>из дома, его пропустит?
С этим конфигом у вас работает так:
Если клиент в "MAIL FROM" сказал, что он из вашего домена, то авторизация нужна для всех действий, иначе авторизация нужна только для релеинга.
>>>>А если клиент будет авторизовываться не из моего домена, а скажем где-то
>>>>из дома, его пропустит?
>С этим конфигом у вас работает так:
>Если клиент в "MAIL FROM" сказал, что он из вашего домена, то
>авторизация нужна для всех действий, иначе авторизация нужна только для релеинга.
>
Так эта конфа пойдет для того, чтобы почта нормально получалась для моего домена из вне, а чтобы отправлять почту нужно авторизовываться в любом случае, даже если я не принадлежу этому домену
>Так эта конфа пойдет для того, чтобы почта нормально получалась для моего
>домена из вне, а чтобы отправлять почту нужно авторизовываться в любом
>случае, даже если я не принадлежу этому домену
У вас какая-то очень странная терминология...
Если я правильно понял, ваш вопрос, то да.
>>Так эта конфа пойдет для того, чтобы почта нормально получалась для моего
>>домена из вне, а чтобы отправлять почту нужно авторизовываться в любом
>>случае, даже если я не принадлежу этому домену
>У вас какая-то очень странная терминология...
>Если я правильно понял, ваш вопрос, то да.
Может я неправильно выражаюсь, но просто я запутался, во всех советах которые почитал по форуму пишут по разному по схожей проблеме. Последний раз попробую объяснить мою простую задачу: принимать почту от всех для моего домена, за исключением черных списков из ordb.org, а отправлять только от тех, кто сможет авторизоваться независимо от того от куда пришел (из собственного домена или из вне). Так понятно?
Нет не понятно. что значит "отправлять" в вашем понимании???
если smtp(8), то это одно, если smtpd(8) в ситуациях когда "RCPT TO: <не@ваш.домен>" (это называется relaying), то это совершенно другое.
Hint: письма не берутся из воздуха - с точки зрения postfix все письма сначала являются входящими.
>Нет не понятно. что значит "отправлять" в вашем понимании???
>если smtp(8), то это одно, если smtpd(8) в ситуациях когда "RCPT TO: <не@ваш.домен>" (это называется relaying), то это совершенно другое.
>Hint: письма не берутся из воздуха - с точки зрения postfix все
>письма сначала являются входящими.
Отправлять в моем понимании, это - доставлять почту (в моем непростом случае доставлять почту на любой почтовый адрес в интернете от авторизованных клиентов клиентов, т.е релеить только от аутентифиц-х клиентов, для остальных только доставлять почту на мой домен)
Вы же здесь на форуме советовали вот это другому человеку:
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 вообще запретит прием почты из вне
>Вы же здесь на форуме советовали вот это другому человеку:
>...
>а мне сказали,что строка 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
Большое спасибо, что помогли разобраться!
>Отправлять в моем понимании, это - доставлять почту (в моем непростом случае
>доставлять почту на любой почтовый адрес в интернете от авторизованных клиентов
>клиентов, т.е релеить только от аутентифиц-х клиентов, для остальных только доставлять
>почту на мой домен)
Уже лучше :)
для этого достаточно написать так:
smtpd_recipient_restrictions = permit_sasl_authenticated,
reject_unauth_destination
И все.
>Может я неправильно выражаюсь, но просто я запутался, во всех советах которые
>почитал по форуму пишут по разному по схожей проблеме. Последний раз
>попробую объяснить мою простую задачу: принимать почту от всех для моего
>домена, за исключением черных списков из ordb.org, а отправлять только от
>тех, кто сможет авторизоваться независимо от того от куда пришел (из
>собственного домена или из вне). Так понятно?И таких админов берут на работу... :-) Эх.
В примере указано, что если в "mail from:" будет в виде имя@ваш_домен, то будет запрашиваться авторизация.
>И таких админов берут на работу... :-) Эх.
>В примере указано, что если в "mail from:" будет в виде имя@ваш_домен,
>то будет запрашиваться авторизация.
Я не просил бы не оскорблять, я с postfix столкнулся впервые и просто хочу понять, а не бездумно прописывать непонятные опции
>
>>И таких админов берут на работу... :-) Эх.
>>В примере указано, что если в "mail from:" будет в виде имя@ваш_домен,
>>то будет запрашиваться авторизация.
>
>
>Я не просил бы не оскорблять, я с postfix столкнулся впервые и
>просто хочу понять, а не бездумно прописывать непонятные опцииВообще то всё понятно написали, сам с postfix столкнулся недавно. До этого работал с sendmail. Вы молодой человек в терминологии разбиритесь (вы как раз выражаетесь не очень понятно) и разбиритесь с тем, как работает протокол SMTP.
В развитие темы (все вышеописанное в треде отлажено и работает) :>>>В примере указано, что если в "mail from:" будет в виде имя@ваш_домен,
>>>то будет запрашиваться авторизация.Есть задача - принимать к отправке почту от пользователей, прошедших авторизацию по имени NAME, только если в их письмах поля "From:" и (опционально) "Reply-To:" содержат NAME@мой_домен.
А то есть любители, используя свой бюджет, рассылать письмя с чужим обратным адресом. Административное решение проблемы не подходит - уже использую, нужно автоматизировать.
>Есть задача - принимать к отправке почту от пользователей, прошедших авторизацию по
>имени NAME, только если в их письмах поля "From:" и (опционально)
>"Reply-To:" содержат NAME@мой_домен.
Вам нужен фильтр который проверит корректность этих тэгов.
Фильтру нужно будет передать $sasl_username, сделать это можно например так:
1. запускать фильтр через pipe(8)
2. policy сервер который возвращает "action=PREPEND X-SASL-User: $sasl_user"
>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) были неудачны. Куда копнуть ?
Это не имеет ни какого отношения к полям "From:" и "Reply-To:" в заголовке письма. Т.е. вашу задачу так не решить.
Эта опция позволяет сопоставить sasl login name и адрес из "MAIL FROM:"