Haraka 2.8.28 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/.eslintrc.yaml +2 -10
  2. package/Changes.md +84 -2
  3. package/Dockerfile +1 -1
  4. package/Plugins.md +9 -4
  5. package/README.md +2 -6
  6. package/bin/haraka +5 -4
  7. package/config/outbound.ini +0 -7
  8. package/config/plugins +1 -1
  9. package/config/smtp.ini +1 -1
  10. package/config/smtp_forward.ini +2 -8
  11. package/config/smtp_proxy.ini +0 -6
  12. package/connection.js +178 -204
  13. package/coverage/lcov.info +13863 -0
  14. package/coverage/tmp/coverage-42958-1658373250585-0.json +1 -0
  15. package/coverage/tmp/coverage-42961-1658373250529-0.json +1 -0
  16. package/dkim.js +66 -73
  17. package/docs/Body.md +1 -22
  18. package/docs/CoreConfig.md +2 -2
  19. package/docs/Header.md +1 -47
  20. package/docs/Outbound.md +8 -36
  21. package/endpoint.js +1 -1
  22. package/haraka.js +1 -1
  23. package/host_pool.js +8 -12
  24. package/logger.js +25 -32
  25. package/outbound/client_pool.js +11 -153
  26. package/outbound/config.js +5 -11
  27. package/outbound/hmail.js +109 -143
  28. package/outbound/index.js +13 -25
  29. package/outbound/mx_lookup.js +10 -7
  30. package/outbound/queue.js +8 -12
  31. package/outbound/timer_queue.js +2 -4
  32. package/outbound/tls.js +17 -18
  33. package/outbound/todo.js +1 -0
  34. package/package.json +57 -55
  35. package/plugins/auth/auth_base.js +39 -63
  36. package/plugins/auth/auth_bridge.js +3 -4
  37. package/plugins/auth/auth_proxy.js +16 -16
  38. package/plugins/auth/auth_vpopmaild.js +30 -37
  39. package/plugins/auth/flat_file.js +9 -13
  40. package/plugins/avg.js +9 -11
  41. package/plugins/backscatterer.js +1 -1
  42. package/plugins/block_me.js +2 -6
  43. package/plugins/bounce.js +106 -124
  44. package/plugins/clamd.js +59 -63
  45. package/plugins/data.signatures.js +6 -6
  46. package/plugins/data.uribl.js +1 -415
  47. package/plugins/delay_deny.js +19 -20
  48. package/plugins/dkim_sign.js +56 -62
  49. package/plugins/dkim_verify.js +9 -8
  50. package/plugins/dns_list_base.js +43 -42
  51. package/plugins/dnsbl.js +41 -46
  52. package/plugins/dnswl.js +23 -26
  53. package/plugins/early_talker.js +24 -28
  54. package/plugins/esets.js +8 -11
  55. package/plugins/greylist.js +161 -190
  56. package/plugins/helo.checks.js +175 -197
  57. package/plugins/mail_from.is_resolvable.js +38 -38
  58. package/plugins/messagesniffer.js +33 -40
  59. package/plugins/prevent_credential_leaks.js +7 -5
  60. package/plugins/process_title.js +16 -17
  61. package/plugins/queue/deliver.js +2 -2
  62. package/plugins/queue/lmtp.js +5 -6
  63. package/plugins/queue/qmail-queue.js +11 -13
  64. package/plugins/queue/quarantine.js +25 -34
  65. package/plugins/queue/rabbitmq.js +3 -2
  66. package/plugins/queue/rabbitmq_amqplib.js +9 -9
  67. package/plugins/queue/smtp_bridge.js +5 -4
  68. package/plugins/queue/smtp_forward.js +81 -89
  69. package/plugins/queue/smtp_proxy.js +21 -22
  70. package/plugins/queue/test.js +2 -1
  71. package/plugins/rcpt_to.host_list_base.js +20 -30
  72. package/plugins/rcpt_to.in_host_list.js +12 -14
  73. package/plugins/rcpt_to.max_count.js +7 -5
  74. package/plugins/record_envelope_addresses.js +4 -6
  75. package/plugins/relay.js +64 -74
  76. package/plugins/reseed_rng.js +1 -2
  77. package/plugins/spamassassin.js +56 -68
  78. package/plugins/status.js +2 -3
  79. package/plugins/tarpit.js +8 -11
  80. package/plugins/tls.js +14 -17
  81. package/plugins/toobusy.js +6 -8
  82. package/plugins/xclient.js +14 -25
  83. package/plugins.js +24 -29
  84. package/rfc1869.js +2 -2
  85. package/server.js +3 -13
  86. package/smtp_client.js +138 -215
  87. package/tests/config/smtp_forward.ini +0 -6
  88. package/tests/fixtures/line_socket.js +1 -1
  89. package/tests/fixtures/util_hmailitem.js +5 -7
  90. package/tests/fixtures/vm_harness.js +2 -2
  91. package/tests/host_pool.js +13 -14
  92. package/tests/installation/plugins/inherits.js +1 -2
  93. package/tests/logger.js +2 -2
  94. package/tests/plugins/bounce.js +6 -8
  95. package/tests/plugins/dkim_signer.js +7 -7
  96. package/tests/plugins/dns_list_base.js +7 -7
  97. package/tests/plugins/helo.checks.js +1 -1
  98. package/tests/plugins/mail_from.is_resolvable.js +10 -54
  99. package/tests/plugins/queue/smtp_forward.js +11 -11
  100. package/tests/plugins/rcpt_to.host_list_base.js +1 -1
  101. package/tests/plugins/rcpt_to.in_host_list.js +1 -1
  102. package/tests/plugins/spamassassin.js +1 -1
  103. package/tests/queue/multibyte +0 -0
  104. package/tests/queue/plain +0 -0
  105. package/tests/rfc1869.js +4 -1
  106. package/tests/server.js +15 -9
  107. package/tests/smtp_client/auth.js +4 -14
  108. package/tests/smtp_client/basic.js +5 -15
  109. package/tests/smtp_client.js +7 -3
  110. package/tests/transaction.js +72 -19
  111. package/tls_socket.js +75 -85
  112. package/transaction.js +7 -9
  113. package/attachment_stream.js +0 -118
  114. package/bin/spf +0 -48
  115. package/chunkemitter.js +0 -75
  116. package/config/data.uribl.excludes +0 -202
  117. package/config/data.uribl.ini +0 -37
  118. package/config/spf.ini +0 -1
  119. package/docs/plugins/attachment.md +0 -92
  120. package/docs/plugins/data.uribl.md +0 -120
  121. package/docs/plugins/spf.md +0 -142
  122. package/mailbody.js +0 -502
  123. package/mailheader.js +0 -304
  124. package/messagestream.js +0 -441
  125. package/plugins/aliases.js +0 -120
  126. package/plugins/attachment.js +0 -503
  127. package/plugins/connect.p0f.js +0 -5
  128. package/plugins/spf.js +0 -327
  129. package/spf.js +0 -689
  130. package/tests/mailbody.js +0 -348
  131. package/tests/mailheader.js +0 -138
  132. package/tests/messagestream.js +0 -34
  133. package/tests/plugins/aliases.js +0 -376
  134. package/tests/plugins/spf.js +0 -251
  135. package/tests/spf.js +0 -96
@@ -1,118 +0,0 @@
1
- 'use strict';
2
-
3
- const Stream = require('stream');
4
-
5
- class AttachmentStream extends Stream {
6
- constructor (header) {
7
- super();
8
- this.header = header;
9
- this.encoding = null;
10
- this.paused = false;
11
- this.end_emitted = false;
12
- this.connection = null;
13
- this.buffer = [];
14
- }
15
-
16
- emit_data (data) {
17
- // console.log("YYY: DATA emit");
18
- if (this.paused) {
19
- return this.buffer.push(data);
20
- }
21
-
22
- if (this.encoding) {
23
- this.emit('data', data.toString(this.encoding));
24
- }
25
- else {
26
- this.emit('data', data);
27
- }
28
- }
29
-
30
- emit_end (force) {
31
- if (this.paused && !force) {
32
- // console.log("YYY: end emit (cache)");
33
- this.end_emitted = true;
34
- }
35
- else {
36
- // console.log("YYY: end emit");
37
- if (this.buffer.length > 0) {
38
- while (this.buffer.length > 0) {
39
- // Don't use this.emit_data() here because we don't want to
40
- // re-buffer the data we're trying to emit, when we're
41
- // paused and forcing the end.
42
- const data = this.buffer.shift();
43
- if (this.encoding) {
44
- this.emit('data', data.toString(this.encoding));
45
- }
46
- else {
47
- this.emit('data', data);
48
- }
49
- }
50
- }
51
- this.emit('end');
52
- }
53
- }
54
-
55
- pipe (dest, options) {
56
- const self = this;
57
- this.paused = false;
58
-
59
- const pipe = Stream.prototype.pipe.call(this, dest, options);
60
-
61
- dest.on('drain', () => {
62
- // console.log("YYY: DRAIN!!!");
63
- if (self.paused) self.resume();
64
- });
65
- dest.on('end', () => {
66
- // console.log("YYY: END!!");
67
- if (self.paused) self.resume();
68
- });
69
- dest.on('close', () => {
70
- // console.log("YYY: CLOSE!!");
71
- if (self.paused) self.resume();
72
- });
73
-
74
- return pipe;
75
- }
76
-
77
- setEncoding (enc) {
78
- if (enc !== 'binary') {
79
- throw "Unable to set encoding to anything other than binary";
80
- }
81
- this.encoding = enc;
82
- }
83
-
84
- pause () {
85
- // console.log("YYY: PAUSE!!");
86
- this.paused = true;
87
- if (this.connection) {
88
- // console.log("YYYY: Backpressure pause");
89
- this.connection.pause();
90
- }
91
- }
92
-
93
- resume () {
94
- // console.log("YYY: RESUME!!");
95
- if (this.connection) {
96
- // console.log("YYYY: Backpressure resume");
97
- this.connection.resume();
98
- }
99
- this.paused = false;
100
- if (this.buffer.length) {
101
- while (this.paused === false && this.buffer.length > 0) {
102
- this.emit_data(this.buffer.shift());
103
- }
104
- if (this.buffer.length === 0 && this.end_emitted) {
105
- this.emit('end');
106
- }
107
- }
108
- else if (this.end_emitted) {
109
- this.emit('end');
110
- }
111
- }
112
-
113
- destroy () {
114
- // console.log("YYYY: Stream destroyed");
115
- }
116
- }
117
-
118
- exports.createStream = header => new AttachmentStream (header)
package/bin/spf DELETED
@@ -1,48 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // SPF test tool
4
-
5
- const nopt = require('nopt');
6
- const path = require('path');
7
- const base_path = path.join(__dirname, '..');
8
- const SPF = require(`${base_path}/spf`).SPF;
9
- const spf = new SPF();
10
-
11
- const parsed = nopt({ 'debug': Boolean, 'ip': String, 'helo': String, 'domain': String });
12
-
13
- function print_usage () {
14
- console.log('Usage: spf [--debug] --ip <ip> --helo <helo> --domain <domain>');
15
- process.exit(1);
16
- }
17
-
18
- if (!parsed.ip || (parsed.ip && (!parsed.domain && !parsed.helo))) {
19
- print_usage();
20
- }
21
-
22
- if (!parsed.debug) {
23
- SPF.prototype.log_debug = function (str) {}
24
- }
25
-
26
- let domain;
27
- if (parsed.domain) {
28
- domain = /@(.+)$/.exec(parsed.domain);
29
- if (domain) {
30
- domain = domain[1];
31
- }
32
- else {
33
- domain = parsed.domain;
34
- }
35
- }
36
-
37
- spf.check_host(parsed.ip, (domain ? domain : parsed.helo), null, function (err, result) {
38
- if (err) {
39
- console.log(`Error: ${err.message}`);
40
- process.exit(1);
41
- }
42
- console.log([
43
- `ip=${parsed.ip}`,
44
- `helo="${(parsed.helo ? parsed.helo : '')}"`,
45
- `domain="${(domain ? domain : '')}"`,
46
- `result=${spf.result(result)}`
47
- ].join(' '));
48
- });
package/chunkemitter.js DELETED
@@ -1,75 +0,0 @@
1
- 'use strict';
2
-
3
- const EventEmitter = require('events').EventEmitter;
4
-
5
- class ChunkEmitter extends EventEmitter {
6
- constructor (buffer_size) {
7
- super();
8
- this.buffer_size = parseInt(buffer_size) || (64 * 1024);
9
- this.buf = null;
10
- this.pos = 0;
11
- this.bufs = [];
12
- this.bufs_size = 0;
13
- }
14
-
15
- fill (input) {
16
- if (typeof input === 'string') {
17
- input = Buffer.from(input);
18
- }
19
-
20
- // Optimization: don't allocate a new buffer until
21
- // the input we've had so far is bigger than our
22
- // buffer size.
23
- if (!this.buf) {
24
- // We haven't allocated a buffer yet
25
- this.bufs.push(input);
26
- this.bufs_size += input.length;
27
- if ((input.length + this.bufs_size) > this.buffer_size) {
28
- this.buf = Buffer.alloc(this.buffer_size);
29
- const in_new = Buffer.concat(this.bufs, this.bufs_size);
30
- input = in_new;
31
- // Reset
32
- this.bufs = [];
33
- this.bufs_size = 0;
34
- }
35
- else {
36
- return;
37
- }
38
- }
39
-
40
- while (input.length > 0) {
41
- let remaining = this.buffer_size - this.pos;
42
- if (remaining === 0) {
43
- this.emit('data', this.buf); //.slice(0));
44
- this.buf = Buffer.alloc(this.buffer_size);
45
- this.pos = 0;
46
- remaining = this.buffer_size;
47
- }
48
- const to_write = ((remaining > input.length) ? input.length : remaining);
49
- input.copy(this.buf, this.pos, 0, to_write);
50
- this.pos += to_write;
51
- input = input.slice(to_write);
52
- }
53
- }
54
-
55
- end (cb) {
56
- let emitted = false;
57
- if (this.bufs_size > 0) {
58
- this.emit('data', Buffer.concat(this.bufs, this.bufs_size));
59
- emitted = true;
60
- }
61
- else if (this.pos > 0) {
62
- this.emit('data', this.buf.slice(0, this.pos));
63
- emitted = true;
64
- }
65
- // Reset
66
- this.buf = null;
67
- this.pos = 0;
68
- this.bufs = [];
69
- this.bufs_size = 0;
70
- if (cb && typeof cb === 'function') cb();
71
- return emitted;
72
- }
73
- }
74
-
75
- module.exports = ChunkEmitter;
@@ -1,202 +0,0 @@
1
- # List derived from SpamAssassin
2
- 126.com
3
- 163.com
4
- 2o7.net
5
- 4at1.com
6
- 5iantlavalamp.com
7
- about.com
8
- adelphia.net
9
- adobe.com
10
- agora-inc.com
11
- agoramedia.com
12
- akamai.net
13
- akamaitech.net
14
- alexa.com
15
- amazon.com
16
- ancestry.com
17
- aol.com
18
- apache.org
19
- apple.com
20
- arcamax.com
21
- ask.com
22
- astrology.com
23
- atdmt.com
24
- att.net
25
- baidu.com
26
- bbc.co.uk
27
- bcentral.com
28
- bellsouth.net
29
- bfi0.com
30
- bing.com
31
- bridgetrack.com
32
- cafe24.com
33
- charter.net
34
- citibank.com
35
- citizensbank.com
36
- cjb.net
37
- classmates.com
38
- clickbank.net
39
- cnet.com
40
- cnn.com
41
- comcast.net
42
- com.com
43
- com.ne.kr
44
- corporate-ir.net
45
- cox.net
46
- craigslist.org
47
- cs.com
48
- custhelp.com
49
- daum.net
50
- dd.se
51
- debian.org
52
- dell.com
53
- directnic.com
54
- directtrack.com
55
- div.tk
56
- domain.com
57
- doubleclick.com
58
- dsbl.org
59
- earthlink.net
60
- ebay.com
61
- ebay.co.uk
62
- ebay.de
63
- ebayimg.com
64
- ebaystatic.com
65
- edgesuite.net
66
- ediets.com
67
- egroups.com
68
- emode.com
69
- example.com
70
- example.net
71
- example.org
72
- excite.com
73
- facebook.com
74
- fedex.com
75
- flickr.com
76
- freebsd.org
77
- free.fr
78
- f-secure.com
79
- gentoo.org
80
- geocities.com
81
- gmail.com
82
- gmx.net
83
- go.com
84
- godaddy.com
85
- googleadservices.com
86
- google.co.in
87
- google.com
88
- google.it
89
- grisoft.com
90
- hallmark.com
91
- hinet.net
92
- hotbar.com
93
- hotmail.com
94
- hotpop.com
95
- hp.com
96
- ibm.com
97
- incredimail.com
98
- investorplace.com
99
- ivillage.com
100
- joingevalia.com
101
- juno.com
102
- kernel.org
103
- li.tk
104
- livejournal.com
105
- lycos.com
106
- m7z.net
107
- mac.com
108
- macromedia.com
109
- mail.com
110
- mail.ru
111
- mailscanner.info
112
- marketwatch.com
113
- mcafee.com
114
- mchsi.com
115
- messagelabs.com
116
- microsoft.com
117
- military.com
118
- mindspring.com
119
- mit.edu
120
- monster.com
121
- mozilla.com
122
- msn.com
123
- myspace.com
124
- nate.com
125
- netflix.com
126
- netscape.com
127
- netscape.net
128
- netzero.net
129
- norman.com
130
- nytimes.com
131
- openoffice.org
132
- openxmlformats.org
133
- optonline.net
134
- osdn.com
135
- overstock.com
136
- pacbell.net
137
- pandasoftware.com
138
- passport.com
139
- paypal.com
140
- peoplepc.com
141
- plaxo.com
142
- prodigy.net
143
- p.tk
144
- radaruol.com.br
145
- real.com
146
- redhat.com
147
- rediff.com
148
- regions.com
149
- regionsnet.com
150
- rogers.com
151
- rr.com
152
- sbcglobal.net
153
- sec.gov
154
- sf.net
155
- shaw.ca
156
- shockwave.com
157
- smithbarney.com
158
- sourceforge.net
159
- spamcop.net
160
- speedera.net
161
- sportsline.com
162
- sun.com
163
- suntrust.com
164
- sympatico.ca
165
- tails.nl
166
- telus.net
167
- terra.com.br
168
- ticketmaster.com
169
- tinyurl.com
170
- tiscali.co.uk
171
- tom.com
172
- tone.co.nz
173
- t-online.de
174
- tux.org
175
- twitter.com
176
- uol.com.br
177
- ups.com
178
- usps.com
179
- verizon.net
180
- w3.org
181
- wamu.com
182
- wanadoo.fr
183
- washingtonpost.com
184
- weatherbug.com
185
- web.de
186
- webshots.com
187
- webtv.net
188
- wordpress.com
189
- wsj.com
190
- xmlsoap.org
191
- yahoo.ca
192
- yahoo.co.jp
193
- yahoo.co.kr
194
- yahoo.com
195
- yahoo.com.br
196
- yahoo.co.uk
197
- yahoogroups.com
198
- yimg.com
199
- yopi.de
200
- yoursite.com
201
- youtube.com
202
- zdnet.com
@@ -1,37 +0,0 @@
1
- ; If DBL not IPv6 compatible set:
2
- ; not_ipv6_compatible=1
3
-
4
- [dbl.spamhaus.org]
5
- validate=^(?!127\.0\.1\.255)127\.
6
- rdns=1
7
- helo=1
8
- envfrom=1
9
- from=1
10
- msgid=1
11
- body=1
12
- no_ip_lookups=1
13
- custom_msg={uri} listed in {zone}; see http://www.spamhaus.org/query/dbl?domain={uri}
14
-
15
- [multi.uribl.com]
16
- validate=^127
17
- strip_to_domain=1
18
- ; BLACK list only
19
- bitmask=2
20
- body=1
21
- custom_msg={uri} listed in {zone}; see http://lookup.uribl.com/?domain={uri}
22
-
23
- [multi.surbl.org]
24
- validate=^127
25
- strip_to_domain=1
26
- body=1
27
-
28
- ;[fresh15.spameatingmonkey.net]
29
- ;validate=^127
30
- ;rdns=1
31
- ;helo=1
32
- ;envfrom=1
33
- ;from=1
34
- ;msgid=1
35
- ;body=1
36
- ;no_ip_lookups=1
37
- ;custom_msg={uri} domain registered within the last 15 days; see http://spameatingmonkey.com/lookup/{uri}
package/config/spf.ini DELETED
@@ -1 +0,0 @@
1
- ; See 'haraka -h spf' for options
@@ -1,92 +0,0 @@
1
- attachment
2
- ==========
3
-
4
- This plugin allows you to reject messages based on Content-Type within
5
- the message or any MIME parts or on the filename of any attachments.
6
-
7
- Limitations
8
- -----------
9
-
10
- This plugin cannot detect forged MIME types where the sender is lying
11
- about the type. The type is not confirmed in any way currently.
12
-
13
-
14
- Requirements
15
- ------------
16
-
17
- To be able to check filenames inside archive files the npm module
18
- `tmp` is required and the `bsdtar` binary must be available (in
19
- /bin /usr/bin or /usr/local/bin).
20
-
21
- If either `tmp` or `bsdtar` are unavailable then the plugin will
22
- automatically disable expansion of archive files.
23
-
24
-
25
- Logging
26
- -------
27
-
28
- At INFO level logging this plugin will output the filename and type
29
- of each attached file along with an MD5 checksum of the contents.
30
- The MD5 checksum is useful to check against www.virustotal.com
31
-
32
-
33
- Configuration
34
- -------------
35
-
36
- * attachment.ini
37
-
38
- - archive\_max\_depth
39
- (default: 5)
40
-
41
- The maximum level of nested archives that will be unpacked.
42
- If this is exceeded the message will be rejected.
43
-
44
- - archive\_extns
45
- (default: .zip,.tar,.tgz,.taz,.z,.gz,.rar,.7z)
46
-
47
- File extensions that should be treated as archives.
48
- This can be any file type supported by bsdtar.
49
-
50
- - allow\_encrypted\_archives
51
- (default: false)
52
-
53
- Allow archives that cannot be read by bsdtar because
54
- they are encrypted.
55
-
56
- - timeout
57
- (default: 30)
58
-
59
- Timeout in seconds before the plugin will abort.
60
-
61
- * attachment.filename.regex
62
-
63
- This file contains a list of regular expressions, one per line that
64
- will be tested against each filename found within a message.
65
- The first regexp to match will cause the message to be rejected.
66
- Any invalid regexps will be detected, reported and skipped.
67
-
68
- * attachment.filename.wc
69
-
70
- As above, except this expects wildcards instead of regular expressions.
71
-
72
- * attachment.archive.filename.regex
73
-
74
- This file contains a list of regular expressions, one per line that
75
- will be tested against each filename found within an archive file.
76
- The first regexp to match will cause the message to be rejected.
77
- Any invalid regexps will be detected, reported and skipped.
78
-
79
- * attachment.archive.filename.wc
80
-
81
- As above, except this expects wildcards instead of regular expressions.
82
-
83
- * attachment.ctype.regex
84
-
85
- This file contains a list of regular expressions, one per line that
86
- will be tested against each MIME Content-Type header in the message.
87
- The first regexp to match will cause the message to be rejected.
88
- Any invalid regexps will be detected, reported and skipped.
89
-
90
- * attachiment.ctype.wc
91
-
92
- As above, except this expects wildcards instead of regular expressions.
@@ -1,120 +0,0 @@
1
- data.uribl
2
- ==========
3
-
4
- This plugin extracts URIs and feeds them to RHS based blacklists such as
5
- [DBL][1] and [SEM-FRESH][2] and body URI based DNS blacklists such as
6
- [SURBL][3] and [URIBL][4].
7
-
8
- This plugin will discard any domain name that does not have a valid TLD
9
- or any IP address within RFC1918, 127/8 or 169.254/16 (APIPA) and will
10
- convert any URI ending in in-addr.arpa into an IP address lookup.
11
-
12
- Configuration
13
- -------------
14
-
15
- This plugin reads configuration from data.uribl.ini.
16
-
17
- The main section defines global settings for all lists and the blacklists
18
- zones are specified as INI section headings with the configuration for
19
- each zone within that section.
20
-
21
- The main section can contain the following options:
22
-
23
- * timeout
24
-
25
- Default: 30
26
-
27
- The total timeout in seconds for each group of lookups. Any group of
28
- lookups that takes longer than this will be aborted and the session
29
- will continue.
30
-
31
- * max\_uris\_per\_list
32
-
33
- Default: 20
34
-
35
- This option limits the maximum number of unique lookups that will be
36
- submitted for each list after the input has been normalized into the
37
- query format required for the list.
38
- Any lookups greater than the limit will be discarded.
39
-
40
- List sections should be named as the zone of the blacklist and can
41
- contain the following options:
42
-
43
- At least one of the following must be set for any queries to be run for
44
- the blacklist.
45
-
46
- * rdns = 1 | true | yes | on | enabled
47
-
48
- Check any rDNS names against the list.
49
-
50
- * helo = 1 | true | yes | on | enabled
51
-
52
- Check the EHLO/HELO argument against the list.
53
-
54
- * envfrom = 1 | true | yes | on | enabled
55
-
56
- Check the MAIL FROM domain against the list.
57
-
58
- * from = 1 | true | yes | on | enabled
59
-
60
- Check the domain portion of the From: header against the list.
61
-
62
- * replyto = 1 | true | yes | on | enabled
63
-
64
- Check the domain portion of the Reply-To: header against the list.
65
-
66
- * msgid = 1 | true | yes | on | enabled
67
-
68
- Check the RHS of the Message-Id: header against the list.
69
-
70
- * body = 1 | true | yes | on | enabled
71
-
72
- Check any URIs found within the body of the message against the list.
73
-
74
- The following are optional for each list:
75
-
76
- * custom\_msg
77
-
78
- A custom rejection message that will be returned to the SMTP client
79
- if the list returns a positive result. If found within the string
80
- {uri} will be replaced by the URI value looked up and {zone} will
81
- be replaced by the blacklist zone name.
82
-
83
- * validate
84
-
85
- A regular expression that will be tested against the first A record
86
- returned by the list. If it does not evaluate to true then the positive
87
- result will be discarded. Example: ^(?!127\.0\.1\.255)127\. would check
88
- that the IP address returned start with 127. and is not 127.0.1.255
89
-
90
- * bitmask
91
-
92
- This is optionally used for lists such as [SURBL][3] and [URIBL][4] that
93
- return bitmask values in the last octet of the returned IP address to
94
- combine multiple lists into a single zone. Using this you may specify
95
- which lists within the zone you want use.
96
-
97
- * no\_ip\_lookups = 1 | true | yes | on | enabled
98
-
99
- Specifies that no IP addresses should ever be check against this list.
100
- This is required for dbl.spamhaus.org.
101
-
102
- * strip\_to\_domain= 1 | true | yes | on | enabled
103
-
104
- Specifies that the list requires hostnames be stripped down to the
105
- domain boundaries prior to querying the list. This is required for
106
- the [SURBL][3] and [URIBL][4] lists.
107
-
108
- Other files
109
- -----------
110
-
111
- * data.uribl.excludes
112
-
113
- This contains a list of domains that should never be looked up in
114
- any blacklist as they are known good and will never be listed.
115
- This helps to keep useless queries to a minimum.
116
-
117
- [1]: http://www.spamhaus.org/dbl
118
- [2]: http://spameatingmonkey.com/lists.html#SEM-FRESH
119
- [3]: http://www.surbl.org/
120
- [4]: http://www.uribl.com/