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.
- package/.eslintrc.yaml +2 -10
- package/Changes.md +84 -2
- package/Dockerfile +1 -1
- package/Plugins.md +9 -4
- package/README.md +2 -6
- package/bin/haraka +5 -4
- package/config/outbound.ini +0 -7
- package/config/plugins +1 -1
- package/config/smtp.ini +1 -1
- package/config/smtp_forward.ini +2 -8
- package/config/smtp_proxy.ini +0 -6
- package/connection.js +178 -204
- package/coverage/lcov.info +13863 -0
- package/coverage/tmp/coverage-42958-1658373250585-0.json +1 -0
- package/coverage/tmp/coverage-42961-1658373250529-0.json +1 -0
- package/dkim.js +66 -73
- package/docs/Body.md +1 -22
- package/docs/CoreConfig.md +2 -2
- package/docs/Header.md +1 -47
- package/docs/Outbound.md +8 -36
- package/endpoint.js +1 -1
- package/haraka.js +1 -1
- package/host_pool.js +8 -12
- package/logger.js +25 -32
- package/outbound/client_pool.js +11 -153
- package/outbound/config.js +5 -11
- package/outbound/hmail.js +109 -143
- package/outbound/index.js +13 -25
- package/outbound/mx_lookup.js +10 -7
- package/outbound/queue.js +8 -12
- package/outbound/timer_queue.js +2 -4
- package/outbound/tls.js +17 -18
- package/outbound/todo.js +1 -0
- package/package.json +57 -55
- package/plugins/auth/auth_base.js +39 -63
- package/plugins/auth/auth_bridge.js +3 -4
- package/plugins/auth/auth_proxy.js +16 -16
- package/plugins/auth/auth_vpopmaild.js +30 -37
- package/plugins/auth/flat_file.js +9 -13
- package/plugins/avg.js +9 -11
- package/plugins/backscatterer.js +1 -1
- package/plugins/block_me.js +2 -6
- package/plugins/bounce.js +106 -124
- package/plugins/clamd.js +59 -63
- package/plugins/data.signatures.js +6 -6
- package/plugins/data.uribl.js +1 -415
- package/plugins/delay_deny.js +19 -20
- package/plugins/dkim_sign.js +56 -62
- package/plugins/dkim_verify.js +9 -8
- package/plugins/dns_list_base.js +43 -42
- package/plugins/dnsbl.js +41 -46
- package/plugins/dnswl.js +23 -26
- package/plugins/early_talker.js +24 -28
- package/plugins/esets.js +8 -11
- package/plugins/greylist.js +161 -190
- package/plugins/helo.checks.js +175 -197
- package/plugins/mail_from.is_resolvable.js +38 -38
- package/plugins/messagesniffer.js +33 -40
- package/plugins/prevent_credential_leaks.js +7 -5
- package/plugins/process_title.js +16 -17
- package/plugins/queue/deliver.js +2 -2
- package/plugins/queue/lmtp.js +5 -6
- package/plugins/queue/qmail-queue.js +11 -13
- package/plugins/queue/quarantine.js +25 -34
- package/plugins/queue/rabbitmq.js +3 -2
- package/plugins/queue/rabbitmq_amqplib.js +9 -9
- package/plugins/queue/smtp_bridge.js +5 -4
- package/plugins/queue/smtp_forward.js +81 -89
- package/plugins/queue/smtp_proxy.js +21 -22
- package/plugins/queue/test.js +2 -1
- package/plugins/rcpt_to.host_list_base.js +20 -30
- package/plugins/rcpt_to.in_host_list.js +12 -14
- package/plugins/rcpt_to.max_count.js +7 -5
- package/plugins/record_envelope_addresses.js +4 -6
- package/plugins/relay.js +64 -74
- package/plugins/reseed_rng.js +1 -2
- package/plugins/spamassassin.js +56 -68
- package/plugins/status.js +2 -3
- package/plugins/tarpit.js +8 -11
- package/plugins/tls.js +14 -17
- package/plugins/toobusy.js +6 -8
- package/plugins/xclient.js +14 -25
- package/plugins.js +24 -29
- package/rfc1869.js +2 -2
- package/server.js +3 -13
- package/smtp_client.js +138 -215
- package/tests/config/smtp_forward.ini +0 -6
- package/tests/fixtures/line_socket.js +1 -1
- package/tests/fixtures/util_hmailitem.js +5 -7
- package/tests/fixtures/vm_harness.js +2 -2
- package/tests/host_pool.js +13 -14
- package/tests/installation/plugins/inherits.js +1 -2
- package/tests/logger.js +2 -2
- package/tests/plugins/bounce.js +6 -8
- package/tests/plugins/dkim_signer.js +7 -7
- package/tests/plugins/dns_list_base.js +7 -7
- package/tests/plugins/helo.checks.js +1 -1
- package/tests/plugins/mail_from.is_resolvable.js +10 -54
- package/tests/plugins/queue/smtp_forward.js +11 -11
- package/tests/plugins/rcpt_to.host_list_base.js +1 -1
- package/tests/plugins/rcpt_to.in_host_list.js +1 -1
- package/tests/plugins/spamassassin.js +1 -1
- package/tests/queue/multibyte +0 -0
- package/tests/queue/plain +0 -0
- package/tests/rfc1869.js +4 -1
- package/tests/server.js +15 -9
- package/tests/smtp_client/auth.js +4 -14
- package/tests/smtp_client/basic.js +5 -15
- package/tests/smtp_client.js +7 -3
- package/tests/transaction.js +72 -19
- package/tls_socket.js +75 -85
- package/transaction.js +7 -9
- package/attachment_stream.js +0 -118
- package/bin/spf +0 -48
- package/chunkemitter.js +0 -75
- package/config/data.uribl.excludes +0 -202
- package/config/data.uribl.ini +0 -37
- package/config/spf.ini +0 -1
- package/docs/plugins/attachment.md +0 -92
- package/docs/plugins/data.uribl.md +0 -120
- package/docs/plugins/spf.md +0 -142
- package/mailbody.js +0 -502
- package/mailheader.js +0 -304
- package/messagestream.js +0 -441
- package/plugins/aliases.js +0 -120
- package/plugins/attachment.js +0 -503
- package/plugins/connect.p0f.js +0 -5
- package/plugins/spf.js +0 -327
- package/spf.js +0 -689
- package/tests/mailbody.js +0 -348
- package/tests/mailheader.js +0 -138
- package/tests/messagestream.js +0 -34
- package/tests/plugins/aliases.js +0 -376
- package/tests/plugins/spf.js +0 -251
- package/tests/spf.js +0 -96
package/attachment_stream.js
DELETED
|
@@ -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
|
package/config/data.uribl.ini
DELETED
|
@@ -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/
|