You've already forked Mailu
mirror of
https://github.com/Mailu/Mailu.git
synced 2025-11-23 22:04:47 +02:00
Added unbound to setup
- Added checkbox for unbound resolver - Added subnet variable - Added dns variable which is generating the ip address based on subnet
This commit is contained in:
@@ -28,6 +28,15 @@ services:
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
volumes:
|
volumes:
|
||||||
- "{{ root }}/certs:/certs"
|
- "{{ root }}/certs:/certs"
|
||||||
|
|
||||||
|
{% if resolver_enabled %}
|
||||||
|
resolver:
|
||||||
|
image: mailu/resolver:{{ version }}
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
ipv4_address: {{ dns }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
admin:
|
admin:
|
||||||
image: mailu/admin:{{ version }}
|
image: mailu/admin:{{ version }}
|
||||||
@@ -58,6 +67,11 @@ services:
|
|||||||
- "{{ root }}/overrides:/overrides"
|
- "{{ root }}/overrides:/overrides"
|
||||||
depends_on:
|
depends_on:
|
||||||
- front
|
- front
|
||||||
|
{% if resolver_enabled %}
|
||||||
|
- resolver
|
||||||
|
dns:
|
||||||
|
- {{ dns }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
# Optional services
|
# Optional services
|
||||||
{% if antispam_enabled %}
|
{% if antispam_enabled %}
|
||||||
@@ -70,6 +84,11 @@ services:
|
|||||||
- "{{ root }}/overrides/rspamd:/etc/rspamd/override.d"
|
- "{{ root }}/overrides/rspamd:/etc/rspamd/override.d"
|
||||||
depends_on:
|
depends_on:
|
||||||
- front
|
- front
|
||||||
|
{% if resolver_enabled %}
|
||||||
|
- resolver
|
||||||
|
dns:
|
||||||
|
- {{ dns }}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if antivirus_enabled %}
|
{% if antivirus_enabled %}
|
||||||
@@ -78,6 +97,12 @@ services:
|
|||||||
env_file: {{ env }}
|
env_file: {{ env }}
|
||||||
volumes:
|
volumes:
|
||||||
- "{{ root }}/filter:/data"
|
- "{{ root }}/filter:/data"
|
||||||
|
{% if resolver_enabled %}
|
||||||
|
depends_on:
|
||||||
|
- resolver
|
||||||
|
dns:
|
||||||
|
- {{ dns }}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if webdav_enabled %}
|
{% if webdav_enabled %}
|
||||||
@@ -92,6 +117,12 @@ services:
|
|||||||
fetchmail:
|
fetchmail:
|
||||||
image: mailu/fetchmail:{{ version }}
|
image: mailu/fetchmail:{{ version }}
|
||||||
env_file: {{ env }}
|
env_file: {{ env }}
|
||||||
|
{% if resolver_enabled %}
|
||||||
|
depends_on:
|
||||||
|
- resolver
|
||||||
|
dns:
|
||||||
|
- {{ dns }}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
# Webmail
|
# Webmail
|
||||||
@@ -103,4 +134,17 @@ services:
|
|||||||
- "{{ root }}/webmail:/data"
|
- "{{ root }}/webmail:/data"
|
||||||
depends_on:
|
depends_on:
|
||||||
- imap
|
- imap
|
||||||
|
- resolver
|
||||||
|
dns:
|
||||||
|
- {{ dns }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if resolver_enabled %}
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
driver: bridge
|
||||||
|
ipam:
|
||||||
|
driver: default
|
||||||
|
config:
|
||||||
|
- subnet: {{ subnet }}
|
||||||
|
{% endif %}
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ SECRET_KEY={{ secret(16) }}
|
|||||||
# PUBLIC_IPV4= {{ bind4 }} (default: 127.0.0.1)
|
# PUBLIC_IPV4= {{ bind4 }} (default: 127.0.0.1)
|
||||||
# PUBLIC_IPV6= {{ bind6 }} (default: ::1)
|
# PUBLIC_IPV6= {{ bind6 }} (default: ::1)
|
||||||
|
|
||||||
|
# Subnet
|
||||||
|
# SUBNET={{ subnet }}
|
||||||
|
|
||||||
# Main mail domain
|
# Main mail domain
|
||||||
DOMAIN={{ domain }}
|
DOMAIN={{ domain }}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import jinja2
|
|||||||
import uuid
|
import uuid
|
||||||
import string
|
import string
|
||||||
import random
|
import random
|
||||||
|
import ipaddress
|
||||||
|
|
||||||
|
|
||||||
app = flask.Flask(__name__)
|
app = flask.Flask(__name__)
|
||||||
@@ -75,6 +76,7 @@ def build_app(path):
|
|||||||
def submit():
|
def submit():
|
||||||
data = flask.request.form.copy()
|
data = flask.request.form.copy()
|
||||||
data['uid'] = str(uuid.uuid4())
|
data['uid'] = str(uuid.uuid4())
|
||||||
|
data['dns'] = str(ipaddress.IPv4Network(data['subnet'])[-2])
|
||||||
db.set(data['uid'], json.dumps(data))
|
db.set(data['uid'], json.dumps(data))
|
||||||
return flask.redirect(flask.url_for('.setup', uid=data['uid']))
|
return flask.redirect(flask.url_for('.setup', uid=data['uid']))
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,19 @@ avoid generic all-interfaces addresses like <code>0.0.0.0</code> or <code>::</co
|
|||||||
pattern="^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$">
|
pattern="^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="form-check form-check-inline">
|
||||||
|
<label class="form-check-label">
|
||||||
|
<input class="form-check-input" type="checkbox" name="resolver_enabled" value="true">
|
||||||
|
Enable unbound resolver
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Subnet</label>
|
||||||
|
<input class="form-control" type="text" name="subnet" required pattern="^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))$"
|
||||||
|
value="192.168.0.0/24">
|
||||||
|
</div>
|
||||||
|
|
||||||
<p>You server will be available under a main hostname but may expose multiple public
|
<p>You server will be available under a main hostname but may expose multiple public
|
||||||
hostnames. Every e-mail domain that points to this server must have one of the
|
hostnames. Every e-mail domain that points to this server must have one of the
|
||||||
hostnames in its <code>MX</code> record. Hostnames must be coma-separated.</p>
|
hostnames in its <code>MX</code> record. Hostnames must be coma-separated.</p>
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ you expose it to the world.</p>
|
|||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Subnet</label>
|
<label>Subnet</label>
|
||||||
<input class="form-control" type="text" name="subnet" required pattern="^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))$">
|
<input class="form-control" type="text" name="subnet" required pattern="^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))$"
|
||||||
|
value="192.168.0.0/24">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>You server will be available under a main hostname but may expose multiple public
|
<p>You server will be available under a main hostname but may expose multiple public
|
||||||
|
|||||||
Reference in New Issue
Block a user