Страница 1 из 1

postfix, relay и проверка подлинности plain. Нужна помощь.

Добавлено: 2012-02-29 5:40:14
propeller25
Доброго времени!

C linux я не так давно знаком, по этому прошу сильно не пинать.)

Задача такая.
Есть MS SQL 2005, который умеет отправлять почту, но не умеет plain авторизацию.
Есть почтовый сервер beeline, который эту почту должен принять, но ему нужна plain авторизация в виде логина и пароля в открытом виде.

В роли прокладки я решил поставить postfix с поддержкой sasl. Постфикс настроен как relay. На него приходит почта SQL сервера,
а он должен ее отослать на указанный IP (почтовый сервер) который требует plain авторизацию.

Привожу весь конфиг postfix.

Код: Выделить всё

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/iRedMail_CA.pem
smtpd_tls_key_file = /etc/ssl/private/iRedMail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = linuxrelay.podkova.loc
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
myorigin = linuxrelay.podkova.loc
mydestination = $myhostname, localhost, localhost.localdomain, localhost.$myhostname, r-podkova.ru, andromeda.podkova.loc, sms.beeline.amega-inform.ru
relayhost = 93.188.44.9:256
mynetworks = 127.0.0.0/8
mailbox_command = /usr/lib/dovecot/deliver
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_alias_domains =
mydomain = podkova.loc
inet_protocols = ipv4
mynetworks_style = subnet
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_reject_unlisted_recipient = no
smtpd_sender_restrictions = permit_mynetworks, reject_sender_login_mismatch, permit_sasl_authenticated
delay_warning_time = 0h
policy_time_limit = 3600
maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d
proxy_read_maps = $canonical_maps $lmtp_generic_maps $local_recipient_maps $mydestination $mynetworks $recipient_bcc_maps $recipient_canonical_maps $relay_domains $relay_recipient_maps $relocated_$
smtp_data_init_timeout = 240s
smtp_data_xfer_timeout = 600s
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks,permit_sasl_authenticated, check_helo_access pcre:/etc/postfix/helo_access.pcre
queue_run_delay = 300s
minimal_backoff_time = 300s
maximal_backoff_time = 4000s
enable_original_recipient = no
disable_vrfy_command = yes
home_mailbox = Maildir/
allow_min_user = no
message_size_limit = 15728640
virtual_minimum_uid = 1001
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001
virtual_mailbox_base = /var/vmail
transport_maps = proxy:ldap:/etc/postfix/ldap/transport_maps_user.cf, proxy:ldap:/etc/postfix/ldap/transport_maps_domain.cf
virtual_alias_maps = proxy:ldap:/etc/postfix/ldap/virtual_alias_maps.cf, proxy:ldap:/etc/postfix/ldap/virtual_group_maps.cf, proxy:ldap:/etc/postfix/ldap/sender_login_maps.cf, proxy:ldap:/etc/post$
virtual_mailbox_domains = proxy:ldap:/etc/postfix/ldap/virtual_mailbox_domains.cf
virtual_mailbox_maps = proxy:ldap:/etc/postfix/ldap/virtual_mailbox_maps.cf
sender_bcc_maps = proxy:ldap:/etc/postfix/ldap/sender_bcc_maps_domain.cf, proxy:ldap:/etc/postfix/ldap/sender_bcc_maps_user.cf
recipient_bcc_maps = proxy:ldap:/etc/postfix/ldap/recipient_bcc_maps_domain.cf, proxy:ldap:/etc/postfix/ldap/recipient_bcc_maps_user.cf
relay_domains = $mydestination, proxy:ldap:/etc/postfix/ldap/relay_domains.cf
smtpd_sender_login_maps = proxy:ldap:/etc/postfix/ldap/sender_login_maps.cf
smtpd_reject_unlisted_sender = no

smtpd_sasl_auth_enable = yes

# relayhost = RELAY_SMTP_SERVER:PORT
# smtp_sasl_auth_enable = yes

# smtpd_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd

# smtp_sasl_security_options =
# myorigin = MY-MAIL-SERVER



smtpd_sasl_local_domain =
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_authenticated_header = no
# smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unlisted_recipient, check_policy_service i$
smtpd_tls_security_level = may
smtpd_enforce_tls = no
smtpd_tls_loglevel = 0
smtpd_tls_CAfile = /etc/ssl/certs/iRedMail_CA.pem
tls_random_source = dev:/dev/urandom
tls_daemon_random_source = dev:/dev/urandom
#
# Uncomment the following line to enable policyd sender throttle.
#
#smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10032
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_sasl_type = dovecot
smtpd_sasl_path = ./dovecot-auth
content_filter = smtp-amavis:[127.0.0.1]:10024
smtp-amavis_destination_recipient_limit = 1
В итоге отправка письма на указанный сервер происходит, но сервер дает отлуп:

Код: Выделить всё

Feb 28 17:04:37 linuxrelay postfix/qmgr[6656]: EFCBA3FA26B: from=<R-PODKOVA@beeline.amega-inform.ru>, size=1170, nrcpt=1 (queue active)
Feb 28 17:04:38 linuxrelay amavis[966]: (00966-05) Passed CLEAN, MYNETS LOCAL [192.168.0.133] [192.168.0.133] <R-PODKOVA@beeline.amega-inform.ru> -> <89134776969@sms.beeline.amega-inform.ru>, mail$
Feb 28 17:04:38 linuxrelay postfix/smtp[6665]: C847A3FA264: to=<89134776969@sms.beeline.amega-inform.ru>, relay=127.0.0.1[127.0.0.1]:10024, delay=4.2, delays=0.03/0.01/0/4.2, dsn=2.0.0, status=sen$
Feb 28 17:04:38 linuxrelay postfix/qmgr[6656]: C847A3FA264: removed
Feb 28 17:04:38 linuxrelay postfix/local[6669]: EFCBA3FA26B: to=<89134776969@sms.beeline.amega-inform.ru>, relay=local, delay=0.05, delays=0.01/0.01/0/0.03, dsn=5.1.1, status=bounced (unknown user$
Feb 28 17:04:38 linuxrelay postfix/cleanup[6664]: 07E723FA264: message-id=<20120228100438.07E723FA264@linuxrelay.podkova.loc>
Feb 28 17:04:38 linuxrelay postfix/bounce[6670]: EFCBA3FA26B: sender non-delivery notification: 07E723FA264
Feb 28 17:04:38 linuxrelay postfix/qmgr[6656]: 07E723FA264: from=<>, size=3191, nrcpt=1 (queue active)
Feb 28 17:04:38 linuxrelay postfix/qmgr[6656]: EFCBA3FA26B: removed
Feb 28 17:04:38 linuxrelay postfix/smtp[6672]: 07E723FA264: to=<R-PODKOVA@beeline.amega-inform.ru>, relay=93.188.44.9[93.188.44.9]:256, delay=0.43, delays=0.01/0.01/0.17/0.24, dsn=5.0.0, status=bo$
Feb 28 17:04:38 linuxrelay postfix/qmgr[6656]: 07E723FA264: removed
Помогите, пожалуйста! Нужно подставить plain при отправке письма на beeline, но я не знаю как это сделать.

Re: postfix, relay и проверка подлинности plain. Нужна помощ

Добавлено: 2012-03-01 1:22:17
moury
В приведенном Вами конфиге авторизация при отправке почты вообще отключена, ибо за SASL-авторизацию при отправке отвечают не smtpd_*, а smtp_* опции. См. SASL_README.

Re: postfix, relay и проверка подлинности plain. Нужна помощ

Добавлено: 2012-03-01 12:25:48
propeller25
Спасибо огромное! Поправил конфиг на предмет smtp_sasl_auth_enable = yes, указал файл с хэшем и сообщения начали уходить. Но SQL серверу в любом случае возвращается SENT, даже в том случае, если сервер beeline дал отлуп (например он не дает отправлять одно и тоже сообщение несколько раз одному и тому же адресату и пишет:

Код: Выделить всё

Mar  1 16:00:28 linuxrelay postfix/smtp[3097]: D3D663FA26C: to=<89231122010@sms.beeline.amega-inform.ru>, relay=93.188.44.9[93.188.44.9]:256, delay=0.61, delays=0.02/0/0.35/0.23,
 dsn=5.0.0, status=bounced (host 93.188.44.9[93.188.44.9] said: 500 ?????????????????? ???????????????? ?????????????????? ?? ?????? ???? ?????????????? ???????? ???? ???????????
????? (+79231122010) ?? ?????????????? 20 ?????????? (in reply to end of DATA command))
Вот тут сервер beeline дал отлуп, а постфикс выдал SQL серверу SENT.

Можно ли сделать так, чтобы POSTFIX возвращал SQL серверу то, что написал сервер beeline в ответ на отправленное ему письмо?
Т.е. если письмо не удается отправить единожды, то я хочу, чтобы SQL принял от postfix FAIL , а он в любом случае посылает SENT

Re: postfix, relay и проверка подлинности plain. Нужна помощ

Добавлено: 2012-03-02 9:20:42
moury
Все современные MTA начинают обработку письма только после того, как письмо будет полностью принято от клиента. Смиритесь, все почтовики скажут:"SENT".

Вы можете написать скрипт, который потом определит успешность отправки письма дальше и даст знать sql-серверу, что надо менять в БД статус отправки (а то и сам sql-запрос даст).

Вы писали, что MTA служит только для отправки письма по цепочке, а обслуживанием клиентов и защитой от спама не занимается. Тогда, возможно, под Ваши задачи больше подойдет exim. В нем за счет извращений с sql-запросами можно сделать многое из того, что в postfix'е делают только внешние программы.

Re: postfix, relay и проверка подлинности plain. Нужна помощ

Добавлено: 2012-03-02 9:51:23
propeller25
Спасибо вам, moury, за быстрые и качественные ответы. А так же этой площадке и ее владельцам за то, что позволяют нам делится опытом.

Re: postfix, relay и проверка подлинности plain. Нужна помощ

Добавлено: 2012-03-05 5:04:22
propeller25
А такая программа, как, smtp-gated мне может помочь вернуть статус с сервера, на который я отправляю письмо в пределах одной smtp сессии?