From: mike.selner on
Hi, I've got postfix 2.3.7 on freebsd 6.2 with SASL auth.

I want to test sasl authentication only, so I don't have
permit_mynetworks
configured. Client is in the same subnet as server, but
mynetworks_style=host,
so the client is not in "mynetworks"

The goal is to permit sasl authenticated clients only to send mail via
this server. In other words I don't need to permit_mynetworks in this
case. Adding permit_mynetworks to my smtpd_client_restrictions did
not change the behavior.

I am able to authenticate my client using sasl, but I am not able to
send mail.
I am getting a relay denied message.

The log shows that I am authenticating successfully, but then
it shows: generic_checks: name=permit_sasl_authenticated status=1
(what do the status codes mean?)


Here is the postconf -n:
command_directory = /usr/local/sbin
config_directory = /usr/local/etc/postfix
daemon_directory = /usr/local/libexec/postfix
debug_peer_level = 1
home_mailbox = Maildir/
html_directory = no
mail_owner = postfix
mailq_path = /usr/local/bin/mailq
manpage_directory = /usr/local/man
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks_style = host
newaliases_path = /usr/local/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = no
sample_directory = /usr/local/etc/postfix
sendmail_path = /usr/local/sbin/sendmail
setgid_group = maildrop
smtpd_client_restrictions = permit_sasl_authenticated,
reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_path = smtpd
unknown_local_recipient_reject_code = 550

master.cf just has the default smtp entry appended with "-v" for debug

Here is the SMTP transcript:
$ telnet 10.0.0.66 25
Trying 10.0.0.66...
Connected to 10.0.0.66.
Escape character is '^]'.
220 dell1.tela.com ESMTP Postfix
ehlo my.test.client
250-dell1.tela.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN bWlrZQBtaWtlAG1pa2U=
235 2.0.0 Authentication successful
mail from:<mike(a)dell1.tela.com>
250 2.1.0 Ok
rcpt to:<anyone(a)yahoo.com>
554 5.7.1 <anyone(a)yahoo.com>: Relay access denied
quit
221 2.0.0 Bye
Connection closed by foreign host.

The postfix log shows:
dict_eval: const mail
dict_eval: const ipv4
name_mask: ipv4
dict_eval: const dell1.tela.com
dict_eval: const tela.com
dict_eval: const Postfix
dict_eval: const postfix
dict_eval: const postfix
dict_eval: const maildrop
dict_eval: expand $myhostname, localhost.$mydomain, localhost ->
dell1.tela.com, localhost.tela.com, localhost
dict_eval: expand $myhostname -> dell1.tela.com
dict_eval: const
dict_eval: const /usr/local/libexec/postfix
dict_eval: const /usr/local/sbin
dict_eval: const /var/spool/postfix
dict_eval: const pid
dict_eval: const all
dict_eval: const
dict_eval: const double-bounce
dict_eval: const nobody
dict_eval: const hash:/etc/aliases
dict_eval: const 20070130
dict_eval: const 2.3.7
dict_eval: const hash
dict_eval: const deferred, defer
dict_eval: const
dict_eval: expand $mydestination -> dell1.tela.com,
localhost.tela.com, localhost
dict_eval: expand $relay_domains -> dell1.tela.com,
localhost.tela.com, localhost
dict_eval: const TZ MAIL_CONFIG LANG
dict_eval: const MAIL_CONFIG MAIL_DEBUG MAIL_LOGTAG TZ XAUTHORITY
DISPLAY LANG=C
dict_eval: const host
dict_eval: const
dict_eval: const +=
dict_eval: const -=+
dict_eval: const
debug_peer_list,fast_flush_domains,mynetworks,permit_mx_backup_networks,qmqpd_authorized_clients,relay_domains,smtpd_access_maps
dict_eval: const
dict_eval: const bounce
dict_eval: const cleanup
dict_eval: const defer
dict_eval: const pickup
dict_eval: const qmgr
dict_eval: const rewrite
dict_eval: const showq
dict_eval: const error
dict_eval: const flush
dict_eval: const verify
dict_eval: const trace
dict_eval: const
dict_eval: const 1
dict_eval: const 100s
message repeated 3 times
dict_eval: const 3600s
dict_eval: const 3600s
dict_eval: const 100s
dict_eval: const 100s
dict_eval: const 1000s
dict_eval: const 1000s
dict_eval: const 10s
dict_eval: const 10s
dict_eval: const 1s
message repeated 3 times
dict_eval: const 500s
dict_eval: const 500s
dict_eval: const 18000s
dict_eval: const 18000s
dict_eval: const 1s
dict_eval: const 1s
name_mask: host
inet_addr_local: configured 3 IPv4 addresses
been_here: 10.0.0.66/32: 0
been_here: 127.0.0.1/32: 0
been_here: 192.168.0.1/32: 0
mynetworks: 10.0.0.66/32 127.0.0.1/32 192.168.0.1/32
dict_eval: const 10.0.0.66/32 127.0.0.1/32 192.168.0.1/32
dict_eval: const 550
dict_eval: expand $myhostname ESMTP $mail_name -> dell1.tela.com ESMTP
Postfix
dict_eval: const resource, software
dict_eval: const permit_sasl_authenticated, reject_unauth_destination
dict_eval: const
dict_eval: const
dict_eval: const permit_mynetworks, reject_unauth_destination
dict_eval: const
message repeated 4 times
dict_eval: const postmaster
dict_eval: const
message repeated 2 times
dict_eval: expand $virtual_maps ->
dict_eval: const
dict_eval: const hash:/etc/aliases
dict_eval: expand proxy:unix:passwd.byname $alias_maps ->
proxy:unix:passwd.byname hash:/etc/aliases
dict_eval: const noanonymous
dict_eval: const smtpd
dict_eval: expand $myhostname -> dell1.tela.com
dict_eval: const
message repeated 4 times
dict_eval: const CONNECT GET POST
dict_eval: const <>
dict_eval: const
dict_eval: const postmaster
dict_eval: expand $authorized_verp_clients ->
dict_eval: const
dict_eval: expand $myhostname -> dell1.tela.com
dict_eval: const
message repeated 2 times
dict_eval: expand ${smtpd_client_connection_limit_exceptions:
$mynetworks} -> 10.0.0.66/32 127.0.0.1/32 192.168.0.1/32
dict_eval: const permit_inet_interfaces
dict_eval: const
message repeated 2 times
dict_eval: expand $smtpd_sasl_security_options -> noanonymous
dict_eval: const
dict_eval: expand $smtpd_tls_cert_file ->
dict_eval: const
dict_eval: expand $smtpd_tls_dcert_file ->
dict_eval: const
dict_eval: const
dict_eval: const medium
dict_eval: const
dict_eval: const
dict_eval: const ALL:!EXPORT:!LOW:!MEDIUM:+RC4:@STRENGTH
dict_eval: const ALL:!EXPORT:!LOW:+RC4:@STRENGTH
dict_eval: const ALL:!EXPORT:+RC4:@STRENGTH
dict_eval: const ALL:+RC4:@STRENGTH
dict_eval: const !aNULL:eNULL+kRSA
dict_eval: const SSLv3, TLSv1
dict_eval: const
message repeated 2 times
dict_eval: const cyrus
dict_eval: const
dict_eval: const j {daemon_name} v
dict_eval: const {tls_version} {cipher} {cipher_bits} {cert_subject}
{cert_issuer}
dict_eval: const i {auth_type} {auth_authen} {auth_author} {mail_addr}
dict_eval: const i {rcpt_addr}
dict_eval: const i
dict_eval: const i
dict_eval: const
dict_eval: const 2
dict_eval: const tempfail
dict_eval: expand $myhostname -> dell1.tela.com
dict_eval: expand $mail_name $mail_version -> Postfix 2.3.7
dict_eval: const yes
dict_eval: const yes
dict_eval: const 300s
dict_eval: const 300s
dict_eval: const 1s
dict_eval: const 1s
dict_eval: const 100s
dict_eval: const 100s
dict_eval: const 3s
dict_eval: const 3s
dict_eval: const 100s
dict_eval: const 100s
dict_eval: const 300s
dict_eval: const 300s
dict_eval: const 1000s
dict_eval: const 1000s
dict_eval: const 300s
dict_eval: const 300s
dict_eval: const 3600s
dict_eval: const 3600s
dict_eval: const 30s
message repeated 3 times
dict_eval: const 300s
dict_eval: const 300s
process generation: 7 (7)
match_string: mynetworks ~? debug_peer_list
match_string: mynetworks ~? fast_flush_domains
match_string: mynetworks ~? mynetworks
match_string: relay_domains ~? debug_peer_list
match_string: relay_domains ~? fast_flush_domains
match_string: relay_domains ~? mynetworks
match_string: relay_domains ~? permit_mx_backup_networks
match_string: relay_domains ~? qmqpd_authorized_clients
match_string: relay_domains ~? relay_domains
match_string: permit_mx_backup_networks ~? debug_peer_list
match_string: permit_mx_backup_networks ~? fast_flush_domains
match_string: permit_mx_backup_networks ~? mynetworks
match_string: permit_mx_backup_networks ~? permit_mx_backup_networks
connect to subsystem private/proxymap
send attr request = open
send attr table = unix:passwd.byname
send attr flags = 16448
private/proxymap socket: wanted attribute: status
input attribute name: status
input attribute value: 0
private/proxymap socket: wanted attribute: flags
input attribute name: flags
input attribute value: 16464
private/proxymap socket: wanted attribute: (list terminator)
input attribute name: (end)
dict_proxy_open: connect to map=unix:passwd.byname status=0
server_flags=fixed|lock|fold_fix
dict_open: proxy:unix:passwd.byname
Compiled against Berkeley DB version 1
dict_open: hash:/etc/aliases
match_string: smtpd_access_maps ~? debug_peer_list
match_string: smtpd_access_maps ~? fast_flush_domains
match_string: smtpd_access_maps ~? mynetworks
match_string: smtpd_access_maps ~? permit_mx_backup_networks
match_string: smtpd_access_maps ~? qmqpd_authorized_clients
match_string: smtpd_access_maps ~? relay_domains
match_string: smtpd_access_maps ~? smtpd_access_maps
xsasl_cyrus_server_init: SASL config file is smtpd.conf
match_string: fast_flush_domains ~? debug_peer_list
match_string: fast_flush_domains ~? fast_flush_domains
auto_clnt_create: transport=local endpoint=private/anvil
connection established
master_notify: status 0
name_mask: resource
name_mask: software
xsasl_cyrus_server_create: SASL service=smtp, realm=dell1.tela.com
name_mask: noanonymous
connect from unknown[10.0.0.102]
match_list_match: unknown: no match
match_list_match: 10.0.0.102: no match
match_list_match: unknown: no match
match_list_match: 10.0.0.102: no match
match_hostname: unknown ~? 10.0.0.66/32
match_hostaddr: 10.0.0.102 ~? 10.0.0.66/32
match_hostname: unknown ~? 127.0.0.1/32
match_hostaddr: 10.0.0.102 ~? 127.0.0.1/32
match_hostname: unknown ~? 192.168.0.1/32
match_hostaddr: 10.0.0.102 ~? 192.168.0.1/32
match_list_match: unknown: no match
match_list_match: 10.0.0.102: no match
auto_clnt_open: connected to private/anvil
send attr request = connect
send attr ident = smtp:10.0.0.102
private/anvil: wanted attribute: status
input attribute name: status
input attribute value: 0
private/anvil: wanted attribute: count
input attribute name: count
input attribute value: 1
private/anvil: wanted attribute: rate
input attribute name: rate
input attribute value: 1
private/anvil: wanted attribute: (list terminator)
input attribute name: (end)
> unknown[10.0.0.102]: 220 dell1.tela.com ESMTP Postfix
< unknown[10.0.0.102]: ehlo my.test.client
> unknown[10.0.0.102]: 250-dell1.tela.com
> unknown[10.0.0.102]: 250-PIPELINING
> unknown[10.0.0.102]: 250-SIZE 10240000
> unknown[10.0.0.102]: 250-VRFY
> unknown[10.0.0.102]: 250-ETRN
match_list_match: unknown: no match
match_list_match: 10.0.0.102: no match
> unknown[10.0.0.102]: 250-AUTH LOGIN PLAIN
> unknown[10.0.0.102]: 250-ENHANCEDSTATUSCODES
> unknown[10.0.0.102]: 250-8BITMIME
> unknown[10.0.0.102]: 250 DSN
< unknown[10.0.0.102]: AUTH PLAIN bWlrZQBtaWtlAG1pa2U=
xsasl_cyrus_server_first: sasl_method PLAIN, init_response
bWlrZQBtaWtlAG1pa2U=
xsasl_cyrus_server_first: decoded initial response mike
> unknown[10.0.0.102]: 235 2.0.0 Authentication successful
< unknown[10.0.0.102]: mail from:<mike(a)dell1.tela.com>
extract_addr: input: <mike(a)dell1.tela.com>
smtpd_check_addr: addr=mike(a)dell1.tela.com
connect to subsystem private/rewrite
send attr request = rewrite
send attr rule = local
send attr address = mike(a)dell1.tela.com
private/rewrite socket: wanted attribute: flags
input attribute name: flags
input attribute value: 0
private/rewrite socket: wanted attribute: address
input attribute name: address
input attribute value: mike(a)dell1.tela.com
private/rewrite socket: wanted attribute: (list terminator)
input attribute name: (end)
rewrite_clnt: local: mike(a)dell1.tela.com -> mike(a)dell1.tela.com
send attr request = resolve
send attr sender =
send attr address = mike(a)dell1.tela.com
private/rewrite socket: wanted attribute: flags
input attribute name: flags
input attribute value: 0
private/rewrite socket: wanted attribute: transport
input attribute name: transport
input attribute value: local
private/rewrite socket: wanted attribute: nexthop
input attribute name: nexthop
input attribute value: dell1.tela.com
private/rewrite socket: wanted attribute: recipient
input attribute name: recipient
input attribute value: mike(a)dell1.tela.com
private/rewrite socket: wanted attribute: flags
input attribute name: flags
input attribute value: 256
private/rewrite socket: wanted attribute: (list terminator)
input attribute name: (end)
resolve_clnt: `' -> `mike(a)dell1.tela.com' -> transp=`local'
host=`dell1.tela.com' rcpt=`mike(a)dell1.tela.com' flags= class=local
ctable_locate: install entry key mike(a)dell1.tela.com
extract_addr: in: <mike(a)dell1.tela.com>, result: mike(a)dell1.tela.com
fsspace: .: block size 2048, blocks free 4951980
smtpd_check_queue: blocks 2048 avail 4951980 min_free 0 msg_size_limit
10240000
> unknown[10.0.0.102]: 250 2.1.0 Ok
< unknown[10.0.0.102]: rcpt to:<anyone(a)yahoo.com>
extract_addr: input: <anyone(a)yahoo.com>
smtpd_check_addr: addr=anyone(a)yahoo.com
send attr request = rewrite
send attr rule = local
send attr address = anyone(a)yahoo.com
private/rewrite socket: wanted attribute: flags
input attribute name: flags
input attribute value: 0
private/rewrite socket: wanted attribute: address
input attribute name: address
input attribute value: anyone(a)yahoo.com
private/rewrite socket: wanted attribute: (list terminator)
input attribute name: (end)
rewrite_clnt: local: anyone(a)yahoo.com -> anyone(a)yahoo.com
send attr request = resolve
send attr sender =
send attr address = anyone(a)yahoo.com
private/rewrite socket: wanted attribute: flags
input attribute name: flags
input attribute value: 0
private/rewrite socket: wanted attribute: transport
input attribute name: transport
input attribute value: smtp
private/rewrite socket: wanted attribute: nexthop
input attribute name: nexthop
input attribute value: yahoo.com
private/rewrite socket: wanted attribute: recipient
input attribute name: recipient
input attribute value: anyone(a)yahoo.com
private/rewrite socket: wanted attribute: flags
input attribute name: flags
input attribute value: 4096
private/rewrite socket: wanted attribute: (list terminator)
input attribute name: (end)
resolve_clnt: `' -> `anyone(a)yahoo.com' -> transp=`smtp'
host=`yahoo.com' rcpt=`anyone(a)yahoo.com' flags= class=default
ctable_locate: install entry key anyone(a)yahoo.com
extract_addr: in: <anyone(a)yahoo.com>, result: anyone(a)yahoo.com
send attr request = rewrite
send attr rule = local
send attr address = postmaster
private/rewrite socket: wanted attribute: flags
input attribute name: flags
input attribute value: 0
private/rewrite socket: wanted attribute: address
input attribute name: address
input attribute value: postmaster(a)dell1.tela.com
private/rewrite socket: wanted attribute: (list terminator)
input attribute name: (end)
rewrite_clnt: local: postmaster -> postmaster(a)dell1.tela.com
>>> START Client host RESTRICTIONS <<<
generic_checks: name=permit_sasl_authenticated
generic_checks: name=permit_sasl_authenticated status=1
>>> START Recipient address RESTRICTIONS <<<
generic_checks: name=permit_mynetworks
permit_mynetworks: unknown 10.0.0.102
match_hostname: unknown ~? 10.0.0.66/32
match_hostaddr: 10.0.0.102 ~? 10.0.0.66/32
match_hostname: unknown ~? 127.0.0.1/32
match_hostaddr: 10.0.0.102 ~? 127.0.0.1/32
match_hostname: unknown ~? 192.168.0.1/32
match_hostaddr: 10.0.0.102 ~? 192.168.0.1/32
match_list_match: unknown: no match
match_list_match: 10.0.0.102: no match
generic_checks: name=permit_mynetworks status=0
generic_checks: name=reject_unauth_destination
reject_unauth_destination: anyone(a)yahoo.com
permit_auth_destination: anyone(a)yahoo.com
ctable_locate: leave existing entry key anyone(a)yahoo.com
NOQUEUE: reject: RCPT from unknown[10.0.0.102]: 554 5.7.1
<anyone(a)yahoo.com>: Relay access denied; from=<mike(a)dell1.tela.com>
to=<anyone(a)yahoo.com> proto=ESMTP helo=<my.test.client>
generic_checks: name=reject_unauth_destination status=2
> unknown[10.0.0.102]: 554 5.7.1 <anyone(a)yahoo.com>: Relay access denied
< unknown[10.0.0.102]: quit
> unknown[10.0.0.102]: 221 2.0.0 Bye
match_hostname: unknown ~? 10.0.0.66/32
match_hostaddr: 10.0.0.102 ~? 10.0.0.66/32
match_hostname: unknown ~? 127.0.0.1/32
match_hostaddr: 10.0.0.102 ~? 127.0.0.1/32
match_hostname: unknown ~? 192.168.0.1/32
match_hostaddr: 10.0.0.102 ~? 192.168.0.1/32
match_list_match: unknown: no match
match_list_match: 10.0.0.102: no match
send attr request = disconnect
send attr ident = smtp:10.0.0.102
private/anvil: wanted attribute: status
input attribute name: status
input attribute value: 0
private/anvil: wanted attribute: (list terminator)
input attribute name: (end)
disconnect from unknown[10.0.0.102]
master_notify: status 1
connection closed
proxymap stream disconnect
rewrite stream disconnect
idle timeout -- exiting

------
I also set up another server with the same setup but using dovecot
sasl auth instead with postfix and I had the same relay denied
problem.

Any help is appreciated!

Mike