Este commit está contenido en:
Your Name
2020-07-03 11:49:11 +00:00
padre 48621bb2ed
commit 52d607ee8e
Se han modificado 547 ficheros con 37750 adiciones y 36525 borrados

Ver fichero

@@ -1,4 +1,5 @@
version: "2.3"
version: "2"
services:
wildduck:
build: ./wildduck
@@ -13,14 +14,18 @@ services:
- "587:587"
- "993:993"
expose:
- 25
- 80
- 12080
volumes:
- ./entrypoint.sh:/entrypoint.sh:ro
- /opt/docker/secure:/secure:ro
- ./wildduck/config:/wildduck/config
- ./wildduck-mta/config:/wildduck-mta/config
- ./haraka/config:/haraka/config
- ./wildduck/config:/wildduck/config:ro
- ./wildduck-mta/config:/wildduck-mta/config:ro
- ./haraka/config:/haraka/config:ro
- ./attachments:/home/node/attachments
- ./zonemta-wildduck.js:/wildduck-mta/plugins/zonemta-wildduck.js:ro
- ./maildropper.js:/wildduck/lib/maildropper.js:ro
depends_on:
- redis
- mongo
@@ -67,9 +72,12 @@ services:
expose:
- 3000
volumes:
- ./webmail/config:/webmail/config
- ./webmail/views:/webmail/views
- ./webmail/logo.png:/webmail/public/logo.png
- ./webmail/config:/webmail/config:ro
- ./webmail/views/index.hbs:/webmail/views/index.hbs:ro
- ./webmail/views/layout.hbs:/webmail/views/layout.hbs:ro
- ./webmail/views/layout-popup.hbs:/webmail/views/layout-popup.hbs:ro
- ./webmail/views/layout-webmail.hbs:/webmail/views/layout-webmail.hbs:ro
- ./webmail/logo.png:/webmail/public/logo.png:ro
depends_on:
- redis
- mongo

Ver fichero

@@ -1,9 +1,9 @@
#!/bin/bash
sudo service rspamd start
cd /haraka
node haraka.js &
NODE_ENV=production node haraka.js &
cd /wildduck
node server.js &
NODE_ENV=production node server.js &
cd /wildduck-mta
npm start --production &
NODE_ENV=production npm start &
/bin/sleep infinity

Ver fichero

@@ -3,7 +3,7 @@ reject_all=false
single_recipient=true
empty_return_path=true
bad_rcpt=true
bounce_spf=true
bounce_spf=false
non_local_msgid=true
[reject]

Ver fichero

@@ -1,5 +1,5 @@
disabled = false
selector = dkim
domain = hatthieves.es
headers_to_sign = From, Sender, Reply-To, Subject, Date, Message-ID, To, Cc, MIME-Version
dkim.private.key = /secure/dkim_private.key
disabled=false
selector=dkim
domain=hatthieves.es
headers_to_sign=From, Sender, Reply-To, Subject, Date, Message-ID, To, Cc, MIME-Version
dkim.private.key=/../../secure/dkim_private.key

Ver fichero

@@ -1,17 +1,17 @@
; disable checks or reject for each test if you are worried about strictness
;dns_timeout=30
dns_timeout=30
[check]
; match_re=true
bare_ip=true
; bare_ip=false
; dynamic=true
; big_company=true
; literal_mismatch: 1 = exact IP match, 2 = IP/24 match, 3 = /24 or RFC1918
; literal_mismatch=2
valid_hostname=true
forward_dns=true
rdns_match=true
; forward_dns=true
; rdns_match=true
; host_mismatch: hostname differs between EHLO invocations
host_mismatch=true
; proto_mismatch: host sent EHLO but then tries to sent HELO or vice-versa
@@ -22,15 +22,15 @@ host_mismatch=true
; proto_mismatch=false
proto_mismatch=true
; rdns_match=false
rdns_match=true
rdns_match=false
; dynamic=false
; bare_ip=false
bare_ip=true
bare_ip=false
; literal_mismatch=false
; valid_hostname=false
valid_hostname=true
; forward_dns=false
forward_dns=true
; forward_dns=true
; big_company=true
[skip]

Ver fichero

@@ -1,4 +1,4 @@
timeout=30
allow_mx_ip=0
reject_no_mx=1
re_bogus_ip=^(?:0\.0\.0\.0|255\.255\.255\.255|127\.)
re_bogus_ip=^(?:0\.0\.0\.0|255\.255\.255\.255|127\.|172\.)

Ver fichero

@@ -10,7 +10,7 @@ user=
; password
pass=
; host
host=127.0.0.1
host=172.200.0.103
; port
port=27017
; database name
@@ -23,7 +23,7 @@ delivery=email_delivery_results
; Absolute path to store attachments
[attachments]
path=/home/node/Haraka/attachments
path=/home/node/attachments
[enable]
queue=yes

Ver fichero

@@ -8,10 +8,12 @@
; uncomment to disable tls for outbound mail
; enable_tls=false
enable_tls=true
; maxTempFailures (default: 13)
; ipv6_enabled (default: false)
ipv6_enabled=true
; load_pid_queue
; flush_queue
@@ -24,7 +26,9 @@
; pool_timeout: default : 300
; pool_timeout=0
pool_timeout=30
; pool_concurrency_max: default: 10
; set to zero to disable pools
; pool_concurrency_max=0
pool_concurrency_max=20

Ver fichero

@@ -24,6 +24,7 @@ access
# block mails from known bad hosts (see config/dnsbl.zones for the DNS zones queried)
#dnsbl
redis
#mongodb
# HELO
#early_talker
@@ -76,3 +77,4 @@ queue/lmtp
#watch
wildduck

Ver fichero

@@ -1,6 +1,6 @@
; address to listen on (default: all IPv6 and IPv4 addresses, port 25)
; use "[::0]:25" to listen on IPv6 and IPv4 (not all OSes)
; listen=[::0]:25
listen=[::0]:25
; Note you can listen on multiple IPs/ports using commas:
;listen=127.0.0.1:2529,127.0.0.2:2529,127.0.0.3:2530
@@ -24,7 +24,7 @@ public_ip=82.223.3.135
; Run using cluster to fork multiple backend processes
;nodes=cpus
nodes=4
nodes=6
; Daemonize
;daemonize=true

Ver fichero

@@ -29,6 +29,6 @@ ciphers=ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-G
; no_tls_hosts - disable TLS for servers with broken TLS.
[no_tls_hosts]
; 127.0.0.1
127.0.0.1
; 192.168.1.1
; 172.16.0.0/16

Ver fichero

@@ -49,7 +49,7 @@ sender:
srs:
# must be shared with ZoneMTA SRS config, otherwise messages sent from ZoneMTA are not recognized by Haraka
secret: 'asecretcat'
secret: 'a secret hat'
attachments:
type: 'gridstore'

Ver fichero

@@ -3,6 +3,5 @@ RUN apt update && apt -y install git python make sudo
RUN git clone https://github.com/nodemailer/wildduck-webmail /webmail
RUN chown node.node -R /webmail
WORKDIR /webmail
RUN git checkout 5c54625a8b192823184ba7f5da41f3414e76db94
RUN sudo -u node npm install
RUN sudo -u node npm i
RUN sudo -u node npm run bowerdeps

Ver fichero

@@ -15,6 +15,7 @@ title="Wild Duck Mail - HatThieves.es"
enableSpecial=true # if true the allow creating addresses with special usernames
# allowed domains for new addresses
domains=["hatthieves.es"]
generalNotification=""
[api]
# url="http://127.0.0.1:8080"
@@ -53,7 +54,7 @@ title="Wild Duck Mail - HatThieves.es"
[u2f]
# set to false if not using HTTPS
enabled=false
enabled=true
# must be https url or use default
#appId="https://127.0.0.1:8080"
appId="https://webmail.hatthieves.es"

Ver fichero

@@ -18,53 +18,62 @@
</div>
<div class="panel-body">
<p>
If enabled then an autoreply message is sent to all incoming messages. If a contact sends multiple messages then the autoreply is sent at most once in every four hours.
</p>
<p>
If enabled then an autoreply message is sent to all incoming messages. If a contact sends
multiple messages then the autoreply is sent at most once in every four hours.
</p>
<div class="radio">
<label>
<input type="radio" name="status" value="false" {{#unless values.status}}checked{{/unless}}>
Autoreply is {{#unless values.status}}<span class="label label-default">disabled</span>{{else}}disabled{{/unless}}
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="status" value="true" {{#if values.status}}checked{{/if}}>
Autoreply is {{#if values.status}}<span class="label label-info">enabled</span>{{else}}enabled{{/if}}
</label>
</div>
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" id="name" name="name" value="{{values.name}}" placeholder="Sender name in the autoreply From: header">
</div>
<div class="form-group">
<label for="subject">Subject</label>
<input type="text" class="form-control" id="subject" name="subject" value="{{values.subject}}" placeholder="Leave blank to use the default subject">
</div>
<div class="form-group">
<label for="daterange">Time</label>
<div class="form-group-sm daterangeElm" style="position: relative">
<input type="text" id="daterange" class="form-control" value="">
<i class="glyphicon glyphicon-calendar fa fa-calendar" style="position: absolute; bottom: 10px; right: 24px; top: auto; cursor: pointer;"></i>
<div class="radio">
<label>
<input type="radio" name="status" value="false"
{{#unless values.status}}checked{{/unless}}>
Autoreply is {{#unless values.status}}<span
class="label label-default">disabled</span>{{else}}disabled{{/unless}}
</label>
</div>
</div>
<div class="form-group">
<label for="message">Message</label>
<textarea class="form-control" name="text" value="{{values.text}}" rows="3">{{values.text}}</textarea>
</div>
<div class="radio">
<label>
<input type="radio" name="status" value="true" {{#if values.status}}checked{{/if}}>
Autoreply is {{#if values.status}}<span
class="label label-info">enabled</span>{{else}}enabled{{/if}}
</label>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success"><span class="glyphicon glyphicon-wrench" aria-hidden="true"></span> Update</button>
</div>
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" id="name" name="name" value="{{values.name}}"
placeholder="Sender name in the autoreply From: header">
</div>
<div class="form-group">
<label for="subject">Subject</label>
<input type="text" class="form-control" id="subject" name="subject"
value="{{values.subject}}" placeholder="Leave blank to use the default subject">
</div>
<div class="form-group">
<label for="daterange">Time</label>
<div class="form-group-sm daterangeElm" style="position: relative">
<input type="text" id="daterange" class="form-control" value="">
<i class="glyphicon glyphicon-calendar fa fa-calendar"
style="position: absolute; bottom: 10px; right: 24px; top: auto; cursor: pointer;"></i>
</div>
</div>
<div class="form-group">
<label for="message">Message</label>
<textarea class="form-control" name="text" value="{{values.text}}"
rows="3">{{values.text}}</textarea>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success"><span class="glyphicon glyphicon-wrench"
aria-hidden="true"></span> Update</button>
</div>
</div>
</div>
</div>
</fieldset>
</form>
@@ -73,8 +82,11 @@
</div>
<script>
document.addEventListener("DOMContentLoaded", function(event) {
$('#daterange').daterangepicker({
const startValue = (document.getElementById('start').value || '').trim();
const endValue = (document.getElementById('end').value || '').trim();
document.addEventListener("DOMContentLoaded", function (event) {
const rangeOptions = {
"showDropdowns": true,
"showISOWeekNumbers": true,
"timePicker": true,
@@ -116,27 +128,29 @@
"firstDay": 1
},
{{#if values.start}}
"startDate": moment("{{values.start}}").format('DD/MM/YYYY HH:mm'),
{{/if}}
{{#if values.end}}
"endDate": moment("{{values.end}}").format('DD/MM/YYYY HH:mm'),
{{/if}}
"alwaysShowCalendars": true
}, function(start, end, label) {
}
if (startValue) {
rangeOptions.startDate = moment(startValue).format('DD/MM/YYYY HH:mm')
}
if (endValue) {
rangeOptions.endDate = moment(endValue).format('DD/MM/YYYY HH:mm')
}
$('#daterange').daterangepicker(rangeOptions, function (start, end, label) {
document.getElementById('start').value = start.valueOf();
document.getElementById('end').value = end.valueOf();
document.getElementById('daterange').value = start.format('DD/MM/YYYY HH:mm') + ' ' + end.format('DD/MM/YYYY HH:mm');
});
$('.daterangeElm i').click(function() {
$('.daterangeElm i').click(function () {
$(this).parent().find('input').click();
});
{{#if values.start}}
document.getElementById('daterange').value = moment("{{values.start}}").format('DD/MM/YYYY HH:mm') + ' ' + moment("{{values.end}}").format('DD/MM/YYYY HH:mm');
{{/if}}
if (startValue && endValue) {
document.getElementById('daterange').value = moment(startValue).format('DD/MM/YYYY HH:mm') + ' ' + moment(endValue).format('DD/MM/YYYY HH:mm');
}
});
</script>
</script>

Ver fichero

@@ -6,7 +6,8 @@
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Account configuration</h3></div>
<h3 class="panel-title">Account configuration</h3>
</div>
<div class="panel-body">
<p>
Use the following configuration for your desktop email client.
@@ -45,20 +46,20 @@
</td>
</tr>
{{#if user}}
<tr>
<th>
E-mail address
</th>
<td>
{{user.username}}@{{serviceDomain}}
</td>
<td>
{{user.username}}@{{serviceDomain}}
</td>
<td>
{{user.username}}@{{serviceDomain}}
</td>
</tr>
<tr>
<th>
E-mail address
</th>
<td>
{{user.username}}@{{serviceDomain}}
</td>
<td>
{{user.username}}@{{serviceDomain}}
</td>
<td>
{{user.username}}@{{serviceDomain}}
</td>
</tr>
{{/if}}
<tr>
<th>
@@ -94,23 +95,23 @@
</th>
<td>
{{#if setup.imap.secure}}
TLS/SSL
TLS/SSL
{{else}}
STARTTLS
STARTTLS
{{/if}}
</td>
<td>
{{#if setup.pop3.secure}}
TLS/SSL
TLS/SSL
{{else}}
STARTTLS
STARTTLS
{{/if}}
</td>
<td>
{{#if setup.smtp.secure}}
TLS/SSL
TLS/SSL
{{else}}
STARTTLS
STARTTLS
{{/if}}
</td>
</tr>
@@ -119,32 +120,40 @@
Username
</th>
{{#if user}}
<td>
{{user.username}}
</td>
<td>
{{user.username}}
</td>
<td>
{{user.username}}
</td>
<td>
{{user.username}}
</td>
<td>
{{user.username}}
</td>
<td>
{{user.username}}
</td>
{{else}}
<td>
Your username
</td>
<td>
Your username
</td>
<td>
Your username
</td>
<td>
Your username
</td>
<td>
Your username
</td>
<td>
Your username
</td>
{{/if}}
</tr>
<tr>
<th>
Password
</th>
{{#if use2fa}}
<td colspan="3">
Two factor authentication is enabled on your account.
Generate application specific passwords <a
href="https://mailtest-01.tahvel.info/account/security/asps">here</a> to use IMAP, POP3 and
SMTP.
</td>
{{else}}
<td>
********
</td>
@@ -154,7 +163,8 @@
<td>
********
</td>
{{/if}}
</tr>
</tbody>
</table>
</div>
</div>

Ver fichero

@@ -1,3 +1,4 @@
<script>
window.location.href = "https://webmail.hatthieves.es/account/login";
window.location.href = "/account/login";
</script>

Ver fichero

@@ -29,6 +29,12 @@
{{flash_messages}}
</div>
{{#if generalNotification}}
<div class="panel panel-warning">
<div class="panel-heading">{{{generalNotification}}}</div>
</div>
{{/if}}
<div class="container">
<div class="form-popup">
@@ -40,7 +46,8 @@
<footer class="footer">
<div class="container">
<p class="text-muted">&copy; 2019 <a href="/">{{serviceName}}</a>. <a href="mailto:info@{{serviceDomain}}">info@{{serviceDomain}}</a>. </p>
<p class="text-muted">&copy; 2020 <a href="/">{{serviceName}}</a>. <a
href="mailto:info@{{serviceDomain}}">info@{{serviceDomain}}</a>. </p>
</div>
</footer>

Ver fichero

@@ -23,40 +23,52 @@
</div>
<div style="margin: 10px 0 10px 0;" class="text-center">
<a href="/webmail/send" style="width: 100%" class="btn btn-default"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span> Compose message</a>
<a href="/webmail/send" style="width: 100%" class="btn btn-default"><span
class="glyphicon glyphicon-edit" aria-hidden="true"></span> Compose message</a>
</div>
<ul class="nav nav-sidebar">
{{#each mailboxes}}
<li id="mailbox-list-{{id}}" {{#if selected}} class="active" {{/if}}>
<a href="/webmail/{{id}}">
<span class="badge pull-right unseen-counter-{{id}}" {{#if unseen}}style="display: block;"{{else}}style="display: none;"{{/if}}>{{unseen}}</span>
{{{prefix}}}
{{#if icon}}
<span class="glyphicon glyphicon-{{icon}}" aria-hidden="true"></span>
{{else}}
<span class="glyphicon glyphicon-triangle-right" aria-hidden="true"></span>
{{/if}}
<span>{{formatted}}</span> {{{suffix}}}
</a>
</li>
<li id="mailbox-list-{{id}}" {{#if selected}} class="active" {{/if}}>
<a href="/webmail/{{id}}">
<span class="badge pull-right unseen-counter-{{id}}" {{#if unseen}}style="display: block;"
{{else}}style="display: none;" {{/if}}>{{unseen}}</span>
{{{prefix}}}
{{#if icon}}
<span class="glyphicon glyphicon-{{icon}}" aria-hidden="true"></span>
{{else}}
<span class="glyphicon glyphicon-triangle-right" aria-hidden="true"></span>
{{/if}}
<span>{{formatted}}</span> {{{suffix}}}
</a>
</li>
{{/each}}
<li style="margin-top: 20px;">
<a href="/webmail/create" class="text-muted"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Create folder</a>
<a href="/webmail/create" class="text-muted"><span class="glyphicon glyphicon-plus"
aria-hidden="true"></span> Create folder</a>
</li>
</ul>
</div>
</div>
<div class="webmail-main">
{{#if generalNotification}}
<div class="panel panel-warning">
<div class="panel-heading">{{{generalNotification}}}</div>
</div>
{{/if}}
{{{body}}}
</div>
</div>
<footer class="footer">
<div class="container">
<p class="text-muted">&copy; 2019 <a href="/">{{serviceName}}</a>. <a href="mailto:info@{{serviceDomain}}">info@{{serviceDomain}}</a>. </p>
<p class="text-muted">&copy; 2020 <a href="/">{{serviceName}}</a>. <a
href="mailto:info@{{serviceDomain}}">info@{{serviceDomain}}</a>. </p>
</div>
</footer>

Ver fichero

@@ -12,15 +12,24 @@
{{flash_messages}}
</div>
<div class="container">
{{#if generalNotification}}
<div class="panel panel-warning">
<div class="panel-heading">{{{generalNotification}}}</div>
</div>
{{/if}}
{{{body}}}
</div>
<footer class="footer">
<div class="container">
<p class="text-muted">&copy; 2019 <a href="/">{{serviceName}}</a>. <a href="mailto:info@{{serviceDomain}}">info@{{serviceDomain}}</a>. </p>
<p class="text-muted">&copy; 2020 <a href="/">{{serviceName}}</a>. <a
href="mailto:info@{{serviceDomain}}">info@{{serviceDomain}}</a>. </p>
</div>
</footer>

Ver fichero

@@ -1,3 +1,4 @@
<li role="presentation" class="{{#if accMenuOverview}}active{{/if}}"><a href="/account/">Overview</a></li>
<li role="presentation" class="{{#if accMenuProfile}}active{{/if}}"><a href="/account/profile">Profile</a></li>
<li role="presentation" class="{{#if accMenuIdentities}}active{{/if}}"><a href="/account/identities">Identities</a></li>
<li role="presentation" class="{{#if accMenuRestore}}active{{/if}}"><a href="/account/restore">Restore Messages</a></li>

Ver fichero

@@ -121,7 +121,7 @@
<div class="form-group{{#if errors.action_targets}} has-error{{/if}}">
<label for="action_targets">Forward it to address:</label>
<input type="text" class="form-control input-sm" name="action_targets" id="action_targets" value="{{values.action_targets}}" placeholder="user@example.com">
<span class="help-block">Somma separated list of email addresses or URLs</span>
<span class="help-block">Comma separated list of email addresses or URLs</span>
{{#if errors.action_targets}}
<span class="help-block">{{errors.action_targets}}</span>
{{/if}}

Ver fichero

@@ -1,14 +1,15 @@
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{{#if user}}/webmail{{else}}/{{/if}}">
<img alt="{{serviceName}}" src="/favicon-32x32.png" width="20" height="20">
<img alt="{{serviceName}}" src="/favicon-32x32.png" width="20" height="20">
</a>
</div>
@@ -16,70 +17,74 @@
<ul class="nav navbar-nav navbar-right">
{{#if user}}
<li {{#if activeWebmail}} class="active" {{/if}}>
<a href="/webmail/">
<span class="glyphicon glyphicon-inbox" aria-hidden="true"></span> Webmail
<span class="badge pull-right unseen-counter-{{inboxId}}" {{#if inboxUnseen}}style="display: block;"{{else}}style="display: none;"{{/if}}>{{inboxUnseen}}</span>
</a>
</li>
<li {{#if activeFilters}} class="active" {{/if}}>
<a href="/account/filters">
<span class="glyphicon glyphicon-filter" aria-hidden="true"></span> Filters
</a>
</li>
<li {{#if activeAutoreply}} class="active" {{/if}}>
<a href="/account/autoreply">
<span class="glyphicon glyphicon-calendar" aria-hidden="true"></span> Autoreply
</a>
</li>
<li {{#if activeHelp}} class="active" {{/if}}>
<a href="/help">
<span class="glyphicon glyphicon glyphicon-question-sign" aria-hidden="true"></span> Help
</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
<img src="{{user.gravatar}}" class="profile-image img-circle" width="20" height="20">
<li {{#if activeWebmail}} class="active" {{/if}}>
<a href="/webmail/">
<span class="glyphicon glyphicon-inbox" aria-hidden="true"></span> Webmail
<span class="badge pull-right unseen-counter-{{inboxId}}"
{{#if inboxUnseen}}style="display: block;" {{else}}style="display: none;"
{{/if}}>{{inboxUnseen}}</span>
</a>
</li>
<li {{#if activeFilters}} class="active" {{/if}}>
<a href="/account/filters">
<span class="glyphicon glyphicon-filter" aria-hidden="true"></span> Filters
</a>
</li>
<li {{#if activeAutoreply}} class="active" {{/if}}>
<a href="/account/autoreply">
<span class="glyphicon glyphicon-calendar" aria-hidden="true"></span> Autoreply
</a>
</li>
<li {{#if activeHelp}} class="active" {{/if}}>
<a href="/help">
<span class="glyphicon glyphicon glyphicon-question-sign" aria-hidden="true"></span> Help
</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">
<img src="{{user.gravatar}}" class="profile-image img-circle" width="20" height="20">
{{#if user.name}}
{{user.name}}
{{else}}
{{user.username}}
{{/if}}
{{#if user.name}}
{{user.name}}
{{else}}
{{user.username}}
{{/if}}
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li {{#if activeHome}} class="active" {{/if}}>
<a href="/account/">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span> Account
</a>
</li>
<li {{#if activeSecurity}} class="active" {{/if}}>
<a href="/account/security">
<span class="glyphicon glyphicon-lock" aria-hidden="true"></span> Security
</a>
</li>
<li role="separator" class="divider"></li>
<li><a href="/account/logout"><span class="glyphicon glyphicon-log-out" aria-hidden="true"></span> Log out</a></li>
</ul>
</li>
{{else}}
{{#if allowJoin}}
<li {{#if activeCreate}} class="active" {{/if}}>
<a href="/account/create">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span> Create account
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li {{#if activeHome}} class="active" {{/if}}>
<a href="/account/">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span> Account
</a>
</li>
{{/if}}
<li {{#if activeLogin}} class="active" {{/if}}>
<a href="/account/login">
<span class="glyphicon glyphicon-log-in" aria-hidden="true"></span> Log in
</a>
</li>
<li {{#if activeSecurity}} class="active" {{/if}}>
<a href="/account/security">
<span class="glyphicon glyphicon-lock" aria-hidden="true"></span> Security
</a>
</li>
<li role="separator" class="divider"></li>
<li><a href="/account/logout"><span class="glyphicon glyphicon-log-out"
aria-hidden="true"></span> Log out</a></li>
</ul>
</li>
{{else}}
{{#if allowJoin}}
<li {{#if activeCreate}} class="active" {{/if}}>
<a href="/account/create">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span> Create account
</a>
</li>
{{/if}}
<li {{#if activeLogin}} class="active" {{/if}}>
<a href="/account/login">
<span class="glyphicon glyphicon-log-in" aria-hidden="true"></span> Log in
</a>
</li>
{{/if}}
</ul>
</div>
</div>
</nav>
</nav>

La diferencia del archivo ha sido suprimido porque es demasiado grande Cargar Diff

Ver fichero

@@ -9,3 +9,7 @@ redis="redis://172.200.0.102:6379/2"
# Database name for ZoneMTA data in MongoDB. In most cases it should be the same as in the connection string
sender="zone-mta"
users="wildduck"
gridfs="wildduck"

Ver fichero

@@ -3,5 +3,8 @@
[default]
maxConnections=5
["hatthieves.es"]
maxConnections=20
["gmail.com"]
maxConnections=10

Ver fichero

@@ -5,4 +5,4 @@ addMissing=["message-id", "date"]
# If true then delays messages with future Date: headers until that time has arrived
futureDate=false
# Add X-Originating-IP header
xOriginatingIP=true
xOriginatingIP=false

Ver fichero

@@ -2,4 +2,4 @@
enabled=false
#enabled="receiver"
# only check authentication for interfaces with following names
interfaces=["feeder"]
#interfaces=["feeder"]

Ver fichero

@@ -1,13 +1,13 @@
# List local IP addresses that can be used for outbound tcp connections
# Server process must be able to locally bind to these addresses
default=["0.0.0.0", "::"]
#default=["0.0.0.0", "::"]
# or alternatively, to provide hostnames as well:
#
#[[default]]
#address="1.2.3.4"
#name="ip-1.hostname"
[[default]]
address="0.0.0.0"
name="hatthieves.es"
#
#[[default]]
#address="1.2.3.5"

Ver fichero

@@ -1,6 +1,6 @@
[bounces]
preferIPv6=false
ignoreIPv6=true
processes=1
connections=2
processes=2
connections=20
pool="default"

Ver fichero

@@ -1,8 +1,8 @@
[default]
preferIPv6=false
ignoreIPv6=true
processes=1
connections=5
processes=2
connections=20
pool="default"
# If you want to send messages for this zone to next MTA instead of actual MX, then

Ver fichero

@@ -5,7 +5,7 @@ RUN wget -O- https://rspamd.com/apt-stable/gpg.key | apt-key add -
RUN echo "deb [arch=amd64] http://rspamd.com/apt-stable/ stretch main" > /etc/apt/sources.list.d/rspamd.list
RUN echo "deb-src [arch=amd64] http://rspamd.com/apt-stable/ stretch main" >> /etc/apt/sources.list.d/rspamd.list
RUN apt update
RUN apt --no-install-recommends install -y rspamd
RUN apt --no-install-recommends install -y rspamd && apt clean
RUN setcap 'cap_net_bind_service=+ep' /usr/local/bin/node
RUN git clone https://github.com/nodemailer/wildduck /wildduck
RUN git clone https://github.com/zone-eu/zone-mta-template /wildduck-mta
@@ -21,4 +21,4 @@ RUN npm i --production
RUN npm i -S zonemta-wildduck zonemta-limiter
WORKDIR /haraka
RUN npm i
RUN npm i -S haraka-plugin-wildduck haraka-plugin-rspamd haraka-plugin-limit haraka-plugin-karma haraka-plugin-redis
RUN npm i -S haraka-plugin-wildduck haraka-plugin-rspamd haraka-plugin-limit haraka-plugin-karma haraka-plugin-redis haraka-plugin-mongodb

Ver fichero

@@ -13,10 +13,18 @@ accessToken = "nohaytoken"
[accessControl]
# If true then require a valid access token to perform API calls
enabled = false
# If a client provides a token then it is validated even if using a token is not required
enabled=false
# Secret for HMAC
# Changing this value invalidates all tokens
#secret = "sAiHB6XcSWJgsMrMl_vJzcfVlhhenJLi"
secret="a secret cat"
# Generated access token TTL in seconds. Token TTL gets extended by this value every time the token is used. Defaults to 14 days
tokenTTL=1209600
# Generated access token max lifetime in seconds. Defaults to 180 days
tokenLifetime=15552000
[roles]
# @include "roles.json"
@@ -32,7 +40,7 @@ enabled = false
# A reverse-DNS style identifier (com.example.myprofile, for example) that identifies the profile.
# This string is used to determine whether a new profile should replace an existing one or should be added. Username is prepended to this value.
identifier = "es.hatthieves"
identifier = "es.hatthieves.ns1"
# A human-readable name for the profile. This value is displayed on the Detail screen. It does not have to be unique.
displayName = "Wildduck Mail"

Ver fichero

@@ -8,14 +8,14 @@
ident="wildduck"
# how many processes to start
processes = "2"
processes=2
# default quota storage in MB (can be overriden per user)
maxStorage=1024
# default smtp recipients for 24h (can be overriden per user)
maxRecipients=2000
emailDomain = "hatthieves.es"
emailDomain="hatthieves.es"
# default forwarded messages for 24h (can be overriden per user)
maxForwards=2000
@@ -33,11 +33,11 @@ maxForwards=2000
#cipher="aes192"
secret="a secret cat"
cipher = "aes192"
cipher = "aes192"
#secret = "E2jYD-p2u68-qUEOJ1KkC3xmzySyTGRY"
[u2f]
# Fully qualified URL of your website (must use HTTPS!)
appId = "http://172.200.0.101"
appId = "https://webmail.hatthieves.es"
[attachments]
# @include "attachments.toml"

Ver fichero

@@ -16,15 +16,3 @@ signTransportDomain=true
# do not change this
hashAlgo="sha256"
enabled="sender"
# Domain name in the dkim signature. Leave blank to use the domain of From: address
domain="hatthieves.es"
# Selector value in the dkim signature
selector="dkim"
# Key location. Relative to working directory
path="/secure/dkim_private.key"

Ver fichero

@@ -17,13 +17,13 @@
},
"userlisting": {
"read:any": ["*", "!audit"]
"read:any": ["*"]
},
"users": {
"create:any": ["*", "!audit"],
"read:any": ["*", "!audit"],
"update:any": ["*", "!audit"],
"create:any": ["*"],
"read:any": ["*"],
"update:any": ["*"],
"delete:any": ["*"]
},
@@ -40,6 +40,20 @@
"delete:any": ["*"]
},
"attachments": {
"create:any": ["*"],
"read:any": ["*"],
"update:any": ["*"],
"delete:any": ["*"]
},
"storage": {
"create:any": ["*"],
"read:any": ["*"],
"update:any": ["*"],
"delete:any": ["*"]
},
"mailboxes": {
"create:any": ["*"],
"read:any": ["*"],
@@ -94,13 +108,13 @@
},
"userlisting": {
"read:any": ["*", "!audit"]
"read:any": ["*"]
},
"users": {
"create:any": ["*", "!audit"],
"read:any": ["*", "!audit"],
"update:any": ["*", "!audit"],
"create:any": ["*"],
"read:any": ["*"],
"update:any": ["*"],
"delete:any": ["*"]
},
@@ -153,8 +167,8 @@
},
"users": {
"read:any": ["*", "!audit"],
"update:any": ["*", "!audit"]
"read:any": ["*"],
"update:any": ["*"]
},
"asps": {
@@ -170,6 +184,20 @@
"delete:any": ["*"]
},
"attachments": {
"create:any": ["*"],
"read:any": ["*"],
"update:any": ["*"],
"delete:any": ["*"]
},
"storage": {
"create:any": ["*"],
"read:any": ["*"],
"update:any": ["*"],
"delete:any": ["*"]
},
"mailboxes": {
"create:any": ["*"],
"read:any": ["*"],
@@ -209,12 +237,12 @@
},
"userlisting": {
"read:own": ["*", "!audit"]
"read:own": ["*", "!tags", "!metaData", "!disabledScopes"]
},
"users": {
"read:own": ["*", "!audit"],
"update:own": ["*", "!audit"]
"read:own": ["*", "!tags", "!metaData", "!disabledScopes"],
"update:own": ["*", "!tags", "!metaData", "!disabledScopes"]
},
"asps": {
@@ -230,6 +258,20 @@
"delete:own": ["*"]
},
"attachments": {
"create:own": ["*"],
"read:own": ["*"],
"update:own": ["*"],
"delete:own": ["*"]
},
"storage": {
"create:own": ["*"],
"read:own": ["*"],
"update:own": ["*"],
"delete:own": ["*"]
},
"mailboxes": {
"create:own": ["*"],
"read:own": ["*"],
@@ -253,6 +295,18 @@
},
"auth": {
"authentication": {
"create:any": ["*", "!token"]
}
},
"attachments": {
"attachments": {
"read:any": ["*"]
}
},
"tokenAuth": {
"authentication": {
"create:any": ["*"]
}
@@ -260,6 +314,10 @@
"audit": {
"users": {
"read:any": ["*"]
},
"audit": {
"create:any": ["*"],
"read:any": ["*"],
"update:any": ["*"],
@@ -267,3 +325,4 @@
}
}
}