Mercurial > hg > mlmmj
annotate README.postfix @ 749:fdc57c9e5f56
Remove .sh from mlmmj-make-ml.sh; symlink original name
author | Ben Schmidt |
---|---|
date | Sun, 03 Oct 2010 22:12:33 +1100 |
parents | dfc9ab125fd4 |
children | ddae562f7cf0 |
rev | line source |
---|---|
706
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
1 README.postfix Dec 16th 2009 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
2 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
3 POSTFIX ISSUES |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
4 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
5 The main issue with Postfix and mlmmj is the mlmmj requirement that |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
6 the mlmmj executables must be executed by root or the owner of the |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
7 list directory. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
8 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
9 This is at odds with Postfix. The standard local delivery mechanism |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
10 for Postfix is local(8) that ships with Postfix. According to |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
11 local(8) delivery to external programs is done on behalf of the |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
12 receiving user. But when delivering to a program without using a |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
13 .forward file there is no user context. And using an alias file |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
14 does not provide user context. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
15 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
16 The man page also explains that in the absence of user context the |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
17 local(8) daemon will use the owner of the :include: file from the |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
18 aliases file. But this is a problem too. By default :include: |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
19 files are disabled as a security precaution in aliases files for |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
20 delivering to external programs. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
21 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
22 This leaves us with a conundrum on how to execute the mlmmj |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
23 executables as an 'mlmmj' user without using alias files. One |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
24 answer is to use a postfix transport. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
25 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
26 First we'll get the 'mlmmj' user setup and then move onto the |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
27 postfix configuration: |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
28 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
29 MLMMJ SETUP |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
30 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
31 Create a 'mlmmj' user that will own all the lists. Use whatever |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
32 user creation app/script is provided by your system. Generally |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
33 'useradd'. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
34 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
35 Create the spool directory that is owned by the 'mlmmj' user. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
36 This is typically /var/spool/mlmmj but can be any directory so long |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
37 as it is owned by 'mlmmj'. It can even be the home directory of the |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
38 'mlmmj' user. If the spool directory is not /var/spool/mlmmj then |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
39 everywhere in this file replace /var/spool/mlmmj with your spool |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
40 directory. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
41 |
749
fdc57c9e5f56
Remove .sh from mlmmj-make-ml.sh; symlink original name
Ben Schmidt
parents:
748
diff
changeset
|
42 Create a mailing list using mlmmj-make-ml. Make sure to use the |
706
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
43 -s flag to set the spool directory if it isn't /var/spool/mlmmj |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
44 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
45 POSTFIX SETUP |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
46 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
47 First thing is to make sure that the postfix server accepts mail for |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
48 the mailing lists. For a server that handles mail for multiple |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
49 domains, this is done with a 'virtual_alias_map'. This is how I'll |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
50 demonstrate. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
51 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
52 Add a virtual_alias_map file to main.cf configuration. We'll use a |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
53 regular expression map since we need to be able to match all the |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
54 various mjmml delimiter addresses (list-subscribe, list-unsubscribe, |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
55 etc) |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
56 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
57 main.cf: |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
58 virtual_alias_maps = hash:/etc/postfix/virtual, |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
59 regexp:/var/spool/mlmmj/virtual.regexp |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
60 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
61 /var/spool/mlmmj/virtual.regexp: |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
62 /^(mlmmj-test.*)@example\.com$/ ${1} |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
63 /^(another-list.*)@sample\.com$/ ${1} |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
64 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
65 One line needs to be in the virtual map for each list the 'mlmmj' id |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
66 is to handle. The regex formula is: |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
67 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
68 /^(list-name.*)@(domain\.com)$/ ${1} |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
69 |
747
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
70 If you want to host multiple domains in a hierarchical structure, |
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
71 you can alternatively use: |
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
72 |
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
73 /^(list-name.*)@(domain\.com)$/ domain--${1} |
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
74 |
706
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
75 Next we make sure that postfix can invoke the mlmmj executables as |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
76 the 'mlmmj' user. This is where the transport map comes in. So we |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
77 add a transport map and a configuration option that instructs the |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
78 transport to only deliver one file at a time. See transport(5) for |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
79 more information on transports. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
80 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
81 main.cf: |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
82 transport_maps = regexp:/var/spool/mlmmj/transport |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
83 mlmmj_destination_recipient_limit = 1 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
84 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
85 /var/spool/mlmmj/transport: |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
86 /^(list-test).*$/ mlmmj:list-test |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
87 /^(another-list).*$/ mlmmj:another-list |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
88 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
89 What this transport file says, is that any message destined for an |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
90 email address that matches the regexp on the left, deliver it using |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
91 the transport 'mlmmj' and setting 'nexthop' to the value in $1. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
92 Which in this case is the mailing list name. 'nexthop' is special |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
93 variable for transports. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
94 |
747
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
95 For the hierarchical multi-domain solution, use this variant: |
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
96 |
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
97 /^(domain--list-name).*$/ mlmmj:domain/list-name |
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
98 |
706
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
99 Now we setup the 'mlmmj' transport. The 'mlmmj' in mlmmj:$1 above |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
100 indicates a transport listed in the postfix master.cf file. We are |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
101 just going to create a transport called 'mlmmj' but it is nothing |
748
dfc9ab125fd4
Fix spelling of 'receive' and 'voodoo'; make mlmmj-recieve a symlink
Chris Webb
parents:
747
diff
changeset
|
102 more than a pipe(8) to the mlmmj-receive program that is invoked as |
706
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
103 the 'mlmmj' user. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
104 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
105 master.cf: |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
106 # mlmmj mailing lists |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
107 mlmmj unix - n n - - pipe |
748
dfc9ab125fd4
Fix spelling of 'receive' and 'voodoo'; make mlmmj-recieve a symlink
Chris Webb
parents:
747
diff
changeset
|
108 flags=DORhu user=mlmmj argv=/usr/local/bin/mlmmj-receive -F -L /var/spool/mlmmj/$nexthop/ |
706
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
109 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
110 This takes the pipe(8) postfix delivery agent and tells it to invoke |
748
dfc9ab125fd4
Fix spelling of 'receive' and 'voodoo'; make mlmmj-recieve a symlink
Chris Webb
parents:
747
diff
changeset
|
111 '/usr/local/bin/mlmmj-receive' as the 'mlmmj' user and pipe the |
706
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
112 email to it on stdin. This mode of transportation is given the name |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
113 'mlmmj'. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
114 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
115 The 'flags' parameter to pipe(8) is pretty critical here. In |
748
dfc9ab125fd4
Fix spelling of 'receive' and 'voodoo'; make mlmmj-recieve a symlink
Chris Webb
parents:
747
diff
changeset
|
116 particular if the 'R' option is not used mlmmj-receive fails to |
dfc9ab125fd4
Fix spelling of 'receive' and 'voodoo'; make mlmmj-recieve a symlink
Chris Webb
parents:
747
diff
changeset
|
117 receive the mail correctly. The options mean: |
706
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
118 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
119 D - Prepend a 'Delivered-To: recipient' header |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
120 O - Prepend an 'X-Original-To: recipient' header |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
121 R - Prepend a 'Return-Path:'. header |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
122 h - fold $nexthop to lowercase |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
123 u - fold $recipient to lowercase |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
124 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
125 $nexthop gets set to what was on the right had side of the ':' in |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
126 the transport file. The way we have that configured is that |
747
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
127 $nexthop will get set to the name of the mailing list (or domain |
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
128 and name). Your list directories, then, should be at |
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
129 /var/spool/mlmmj/list-name as usual, or for the hierarchical |
fd77dd58bde1
Added info on a hierarchical multi-domain option to README.postfix
Ben Schmidt
parents:
706
diff
changeset
|
130 multi-domain version, in /var/spool/mlmmj/domain/list-name. |
706
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
131 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
132 Restart postfix and enjoy your new lists. |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
133 |
52189a450b0c
Added README.postfix (Jeremy Hinegardner, Andreas Schneider)
mortenp
parents:
diff
changeset
|
134 |