STANDARD_CONFIGURATION_README.html revision 1.1.1.2 1 1.1 tron <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
2 1.1 tron "http://www.w3.org/TR/html4/loose.dtd">
3 1.1 tron
4 1.1 tron <html>
5 1.1 tron
6 1.1 tron <head>
7 1.1 tron
8 1.1 tron <title>Postfix Standard Configuration Examples</title>
9 1.1 tron
10 1.1 tron <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
11 1.1 tron
12 1.1 tron </head>
13 1.1 tron
14 1.1 tron <body>
15 1.1 tron
16 1.1 tron <h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix Standard Configuration Examples</h1>
17 1.1 tron
18 1.1 tron <hr>
19 1.1 tron
20 1.1 tron <h2>Purpose of this document</h2>
21 1.1 tron
22 1.1 tron <p> This document presents a number of typical Postfix configurations.
23 1.1 tron This document should be reviewed after you have followed the basic
24 1.1 tron configuration steps as described in the BASIC_CONFIGURATION_README
25 1.1 tron document. In particular, do not proceed here if you don't already
26 1.1 tron have Postfix working for local mail submission and for local mail
27 1.1 tron delivery. </p>
28 1.1 tron
29 1.1 tron <p> The first part of this document presents standard configurations
30 1.1 tron that each solve one specific problem. </p>
31 1.1 tron
32 1.1 tron <ul>
33 1.1 tron
34 1.1 tron <li><a href="#stand_alone">Postfix on a stand-alone Internet host</a>
35 1.1 tron
36 1.1 tron <li><a href="#null_client">Postfix on a null client</a>
37 1.1 tron
38 1.1 tron <li><a href="#local_network">Postfix on a local network</a>
39 1.1 tron
40 1.1 tron <li><a href="#firewall">Postfix email firewall/gateway</a>
41 1.1 tron
42 1.1 tron </ul>
43 1.1 tron
44 1.1 tron <p> The second part of this document presents additional configurations
45 1.1 tron for hosts in specific environments. </p>
46 1.1 tron
47 1.1 tron <ul>
48 1.1 tron
49 1.1 tron <li><a href="#some_local">Delivering some but not all accounts locally</a>
50 1.1 tron
51 1.1 tron <li><a href="#intranet">Running Postfix behind a firewall</a>
52 1.1 tron
53 1.1 tron <li><a href="#backup">Configuring Postfix as primary or backup MX host for a remote
54 1.1 tron site</a>
55 1.1 tron
56 1.1 tron <li><a href="#dialup">Postfix on a dialup machine</a>
57 1.1 tron
58 1.1 tron <li><a href="#fantasy">Postfix on hosts without a real
59 1.1 tron Internet hostname</a>
60 1.1 tron
61 1.1 tron </ul>
62 1.1 tron
63 1.1 tron <h2><a name="stand_alone">Postfix on a stand-alone Internet host</a></h2>
64 1.1 tron
65 1.1 tron <p> Postfix should work out of the box without change on a stand-alone
66 1.1 tron machine that has direct Internet access. At least, that is how
67 1.1 tron Postfix installs when you download the Postfix source code via
68 1.1 tron http://www.postfix.org/. </p>
69 1.1 tron
70 1.1 tron <p> You can use the command "<b>postconf -n</b>" to find out what
71 1.1 tron settings are overruled by your main.cf. Besides a few pathname
72 1.1 tron settings, few parameters should be set on a stand-alone box, beyond
73 1.1 tron what is covered in the BASIC_CONFIGURATION_README document: </p>
74 1.1 tron
75 1.1 tron <blockquote>
76 1.1 tron <pre>
77 1.1 tron /etc/postfix/main.cf:
78 1.1 tron # Optional: send mail as user@domainname instead of user@hostname.
79 1.1 tron #myorigin = $mydomain
80 1.1 tron
81 1.1 tron # Optional: specify NAT/proxy external address.
82 1.1 tron #proxy_interfaces = 1.2.3.4
83 1.1 tron
84 1.1 tron # Alternative 1: don't relay mail from other hosts.
85 1.1 tron mynetworks_style = host
86 1.1 tron relay_domains =
87 1.1 tron
88 1.1 tron # Alternative 2: relay mail from local clients only.
89 1.1 tron # mynetworks = 192.168.1.0/28
90 1.1 tron # relay_domains =
91 1.1 tron </pre>
92 1.1 tron </blockquote>
93 1.1 tron
94 1.1 tron <p> See also the section "<a href="#fantasy">Postfix on hosts without
95 1.1 tron a real Internet hostname</a>" if this is applicable to your configuration.
96 1.1 tron </p>
97 1.1 tron
98 1.1 tron <h2><a name="null_client">Postfix on a null client</a></h2>
99 1.1 tron
100 1.1 tron <p> A null client is a machine that can only send mail. It receives no
101 1.1 tron mail from the network, and it does not deliver any mail locally. A
102 1.1 tron null client typically uses POP, IMAP or NFS for mailbox access. </p>
103 1.1 tron
104 1.1 tron <p> In this example we assume that the Internet domain name is
105 1.1 tron "example.com" and that the machine is named "nullclient.example.com".
106 1.1 tron As usual, the examples show only parameters that are not left at
107 1.1 tron their default settings. </p>
108 1.1 tron
109 1.1 tron <blockquote>
110 1.1 tron <pre>
111 1.1 tron 1 /etc/postfix/main.cf:
112 1.1 tron 2 myorigin = $mydomain
113 1.1 tron 3 relayhost = $mydomain
114 1.1 tron 4 inet_interfaces = loopback-only
115 1.1 tron 5 local_transport = error:local delivery is disabled
116 1.1 tron 6
117 1.1 tron 7 /etc/postfix/master.cf:
118 1.1 tron 8 Comment out the local delivery agent entry
119 1.1 tron </pre>
120 1.1 tron </blockquote>
121 1.1 tron
122 1.1 tron <p> Translation: </p>
123 1.1 tron
124 1.1 tron <ul>
125 1.1 tron
126 1.1 tron <li> <p> Line 2: Send mail as "user (a] example.com" (instead of
127 1.1 tron "user (a] nullclient.example.com"), so that nothing ever has a reason
128 1.1 tron to send mail to "user (a] nullclient.example.com". </p>
129 1.1 tron
130 1.1 tron <li> <p> Line 3: Forward all mail to the mail server that is
131 1.1 tron responsible for the "example.com" domain. This prevents mail from
132 1.1 tron getting stuck on the null client if it is turned off while some
133 1.1 tron remote destination is unreachable. </p>
134 1.1 tron
135 1.1 tron <li> <p> Line 4: Do not accept mail from the network. </p>
136 1.1 tron
137 1.1 tron <li> <p> Lines 5-8: Disable local mail delivery. All mail goes to
138 1.1 tron the mail server as specified in line 3. </p>
139 1.1 tron
140 1.1 tron </ul>
141 1.1 tron
142 1.1 tron <h2><a name="local_network">Postfix on a local network</a></h2>
143 1.1 tron
144 1.1 tron <p> This section describes a local area network environment of one
145 1.1 tron main server and multiple other systems that send and receive email.
146 1.1 tron As usual we assume that the Internet domain name is "example.com".
147 1.1 tron All systems are configured to send mail as "user (a] example.com", and
148 1.1 tron all systems receive mail for "user (a] hostname.example.com". The main
149 1.1 tron server also receives mail for "user (a] example.com". We call this
150 1.1 tron machine by the name of mailhost.example.com. </p>
151 1.1 tron
152 1.1 tron <p> A drawback of sending mail as "user (a] example.com" is that mail
153 1.1 tron for "root" and other system accounts is also sent to the central
154 1.1 tron mailhost. See the section "<a href="#some_local">Delivering some
155 1.1 tron but not all accounts locally</a>" below for possible solutions.
156 1.1 tron </p>
157 1.1 tron
158 1.1 tron <p> As usual, the examples show only parameters that are not left
159 1.1 tron at their default settings. </p>
160 1.1 tron
161 1.1 tron <p> First we present the non-mailhost configuration, because it is
162 1.1 tron the simpler one. This machine sends mail as "user (a] example.com" and
163 1.1 tron is final destination for "user (a] hostname.example.com". </p>
164 1.1 tron
165 1.1 tron <blockquote>
166 1.1 tron <pre>
167 1.1 tron 1 /etc/postfix/main.cf:
168 1.1 tron 2 myorigin = $mydomain
169 1.1 tron 3 mynetworks = 127.0.0.0/8 10.0.0.0/24
170 1.1 tron 4 relay_domains =
171 1.1 tron 5 # Optional: forward all non-local mail to mailhost
172 1.1 tron 6 #relayhost = $mydomain
173 1.1 tron </pre>
174 1.1 tron </blockquote>
175 1.1 tron
176 1.1 tron <p> Translation: </p>
177 1.1 tron
178 1.1 tron <ul>
179 1.1 tron
180 1.1 tron <li> <p> Line 2: Send mail as "user (a] example.com". </p>
181 1.1 tron
182 1.1 tron <li> <p> Line 3: Specify the trusted networks. </p>
183 1.1 tron
184 1.1 tron <li> <p> Line 4: This host does not relay mail from untrusted networks. </p>
185 1.1 tron
186 1.1 tron <li> <p> Line 6: This is needed if no direct Internet access is
187 1.1 tron available. See also below, "<a href="#firewall">Postfix behind
188 1.1 tron a firewall</a>". </p>
189 1.1 tron
190 1.1 tron </ul>
191 1.1 tron
192 1.1 tron <p> Next we present the mailhost configuration. This machine sends
193 1.1 tron mail as "user (a] example.com" and is final destination for
194 1.1 tron "user (a] hostname.example.com" as well as "user (a] example.com". </p>
195 1.1 tron
196 1.1 tron <blockquote>
197 1.1 tron <pre>
198 1.1 tron 1 DNS:
199 1.1 tron 2 example.com IN MX 10 mailhost.example.com.
200 1.1 tron 3
201 1.1 tron 4 /etc/postfix/main.cf:
202 1.1 tron 5 myorigin = $mydomain
203 1.1 tron 6 mydestination = $myhostname localhost.$mydomain localhost $mydomain
204 1.1 tron 7 mynetworks = 127.0.0.0/8 10.0.0.0/24
205 1.1 tron 8 relay_domains =
206 1.1 tron 9 # Optional: forward all non-local mail to firewall
207 1.1 tron 10 #relayhost = [firewall.example.com]
208 1.1 tron </pre>
209 1.1 tron </blockquote>
210 1.1 tron
211 1.1 tron <p> Translation: </p>
212 1.1 tron
213 1.1 tron <ul>
214 1.1 tron
215 1.1 tron <li> <p> Line 2: Send mail for the domain "example.com" to the
216 1.1 tron machine mailhost.example.com. Remember to specify the "." at the
217 1.1 tron end of the line. </p>
218 1.1 tron
219 1.1 tron <li> <p> Line 5: Send mail as "user (a] example.com". </p>
220 1.1 tron
221 1.1 tron <li> <p> Line 6: This host is the final mail destination for the
222 1.1 tron "example.com" domain, in addition to the names of the machine
223 1.1 tron itself. </p>
224 1.1 tron
225 1.1 tron <li> <p> Line 7: Specify the trusted networks. </p>
226 1.1 tron
227 1.1 tron <li> <p> Line 8: This host does not relay mail from untrusted networks. </p>
228 1.1 tron
229 1.1 tron <li> <p> Line 10: This is needed only when the mailhost has to
230 1.1 tron forward non-local mail via a mail server on a firewall. The
231 1.1 tron <tt>[]</tt> forces Postfix to do no MX record lookups. </p>
232 1.1 tron
233 1.1 tron </ul>
234 1.1 tron
235 1.1 tron <p> In an environment like this, users access their mailbox in one
236 1.1 tron or more of the following ways:
237 1.1 tron
238 1.1 tron <ul>
239 1.1 tron
240 1.1 tron <li> <p> Mailbox access via NFS or equivalent. </p>
241 1.1 tron
242 1.1 tron <li> <p> Mailbox access via POP or IMAP. </p>
243 1.1 tron
244 1.1 tron <li> <p> Mailbox on the user's preferred machine. </p>
245 1.1 tron
246 1.1 tron </ul>
247 1.1 tron
248 1.1 tron <p> In the latter case, each user has an alias on the mailhost that
249 1.1 tron forwards mail to her preferred machine: </p>
250 1.1 tron
251 1.1 tron <blockquote>
252 1.1 tron <pre>
253 1.1 tron /etc/aliases:
254 1.1 tron joe: joe (a] joes.preferred.machine
255 1.1 tron jane: jane (a] janes.preferred.machine
256 1.1 tron </pre>
257 1.1 tron </blockquote>
258 1.1 tron
259 1.1 tron <p> On some systems the alias database is not in /etc/aliases. To
260 1.1 tron find out the location for your system, execute the command "<b>postconf
261 1.1 tron alias_maps</b>". </p>
262 1.1 tron
263 1.1 tron <p> Execute the command "<b>newaliases</b>" whenever you change
264 1.1 tron the aliases file. </p>
265 1.1 tron
266 1.1 tron <h2><a name="firewall">Postfix email firewall/gateway</a></h2>
267 1.1 tron
268 1.1 tron <p> The idea is to set up a Postfix email firewall/gateway that
269 1.1 tron forwards mail for "example.com" to an inside gateway machine but
270 1.1 tron rejects mail for "anything.example.com". There is only one problem:
271 1.1 tron with "relay_domains = example.com", the firewall normally also
272 1.1 tron accepts mail for "anything.example.com". That would not be right.
273 1.1 tron </p>
274 1.1 tron
275 1.1 tron <p> Note: this example requires Postfix version 2.0 and later. To find
276 1.1 tron out what Postfix version you have, execute the command "<b>postconf
277 1.1 tron mail_version</b>". </p>
278 1.1 tron
279 1.1 tron <p> The solution is presented in multiple parts. This first part
280 1.1 tron gets rid of local mail delivery on the firewall, making the firewall
281 1.1 tron harder to break. </p>
282 1.1 tron
283 1.1 tron <blockquote>
284 1.1 tron <pre>
285 1.1 tron 1 /etc/postfix/main.cf:
286 1.1 tron 2 myorigin = example.com
287 1.1 tron 3 mydestination =
288 1.1 tron 4 local_recipient_maps =
289 1.1 tron 5 local_transport = error:local mail delivery is disabled
290 1.1 tron 6
291 1.1 tron 7 /etc/postfix/master.cf:
292 1.1 tron 8 Comment out the local delivery agent
293 1.1 tron </pre>
294 1.1 tron </blockquote>
295 1.1 tron
296 1.1 tron <p> Translation: </p>
297 1.1 tron
298 1.1 tron <ul>
299 1.1 tron
300 1.1 tron <li> <p> Line 2: Send mail from this machine as "user (a] example.com",
301 1.1 tron so that no reason exists to send mail to "user (a] firewall.example.com".
302 1.1 tron </p>
303 1.1 tron
304 1.1 tron <li> <p> Lines 3-8: Disable local mail delivery on the firewall
305 1.1 tron machine. </p>
306 1.1 tron
307 1.1 tron </ul>
308 1.1 tron
309 1.1 tron <p> For the sake of technical correctness the firewall must be able
310 1.1 tron to receive mail for postmaster@[firewall ip address]. Reportedly,
311 1.1 tron some things actually expect this ability to exist. The second part
312 1.1 tron of the solution therefore adds support for postmaster@[firewall ip
313 1.1 tron address], and as a bonus we do abuse@[firewall ip address] as well.
314 1.1 tron All the mail to these two accounts is forwarded to an inside address.
315 1.1 tron </p>
316 1.1 tron
317 1.1 tron <blockquote>
318 1.1 tron <pre>
319 1.1 tron 1 /etc/postfix/main.cf:
320 1.1 tron 2 virtual_alias_maps = hash:/etc/postfix/virtual
321 1.1 tron 3
322 1.1 tron 4 /etc/postfix/virtual:
323 1.1 tron 5 postmaster postmaster (a] example.com
324 1.1 tron 6 abuse abuse (a] example.com
325 1.1 tron </pre>
326 1.1 tron </blockquote>
327 1.1 tron
328 1.1 tron <p> Translation: </p>
329 1.1 tron
330 1.1 tron <ul>
331 1.1 tron
332 1.1 tron <li> <p> Because mydestination is empty (see the previous example),
333 1.1 tron only address literals matching $inet_interfaces or $proxy_interfaces
334 1.1 tron are deemed local. So "localpart@[a.d.d.r]" can be matched as simply
335 1.1 tron "localpart" in canonical(5) and virtual(5). This avoids the need to
336 1.1 tron specify firewall IP addresses into Postfix configuration files. </p>
337 1.1 tron
338 1.1 tron </ul>
339 1.1 tron
340 1.1 tron <p> The last part of the solution does the email forwarding, which
341 1.1 tron is the real purpose of the firewall email function. </p>
342 1.1 tron
343 1.1 tron <blockquote>
344 1.1 tron <pre>
345 1.1 tron 1 /etc/postfix/main.cf:
346 1.1 tron 2 mynetworks = 127.0.0.0/8 12.34.56.0/24
347 1.1 tron 3 relay_domains = example.com
348 1.1 tron 4 parent_domain_matches_subdomains =
349 1.1 tron 5 debug_peer_list smtpd_access_maps
350 1.1 tron 6 smtpd_recipient_restrictions =
351 1.1 tron 7 permit_mynetworks reject_unauth_destination
352 1.1 tron 8
353 1.1 tron 9 relay_recipient_maps = hash:/etc/postfix/relay_recipients
354 1.1 tron 10 transport_maps = hash:/etc/postfix/transport
355 1.1 tron 11
356 1.1 tron 12 /etc/postfix/relay_recipients:
357 1.1 tron 13 user1 (a] example.com x
358 1.1 tron 14 user2 (a] example.com x
359 1.1 tron 15 . . .
360 1.1 tron 16
361 1.1 tron 17 /etc/postfix/transport:
362 1.1 tron 18 example.com smtp:[inside-gateway.example.com]
363 1.1 tron </pre>
364 1.1 tron </blockquote>
365 1.1 tron
366 1.1 tron <p> Translation: </p>
367 1.1 tron
368 1.1 tron <ul>
369 1.1 tron
370 1.1 tron <li><p> Lines 1-7: Accept mail from local systems in $mynetworks,
371 1.1 tron and accept mail from outside for "user (a] example.com" but not for
372 1.1 tron "user (a] anything.example.com". The magic is in lines 4-5. </p>
373 1.1 tron
374 1.1 tron <li> <p> Lines 9, 12-14: Define the list of valid addresses in the
375 1.1 tron "example.com" domain that can receive mail from the Internet. This
376 1.1 tron prevents the mail queue from filling up with undeliverable
377 1.1 tron MAILER-DAEMON messages. If you can't maintain a list of valid
378 1.1 tron recipients then you must specify "relay_recipient_maps =" (that
379 1.1 tron is, an empty value), or you must specify an "@example.com x"
380 1.1 tron wild-card in the relay_recipients table. </p>
381 1.1 tron
382 1.1 tron <li> <p> Lines 10, 17-18: Route mail for "example.com" to the inside
383 1.1 tron gateway machine. The <tt>[]</tt> forces Postfix to do no MX lookup.
384 1.1 tron </p>
385 1.1 tron
386 1.1 tron </ul>
387 1.1 tron
388 1.1 tron <p>Specify <b>dbm</b> instead of <b>hash</b> if your system uses
389 1.1 tron <b>dbm</b> files instead of <b>db</b> files. To find out what lookup
390 1.1 tron tables Postfix supports, use the command "<b>postconf -m</b>". </p>
391 1.1 tron
392 1.1 tron <p> Execute the command "<b>postmap /etc/postfix/relay_recipients</b>"
393 1.1 tron whenever you change the relay_recipients table. </p>
394 1.1 tron
395 1.1 tron <p> Execute the command "<b>postmap /etc/postfix/transport</b>"
396 1.1 tron whenever you change the transport table. </p>
397 1.1 tron
398 1.1 tron <p> In some installations, there may be separate instances of Postfix
399 1.1 tron processing inbound and outbound mail on a multi-homed firewall. The
400 1.1 tron inbound Postfix instance has an SMTP server listening on the external
401 1.1 tron firewall interface, and the outbound Postfix instance has an SMTP server
402 1.1 tron listening on the internal interface. In such a configuration is it is
403 1.1 tron tempting to configure $inet_interfaces in each instance with just the
404 1.1 tron corresponding interface address. </p>
405 1.1 tron
406 1.1 tron <p> In most cases, using inet_interfaces in this way will not work,
407 1.1 tron because as documented in the $inet_interfaces reference manual, the
408 1.1 tron smtp(8) delivery agent will also use the specified interface address
409 1.1 tron as the source address for outbound connections and will be unable to
410 1.1 tron reach hosts on "the other side" of the firewall. The symptoms are that
411 1.1 tron the firewall is unable to connect to hosts that are in fact up. See the
412 1.1 tron inet_interfaces parameter documentation for suggested work-arounds.</p>
413 1.1 tron
414 1.1 tron <h2><a name="some_local">Delivering some but not all accounts
415 1.1 tron locally</a></h2>
416 1.1 tron
417 1.1 tron <p> A drawback of sending mail as "user (a] example.com" (instead of
418 1.1 tron "user (a] hostname.example.com") is that mail for "root" and other
419 1.1 tron system accounts is also sent to the central mailhost. In order to
420 1.1 tron deliver such accounts locally, you can set up virtual aliases as
421 1.1 tron follows: </p>
422 1.1 tron
423 1.1 tron <blockquote>
424 1.1 tron <pre>
425 1.1 tron 1 /etc/postfix/main.cf:
426 1.1 tron 2 virtual_alias_maps = hash:/etc/postfix/virtual
427 1.1 tron 3
428 1.1 tron 4 /etc/postfix/virtual:
429 1.1 tron 5 root root@localhost
430 1.1 tron 6 . . .
431 1.1 tron </pre>
432 1.1 tron </blockquote>
433 1.1 tron
434 1.1 tron <p> Translation: </p>
435 1.1 tron
436 1.1 tron <ul>
437 1.1 tron
438 1.1 tron <li> <p> Line 5: As described in the virtual(5) manual page, the
439 1.1 tron bare name "root" matches "root@site" when "site" is equal to
440 1.1 tron $myorigin, when "site" is listed in $mydestination, or when it
441 1.1 tron matches $inet_interfaces or $proxy_interfaces. </p>
442 1.1 tron
443 1.1 tron </ul>
444 1.1 tron
445 1.1.1.2 tron <p> Execute the command "<b>postmap /etc/postfix/virtual</b>" after
446 1.1.1.2 tron editing the file. </p>.
447 1.1.1.2 tron
448 1.1 tron <h2><a name="intranet">Running Postfix behind a firewall</a></h2>
449 1.1 tron
450 1.1 tron <p> The simplest way to set up Postfix on a host behind a firewalled
451 1.1 tron network is to send all mail to a gateway host, and to let that mail
452 1.1 tron host take care of internal and external forwarding. Examples of that
453 1.1 tron are shown in the <a href="#local_network">local area network</a>
454 1.1 tron section above. A more sophisticated approach is to send only external
455 1.1 tron mail to the gateway host, and to send intranet mail directly.
456 1.1 tron That's what Wietse does at work. </p>
457 1.1 tron
458 1.1 tron <p> Note: this example requires Postfix version 2.0 and later. To find
459 1.1 tron out what Postfix version you have, execute the command "<b>postconf
460 1.1 tron mail_version</b>". </p>
461 1.1 tron
462 1.1 tron <p> The following example presents additional configuration. You
463 1.1 tron need to combine this with basic configuration information as
464 1.1 tron discussed the first half of this document. </p>
465 1.1 tron
466 1.1 tron <blockquote>
467 1.1 tron <pre>
468 1.1 tron 1 /etc/postfix/main.cf:
469 1.1 tron 2 transport_maps = hash:/etc/postfix/transport
470 1.1 tron 3 relayhost =
471 1.1 tron 4 # Optional for a machine that isn't "always on"
472 1.1 tron 5 #fallback_relay = [gateway.example.com]
473 1.1 tron 6
474 1.1 tron 7 /etc/postfix/transport:
475 1.1 tron 8 # Internal delivery.
476 1.1 tron 9 example.com :
477 1.1 tron 10 .example.com :
478 1.1 tron 11 # External delivery.
479 1.1 tron 12 * smtp:[gateway.example.com]
480 1.1 tron </pre>
481 1.1 tron </blockquote>
482 1.1 tron
483 1.1 tron <p> Translation: </p>
484 1.1 tron
485 1.1 tron <ul>
486 1.1 tron
487 1.1 tron <li> <p> Lines 2, 7-12: Request that intranet mail is delivered
488 1.1 tron directly, and that external mail is given to a gateway. Obviously,
489 1.1 tron this example assumes that the organization uses DNS MX records
490 1.1 tron internally. The <tt>[]</tt> forces Postfix to do no MX lookup.
491 1.1 tron </p>
492 1.1 tron
493 1.1 tron <li> <p> Line 3: IMPORTANT: do not specify a relayhost in main.cf.
494 1.1 tron </p>
495 1.1 tron
496 1.1 tron <li> <p> Line 5: This prevents mail from being stuck in the queue
497 1.1 tron when the machine is turned off. Postfix tries to deliver mail
498 1.1 tron directly, and gives undeliverable mail to a gateway. </p>
499 1.1 tron
500 1.1 tron </ul>
501 1.1 tron
502 1.1 tron <p> Specify <b>dbm</b> instead of <b>hash</b> if your system uses
503 1.1 tron <b>dbm</b> files instead of <b>db</b> files. To find out what lookup
504 1.1 tron tables Postfix supports, use the command "<b>postconf -m</b>". </p>
505 1.1 tron
506 1.1 tron <p> Execute the command "<b>postmap /etc/postfix/transport</b>" whenever
507 1.1 tron you edit the transport table. </p>
508 1.1 tron
509 1.1 tron <h2><a name="backup">Configuring Postfix as primary or backup MX host for a remote site</a></h2>
510 1.1 tron
511 1.1 tron <p> This section presents additional configuration. You need to
512 1.1 tron combine this with basic configuration information as discussed the
513 1.1 tron first half of this document. </p>
514 1.1 tron
515 1.1 tron <p> When your system is SECONDARY MX host for a remote site this
516 1.1 tron is all you need: </p>
517 1.1 tron
518 1.1 tron <blockquote>
519 1.1 tron <pre>
520 1.1 tron 1 DNS:
521 1.1 tron 2 the.backed-up.domain.tld IN MX 100 your.machine.tld.
522 1.1 tron 3
523 1.1 tron 4 /etc/postfix/main.cf:
524 1.1 tron 5 relay_domains = . . . the.backed-up.domain.tld
525 1.1 tron 6 smtpd_recipient_restrictions =
526 1.1 tron 7 permit_mynetworks reject_unauth_destination
527 1.1 tron 8
528 1.1 tron 9 # You must specify your NAT/proxy external address.
529 1.1 tron 10 #proxy_interfaces = 1.2.3.4
530 1.1 tron 11
531 1.1 tron 12 relay_recipient_maps = hash:/etc/postfix/relay_recipients
532 1.1 tron 13
533 1.1 tron 14 /etc/postfix/relay_recipients:
534 1.1 tron 15 user1 (a] the.backed-up.domain.tld x
535 1.1 tron 16 user2 (a] the.backed-up.domain.tld x
536 1.1 tron 17 . . .
537 1.1 tron </pre>
538 1.1 tron </blockquote>
539 1.1 tron
540 1.1 tron <p> When your system is PRIMARY MX host for a remote site you
541 1.1 tron need the above, plus: </p>
542 1.1 tron
543 1.1 tron <blockquote>
544 1.1 tron <pre>
545 1.1 tron 18 /etc/postfix/main.cf:
546 1.1 tron 19 transport_maps = hash:/etc/postfix/transport
547 1.1 tron 20
548 1.1 tron 21 /etc/postfix/transport:
549 1.1 tron 22 the.backed-up.domain.tld relay:[their.mail.host.tld]
550 1.1 tron </pre>
551 1.1 tron </blockquote>
552 1.1 tron
553 1.1 tron <p> Important notes:
554 1.1 tron
555 1.1 tron <ul>
556 1.1 tron
557 1.1 tron <li><p>Do not list the.backed-up.domain.tld in mydestination.</p>
558 1.1 tron
559 1.1 tron <li><p>Do not list the.backed-up.domain.tld in virtual_alias_domains.</p>
560 1.1 tron
561 1.1 tron <li><p>Do not list the.backed-up.domain.tld in virtual_mailbox_domains.</p>
562 1.1 tron
563 1.1 tron <li> <p> Lines 1-7: Forward mail from the Internet for
564 1.1 tron "the.backed-up.domain.tld" to the primary MX host for that domain.
565 1.1 tron </p>
566 1.1 tron
567 1.1 tron <li> <p> Line 10: This is a must if Postfix receives mail via a
568 1.1 tron NAT relay or proxy that presents a different IP address to the
569 1.1 tron world than the local machine. </p>
570 1.1 tron
571 1.1 tron <li> <p> Lines 12-16: Define the list of valid addresses in the
572 1.1 tron "the.backed-up.domain.tld" domain. This prevents your mail queue
573 1.1 tron from filling up with undeliverable MAILER-DAEMON messages. If you
574 1.1 tron can't maintain a list of valid recipients then you must specify
575 1.1 tron "relay_recipient_maps =" (that is, an empty value), or you must
576 1.1 tron specify an "@the.backed-up.domain.tld x" wild-card in the
577 1.1 tron relay_recipients table. </p>
578 1.1 tron
579 1.1 tron <li> <p> Line 22: The <tt>[]</tt> forces Postfix to do no MX lookup. </p>
580 1.1 tron
581 1.1 tron </ul>
582 1.1 tron
583 1.1 tron <p> Specify <b>dbm</b> instead of <b>hash</b> if your system uses
584 1.1 tron <b>dbm</b> files instead of <b>db</b> files. To find out what lookup
585 1.1 tron tables Postfix supports, use the command "<b>postconf -m</b>". </p>
586 1.1 tron
587 1.1 tron <p> Execute the command "<b>postmap /etc/postfix/transport</b>"
588 1.1 tron whenever you change the transport table. </p>
589 1.1 tron
590 1.1 tron <p> NOTE for Postfix < 2.2: Do not use the fallback_relay feature
591 1.1 tron when relaying mail
592 1.1 tron for a backup or primary MX domain. Mail would loop between the
593 1.1 tron Postfix MX host and the fallback_relay host when the final destination
594 1.1 tron is unavailable. </p>
595 1.1 tron
596 1.1 tron <ul>
597 1.1 tron
598 1.1 tron <li> In main.cf specify "<tt>relay_transport = relay</tt>",
599 1.1 tron
600 1.1 tron <li> In master.cf specify "<tt>-o fallback_relay =</tt>" at the
601 1.1 tron end of the <tt>relay</tt> entry.
602 1.1 tron
603 1.1 tron <li> In transport maps, specify "<tt>relay:<i>nexthop...</i></tt>"
604 1.1 tron as the right-hand side for backup or primary MX domain entries.
605 1.1 tron
606 1.1 tron </ul>
607 1.1 tron
608 1.1 tron <p> These are default settings in Postfix version 2.2 and later.
609 1.1 tron </p>
610 1.1 tron
611 1.1 tron <h2><a name="dialup">Postfix on a dialup machine</a></h2>
612 1.1 tron
613 1.1 tron <p> This section applies to dialup connections that are down most
614 1.1 tron of the time. For dialup connections that are up 24x7, see the <a
615 1.1 tron href="#local_network">local area network</a> section above. </p>
616 1.1 tron
617 1.1 tron <p> This section presents additional configuration. You need to
618 1.1 tron combine this with basic configuration information as discussed the
619 1.1 tron first half of this document. </p>
620 1.1 tron
621 1.1 tron <p> If you do not have your own hostname and IP address (usually
622 1.1 tron with dialup, cable TV or DSL connections) then you should also
623 1.1 tron study the section on "<a href="#fantasy">Postfix on hosts without
624 1.1 tron a real Internet hostname</a>". </p>
625 1.1 tron
626 1.1 tron <ul>
627 1.1 tron
628 1.1 tron <li> Route all outgoing mail to your network provider.
629 1.1 tron
630 1.1 tron <p> If your machine is disconnected most of the time, there isn't
631 1.1 tron a lot of opportunity for Postfix to deliver mail to hard-to-reach
632 1.1 tron corners of the Internet. It's better to give the mail to a machine
633 1.1 tron that is connected all the time. In the example below, the <tt>[]</tt>
634 1.1 tron prevents Postfix from trying to look up DNS MX records. </p>
635 1.1 tron
636 1.1 tron <pre>
637 1.1 tron /etc/postfix/main.cf:
638 1.1 tron relayhost = [smtprelay.someprovider.com]
639 1.1 tron </pre>
640 1.1 tron
641 1.1 tron <li> <p><a name="spontaneous_smtp">Disable spontaneous SMTP mail
642 1.1 tron delivery (if using on-demand dialup IP only).</a> </p>
643 1.1 tron
644 1.1 tron <p> Normally, Postfix attempts to deliver outbound mail at its convenience.
645 1.1 tron If your machine uses on-demand dialup IP, this causes your system
646 1.1 tron to place a telephone call whenever you submit new mail, and whenever
647 1.1 tron Postfix retries to deliver delayed mail. To prevent such telephone
648 1.1 tron calls from being placed, disable spontaneous SMTP mail deliveries. </p>
649 1.1 tron
650 1.1 tron <pre>
651 1.1 tron /etc/postfix/main.cf:
652 1.1 tron defer_transports = smtp (Only for on-demand dialup IP hosts)
653 1.1 tron </pre>
654 1.1 tron
655 1.1 tron <li> <p>Disable SMTP client DNS lookups (dialup LAN only).</p>
656 1.1 tron
657 1.1 tron <pre>
658 1.1 tron /etc/postfix/main.cf:
659 1.1 tron disable_dns_lookups = yes (Only for on-demand dialup IP hosts)
660 1.1 tron </pre>
661 1.1 tron
662 1.1 tron <li> Flush the mail queue whenever the Internet link is established.
663 1.1 tron
664 1.1 tron <p> Put the following command into your PPP or SLIP dialup scripts: </p>
665 1.1 tron
666 1.1 tron <pre>
667 1.1 tron /usr/sbin/sendmail -q (whenever the Internet link is up)
668 1.1 tron </pre>
669 1.1 tron
670 1.1 tron <p> The exact location of the Postfix sendmail command is system-specific.
671 1.1 tron Use the command "<b>postconf sendmail_path</b>" to find out where the
672 1.1 tron Postfix sendmail command is located on your machine. </p>
673 1.1 tron
674 1.1 tron <p> In order to find out if the mail queue is flushed, use something
675 1.1 tron like: </p>
676 1.1 tron
677 1.1 tron <pre>
678 1.1 tron #!/bin/sh
679 1.1 tron
680 1.1 tron # Start mail deliveries.
681 1.1 tron /usr/sbin/sendmail -q
682 1.1 tron
683 1.1 tron # Allow deliveries to start.
684 1.1 tron sleep 10
685 1.1 tron
686 1.1 tron # Loop until all messages have been tried at least once.
687 1.1 tron while mailq | grep '^[^ ]*\*' >/dev/null
688 1.1 tron do
689 1.1 tron sleep 10
690 1.1 tron done
691 1.1 tron </pre>
692 1.1 tron
693 1.1 tron <p> If you have disabled <a href="#spontaneous_smtp">spontaneous
694 1.1 tron SMTP mail delivery</a>, you also need to run the "<b>sendmail -q</b>"
695 1.1 tron command every now and then while the dialup link is up, so that
696 1.1 tron newly-posted mail is flushed from the queue. </p>
697 1.1 tron
698 1.1 tron </ul>
699 1.1 tron
700 1.1 tron <h2><a name="fantasy">Postfix on hosts without a real Internet
701 1.1 tron hostname</a></h2>
702 1.1 tron
703 1.1 tron <p> This section is for hosts that don't have their own Internet
704 1.1 tron hostname. Typically these are systems that get a dynamic IP address
705 1.1 tron via DHCP or via dialup. Postfix will let you send and receive mail
706 1.1 tron just fine between accounts on a machine with a fantasy name. However,
707 1.1 tron you cannot use a fantasy hostname in your email address when sending
708 1.1 tron mail into the Internet, because no-one would be able to reply to
709 1.1 tron your mail. In fact, more and more sites refuse mail addresses with
710 1.1 tron non-existent domain names. </p>
711 1.1 tron
712 1.1 tron <p> Note: the following information is Postfix version dependent.
713 1.1 tron To find out what Postfix version you have, execute the command
714 1.1 tron "<b>postconf mail_version</b>". </p>
715 1.1 tron
716 1.1 tron <h3>Solution 1: Postfix version 2.2 and later </h3>
717 1.1 tron
718 1.1 tron <p> Postfix 2.2 uses the generic(5) address mapping to replace
719 1.1 tron local fantasy email addresses by valid Internet addresses. This
720 1.1 tron mapping happens ONLY when mail leaves the machine; not when you
721 1.1 tron send mail between users on the same machine. </p>
722 1.1 tron
723 1.1 tron <p> The following example presents additional configuration. You
724 1.1 tron need to combine this with basic configuration information as
725 1.1 tron discussed the first half of this document. </p>
726 1.1 tron
727 1.1 tron <blockquote>
728 1.1 tron <pre>
729 1.1 tron 1 /etc/postfix/main.cf:
730 1.1 tron 2 smtp_generic_maps = hash:/etc/postfix/generic
731 1.1 tron 3
732 1.1 tron 4 /etc/postfix/generic:
733 1.1 tron 5 his (a] localdomain.local hisaccount (a] hisisp.example
734 1.1 tron 6 her (a] localdomain.local heraccount (a] herisp.example
735 1.1 tron 7 @localdomain.local hisaccount+local (a] hisisp.example
736 1.1 tron </pre>
737 1.1 tron </blockquote>
738 1.1 tron
739 1.1 tron <p> When mail is sent to a remote host via SMTP: </p>
740 1.1 tron
741 1.1 tron <ul>
742 1.1 tron
743 1.1 tron <li> <p> Line 5 replaces <i>his (a] localdomain.local</i> by his ISP
744 1.1 tron mail address, </p>
745 1.1 tron
746 1.1 tron <li> <p> Line 6 replaces <i>her (a] localdomain.local</i> by her ISP
747 1.1 tron mail address, and </p>
748 1.1 tron
749 1.1 tron <li> <p> Line 7 replaces other local addresses by his ISP account,
750 1.1 tron with an address extension of +<i>local</i> (this example assumes
751 1.1 tron that the ISP supports "+" style address extensions). </p>
752 1.1 tron
753 1.1 tron </ul>
754 1.1 tron
755 1.1 tron <p>Specify <b>dbm</b> instead of <b>hash</b> if your system uses
756 1.1 tron <b>dbm</b> files instead of <b>db</b> files. To find out what lookup
757 1.1 tron tables Postfix supports, use the command "<b>postconf -m</b>". </p>
758 1.1 tron
759 1.1 tron <p> Execute the command "<b>postmap /etc/postfix/generic</b>"
760 1.1 tron whenever you change the generic table. </p>
761 1.1 tron
762 1.1 tron <h3>Solution 2: Postfix version 2.1 and earlier </h3>
763 1.1 tron
764 1.1 tron <p> The solution with older Postfix systems is to use valid
765 1.1 tron Internet addresses where possible, and to let Postfix map valid
766 1.1 tron Internet addresses to local fantasy addresses. With this, you can
767 1.1 tron send mail to the Internet and to local fantasy addresses, including
768 1.1 tron mail to local fantasy addresses that don't have a valid Internet
769 1.1 tron address of their own.</p>
770 1.1 tron
771 1.1 tron <p> The following example presents additional configuration. You
772 1.1 tron need to combine this with basic configuration information as
773 1.1 tron discussed the first half of this document. </p>
774 1.1 tron
775 1.1 tron <blockquote>
776 1.1 tron <pre>
777 1.1 tron 1 /etc/postfix/main.cf:
778 1.1 tron 2 myhostname = hostname.localdomain
779 1.1 tron 3 mydomain = localdomain
780 1.1 tron 4
781 1.1 tron 5 canonical_maps = hash:/etc/postfix/canonical
782 1.1 tron 6
783 1.1 tron 7 virtual_alias_maps = hash:/etc/postfix/virtual
784 1.1 tron 8
785 1.1 tron 9 /etc/postfix/canonical:
786 1.1 tron 10 your-login-name your-account (a] your-isp.com
787 1.1 tron 11
788 1.1 tron 12 /etc/postfix/virtual:
789 1.1 tron 13 your-account (a] your-isp.com your-login-name
790 1.1 tron </pre>
791 1.1 tron </blockquote>
792 1.1 tron
793 1.1 tron <p> Translation: </p>
794 1.1 tron
795 1.1 tron <ul>
796 1.1 tron
797 1.1 tron <li> <p> Lines 2-3: Substitute your fantasy hostname here. Do not
798 1.1 tron use a domain name that is already in use by real organizations
799 1.1 tron on the Internet. See RFC 2606 for examples of domain
800 1.1 tron names that are guaranteed not to be owned by anyone. </p>
801 1.1 tron
802 1.1 tron <li> <p> Lines 5, 9, 10: This provides the mapping from
803 1.1 tron "your-login-name (a] hostname.localdomain" to "your-account (a] your-isp.com".
804 1.1 tron This part is required. </p>
805 1.1 tron
806 1.1 tron <li> <p> Lines 7, 12, 13: Deliver mail for "your-account (a] your-isp.com"
807 1.1 tron locally, instead of sending it to the ISP. This part is not required
808 1.1 tron but is convenient.
809 1.1 tron
810 1.1 tron </ul>
811 1.1 tron
812 1.1 tron <p>Specify <b>dbm</b> instead of <b>hash</b> if your system uses
813 1.1 tron <b>dbm</b> files instead of <b>db</b> files. To find out what lookup
814 1.1 tron tables Postfix supports, use the command "<b>postconf -m</b>". </p>
815 1.1 tron
816 1.1 tron <p> Execute the command "<b>postmap /etc/postfix/canonical</b>"
817 1.1 tron whenever you change the canonical table. </p>
818 1.1 tron
819 1.1 tron <p> Execute the command "<b>postmap /etc/postfix/virtual</b>"
820 1.1 tron whenever you change the virtual table. </p>
821 1.1 tron
822 1.1 tron </body>
823 1.1 tron
824 1.1 tron </html>
825