summaryrefslogtreecommitdiffstats
path: root/roles/IMAP
diff options
context:
space:
mode:
authorGuilhem Moulin <guilhem@fripost.org>2013-12-02 22:43:44 +0100
committerGuilhem Moulin <guilhem@fripost.org>2015-06-07 02:51:09 +0200
commit9ff98e18e5dd6967bce1457cff1884ec632cf2b5 (patch)
tree99adb4054b83f975dec12753d8d76a80d3c1d64a /roles/IMAP
parentc7080c68fb4594f01a2edc98a2014c109a5afe16 (diff)
Configure the Mail Delivery Agent.
Diffstat (limited to 'roles/IMAP')
l---------roles/IMAP/files/etc/postfix/virtual/mailbox_domains.cf1
l---------roles/IMAP/files/etc/postfix/virtual/mailbox_maps.cf1
-rw-r--r--roles/IMAP/files/etc/postfix/virtual/transport_content_filter_maps.cf8
-rw-r--r--roles/IMAP/handlers/main.yml6
-rw-r--r--roles/IMAP/tasks/main.yml1
-rw-r--r--roles/IMAP/tasks/mda.yml36
-rw-r--r--roles/IMAP/templates/etc/postfix/main.cf.j260
7 files changed, 113 insertions, 0 deletions
diff --git a/roles/IMAP/files/etc/postfix/virtual/mailbox_domains.cf b/roles/IMAP/files/etc/postfix/virtual/mailbox_domains.cf
new file mode 120000
index 0000000..7e8c163
--- /dev/null
+++ b/roles/IMAP/files/etc/postfix/virtual/mailbox_domains.cf
@@ -0,0 +1 @@
+../../../../../mx/files/etc/postfix/virtual/mailbox_domains.cf \ No newline at end of file
diff --git a/roles/IMAP/files/etc/postfix/virtual/mailbox_maps.cf b/roles/IMAP/files/etc/postfix/virtual/mailbox_maps.cf
new file mode 120000
index 0000000..763b30e
--- /dev/null
+++ b/roles/IMAP/files/etc/postfix/virtual/mailbox_maps.cf
@@ -0,0 +1 @@
+../../../../../mx/files/etc/postfix/virtual/mailbox_maps.cf \ No newline at end of file
diff --git a/roles/IMAP/files/etc/postfix/virtual/transport_content_filter_maps.cf b/roles/IMAP/files/etc/postfix/virtual/transport_content_filter_maps.cf
new file mode 100644
index 0000000..6ea944f
--- /dev/null
+++ b/roles/IMAP/files/etc/postfix/virtual/transport_content_filter_maps.cf
@@ -0,0 +1,8 @@
+server_host = ldapi://%2Fprivate%2Fldapi/
+version = 3
+search_base = fvl=%u,fvd=%d,ou=virtual,o=mailHosting,dc=fripost,dc=org
+scope = base
+bind = none
+query_filter = (&(ObjectClass=AmavisAccount)(fvl=%u))
+result_attribute = fvl
+result_format = amavisfeed:unix:public/amavisfeed-contentfilter
diff --git a/roles/IMAP/handlers/main.yml b/roles/IMAP/handlers/main.yml
index 45f817d..2e54251 100644
--- a/roles/IMAP/handlers/main.yml
+++ b/roles/IMAP/handlers/main.yml
@@ -1,3 +1,9 @@
---
- name: Restart Dovecot
service: name=dovecot state=restarted
+
+- name: Restart Postfix
+ service: name=postfix state=restarted
+
+- name: Reload Postfix
+ service: name=postfix state=reloaded
diff --git a/roles/IMAP/tasks/main.yml b/roles/IMAP/tasks/main.yml
index d71573e..df21dd2 100644
--- a/roles/IMAP/tasks/main.yml
+++ b/roles/IMAP/tasks/main.yml
@@ -1,2 +1,3 @@
---
- include: imap.yml tags=imap,dovecot
+- include: mda.yml tags=mda,mail,postfix
diff --git a/roles/IMAP/tasks/mda.yml b/roles/IMAP/tasks/mda.yml
new file mode 100644
index 0000000..39938fd
--- /dev/null
+++ b/roles/IMAP/tasks/mda.yml
@@ -0,0 +1,36 @@
+- name: Install Postfix
+ apt: pkg={{ item }}
+ with_items:
+ - postfix
+ - postfix-ldap
+
+- name: Configure Postfix
+ template: src=etc/postfix/main.cf.j2
+ dest=/etc/postfix-{{ postfix_instance[inst].name }}/main.cf
+ owner=root group=root
+ mode=0644
+ register: r
+ notify:
+ - Restart Postfix
+
+- name: Create directory /etc/postfix-.../virtual
+ file: path=/etc/postfix-{{ postfix_instance[inst].name }}/virtual
+ owner=root group=root
+ state=directory
+ mode=0755
+
+- name: Copy lookups tables
+ copy: src=etc/postfix/virtual/{{ item }}
+ dest=/etc/postfix-{{ postfix_instance[inst].name }}/virtual/{{ item }}
+ owner=root group=root
+ mode=0644
+ with_items:
+ - mailbox_domains.cf
+ - mailbox_maps.cf
+ - transport_content_filter_maps.cf
+
+- name: Start Postfix
+ service: name=postfix state=started
+ when: not r.changed
+
+- meta: flush_handlers
diff --git a/roles/IMAP/templates/etc/postfix/main.cf.j2 b/roles/IMAP/templates/etc/postfix/main.cf.j2
new file mode 100644
index 0000000..1fb2fcc
--- /dev/null
+++ b/roles/IMAP/templates/etc/postfix/main.cf.j2
@@ -0,0 +1,60 @@
+########################################################################
+# MDA configuration
+#
+# {{ ansible_managed }}
+# Do NOT edit this file directly!
+
+smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
+biff = no
+readme_directory = no
+mail_owner = postfix
+
+delay_warning_time = 4h
+maximal_queue_lifetime = 5d
+
+myorigin = /etc/mailname
+myhostname = mda{{ imapno | default('') }}.$mydomain
+mydomain = {{ ansible_domain }}
+append_dot_mydomain = no
+
+# Turn off all TCP/IP listener ports except that necessary for the MDA.
+master_service_disable = !2526.inet inet
+
+queue_directory = /var/spool/postfix-{{ postfix_instance[inst].name }}
+data_directory = /var/lib/postfix-{{ postfix_instance[inst].name }}
+multi_instance_group = {{ postfix_instance[inst].group | default('') }}
+multi_instance_name = postfix-{{ postfix_instance[inst].name }}
+multi_instance_enable = yes
+
+# This server is a Mail Delivery Agent
+mynetworks_style = host
+inet_interfaces = 172.16.0.1
+{% if 'MX' in group_names %}
+ 127.0.0.1
+{% endif %}
+inet_protocols = ipv4
+
+# No local delivery
+mydestination =
+local_transport = error:5.1.1 Mailbox unavailable
+alias_maps =
+alias_database =
+local_recipient_maps =
+
+message_size_limit = 67108864
+recipient_delimiter = +
+
+# No relay: this server is inbound-only
+relay_transport = error:5.1.1 Relay unavailable
+default_transport = error:5.1.1 Transport unavailable
+
+# Virtual transport (the alias resolution is already done by the MX:es)
+virtual_transport = lmtp:unix:private/dovecot-lmtpd
+virtual_mailbox_domains = ldap:$config_directory/virtual/mailbox_domains.cf
+virtual_mailbox_maps = ldap:$config_directory/virtual/mailbox_maps.cf
+mailbox_transport_maps = ldap:$config_directory/virtual/transport_content_filter_maps.cf
+
+# Don't rewrite remote headers
+local_header_rewrite_clients =
+# Tolerate occasional high latency
+smtpd_timeout = 1200s