Subversion Repositories configs

Rev

Details | Last modification | View Log | RSS feed

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