From: Israel Garcia on
Hi
I have some apps on a debian server which use to send mail using
localhost on the same server and I want allow only email sent to this
address user(a)domain and reject all other. This is my main.cf

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

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.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

myhostname = myserver.mydomain
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = myserver.mydomain, localhost.speedyrails.ca, , localhost
smtpd_recipient_restrictions =
check_recipient_access hash:/etc/postfix/recipients,
check_relay_domains,
reject

relayhost = [lbsmtp]
smtp_host_lookup = dns,native
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = localhost
mailbox_command =
default_transport = smtp
relay_transport = smtp
smtp_host_lookup=dns,native
inet_protocols = ipv4

/etc/postfix/recipient file:

user(a)domain OK
\*\@\* REJECT

So, if I test sending mail using mail command or mutt rules does not
work, but, if I use telnet or nc to connect to localhost on 25/tcp
port rule works. Simple question, WHY?

How can I restrict my server to send mail TO user(a)domain?

NOTES:
This server only accept mails from localhost
This server send mails to a load balancer [lbsmtp]

thanks in advance

--
Regards;
Israel Garcia

From: mouss on
Israel Garcia a écrit :
> Hi
> I have some apps on a debian server which use to send mail using
> localhost on the same server and I want allow only email sent to this
> address user(a)domain and reject all other. This is my main.cf
>
> smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
> biff = no
> append_dot_mydomain = no
> readme_directory = no
>
> # TLS parameters
> smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
> smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.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
>
> myhostname = myserver.mydomain
> alias_maps = hash:/etc/aliases
> alias_database = hash:/etc/aliases
> myorigin = /etc/mailname
> mydestination = myserver.mydomain, localhost.speedyrails.ca, , localhost
> smtpd_recipient_restrictions =
> check_recipient_access hash:/etc/postfix/recipients,
> check_relay_domains,
> reject
>
> relayhost = [lbsmtp]
> smtp_host_lookup = dns,native
> mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
> mailbox_size_limit = 0
> recipient_delimiter = +
> inet_interfaces = localhost
> mailbox_command =
> default_transport = smtp
> relay_transport = smtp
> smtp_host_lookup=dns,native
> inet_protocols = ipv4
>
> /etc/postfix/recipient file:
>
> user(a)domain OK
> \*\@\* REJECT

the last line is useless.

>
> So, if I test sending mail using mail command or mutt rules does not
> work, but, if I use telnet or nc to connect to localhost on 25/tcp
> port rule works. Simple question, WHY?

because smtpd_* parameters apply to mail received via SMTP.

>
> How can I restrict my server to send mail TO user(a)domain?
>

There are many ways...

[transports]
instead of using smtpd restrictions, you can use transport_maps:

user(a)domain smtp:
* error:recipient address not allowed

(note that '*' only works for transport_maps. don't use it in access maps).

[smtpd restrictions via a content filter]
you can force mail submitted via the sendmail (pickup) interface to go
through smtpd by adding
-o content_filter=smtp:[127.0.0.1]:25

under the "pickup" service in master.cf. However:

- if you do so, you must not use the sendmail command after content
filtering. otherwise, you'll get an infinite loop.

- mail that will be rejected will cause a bounce. you need to handle
this. Instead of "reject", you could use HOLD to put mail on hold (and
remove it manually using the postsuper command), or you can

> NOTES:
> This server only accept mails from localhost
> This server send mails to a load balancer [lbsmtp]
>
> thanks in advance
>

From: Ansgar Wiechers on
On 2010-04-17 Israel Garcia wrote:
> So, if I test sending mail using mail command or mutt rules does not
> work, but, if I use telnet or nc to connect to localhost on 25/tcp
> port rule works. Simple question, WHY?

Because mutt et al. submit their mail via pickup, not via smtpd, and
smtpd_*_restrictions don't apply to pickup.

> How can I restrict my server to send mail TO user(a)domain?

# /etc/postfix/main.cf
transport_maps = hash:/etc/postfix/transport

# /etc/postfix/transport
user(a)domain :
* error:destination prohibited

Regards
Ansgar Wiechers
--
"Abstractions save us time working, but they don't save us time learning."
--Joel Spolsky

From: Israel Garcia on
postfix rocks!! :-)

working perfectly...

thanks mouss

regards,
Israel.

On Sun, Apr 18, 2010 at 12:42 AM, mouss <mouss(a)ml.netoyen.net> wrote:
> Israel Garcia a écrit :
>> Hi
>> I have some apps on a debian server which use to send mail using
>> localhost on the same server and I want allow only email sent to this
>> address user(a)domain and  reject all other. This is my main.cf
>>
>> smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
>> biff = no
>> append_dot_mydomain = no
>> readme_directory = no
>>
>> # TLS parameters
>> smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
>> smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.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
>>
>> myhostname = myserver.mydomain
>> alias_maps = hash:/etc/aliases
>> alias_database = hash:/etc/aliases
>> myorigin = /etc/mailname
>> mydestination = myserver.mydomain, localhost.speedyrails.ca, , localhost
>> smtpd_recipient_restrictions =
>>         check_recipient_access hash:/etc/postfix/recipients,
>>         check_relay_domains,
>>         reject
>>
>> relayhost = [lbsmtp]
>> smtp_host_lookup = dns,native
>> mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
>> mailbox_size_limit = 0
>> recipient_delimiter = +
>> inet_interfaces = localhost
>> mailbox_command =
>> default_transport = smtp
>> relay_transport = smtp
>> smtp_host_lookup=dns,native
>> inet_protocols = ipv4
>>
>> /etc/postfix/recipient file:
>>
>> user(a)domain  OK
>> \*\@\*  REJECT
>
> the last line is useless.
>
>>
>> So, if I test sending mail using mail command or mutt rules does not
>> work, but, if I use telnet or nc to connect to localhost on 25/tcp
>> port rule works. Simple question, WHY?
>
> because smtpd_* parameters apply to mail received via SMTP.
>
>>
>> How can I restrict my server to send mail TO user(a)domain?
>>
>
> There are many ways...
>
> [transports]
> instead of using smtpd restrictions, you can use transport_maps:
>
> user(a)domain     smtp:
> *       error:recipient address not allowed
>
> (note that '*' only works for transport_maps. don't use it in access maps).
>
> [smtpd restrictions via a content filter]
> you can force mail submitted via the sendmail (pickup) interface to go
> through smtpd by adding
> -o content_filter=smtp:[127.0.0.1]:25
>
> under the "pickup" service in master.cf. However:
>
> - if you do so, you must not use the sendmail command after content
> filtering. otherwise, you'll get an infinite loop.
>
> - mail that will be rejected will cause a bounce. you need to handle
> this. Instead of "reject", you could use HOLD to put mail on hold (and
> remove it manually using the postsuper command), or you can
>
>> NOTES:
>> This server only accept mails from localhost
>> This server send mails to a load balancer [lbsmtp]
>>
>> thanks in advance
>>
>
>



--
Regards;
Israel Garcia