xref: /netbsd-src/external/ibm-public/postfix/dist/html/STRESS_README.html (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
2        "http://www.w3.org/TR/html4/loose.dtd">
3
4<html>
5
6<head>
7
8<title>Postfix Stress-Dependent Configuration</title>
9
10<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
11
12</head>
13
14<body>
15
16<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix
17Stress-Dependent Configuration</h1>
18
19<hr>
20
21<h2>Overview </h2>
22
23<p> This document describes the symptoms of Postfix SMTP server
24overload. It presents permanent <a href="postconf.5.html">main.cf</a> changes to avoid overload
25during normal operation, and temporary <a href="postconf.5.html">main.cf</a> changes to cope with
26an unexpected burst of mail. This document makes specific suggestions
27for Postfix 2.5 and later which support stress-adaptive behavior,
28and for earlier Postfix versions that don't.  </p>
29
30<p> Topics covered in this document: </p>
31
32<ul>
33
34<li><a href="#overload"> Symptoms of Postfix SMTP server overload </a>
35
36<li><a href="#adapt"> Automatic stress-adaptive behavior </a>
37
38<li><a href="#concurrency"> Service more SMTP clients at the same time </a>
39
40<li><a href="#time"> Spend less time per SMTP client </a>
41
42<li><a href="#hangup"> Disconnect suspicious SMTP clients </a>
43
44<li><a href="#legacy"> Temporary measures for older Postfix releases </a>
45
46<li><a href="#feature"> Detecting support for stress-adaptive behavior </a>
47
48<li><a href="#forcing"> Forcing stress-adaptive behavior on or off </a>
49
50<li><a href="#other"> Other measures to off-load zombies </a>
51
52<li><a href="#credits"> Credits </a>
53
54</ul>
55
56<h2><a name="overload"> Symptoms of Postfix SMTP server overload </a></h2>
57
58<p> Under normal conditions, the Postfix SMTP server responds
59immediately when an SMTP client connects to it; the time to deliver
60mail is noticeable only with large messages.  Performance degrades
61dramatically when the number of SMTP clients exceeds the number of
62Postfix SMTP server processes.  When an SMTP client connects while
63all Postfix SMTP server processes are busy, the client must wait
64until a server process becomes available. </p>
65
66<p> SMTP server overload may be caused by a surge of legitimate
67mail (example: a DNS registrar opens a new zone for registrations),
68by mistake (mail explosion caused by a forwarding loop) or by malice
69(worm outbreak, botnet, or other illegitimate activity).  </p>
70
71<p> Symptoms of Postfix SMTP server overload are: </p>
72
73<ul>
74
75<li> <p> Remote SMTP clients experience a long delay before Postfix
76sends the "220 hostname.example.com ESMTP Postfix" greeting. </p>
77
78<ul>
79
80<li> <p> NOTE: Broken DNS configurations can also cause lengthy
81delays before Postfix sends "220 hostname.example.com ...". These
82delays also exist when Postfix is NOT overloaded.  </p>
83
84<li> <p> NOTE:  To avoid "overload" delays for end-user mail
85clients, enable the "submission" service entry in <a href="master.5.html">master.cf</a> (present
86since Postfix 2.1), and tell users to connect to this instead of
87the public SMTP service. </p>
88
89</ul>
90
91<li> <p> The Postfix SMTP server logs an increased number of "lost
92connection after CONNECT" events. This happens because remote SMTP
93clients disconnect before Postfix answers the connection. </p>
94
95<ul>
96
97<li> <p> NOTE: A portscan for open SMTP ports can also result in
98"lost connection ..." logfile messages. </p>
99
100</ul>
101
102<li> <p> Postfix 2.3 and later logs a warning that all server ports
103are busy: </p>
104
105<pre>
106Oct  3 20:39:27 spike postfix/master[28905]: warning: service "smtp"
107 (25) has reached its process limit "30": new clients may experience
108 noticeable delays
109Oct  3 20:39:27 spike postfix/master[28905]: warning: to avoid this
110 condition, increase the process count in <a href="master.5.html">master.cf</a> or reduce the
111 service time per client
112Oct  3 20:39:27 spike postfix/master[28905]: warning: see
113  <a href="http://www.postfix.org/STRESS_README.html">http://www.postfix.org/STRESS_README.html</a> for examples of
114  stress-adapting configuration settings
115</pre>
116
117</ul>
118
119<p> Legitimate mail that doesn't get through during an episode of
120Postfix SMTP server overload is not necessarily lost. It should
121still arrive once the situation returns to normal, as long as the
122overload condition is temporary.  </p>
123
124<h2><a name="adapt"> Automatic stress-adaptive behavior </a></h2>
125
126<p> Postfix version 2.5 introduces automatic stress-adaptive behavior.
127It works as follows. When a "public" network service such as the
128SMTP server runs into an "all server ports are busy" condition, the
129Postfix <a href="master.8.html">master(8)</a> daemon logs a warning, restarts the service
130(without interrupting existing network sessions), and runs the
131service with "-o stress=yes" on the server process command line:
132</p>
133
134<blockquote>
135<pre>
13680821  ??  S      0:00.24 smtpd -n smtp -t inet -u -c -o stress=yes
137</pre>
138</blockquote>
139
140<p> Normally, the Postfix <a href="master.8.html">master(8)</a> daemon runs such a service with
141"-o stress=" on the command line (i.e.  with an empty parameter
142value):  </p>
143
144<blockquote>
145<pre>
14683326  ??  S      0:00.28 smtpd -n smtp -t inet -u -c -o stress=
147</pre>
148</blockquote>
149
150<p> Services that have local access only never have "-o stress"
151parameters on the command line. This includes services internal to
152Postfix such as the queue manager, and services that listen on a
153loopback interface only, such as after-filter SMTP services.  </p>
154
155<p> The "stress" parameter value is the key to making <a href="postconf.5.html">main.cf</a>
156parameter settings stress adaptive. The following settings are the
157default with Postfix 2.6 and later. </p>
158
159<blockquote>
160<pre>
1611 <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> = ${stress?{10}:{300}}s
1622 <a href="postconf.5.html#smtpd_hard_error_limit">smtpd_hard_error_limit</a> = ${stress?{1}:{20}}
1633 <a href="postconf.5.html#smtpd_junk_command_limit">smtpd_junk_command_limit</a> = ${stress?{1}:{100}}
1644 # Parameters added after Postfix 2.6:
1655 <a href="postconf.5.html#smtpd_per_record_deadline">smtpd_per_record_deadline</a> = ${stress?{yes}:{no}}
1666 <a href="postconf.5.html#smtpd_starttls_timeout">smtpd_starttls_timeout</a> = ${stress?{10}:{300}}s
1677 <a href="postconf.5.html#address_verify_poll_count">address_verify_poll_count</a> = ${stress?{1}:{3}}
168</pre>
169</blockquote>
170
171<p> Postfix versions before 3.0 use the older form ${stress?x}${stress:y}
172instead of the newer form ${stress?{x}:{y}}. </p>
173
174<p> Translation: <p>
175
176<ul>
177
178<li> <p> Line 1: under conditions of stress, use an <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a>
179value of 10 seconds instead of the default 300 seconds. Experience
180on the postfix-users list from a variety of sysadmins shows that
181reducing the "normal" <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> to 60s is unlikely to affect
182legitimate clients. However, it is unlikely to become the Postfix
183default because it's not RFC compliant. Setting <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> to
18410s or even 5s under stress will still allow most
185legitimate clients to connect and send mail, but may delay mail
186from some clients. No mail should be lost, as long as this measure
187is used only temporarily. </p>
188
189<li> <p> Line 2: under conditions of stress, use an <a href="postconf.5.html#smtpd_hard_error_limit">smtpd_hard_error_limit</a>
190of 1 instead of the default 20. This helps by disconnecting clients
191after a single error, giving other clients a chance to connect.
192However, this may cause significant delays with legitimate mail,
193such as a mailing list that contains a few no-longer-active user
194names that didn't bother to unsubscribe. No mail should be lost,
195as long as this measure is used only temporarily. </p>
196
197<li> <p> Line 3: under conditions of stress, use an
198<a href="postconf.5.html#smtpd_junk_command_limit">smtpd_junk_command_limit</a> of 1 instead of the default 100. This
199prevents clients from keeping connections open by repeatedly
200sending HELO, EHLO, NOOP, RSET, VRFY or ETRN commands. </p>
201
202<li> <p> Line 5: under conditions of stress, change the behavior
203of <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> and <a href="postconf.5.html#smtpd_starttls_timeout">smtpd_starttls_timeout</a>, from a time limit per
204read or write system call, to a time limit to send or receive a
205complete record (an SMTP command line, SMTP response line, SMTP
206message content line, or TLS protocol message). </p>
207
208<li> <p> Line 6: under conditions of stress, reduce the time limit
209for TLS protocol handshake messages to 10 seconds, from the default
210value of 300 seconds. See also the <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> discussion above.
211</p>
212
213<li> <p> Line 7: under conditions of stress, do not wait up to 6
214seconds for the completion of an address verification probe. If the
215result is not already in the address verification cache, reply
216immediately with $<a href="postconf.5.html#unverified_recipient_tempfail_action">unverified_recipient_tempfail_action</a> or
217$<a href="postconf.5.html#unverified_sender_tempfail_action">unverified_sender_tempfail_action</a>. No mail should be lost, as long
218as this measure is used only temporarily.  </p>
219
220</ul>
221
222<p> The syntax of ${name?{value}:{value}}, ${name?value} and
223${name:value} is explained at the beginning of the <a href="postconf.5.html">postconf(5)</a>
224manual page. </p>
225
226<p> NOTE: Please keep in mind that the stress-adaptive feature is
227a fairly desperate measure to keep <b>some</b> legitimate mail
228flowing under overload conditions.  If a site is reaching the SMTP
229server process limit when there isn't an attack or bot flood
230occurring, then either the process limit needs to be raised or more
231hardware needs to be added.  </p>
232
233<h2><a name="concurrency"> Service more SMTP clients at the same time </a> </h2>
234
235<p> This section and the ones that follow discuss permanent measures
236against mail server overload.  </p>
237
238<p> One measure to avoid the "all server processes busy" condition
239is to service more SMTP clients simultaneously. For this you need
240to increase the number of Postfix SMTP server processes. This will
241improve the
242responsiveness for remote SMTP clients, as long as the server machine
243has enough hardware and software resources to run the additional
244processes, and as long as the file system can keep up with the
245additional load. </p>
246
247<ul>
248
249<li> <p> You increase the number of SMTP server processes either
250by increasing the <a href="postconf.5.html#default_process_limit">default_process_limit</a> in <a href="postconf.5.html">main.cf</a> (line 3 below),
251or by increasing the SMTP server's "maxproc" field in <a href="master.5.html">master.cf</a>
252(line 10 below).  Either way, you need to issue a "postfix reload"
253command to make the change effective.  </p>
254
255<li> <p> Process limits above 1000 require Postfix version 2.4 or
256later, and an operating system that supports kernel-based event
257filters (BSD kqueue(2), Linux epoll(4), or Solaris /dev/poll).
258</p>
259
260<li> <p> More processes use more memory. You can reduce the Postfix
261memory footprint by using <a href="CDB_README.html">cdb</a>:
262lookup tables instead of Berkeley DB's <a href="DATABASE_README.html#types">hash</a>: or <a href="DATABASE_README.html#types">btree</a>: tables. </p>
263
264<pre>
265 1 /etc/postfix/<a href="postconf.5.html">main.cf</a>:
266 2     # Raise the global process limit, 100 since Postfix 2.0.
267 3     <a href="postconf.5.html#default_process_limit">default_process_limit</a> = 200
268 4
269 5 /etc/postfix/<a href="master.5.html">master.cf</a>:
270 6     # =============================================================
271 7     # service type  private unpriv  chroot  wakeup  maxproc command
272 8     # =============================================================
273 9     # Raise the SMTP service process limit only.
27410     smtp      inet  n       -       n       -       200     smtpd
275</pre>
276
277<li> <p> NOTE: older versions of the <a href="SMTPD_POLICY_README.html">SMTPD_POLICY_README</a> document
278contain a mistake: they configure a fixed number of policy daemon
279processes.  When you raise the SMTP server's "maxproc" field in
280<a href="master.5.html">master.cf</a>, SMTP server processes will report problems when connecting
281to policy server processes, because there aren't enough of them.
282Examples of errors are "connection refused" or "operation timed
283out".  </p>
284
285<p> To fix, edit <a href="master.5.html">master.cf</a> and specify a zero "maxproc" field
286in all policy server entries; see line 6 in the example below.
287Issue a "postfix reload" command to make the change effective.  </p>
288
289<pre>
2901 /etc/postfix/<a href="master.5.html">master.cf</a>:
2912     # =============================================================
2923     # service type  private unpriv  chroot  wakeup  maxproc command
2934     # =============================================================
2945     # Disable the policy service process limit.
2956     policy    unix  -       n       n       -       0       spawn
2967         user=nobody argv=/some/where/policy-server
297</pre>
298
299</ul>
300
301<h2><a name="time"> Spend less time per SMTP client </a></h2>
302
303<p> When increasing the number of SMTP server processes is not
304practical, you can improve Postfix server responsiveness by eliminating
305delays.  When Postfix spends less time per SMTP session, the same
306number of SMTP server processes can service more clients in a given
307amount of time. </p>
308
309<ul>
310
311<li> <p> Eliminate non-functional RBL lookups (blocklists that are
312no longer in operation). These lookups can degrade performance.
313Postfix logs a warning when an RBL server does not respond. </p>
314
315<li> <p> Eliminate redundant RBL lookups (people often use multiple
316Spamhaus RBLs that include each other).  To find out whether RBLs
317include other RBLs, look up the websites that document the RBL's
318policies. </p>
319
320<li> <p> Eliminate <a href="postconf.5.html#header_checks">header_checks</a> and <a href="postconf.5.html#body_checks">body_checks</a>, and keep just a few
321emergency patterns to block the latest worm explosion or backscatter
322mail.  See <a href="BACKSCATTER_README.html">BACKSCATTER_README</a> for examples of the latter.
323
324<li> <p> Group your <a href="postconf.5.html#header_checks">header_checks</a> and <a href="postconf.5.html#body_checks">body_checks</a> patterns to avoid
325unnecessary pattern matching operations:
326
327<pre>
328 1  /etc/postfix/header_checks:
329 2      if /^Subject:/
330 3      /^Subject: virus found in mail from you/ reject
331 4      /^Subject: ..other../ reject
332 5      endif
333 6
334 7      if /^Received:/
335 8      /^Received: from (postfix\.org) / reject forged client name in received header: $1
336 9      /^Received: from ..other../ reject ....
33710      endif
338</pre>
339
340</ul>
341
342<h2><a name="hangup"> Disconnect suspicious SMTP clients </a></h2>
343
344<p> Under conditions of overload you can improve Postfix SMTP server
345responsiveness by hanging up on suspicious clients, so that other
346clients get a chance to talk to Postfix.  </p>
347
348<ul>
349
350<li> <p> Use "521" SMTP reply codes (Postfix 2.6 and later) or "421"
351(Postfix 2.3-2.5) to hang up on clients that that match botnet-related
352RBLs (see next bullet) or that match selected non-RBL restrictions
353such as SMTP access maps.  The Postfix SMTP server will reject mail
354and disconnect without waiting for the remote SMTP client to send
355a QUIT command.  </p>
356
357<li> <p> To hang up connections from blacklisted zombies, you can
358set specific Postfix SMTP server reject codes for specific RBLs,
359and for individual responses from specific RBLs. We'll use
360zen.spamhaus.org as an example; by the time you read this document,
361details may have changed.  Right now, their documents say that a
362response of 127.0.0.10 or 127.0.0.11 indicates a dynamic client IP
363address, which means that the machine is probably running a bot of
364some kind.  To give a 521 response instead of the default 554
365response, use something like: </p>
366
367<pre>
368 1  /etc/postfix/<a href="postconf.5.html">main.cf</a>:
369 2      <a href="postconf.5.html#smtpd_client_restrictions">smtpd_client_restrictions</a> =
370 3         <a href="postconf.5.html#permit_mynetworks">permit_mynetworks</a>
371 4         <a href="postconf.5.html#reject_rbl_client">reject_rbl_client</a> zen.spamhaus.org=127.0.0.10
372 5         <a href="postconf.5.html#reject_rbl_client">reject_rbl_client</a> zen.spamhaus.org=127.0.0.11
373 6         <a href="postconf.5.html#reject_rbl_client">reject_rbl_client</a> zen.spamhaus.org
374 7
375 8      <a href="postconf.5.html#rbl_reply_maps">rbl_reply_maps</a> = <a href="DATABASE_README.html#types">hash</a>:/etc/postfix/rbl_reply_maps
376 9
37710  /etc/postfix/rbl_reply_maps:
37811      # With Postfix 2.3-2.5 use "421" to hang up connections.
37912      zen.spamhaus.org=127.0.0.10 521 4.7.1 Service unavailable;
38013       $rbl_class [$rbl_what] blocked using
38114       $rbl_domain${rbl_reason?; $rbl_reason}
38215
38316      zen.spamhaus.org=127.0.0.11 521 4.7.1 Service unavailable;
38417       $rbl_class [$rbl_what] blocked using
38518       $rbl_domain${rbl_reason?; $rbl_reason}
386</pre>
387
388<p> Although the above example shows three RBL lookups (lines 4-6),
389Postfix will only do a single DNS query, so it does not affect the
390performance. </p>
391
392<li> <p> With Postfix 2.3-2.5, use reply code 421 (521 will not
393cause Postfix to disconnect). The down-side of replying with 421
394is that it works only for zombies and other malware. If the client
395is running a real MTA, then it may connect again several times until
396the mail expires in its queue. When this is a problem, stick with
397the default 554 reply, and use "<a href="postconf.5.html#smtpd_hard_error_limit">smtpd_hard_error_limit</a> = 1" as
398described below.  </p>
399
400<li> <p> You can automatically turn on the above overload measure
401with Postfix 2.5 and later, or with earlier releases that contain
402the stress-adaptive behavior source code patch from the mirrors
403listed at <a href="http://www.postfix.org/download.html">http://www.postfix.org/download.html</a>. Simply replace line
404above 8 with: </p>
405
406<pre>
407 8      <a href="postconf.5.html#rbl_reply_maps">rbl_reply_maps</a> = ${stress?<a href="DATABASE_README.html#types">hash</a>:/etc/postfix/rbl_reply_maps}
408</pre>
409
410</ul>
411
412<p> More information about automatic stress-adaptive behavior is
413in section "<a href="#adapt">Automatic stress-adaptive behavior</a>".
414</p>
415
416<h2><a name="legacy"> Temporary measures for older Postfix releases </a></h2>
417
418<p> See the next section, "<a href="#adapt">Automatic stress-adaptive
419behavior</a>", if you are running Postfix version 2.5 or later, or
420if you have applied the source code patch for stress-adaptive
421behavior from the mirrors listed at <a href="http://www.postfix.org/download.html">http://www.postfix.org/download.html</a>.
422</p>
423
424<p> The following measures can be applied temporarily during overload.
425They still allow <b>most</b> legitimate clients to connect and send
426mail, but may affect some legitimate clients. </p>
427
428<ul>
429
430<li> <p> Reduce <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> (default: 300s). Experience on the
431postfix-users list from a variety of sysadmins shows that reducing
432the "normal" <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> to 60s is unlikely to affect legitimate
433clients. However, it is unlikely to become the Postfix default
434because it's not RFC compliant. Setting <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> to 10s (line
4352 below) or even 5s under stress will still allow <b>most</b>
436legitimate clients to connect and send mail, but may delay mail
437from some clients.  No mail should be lost, as long as this measure
438is used only temporarily.  </p>
439
440<li> <p> Reduce <a href="postconf.5.html#smtpd_hard_error_limit">smtpd_hard_error_limit</a> (default: 20). Setting this
441to 1 under stress (line 3 below) helps by disconnecting clients
442after a single error, giving other clients a chance to connect.
443However, this may cause significant delays with legitimate mail,
444such as a mailing list that contains a few no-longer-active user
445names that didn't bother to unsubscribe. No mail should be lost,
446as long as this measure is used only temporarily. </p>
447
448<li> <p> Use an <a href="postconf.5.html#smtpd_junk_command_limit">smtpd_junk_command_limit</a> of 1 instead of the default
449100. This prevents clients from keeping idle connections open by
450repeatedly sending NOOP or RSET commands. </p>
451
452</ul>
453
454<blockquote>
455<pre>
4561  /etc/postfix/<a href="postconf.5.html">main.cf</a>:
4572      <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> = 10
4583      <a href="postconf.5.html#smtpd_hard_error_limit">smtpd_hard_error_limit</a> = 1
4594      <a href="postconf.5.html#smtpd_junk_command_limit">smtpd_junk_command_limit</a> = 1
460</pre>
461</blockquote>
462
463<p> With these measures, no mail should be lost, as long
464as these measures are used only temporarily. The next section of
465this document introduces a way to automate this process. </p>
466
467<h2><a name="feature"> Detecting support for stress-adaptive behavior </a></h2>
468
469<p> To find out if your Postfix installation supports stress-adaptive
470behavior, use the "ps" command, and look for the smtpd processes.
471Postfix has stress-adaptive support when you see "-o stress=" or
472"-o stress=yes" command-line options. Remember that Postfix never
473enables stress-adaptive behavior on servers that listen on local
474addresses only. </p>
475
476<p> The following example is for FreeBSD or Linux. On Solaris, HP-UX
477and other System-V flavors, use "ps -ef" instead of "ps ax". </p>
478
479<blockquote>
480<pre>
481$ ps ax|grep smtpd
48283326  ??  S      0:00.28 smtpd -n smtp -t inet -u -c -o stress=
48384345  ??  Ss     0:00.11 /usr/bin/perl /usr/libexec/postfix/smtpd-policy.pl
484</pre>
485</blockquote>
486
487<p> You can't use <a href="postconf.1.html">postconf(1)</a> to detect stress-adaptive support.
488The <a href="postconf.1.html">postconf(1)</a> command ignores the existence of the stress parameter
489in <a href="postconf.5.html">main.cf</a>, because the parameter has no effect there.  Command-line
490"-o parameter" settings always take precedence over <a href="postconf.5.html">main.cf</a> parameter
491settings.  <p>
492
493<p> If you configure stress-adaptive behavior in <a href="postconf.5.html">main.cf</a> when it
494isn't supported, nothing bad will happen.  The processes will run
495as if the stress parameter always has an empty value. </p>
496
497<h2><a name="forcing"> Forcing stress-adaptive behavior on or off </a></h2>
498
499<p> You can manually force stress-adaptive behavior on, by adding
500a "-o stress=yes" command-line option in <a href="master.5.html">master.cf</a>. This can be
501useful for testing overrides on the SMTP service. Issue "postfix
502reload" to make the change effective.  </p>
503
504<p> Note: setting the stress parameter in <a href="postconf.5.html">main.cf</a> has no effect for
505services that accept remote connections. </p>
506
507<blockquote>
508<pre>
5091 /etc/postfix/<a href="master.5.html">master.cf</a>:
5102     # =============================================================
5113     # service type  private unpriv  chroot  wakeup  maxproc command
5124     # =============================================================
5135     #
5146     smtp      inet  n       -       n       -       -       smtpd
5157         -o stress=yes
5168         -o . . .
517</pre>
518</blockquote>
519
520<p> To permanently force stress-adaptive behavior off with a specific
521service, specify "-o stress=" on its <a href="master.5.html">master.cf</a> command line.  This
522may be desirable for the "submission" service. Issue "postfix reload"
523to make the change effective.  </p>
524
525<p> Note: setting the stress parameter in <a href="postconf.5.html">main.cf</a> has no effect for
526services that accept remote connections. </p>
527
528<blockquote>
529<pre>
5301 /etc/postfix/<a href="master.5.html">master.cf</a>:
5312     # =============================================================
5323     # service type  private unpriv  chroot  wakeup  maxproc command
5334     # =============================================================
5345     #
5356     submission inet n       -       n       -       -       smtpd
5367         -o stress=
5378         -o . . .
538</pre>
539</blockquote>
540
541<h2><a name="other"> Other measures to off-load zombies </a> </h2>
542
543<p> The <a href="postscreen.8.html">postscreen(8)</a> daemon, introduced with Postfix 2.8, provides
544additional protection against mail server overload. One <a href="postscreen.8.html">postscreen(8)</a>
545process handles multiple inbound SMTP connections, and decides which
546clients may to talk to a Postfix SMTP server process.  By keeping
547spambots away, <a href="postscreen.8.html">postscreen(8)</a> leaves more SMTP server processes
548available for legitimate clients, and delays the onset of server
549overload conditions. </p>
550
551<h2><a name="credits"> Credits </a></h2>
552
553<ul>
554
555<li>  Thanks to the postfix-users mailing list members for sharing
556early experiences with the stress-adaptive feature.
557
558<li>  The RBL example and several other paragraphs of text were
559adapted from postfix-users postings by Noel Jones.
560
561<li>  Wietse implemented stress-adaptive behavior as the smallest
562possible patch while he should be working on other things.
563
564</ul>
565
566</body> </html>
567