Built in Content Filters for Postfix
One way to implement content filtering is to use regular expressions in your header, mime_header, nested_header and body checks. This should be simple matches to regular expressions. The goal with this example is to eliminate non-English characters, since we cannot read them anyway. This will drop all non-English mail.
header_checks = pcre:/etc/postfix/header_checks
mime_header_checks = pcre:/etc/postfix/mime_header_checks
nested_header_checks = pcre:/etc/postfix/nested_header_checks
body_checks = pcre:/etc/postfix/body_checks
Notice that the map is pcre in these examples, you could use regexp. Best performance is with pcre (Perl Compatible Regular Expression) tables. Check that you can use pcre with:
postconf -m
If you do not have pcre support you can use regexp.
When you create the file header_checks here are a couple options, there are others.
/pattern/flags action
or
!/pattern/flags action
Decide which one you want to use. The example below uses pattern matches.
If you want to reject or discard all email that is non-English you can take these steps.
Before you set up the header_checks you need to be somewhat familiar with the actions that you want to take. Here is a list of actions with a brief description.
Actions
DISCARD drop out of existence
DUNNO pretend input line did not match pattern
FILTER write a content filter and sent to external filter
HOLD put in hold queue
IGNORE delete current line and move to next line
PREPEND prepend a one with text and inspect next line
REDIRECT enter an email to be directed to
REPLACE put text to replace line
REJECT optional text reply with message
WARN optional text warning with text message
In the example two actions are shown, the first is to DISCARD which means no message will be sent to the user, it is just dropped. The second is to REJECT and then send to message to indicate an unacceptable character set.
# Header Checks
header_checks = pcre:/etc/postfix/header_checks
Create a new file, you can move the default header_checks man page to header_checks_bk and then start a new page.
Contents of header_checks. Thanks to Wietse Venema for this suggestion.
/[^[:print:]]{8}/ DISCARD
# Chinese, Japanese and Korean
/^Content-Type:.*?charset\s*=\s*”?(Big5|gb2312|euc-cn)”?/
REJECT HDR2100: Unaccepted character set: “$1″
/^Content-Type:.*?charset\s*=\s*”?(euc-kr|iso-2022-kr)”?/
REJECT HDR2110: Unaccepted character set: “$1″
/^Content-Type:.*?charset\s*=\s*”?(iso-2022-\w+|euc-jp|shift_jis)”?/
REJECT HDR2120: Unaccepted character set: “$1″
# Cyrrilic character sets: Russian/Ukrainian
/^Content-Type:.*?charset\s*=\s*”?(koi8-(?:r|u))”?/
REJECT HDR2200: Unaccepted character set: “$1″
/^Content-Type:.*?charset\s*=\s*”?(windows-(?:1250|1251))”?/
REJECT HDR2210: Unaccepted character set: “$1″
Once you have the file created restart postfix and then test. Create a testpattern file and place an example in that file to test the header check.
postmap -q – pcre:/etc/postfix/header_checks < testpattern
If the pattern matches that you placed in testpattern then you will get a return on the command. If there is no match, you will get nothing in return.
:
Posted by mike 

You must be logged in to post a comment.