Merge branch 'new-infra' of gitea.auro.re:aurore/ansible into new-infra
This commit is contained in:
commit
00dcf27614
14 changed files with 405 additions and 2 deletions
|
@ -1,6 +1,11 @@
|
||||||
---
|
---
|
||||||
systemd_link__links:
|
dovecot__auth_default_realm: test.auro.re
|
||||||
ext0: ae:ae:ae:1d:c8:b2
|
dovecot__auth_users:
|
||||||
|
jeltz@test.auro.re: "{plain}password"
|
||||||
|
lafeych@test.auro.re: "{plain}password"
|
||||||
|
toto@test.auro.re: "{plain}password"
|
||||||
|
root@test.auro.re: "{plain}L9yXSrCbbafMlMls5q7WWMKC612XNbXL"
|
||||||
|
dovecot__lmtp_postmaster_address: postmaster@test.auro.re
|
||||||
|
|
||||||
ifupdown2__interfaces:
|
ifupdown2__interfaces:
|
||||||
ext0:
|
ext0:
|
||||||
|
@ -9,4 +14,25 @@ ifupdown2__interfaces:
|
||||||
- 10.211.1.5/16
|
- 10.211.1.5/16
|
||||||
- 45.66.111.205/30
|
- 45.66.111.205/30
|
||||||
gateways: "{{ ifupdown2__gateways.ext }}"
|
gateways: "{{ ifupdown2__gateways.ext }}"
|
||||||
|
|
||||||
|
postfix__hostname: mx.test.auro.re
|
||||||
|
|
||||||
|
postfix__sasl_local_domain: test.auro.re
|
||||||
|
|
||||||
|
postfix__virtual_aliases:
|
||||||
|
postmaster@test.auro.re: root@test.auro.re
|
||||||
|
dmarc@test.auro.re: root@test.auro.re
|
||||||
|
|
||||||
|
postfix__virtual_mailbox_domains:
|
||||||
|
- infra.test.auro.re
|
||||||
|
- test.auro.re
|
||||||
|
|
||||||
|
postfix__virtual_mailboxes:
|
||||||
|
jeltz@test.auro.re: jeltz@test.auro.re
|
||||||
|
root@test.auro.re: root@test.auro.re
|
||||||
|
toto@test.auro.re: toto@test.auro.re
|
||||||
|
vincent.lafeychine@test.auro.re: lafeych@test.auro.re
|
||||||
|
|
||||||
|
systemd_link__links:
|
||||||
|
ext0: ae:ae:ae:1d:c8:b2
|
||||||
...
|
...
|
||||||
|
|
8
playbooks/mail.yml
Executable file
8
playbooks/mail.yml
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env ansible-playbook
|
||||||
|
---
|
||||||
|
- hosts:
|
||||||
|
- vm_test
|
||||||
|
roles:
|
||||||
|
- postfix
|
||||||
|
- dovecot
|
||||||
|
...
|
3
roles/dovecot/defaults/main.yml
Normal file
3
roles/dovecot/defaults/main.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
dovecot__auth_users: {}
|
||||||
|
...
|
6
roles/dovecot/handlers/main.yml
Normal file
6
roles/dovecot/handlers/main.yml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
- name: Reload dovecot
|
||||||
|
systemd:
|
||||||
|
name: dovecot.service
|
||||||
|
state: reloaded
|
||||||
|
...
|
47
roles/dovecot/tasks/main.yml
Normal file
47
roles/dovecot/tasks/main.yml
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
---
|
||||||
|
- name: Install dovecot
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- dovecot-core
|
||||||
|
- dovecot-imapd
|
||||||
|
- dovecot-lmtpd
|
||||||
|
- dovecot-managesieved
|
||||||
|
- dovecot-sieve
|
||||||
|
|
||||||
|
- name: Create group vmail for dovecot
|
||||||
|
group:
|
||||||
|
name: vmail
|
||||||
|
|
||||||
|
- name: Create account vmail for dovecot
|
||||||
|
user:
|
||||||
|
group: vmail
|
||||||
|
home: /srv/mail
|
||||||
|
name: vmail
|
||||||
|
password: "!"
|
||||||
|
system: true
|
||||||
|
|
||||||
|
- name: Configure dovecot main configuration
|
||||||
|
template:
|
||||||
|
src: "{{ item.src }}"
|
||||||
|
dest: "{{ item.dest }}"
|
||||||
|
owner: root
|
||||||
|
group: "{{ item.group }}"
|
||||||
|
mode: "{{ item.mode }}"
|
||||||
|
loop:
|
||||||
|
- src: dovecot.conf.j2
|
||||||
|
dest: /etc/dovecot/dovecot.conf
|
||||||
|
group: root
|
||||||
|
mode: u=rw,g=,o=
|
||||||
|
- src: auth.j2
|
||||||
|
dest: /etc/dovecot/auth
|
||||||
|
group: dovecot
|
||||||
|
mode: u=rw,g=r,o=
|
||||||
|
notify:
|
||||||
|
- Reload dovecot
|
||||||
|
|
||||||
|
- name: Enable and start dovecot
|
||||||
|
systemd:
|
||||||
|
name: dovecot.service
|
||||||
|
state: started
|
||||||
|
enabled: true
|
||||||
|
...
|
5
roles/dovecot/templates/auth.j2
Normal file
5
roles/dovecot/templates/auth.j2
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{{ ansible_managed | comment }}
|
||||||
|
|
||||||
|
{% for user, passwd in dovecot__auth_users.items() %}
|
||||||
|
{{ user }}:{{ passwd }}
|
||||||
|
{% endfor %}
|
120
roles/dovecot/templates/dovecot.conf.j2
Normal file
120
roles/dovecot/templates/dovecot.conf.j2
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
protocols = imap lmtp sieve
|
||||||
|
|
||||||
|
ssl = yes
|
||||||
|
ssl_cert = </etc/dovecot/private/dovecot.pem
|
||||||
|
ssl_client_ca_dir = /etc/ssl/certs
|
||||||
|
ssl_dh = </usr/share/dovecot/dh.pem
|
||||||
|
ssl_key = </etc/dovecot/private/dovecot.key
|
||||||
|
|
||||||
|
service stats {
|
||||||
|
inet_listener http {
|
||||||
|
port = 9900
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
metric auth_success {
|
||||||
|
filter = (event=auth_request_finished AND success=yes)
|
||||||
|
}
|
||||||
|
|
||||||
|
metric imap_command {
|
||||||
|
filter = event=imap_command_finished
|
||||||
|
group_by = cmd_name tagged_reply_state
|
||||||
|
}
|
||||||
|
|
||||||
|
metric smtp_command {
|
||||||
|
filter = event=smtp_server_command_finished
|
||||||
|
group_by = cmd_name status_code duration:exponential:1:5:10
|
||||||
|
}
|
||||||
|
|
||||||
|
metric mail_delivery {
|
||||||
|
filter = event=mail_delivery_finished
|
||||||
|
group_by = duration:exponential:1:5:10
|
||||||
|
}
|
||||||
|
|
||||||
|
service imap-login {
|
||||||
|
inet_listener imap {
|
||||||
|
port = 0
|
||||||
|
}
|
||||||
|
inet_listener imaps {
|
||||||
|
port = 993
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
service lmtp {
|
||||||
|
unix_listener /var/spool/postfix/private/dovecot-lmtp {
|
||||||
|
mode = 0660
|
||||||
|
group = postfix
|
||||||
|
user = postfix
|
||||||
|
}
|
||||||
|
# TODO
|
||||||
|
user = vmail
|
||||||
|
}
|
||||||
|
|
||||||
|
service auth {
|
||||||
|
unix_listener /var/spool/postfix/private/auth {
|
||||||
|
mode = 0660
|
||||||
|
user = postfix
|
||||||
|
group = postfix
|
||||||
|
}
|
||||||
|
# TODO
|
||||||
|
unix_listener auth-userdb {
|
||||||
|
mode = 0660
|
||||||
|
user = vmail
|
||||||
|
group = vmail
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol imap {
|
||||||
|
mail_plugins = imap_sieve
|
||||||
|
mail_max_userip_connections = 20 # TODO
|
||||||
|
imap_idle_notify_interval = 29 mins # TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol lmtp {
|
||||||
|
postmaster_address = {{ dovecot__lmtp_postmaster_address | enquote }}
|
||||||
|
mail_plugins = sieve notify push_notification # TODO sieve ??
|
||||||
|
}
|
||||||
|
|
||||||
|
auth_default_realm = {{ dovecot__auth_default_realm | enquote }}
|
||||||
|
|
||||||
|
auth_mechanisms = plain
|
||||||
|
auth_username_format = %Lu
|
||||||
|
disable_plaintext_auth = yes
|
||||||
|
|
||||||
|
mail_uid = vmail
|
||||||
|
mail_gid = vmail
|
||||||
|
mail_privileged_group = vmail
|
||||||
|
|
||||||
|
mail_home = /srv/mail/%d/%n
|
||||||
|
mail_location = maildir:~/mail:LAYOUT=fs
|
||||||
|
|
||||||
|
|
||||||
|
# TODO userdb vs passdb
|
||||||
|
passdb {
|
||||||
|
driver = passwd-file
|
||||||
|
args = username_format=%u /etc/dovecot/auth
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace inbox {
|
||||||
|
inbox = yes
|
||||||
|
|
||||||
|
mailbox Spam {
|
||||||
|
auto = subscribe
|
||||||
|
special_use = \Junk
|
||||||
|
}
|
||||||
|
|
||||||
|
mailbox Trash {
|
||||||
|
auto = subscribe
|
||||||
|
special_use = \Trash
|
||||||
|
}
|
||||||
|
|
||||||
|
mailbox Drafts {
|
||||||
|
auto = subscribe
|
||||||
|
special_use = \Drafts
|
||||||
|
}
|
||||||
|
|
||||||
|
mailbox Sent {
|
||||||
|
auto = subscribe
|
||||||
|
special_use = \Sent
|
||||||
|
}
|
||||||
|
}
|
9
roles/postfix/defaults/main.yml
Normal file
9
roles/postfix/defaults/main.yml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
---
|
||||||
|
postfix__destination_concurrency_limit: 50
|
||||||
|
postfix__destination_rate_delay: 3s
|
||||||
|
postfix__destination_recipient_limit: 50
|
||||||
|
postfix__recipient_delimiter: +
|
||||||
|
postfix__virtual_aliases: {}
|
||||||
|
postfix__virtual_mailbox_domains: []
|
||||||
|
postfix__virtual_mailboxes: {}
|
||||||
|
...
|
6
roles/postfix/handlers/main.yml
Normal file
6
roles/postfix/handlers/main.yml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
- name: Reload postfix
|
||||||
|
systemd:
|
||||||
|
name: postfix.service
|
||||||
|
state: reloaded
|
||||||
|
...
|
30
roles/postfix/tasks/main.yml
Normal file
30
roles/postfix/tasks/main.yml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
---
|
||||||
|
- name: Install postfix
|
||||||
|
apt:
|
||||||
|
name: postfix
|
||||||
|
|
||||||
|
- name: Configure postfix
|
||||||
|
template:
|
||||||
|
src: "{{ item.src }}"
|
||||||
|
dest: "{{ item.dest }}"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=rw,g=,o=
|
||||||
|
loop:
|
||||||
|
- src: main.cf.j2
|
||||||
|
dest: /etc/postfix/main.cf
|
||||||
|
- src: master.cf.j2
|
||||||
|
dest: /etc/postfix/master.cf
|
||||||
|
- src: virtual.j2
|
||||||
|
dest: /etc/postfix/virtual
|
||||||
|
- src: vmailbox.j2
|
||||||
|
dest: /etc/postfix/vmailbox
|
||||||
|
notify:
|
||||||
|
- Reload postfix
|
||||||
|
|
||||||
|
- name: Enable and start postfix
|
||||||
|
systemd:
|
||||||
|
name: postfix.service
|
||||||
|
state: started
|
||||||
|
enabled: true
|
||||||
|
...
|
73
roles/postfix/templates/main.cf.j2
Normal file
73
roles/postfix/templates/main.cf.j2
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
{{ ansible_managed | comment }}
|
||||||
|
|
||||||
|
myhostname = {{ postfix__hostname }}
|
||||||
|
smtpd_banner = $myhostname ESMTP
|
||||||
|
biff = no
|
||||||
|
|
||||||
|
# appending .domain is the MUA's job.
|
||||||
|
append_dot_mydomain = no
|
||||||
|
|
||||||
|
#delay_warning_time = 4h
|
||||||
|
|
||||||
|
compatibility_level = 3.6
|
||||||
|
|
||||||
|
virtual_alias_maps = texthash:/etc/postfix/virtual
|
||||||
|
virtual_mailbox_domains = {{ postfix__virtual_mailbox_domains | join(" ") }}
|
||||||
|
virtual_mailbox_maps = texthash:/etc/postfix/vmailbox
|
||||||
|
virtual_transport = lmtp:unix:private/dovecot-lmtp
|
||||||
|
|
||||||
|
smtpd_sender_login_maps = $virtual_mailbox_maps, $virtual_alias_maps
|
||||||
|
|
||||||
|
#smtpd_sasl_type = dovecot
|
||||||
|
#smtpd_sasl_path = private/auth
|
||||||
|
|
||||||
|
alias_maps =
|
||||||
|
|
||||||
|
# TODO peut-être
|
||||||
|
#smtpd_helo_required = yes
|
||||||
|
#strict_rfc821_envelopes = yes
|
||||||
|
|
||||||
|
# TLS parameters
|
||||||
|
smtp_tls_CApath = /etc/ssl/certs
|
||||||
|
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
||||||
|
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
|
||||||
|
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
|
||||||
|
smtpd_tls_security_level = may
|
||||||
|
|
||||||
|
# M2M
|
||||||
|
smtpd_client_restrictions = permit
|
||||||
|
smtpd_helo_restrictions = permit
|
||||||
|
smtpd_recipient_restrictions =
|
||||||
|
reject_unverified_recipient,
|
||||||
|
permit
|
||||||
|
smtpd_relay_restrictions =
|
||||||
|
reject_unauth_destination,
|
||||||
|
permit
|
||||||
|
smtpd_sender_restrictions = permit
|
||||||
|
|
||||||
|
# MUA
|
||||||
|
mua_client_restrictions =
|
||||||
|
permit_sasl_authenticated,
|
||||||
|
reject
|
||||||
|
mua_helo_restrictions = permit
|
||||||
|
# TODO match envelope
|
||||||
|
mua_recipient_restrictions =
|
||||||
|
reject_authenticated_sender_login_mismatch,
|
||||||
|
permit_sasl_authenticated,
|
||||||
|
reject
|
||||||
|
mua_reject_unlisted_sender = yes
|
||||||
|
mua_reject_unlisted_recipient = no
|
||||||
|
mua_relay_restrictions = permit
|
||||||
|
mua_sasl_local_domain = {{ postfix__sasl_local_domain }}
|
||||||
|
mua_sender_restrictions = permit
|
||||||
|
# TODO mails depuis *@infra.auro.re + localhost
|
||||||
|
|
||||||
|
#smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
|
||||||
|
#mailbox_size_limit = 0
|
||||||
|
recipient_delimiter = {{ postfix__recipient_delimiter }}
|
||||||
|
inet_interfaces = all
|
||||||
|
inet_protocols = all
|
||||||
|
|
||||||
|
default_destination_rate_delay = {{ postfix__destination_rate_delay }}
|
||||||
|
smtp_destination_concurrency_limit = {{ postfix__destination_concurrency_limit }}
|
||||||
|
smtp_destination_recipient_limit = {{ postfix__destination_recipient_limit }}
|
60
roles/postfix/templates/master.cf.j2
Normal file
60
roles/postfix/templates/master.cf.j2
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
{{ ansible_managed | comment }}
|
||||||
|
|
||||||
|
# service type private unpriv chroot wakeup maxproc command + args
|
||||||
|
# (yes) (yes) (no) (never) (100)
|
||||||
|
|
||||||
|
smtp inet n - y - - smtpd
|
||||||
|
-o syslog_name=postfix/smtp
|
||||||
|
-o smtpd_sasl_auth_enable=no
|
||||||
|
-o smtpd_tls_security_level=may
|
||||||
|
|
||||||
|
submissions inet n - y - - smtpd
|
||||||
|
-o syslog_name=postfix/submissions
|
||||||
|
-o smtpd_tls_wrappermode=yes
|
||||||
|
-o smtpd_sasl_auth_enable=yes
|
||||||
|
-o smtpd_sasl_type=dovecot
|
||||||
|
-o smtpd_sasl_path=private/auth
|
||||||
|
-o smtpd_sasl_security_options=noanonymous
|
||||||
|
-o smtpd_sasl_local_domain=$mua_sasl_local_domain
|
||||||
|
-o smtpd_reject_unlisted_sender=$mua_reject_unlisted_sender
|
||||||
|
-o smtpd_reject_unlisted_recipient=$mua_reject_unlisted_recipient
|
||||||
|
-o smtpd_client_restrictions=$mua_client_restrictions
|
||||||
|
-o smtpd_helo_restrictions=$mua_helo_restrictions
|
||||||
|
-o smtpd_sender_restrictions=$mua_sender_restrictions
|
||||||
|
-o smtpd_relay_restrictions=$mua_relay_restrictions
|
||||||
|
-o smtpd_recipient_restrictions=$mua_recipient_restrictions
|
||||||
|
# -o milter_macro_daemon_name=ORIGINATING
|
||||||
|
|
||||||
|
pickup unix n - y 60 1 pickup
|
||||||
|
cleanup unix n - y - 0 cleanup
|
||||||
|
qmgr unix n - n 300 1 qmgr
|
||||||
|
tlsmgr unix - - y 1000? 1 tlsmgr
|
||||||
|
rewrite unix - - y - - trivial-rewrite
|
||||||
|
bounce unix - - y - 0 bounce
|
||||||
|
defer unix - - y - 0 bounce
|
||||||
|
trace unix - - y - 0 bounce
|
||||||
|
verify unix - - y - 1 verify
|
||||||
|
flush unix n - y 1000? 0 flush
|
||||||
|
proxymap unix - - n - - proxymap
|
||||||
|
proxywrite unix - - n - 1 proxymap
|
||||||
|
smtp unix - - y - - smtp
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
# relay unix - - y - - smtp
|
||||||
|
# -o syslog_name=postfix/$service_name
|
||||||
|
# -o smtp_helo_timeout=5
|
||||||
|
# -o smtp_connect_timeout=5
|
||||||
|
|
||||||
|
showq unix n - y - - showq
|
||||||
|
error unix - - y - - error
|
||||||
|
retry unix - - y - - error
|
||||||
|
discard unix - - y - - discard
|
||||||
|
local unix - n n - - local
|
||||||
|
virtual unix - n n - - virtual
|
||||||
|
lmtp unix - - y - - lmtp
|
||||||
|
anvil unix - - y - 1 anvil
|
||||||
|
scache unix - - y - 1 scache
|
||||||
|
postlog unix-dgram n - n - 1 postlogd
|
||||||
|
relay unix - - n - - smtp
|
||||||
|
-o smtp_fallback_relay=
|
||||||
|
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
|
5
roles/postfix/templates/virtual.j2
Normal file
5
roles/postfix/templates/virtual.j2
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{{ ansible_managed | comment }}
|
||||||
|
|
||||||
|
{% for src, dest in postfix__virtual_aliases.items() %}
|
||||||
|
{{ src }} {{ dest }}
|
||||||
|
{% endfor %}
|
5
roles/postfix/templates/vmailbox.j2
Normal file
5
roles/postfix/templates/vmailbox.j2
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{{ ansible_managed | comment }}
|
||||||
|
|
||||||
|
{% for src, dest in postfix__virtual_mailboxes.items() %}
|
||||||
|
{{ src }} {{ dest }}
|
||||||
|
{% endfor %}
|
Loading…
Reference in a new issue