Expand PMF_FN_* macros.
[netbsd-mini2440.git] / external / ibm-public / postfix / dist / proto / header_checks
blob01546c7b64ecd5f23fa5d9f7ee7d3e3f3b784a83
1 #++
2 # NAME
3 #       header_checks 5
4 # SUMMARY
5 #       Postfix built-in content inspection
6 # SYNOPSIS
7 # .nf
8 #       \fBheader_checks = pcre:/etc/postfix/header_checks\fR
9 #       \fBmime_header_checks = pcre:/etc/postfix/mime_header_checks\fR
10 #       \fBnested_header_checks = pcre:/etc/postfix/nested_header_checks\fR
11 #       \fBbody_checks = pcre:/etc/postfix/body_checks\fR
12 # .sp
13 #       \fBpostmap -q "\fIstring\fB" pcre:/etc/postfix/\fIfilename\fR
14 #       \fBpostmap -q - pcre:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
15 # .fi
16 # DESCRIPTION
17 #       This document describes access control on the content of
18 #       message headers and message body lines; it is implemented
19 #       by the Postfix \fBcleanup\fR(8) server before mail is queued.
20 #       See \fBaccess\fR(5) for access control on remote SMTP client
21 #       information.
23 #       Each message header or message body line is compared against
24 #       a list of patterns.
25 #       When a match is found the corresponding action is executed, and
26 #       the matching process is repeated for the next message header or
27 #       message body line.
29 #       For examples, see the EXAMPLES section at the end of this
30 #       manual page.
32 #       Postfix header or body_checks are designed to stop a flood of mail
33 #       from worms or viruses; they do not decode attachments, and they do
34 #       not unzip archives. See the documents referenced below in the README
35 #       FILES section if you need more sophisticated content analysis.
37 #       Postfix supports four built-in content inspection classes:
38 # .IP \fBheader_checks\fR
39 #       These are applied to initial message headers (except for
40 #       the headers that are processed with \fBmime_header_checks\fR).
41 # .IP "\fBmime_header_checks\fR (default: \fB$header_checks\fR)"
42 #       These are applied to MIME related message headers only.
43 # .sp
44 #       This feature is available in Postfix 2.0 and later.
45 # .IP "\fBnested_header_checks\fR (default: \fB$header_checks\fR)"
46 #       These are applied to message headers of attached email
47 #       messages (except for the headers that are processed with
48 #       \fBmime_header_checks\fR).
49 # .sp
50 #       This feature is available in Postfix 2.0 and later.
51 # .IP \fBbody_checks\fR
52 #       These are applied to all other content, including multi-part
53 #       message boundaries.
54 # .sp
55 #       With Postfix versions before 2.0, all content after the initial
56 #       message headers is treated as body content.
57 # .PP
58 #       Note: message headers are examined one logical header at a time,
59 #       even when a message header spans multiple lines. Body lines are
60 #       always examined one line at a time.
61 # COMPATIBILITY
62 # .ad
63 # .fi
64 #       With Postfix version 2.2 and earlier specify "\fBpostmap
65 #       -fq\fR" to query a table that contains case sensitive
66 #       patterns. By default, regexp: and pcre: patterns are case
67 #       insensitive.
68 # TABLE FORMAT
69 # .ad
70 # .fi
71 #       This document assumes that header and body_checks rules are specified
72 #       in the form of Postfix regular expression lookup tables. Usually the
73 #       best performance is obtained with \fBpcre\fR (Perl Compatible Regular
74 #       Expression) tables, but the slower \fBregexp\fR (POSIX regular
75 #       expressions) support is more widely available.
76 #       Use the command "\fBpostconf -m\fR" to find out what lookup table
77 #       types your Postfix system supports.
79 #       The general format of Postfix regular expression tables is
80 #       given below.
81 #       For a discussion of specific pattern or flags syntax,
82 #       see \fBpcre_table\fR(5) or \fBregexp_table\fR(5), respectively.
83 # .IP "\fB/\fIpattern\fB/\fIflags action\fR"
84 #       When /\fIpattern\fR/ matches the input string, execute
85 #       the corresponding \fIaction\fR. See below for a list
86 #       of possible actions.
87 # .IP "\fB!/\fIpattern\fB/\fIflags action\fR"
88 #       When /\fIpattern\fR/ does \fBnot\fR match the input string,
89 #       execute the corresponding \fIaction\fR.
90 # .IP "\fBif /\fIpattern\fB/\fIflags\fR"
91 # .IP "\fBendif\fR"
92 #       Match the input string against the patterns between \fBif\fR
93 #       and \fBendif\fR, if and only if the same input string also
94 #       matches /\fIpattern\fR/. The \fBif\fR..\fBendif\fR can nest.
95 # .sp
96 #       Note: do not prepend whitespace to patterns inside
97 #       \fBif\fR..\fBendif\fR.
98 # .IP "\fBif !/\fIpattern\fB/\fIflags\fR"
99 # .IP "\fBendif\fR"
100 #       Match the input string against the patterns between \fBif\fR
101 #       and \fBendif\fR, if and only if the same input string does
102 #       \fBnot\fR match /\fIpattern\fR/. The \fBif\fR..\fBendif\fR
103 #       can nest.
104 # .IP "blank lines and comments"
105 #       Empty lines and whitespace-only lines are ignored, as
106 #       are lines whose first non-whitespace character is a `#'.
107 # .IP "multi-line text"
108 #       A pattern/action line starts with non-whitespace text. A line that
109 #       starts with whitespace continues a logical line.
110 # TABLE SEARCH ORDER
111 # .ad
112 # .fi
113 #       For each line of message input, the patterns are applied in the
114 #       order as specified in the table. When a pattern is found that matches
115 #       the input line, the corresponding action is executed and then the
116 #       next input line is inspected.
117 # TEXT SUBSTITUTION
118 # .ad
119 # .fi
120 #       Substitution of substrings from the matched expression into the
121 #       \fIaction\fR
122 #       string is possible using the conventional Perl syntax
123 #       (\fB$1\fR, \fB$2\fR, etc.).
124 #       The macros in the result string may need to be written as \fB${n}\fR
125 #       or \fB$(n)\fR if they aren't followed by whitespace.
127 #       Note: since negated patterns (those preceded by \fB!\fR) return a
128 #       result when the expression does not match, substitutions are not
129 #       available for negated patterns.
130 # ACTIONS
131 # .ad
132 # .fi
133 #       Action names are case insensitive. They are shown in upper case
134 #       for consistency with other Postfix documentation.
135 # \" .IP "\fBDELAY \fItime\fR"
136 # \"    Place the message into the deferred queue, and delay the
137 # \"    initial delivery attempt by \fItime\fR. The time value may
138 # \"    be followed by a one-character suffix that specifies the
139 # \"    time unit: s (seconds), m (minutes), h (hours), d (days),
140 # \"    w (weeks).  The default time unit is s (seconds).
141 # \" .sp
142 # \"    Limitations:
143 # \" .RS
144 # \" .IP \(bu
145 # \"    This action affects all the recipients of the message.
146 # \" .IP \(bu
147 # \"    The delay value has no effect with remote file systems that
148 # \"    don't correctly emulate UNIX local file system semantics.
149 # \"    In that case, the delay will be half of $queue_run_delay
150 # \"    on average.
151 # \" .IP \(bu
152 # \"    Mail will still be delivered with "sendmail -q", "postfix
153 # \"    flush" or "postqueue -f".
154 # \" .IP \(bu
155 # \"    Delayed mail increases the amount of disk I/O during deferred
156 # \"    queue scans. When large amounts of mail are queued for
157 # \"    delayed delivery it may be preferable to use the HOLD feature
158 # \"    instead.
159 # \" .RE
160 # \" .IP
161 # \"    This feature is available in Postfix 2.3 and later.
162 # .IP "\fBDISCARD \fIoptional text...\fR"
163 #       Claim successful delivery and silently discard the message.
164 #       Log the optional text if specified, otherwise log a generic
165 #       message.
166 # .sp
167 #       Note: this action disables further header or body_checks inspection
168 #       of the current message and affects all recipients.
169 #       To discard only one recipient without discarding the entire message,
170 #       use the transport(5) table to direct mail to the discard(8) service.
171 # .sp
172 #       This feature is available in Postfix 2.0 and later.
173 # .IP \fBDUNNO\fR
174 #       Pretend that the input line did not match any pattern, and inspect the
175 #       next input line. This action can be used to shorten the table search.
176 # .sp
177 #       For backwards compatibility reasons, Postfix also accepts
178 #       \fBOK\fR but it is (and always has been) treated as \fBDUNNO\fR.
179 # .sp
180 #       This feature is available in Postfix 2.1 and later.
181 # .IP "\fBFILTER \fItransport:destination\fR"
182 #       Write a content filter request to the queue file, and
183 #       inspect the next input line.
184 #       After the complete message is received it will be sent through
185 #       the specified external content filter.  More information about
186 #       external content filters is in the Postfix FILTER_README file.
187 # .sp
188 #       Note: this action overrides the \fBcontent_filter\fR setting,
189 #       and affects all recipients of the message. In the case that multiple
190 #       \fBFILTER\fR actions fire, only the last one is executed.
191 # .sp
192 #       This feature is available in Postfix 2.0 and later.
193 # .IP "\fBHOLD \fIoptional text...\fR"
194 #       Arrange for the message to be placed on the \fBhold\fR queue,
195 #       and inspect the next input line.  The message remains on \fBhold\fR
196 #       until someone either deletes it or releases it for delivery.
197 #       Log the optional text if specified, otherwise log a generic
198 #       message.
200 #       Mail that is placed on hold can be examined with the
201 #       \fBpostcat\fR(1) command, and can be destroyed or released with
202 #       the \fBpostsuper\fR(1) command.
203 # .sp
204 #       Note: use "\fBpostsuper -r\fR" to release mail that was kept on
205 #       hold for a significant fraction of \fB$maximal_queue_lifetime\fR
206 #       or \fB$bounce_queue_lifetime\fR, or longer. Use "\fBpostsuper -H\fR"
207 #       only for mail that will not expire within a few delivery attempts.
208 # .sp
209 #       Note: this action affects all recipients of the message.
210 # .sp
211 #       This feature is available in Postfix 2.0 and later.
212 # .IP \fBIGNORE\fR
213 #       Delete the current line from the input, and inspect
214 #       the next input line.
215 # .IP "\fBPREPEND \fItext...\fR"
216 #       Prepend one line with the specified text, and inspect the next
217 #       input line.
218 # .sp
219 #       Notes: 
220 # .RS
221 # .IP \(bu
222 #       The prepended text is output on a separate line, immediately
223 #       before the input that triggered the \fBPREPEND\fR action.
224 # .IP \(bu
225 #       The prepended text is not considered part of the input
226 #       stream: it is not subject to header/body checks or address
227 #       rewriting, and it does not affect the way that Postfix adds
228 #       missing message headers.
229 # .IP \(bu
230 #       When prepending text before a message header line, the prepended
231 #       text must begin with a valid message header label.
232 # .IP \(bu
233 #       This action cannot be used to prepend multi-line text.
234 # .RE
235 # .IP
236 #       This feature is available in Postfix 2.1 and later.
237 # .IP "\fBREDIRECT \fIuser@domain\fR"
238 #       Write a message redirection request to the queue file, and
239 #       inspect the next input line. After the message is queued,
240 #       it will be sent to the specified address instead of the
241 #       intended recipient(s).
242 # .sp
243 #       Note: this action overrides the \fBFILTER\fR action, and affects
244 #       all recipients of the message. If multiple \fBREDIRECT\fR actions
245 #       fire, only the last one is executed.
246 # .sp
247 #       This feature is available in Postfix 2.1 and later.
248 # .IP "\fBREPLACE \fItext...\fR"
249 #       Replace the current line with the specified text, and inspect the next
250 #       input line.
251 # .sp
252 #       This feature is available in Postfix 2.2 and later. The
253 #       description below applies to Postfix 2.2.2 and later.
254 # .sp
255 #       Notes: 
256 # .RS
257 # .IP \(bu
258 #       When replacing a message header line, the replacement text
259 #       must begin with a valid header label.
260 # .IP \(bu
261 #       The replaced text remains part of the input stream. Unlike
262 #       the result from the \fBPREPEND\fR action, a replaced message
263 #       header may be subject to address rewriting and may affect
264 #       the way that Postfix adds missing message headers.
265 # .RE
266 # .IP "\fBREJECT \fIoptional text...\fR
267 #       Reject the entire message. Reply with \fIoptional text...\fR when
268 #       the optional text is specified, otherwise reply with a generic error
269 #       message.
270 # .sp
271 #       Note: this action disables further header or body_checks inspection
272 #       of the current message and affects all recipients.
273 # .sp
274 #       Postfix version 2.3 and later support enhanced status codes.
275 #       When no code is specified at the beginning of \fIoptional
276 #       text...\fR, Postfix inserts a default enhanced status code of
277 #       "5.7.1".
278 # .IP "\fBWARN \fIoptional text...\fR
279 #       Log a warning with the \fIoptional text...\fR (or log a
280 #       generic message), and inspect the next input line. This
281 #       action is useful for debugging and for testing a pattern
282 #       before applying more drastic actions.
283 # BUGS
284 #       Empty lines never match, because some map types mis-behave
285 #       when given a zero-length search string.  This limitation may
286 #       be removed for regular expression tables in a future release.
288 #       Many people overlook the main limitations of header and body_checks
289 #       rules.
290 # .IP \(bu
291 #       These rules operate on one logical message header or one body
292 #       line at a time. A decision made for one line is not carried over
293 #       to the next line.
294 # .IP \(bu
295 #       If text in the message body is encoded
296 #       (RFC 2045) then the rules need to be specified for the encoded
297 #       form.
298 # .IP \(bu
299 #       Likewise, when message headers are encoded (RFC
300 #       2047) then the rules need to be specified for the encoded
301 #       form.
302 # .PP
303 #       Message headers added by the \fBcleanup\fR(8) daemon itself
304 #       are excluded from inspection. Examples of such message headers
305 #       are \fBFrom:\fR, \fBTo:\fR, \fBMessage-ID:\fR, \fBDate:\fR.
307 #       Message headers deleted by the \fBcleanup\fR(8) daemon will
308 #       be examined before they are deleted. Examples are: \fBBcc:\fr,
309 #       \fBContent-Length:\fR, \fBReturn-Path:\fR.
310 # CONFIGURATION PARAMETERS
311 # .ad
312 # .fi
313 # .IP \fBbody_checks\fR
314 #       Lookup tables with content filter rules for message body lines.
315 #       These filters see one physical line at a time, in chunks of
316 #       at most \fB$line_length_limit\fR bytes.
317 # .IP \fBbody_checks_size_limit\fP
318 #       The amount of content per message body segment (attachment) that is
319 #       subjected to \fB$body_checks\fR filtering.
320 # .IP \fBheader_checks\fR
321 # .IP "\fBmime_header_checks\fR (default: \fB$header_checks\fR)"
322 # .IP "\fBnested_header_checks\fR (default: \fB$header_checks\fR)"
323 #       Lookup tables with content filter rules for message header lines:
324 #       respectively, these are applied to the initial message headers
325 #       (not including MIME headers), to the MIME headers anywhere in
326 #       the message, and to the initial headers of attached messages.
327 # .sp
328 #       Note: these filters see one logical message header at a time, even
329 #       when a message header spans multiple lines. Message headers that
330 #       are longer than \fB$header_size_limit\fR characters are truncated.
331 # .IP \fBdisable_mime_input_processing\fR
332 #       While receiving mail, give no special treatment to MIME related
333 #       message headers; all text after the initial message headers is
334 #       considered to be part of the message body. This means that
335 #       \fBheader_checks\fR is applied to all the initial message headers,
336 #       and that \fBbody_checks\fR is applied to the remainder of the
337 #       message.
338 # .sp
339 #       Note: when used in this manner, \fBbody_checks\fR will process
340 #       a multi-line message header one line at a time.
341 # EXAMPLES
342 # .ad
343 # .fi
344 #       Header pattern to block attachments with bad file name
345 #       extensions.  For convenience, the PCRE /x flag is specified,
346 #       so that there is no need to collapse the pattern into a
347 #       single line of text.  The purpose of the [[:xdigit:]]
348 #       sub-expressions is to recognize Windows CLSID strings.
350 # .na
351 # .nf
352 #       /etc/postfix/main.cf:
353 #           header_checks = pcre:/etc/postfix/header_checks.pcre
355 #       /etc/postfix/header_checks.pcre:
356 #           /^Content-(Disposition|Type).*name\es*=\es*"?(.*(\e.|=2E)(
357 #             ade|adp|asp|bas|bat|chm|cmd|com|cpl|crt|dll|exe|
358 #             hlp|ht[at]|
359 #             inf|ins|isp|jse?|lnk|md[betw]|ms[cipt]|nws|
360 #             \e{[[:xdigit:]]{8}(?:-[[:xdigit:]]{4}){3}-[[:xdigit:]]{12}\e}|
361 #             ops|pcd|pif|prf|reg|sc[frt]|sh[bsm]|swf|
362 #             vb[esx]?|vxd|ws[cfh]))(\e?=)?"?\es*(;|$)/x
363 #               REJECT Attachment name "$2" may not end with ".$4"
364 # .ad
365 # .fi
367 #       Body pattern to stop a specific HTML browser vulnerability exploit.
369 # .na
370 # .nf
371 #       /etc/postfix/main.cf:
372 #           body_checks = regexp:/etc/postfix/body_checks
374 #       /etc/postfix/body_checks:
375 #           /^<iframe src=(3D)?cid:.* height=(3D)?0 width=(3D)?0>$/
376 #               REJECT IFRAME vulnerability exploit
377 # SEE ALSO
378 #       cleanup(8), canonicalize and enqueue Postfix message
379 #       pcre_table(5), format of PCRE lookup tables
380 #       regexp_table(5), format of POSIX regular expression tables
381 #       postconf(1), Postfix configuration utility
382 #       postmap(1), Postfix lookup table management
383 #       postsuper(1), Postfix janitor
384 #       postcat(1), show Postfix queue file contents
385 #       RFC 2045, base64 and quoted-printable encoding rules
386 #       RFC 2047, message header encoding for non-ASCII text
387 # README FILES
388 # .ad
389 # .fi
390 #       Use "\fBpostconf readme_directory\fR" or
391 #       "\fBpostconf html_directory\fR" to locate this information.
392 # .na
393 # .nf
394 #       DATABASE_README, Postfix lookup table overview
395 #       CONTENT_INSPECTION_README, Postfix content inspection overview
396 #       BUILTIN_FILTER_README, Postfix built-in content inspection
397 #       BACKSCATTER_README, blocking returned forged mail
398 # LICENSE
399 # .ad
400 # .fi
401 #       The Secure Mailer license must be distributed with this software.
402 # AUTHOR(S)
403 #       Wietse Venema
404 #       IBM T.J. Watson Research
405 #       P.O. Box 704
406 #       Yorktown Heights, NY 10598, USA