Minor spacing changes
[linux_from_scratch_hints.git] / postfix+spamassassin+razor.txt
blob285ffe8c7e267252ad7843912e85cb35f0d061c1
1 AUTHOR: Gerard Beekmans <gerard@linuxfromscratch.org>
3 DATE: 2003-10-09
5 LICENSE: BSD
7 SYNOPSIS: Integrating SpamAssassin and Razor into Postfix
9 DESCRIPTION:
10 Spamassassing and Razor are great spam fighting tools. To make things even
11 better, integrate it into your SMTP server to block spam at the incoming
12 level rather than at the user level through procmail recipies.
14 PREREQUISITES:  Postfix         - http://www.postfix.org
15                 SpamAssassin    - http://www.spamassassin.org
16                 Razor           - http://razor.sourceforge.net
18 HINT:
20 The main reason for setting up SpamAssassin + Razor at linuxfromscratch.org
21 at the SMTP level is to do a spam check before spam hits the mailinglists.
22 If a message is determined to be spam, Postfix will reject the message.
24 Note:   this hint does not deal with installing the Spamassassin or Razor
25         programs. Download the programs (URLs above) and read the
26         documentation. They're not hard to setup.
28 The Postfix distribution comes with the README_FILES/FILTER_README file you
29 want to read through. It gives some background information on how filtering
30 works in Postfix (which is what we will be doing).
32 That FILTER_README file suggests you creating a dedicated filter user with
33 no home directory or shell. This won't work for us, because spamassassin
34 and razor need a directory to work in and write files to. I decided to call
35 the user and group "postfixfilter". It seemed appropriate enough. Create
36 this group and user the same way you would create any other user and group.
38 Create the filter script that Postfix will be running for every email that
39 comes in:
41 cat > /home/postfixfilter/postfixfilter << "EOF"
42 #!/bin/bash
44 /usr/bin/spamc | /usr/sbin/sendmail -i "$@"
46 exit $?
47 EOF
49 Chown and chmod that file if you didn't create it as user postfixfilter.
51 What does it do? Postfix dumps an email to the
52 /home/postfixfilter/postfixfilter script. We intercept it and dump it to
53 spamc. Spamc connects to the spamd daemon and will run the spam checking
54 tests, then pipe the rewritten email (now including the spam result
55 headers) to sendmail for continued delivery. It then exits with whatever
56 sendmail's return value was.
58 So, we need to have the spamd daemon running. I added it to the postfix
59 bootscript, using the command "spamd -d -u postfixfilter".
61 Next, configure Postfix to start filtering.
63 Edit the /etc/postfix/master.cf (or where ever you keep your postfix
64 configuration files). Find the following line:
66         smtp      inet  n       -       n       -       -       smtpd
68 It may look a bit different but this is the default. This is the line that
69 tells Postfix to listen on the smtp port (25) for incoming email and have
70 smtpd deal with it. This is the line we want to modify in order for
71 incoming email to be filtered (checked for spam in our case) before
72 delivery. Directly below that line, add this one:
74         -o content_filter=postfixfilter:
76 It would be advisable to indent it with a tab or some spaces just so it's
77 easier to see that it belongs to the previous line. Do not forget the
78 colon at the end of the postfixfilter. I'm not quite sure what it does, but
79 the FILTER_README file warns to include it, so just do it.
81 Append the following lines to the end of the master.cf file:
83 postfixfilter unix - n n - - pipe
84         flags=Rq user=postfixfilter argv=/home/postfixfilter/postfixfilter -f ${sender} -- ${recipient}
87 Okay, if you did exactly what I told you to do and I didn't forget to tell
88 you anything, then you are set to go. Reload postfix by running:
90         postfix reload
92 Incoming mail should now be filtered for spam by spamassassin. You can
93 configure spamassassin and razor through the config files in
94 /home/postfixfilter
96 If you want to get rid of spam right here at the SMTP level, you can
97 continue with configuring Postfix to reject or discard all spam after
98 SpamAssassin has tagged mail as such. This is accomplished by telling
99 Postfix to check for certain headers and take appropriate action.
101 Add the following option to the /etc/postfix/main.cf file:
103         header_checks = regexp:/etc/postfix/regexp_header
105 Create the /etc/postfix/regexp_header file and add this line to it:
107         /^X-Spam-Flag: YES/     REJECT I don't like spam. I prefer bison.
109 This will cause Postfix to reject all mail that contain the X-Spam-Flag:
110 header with the value of 'YES'. The reject message "I don't like spam. I
111 prefer bison" is optional. If not present the generic message "message
112 content rejected" will be sent back. Check the access(5) man page for
113 options other than REJECT. DISCARD is an often used one which pretends to
114 be a successful delivery and silently discards the message.
116 CHANGELOG:
117 [2003-10-15]
118         * Fix bug in cat command (forgot the > character to redirect to the
119           output file)
121 [2003-10-11]
122         * Completed pre-requisites section.
124 [2003-10-09]
125         * Rewrite to comply with the new hint format guidelines.
126         * Rewrite text to match the current setup on the LFS server.
128 [2003-01-15]
129         * Updated for latest software versions
130         * Using perl daemon for increased performance rather than start the
131           entire perl program for every incoming email.
132         * Removed the spamassassin bug fix from version 1.1
134 [Unknown date]
135         * Added bugfix for the
136           /usr/lib/perl5/site_perl/5.6.1/Mail/SpamAssassin/PerMsgStatus.pm file
138 [Unknown date]
139         * Initial release.