Postfix: How to apply header_checks only for specific Domains?

Posted by Lukas on Server Fault See other posts from Server Fault or by Lukas
Published on 2011-11-23T10:54:24Z Indexed on 2012/11/07 17:04 UTC
Read the original article Hit count: 316

Filed under:
|

Basically what I want to do is rewriting the From: Header, using header_checks, but only if the mail goes to a certain domain.

The problem with header_check is, that I can't check for a combination of To: and From: Headers.

Now I was wondering if it was possible to use the header_checks in combination with smtpd_restriction_classes or something similar.

I've found a lot information about header_checks and multiple header fields, when searching the net. All of them basically telling me, that one can't combine two header for checking. But I didn't find any information if it was possible to only do a header check if a condition (eg. mail goes to example.com) was met.


Edit:

While doing some more Research I've found the following article which suggests to add a Service in postfix master.cf, use a transportmap to pass mails for the Domain to that service and have a separate header_check defined with -o.

The thing is that I can't get it to work...

What I did so far is adding the Service to the master.cf:

example      unix  -       -       n       -       -       smtpd
    -o header_checks=regexp:/etc/postfix/check_headers_example

Adding the followin Line to the transportmap:

example.com                 example:

Last but not least I have two regexp-files for header checks, one for the newly added service, and one to redirect answers to the rewritten domain.

check_headers_example:

/From:(.*)@mydomain.ain>(.*)/ REPLACE From:[email protected]>$2

Obviously if someone answers, the mail would go to nirvana, so I have the following check_headers defined in the main postfix process:

/To:(.*)<(.*)@mydomain.example.com>(.*)/ REDIRECT [email protected]$2

Somehow the Transport is ignored. Any help is appreciated.


Edit 2:

I'm still stuck... I did try the following:

smtpd_restriction_classes = header_rewrite 
header_rewrite = regexp:/etc/postfix/rewrite_headers_domain 
smtpd_recipient_restrictions = (some checks) check_recipient_access hash:/etc/postfix/rewrite_table, (more checks) 

In the rewrite_table the following entries exist:

/From:(.*)@mydomain.ain>(.*)/ REPLACE From:[email protected]>$2 

All it gets me is a NOQUEUE: reject: 451 4.3.5 Server configuration error. I couldn't find any resources on how you would do that but some people saying it wasn't possible.


Edit 3:

The reason I asked this question was, that we have a customer (lets say customer.com) who uses some aliases that will forward mail to a domain, let's say example.com.

The mailserver at example.com does not accept any mail from an external server that come from a sender @example.com.

So all mails that are written from example.com to [email protected] will be rejected in the end.

An exception on example.com's mailserver is not possible.

We didn't really solve this problem, but will try to work around it by using lists (mailman) instead of aliases. This is not really nice though, nor a real solution.

I'd appreciate all suggestions how this could be done in a proper way.

© Server Fault or respective owner

Related posts about postfix

Related posts about configuration