summaryrefslogtreecommitdiff
path: root/roles/mail/postfix/relay
diff options
context:
space:
mode:
Diffstat (limited to 'roles/mail/postfix/relay')
-rw-r--r--roles/mail/postfix/relay/defaults/main.yml14
-rw-r--r--roles/mail/postfix/relay/filter_plugins/postfix.py25
-rw-r--r--roles/mail/postfix/relay/handlers/main.yml5
-rw-r--r--roles/mail/postfix/relay/tasks/main.yml64
4 files changed, 108 insertions, 0 deletions
diff --git a/roles/mail/postfix/relay/defaults/main.yml b/roles/mail/postfix/relay/defaults/main.yml
new file mode 100644
index 00000000..806e019f
--- /dev/null
+++ b/roles/mail/postfix/relay/defaults/main.yml
@@ -0,0 +1,14 @@
+---
+# postfix_relay_local_header_rewrite_clients:
+# - "permit_inet_interfaces"
+# - "permit_mynetworks"
+# - "permit_sasl_authenticated"
+
+# postfix_relay_sender_canonical_maps:
+# rewrite_example_subdomains:
+# type: regexp
+# content: |
+# /^(.+)@(.+)\.example\.com$/i ${1}%${2}@example.com
+
+postfix_relay_dkim_signer: "none"
+# postfix_relay_dkim_signer: "opendkim"
diff --git a/roles/mail/postfix/relay/filter_plugins/postfix.py b/roles/mail/postfix/relay/filter_plugins/postfix.py
new file mode 100644
index 00000000..673cba0b
--- /dev/null
+++ b/roles/mail/postfix/relay/filter_plugins/postfix.py
@@ -0,0 +1,25 @@
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+from ansible import errors
+
+
+def postfix_maps(maps, prefix=''):
+ try:
+ tmp = []
+ for name, map in maps.items():
+ tmp.append('%s:%s%s' % (map['type'], prefix, name))
+ return ', '.join(tmp)
+ except Exception as e:
+ raise errors.AnsibleFilterError("postfix_maps(): %s" % str(e))
+
+
+class FilterModule(object):
+
+ ''' postfix helpers '''
+ filter_map = {
+ 'postfix_maps': postfix_maps,
+ }
+
+ def filters(self):
+ return self.filter_map
diff --git a/roles/mail/postfix/relay/handlers/main.yml b/roles/mail/postfix/relay/handlers/main.yml
new file mode 100644
index 00000000..bea754c9
--- /dev/null
+++ b/roles/mail/postfix/relay/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+- name: restart postfix
+ service:
+ name: postfix
+ state: restarted
diff --git a/roles/mail/postfix/relay/tasks/main.yml b/roles/mail/postfix/relay/tasks/main.yml
new file mode 100644
index 00000000..b622bf7f
--- /dev/null
+++ b/roles/mail/postfix/relay/tasks/main.yml
@@ -0,0 +1,64 @@
+---
+- name: install canonical maps
+ when: postfix_relay_sender_canonical_maps is defined
+ block:
+ - name: create subdirectory for canonical maps
+ file:
+ path: /etc/postfix/canonical
+ state: directory
+
+ - name: install canoncial maps
+ loop: "{{ postfix_relay_sender_canonical_maps | dict2items }}"
+ loop_control:
+ label: "{{ item.key }} ({{ item.value.type }})"
+ copy:
+ content: "{{ item.value.content }}"
+ dest: "/etc/postfix/canonical/{{ item.key }}"
+ register: sender_canonical_maps_status
+
+ - name: generate canoncial maps
+ loop: "{{ sender_canonical_maps_status.results | select('changed') }}"
+ loop_control:
+ label: "{{ item.item.key }} ({{ item.item.value.type }})"
+ command: postmap "/etc/postfix/canonical/{{ item.item.key }}"
+
+ - name: configure sender canonical maps
+ lineinfile:
+ regexp: "^#?\\s*sender_canonical_maps\\s*="
+ line: "sender_canonical_maps = {{ postfix_relay_sender_canonical_maps | postfix_maps('/etc/postfix/canonical/') }}"
+ dest: /etc/postfix/main.cf
+ notify: restart postfix
+
+- name: configure local_header_rewrite_clients
+ when: postfix_relay_local_header_rewrite_clients is defined
+ lineinfile:
+ regexp: "^#?\\s*local_header_rewrite_clients\\s*="
+ line: "local_header_rewrite_clients = {{ postfix_relay_local_header_rewrite_clients | join(', ') }}"
+ dest: /etc/postfix/main.cf
+ notify: restart postfix
+
+- name: configure dkim signing using opendkim
+ when: postfix_relay_dkim_signer == "opendkim"
+ block:
+ - name: add postfix user to opendkim group
+ user:
+ name: postfix
+ groups: opendkim
+ append: yes
+ notify: restart postfix
+
+ - name: configure postfix milter config for opendkim
+ vars:
+ postfix_options:
+ milter_protocol: "6"
+ milter_default_action: "accept"
+ smtpd_milters: "unix:opendkim/opendkim.sock"
+ non_smtpd_milters: "unix:opendkim/opendkim.sock"
+ loop: "{{ postfix_options | dict2items }}"
+ loop_control:
+ label: "{{ item.key }} = {{ item.value }}"
+ lineinfile:
+ regexp: "^#?\\s*{{ item.key }}\\s*="
+ line: "{{ item.key }} = {{ item.value }}"
+ dest: /etc/postfix/main.cf
+ notify: restart postfix