summaryrefslogtreecommitdiffstats
path: root/roles
diff options
context:
space:
mode:
authorGuilhem Moulin <guilhem@fripost.org>2013-12-02 22:39:56 +0100
committerGuilhem Moulin <guilhem@fripost.org>2015-06-07 02:51:08 +0200
commitc7080c68fb4594f01a2edc98a2014c109a5afe16 (patch)
tree1b5eb6b14ca62493d39bca40ceb98737ac1765ff /roles
parent7d1622f3e5db18b40cab6cecfd3c2f1fab20d782 (diff)
wibble
Diffstat (limited to 'roles')
-rw-r--r--roles/common/tasks/mail.yml5
-rw-r--r--roles/common/templates/etc/postfix/main.cf.j27
-rw-r--r--roles/mx/tasks/main.yml3
-rw-r--r--roles/mx/templates/etc/postfix/main.cf.j218
4 files changed, 17 insertions, 16 deletions
diff --git a/roles/common/tasks/mail.yml b/roles/common/tasks/mail.yml
index c562c42..e8d61a8 100644
--- a/roles/common/tasks/mail.yml
+++ b/roles/common/tasks/mail.yml
@@ -16,50 +16,49 @@
- Restart Postfix
- name: Link the dynamic maps & master.cf of each children to the master's
# main.cf is specialized to each dedicated role, though
file: src=../postfix/{{ item.1 }}
dest=/etc/postfix-{{ postfix_instance[item.0].name }}/{{ item.1 }}
owner=root group=root
state=link force=yes
register: r2
with_nested:
- postfix_instance.keys() | intersect(group_names) | list
- [ 'dynamicmaps.cf', 'master.cf' ]
notify:
- Restart Postfix
- name: Configure Postfix (1)
copy: src=etc/postfix/{{ item }}
dest=/etc/postfix/{{ item }}
owner=root group=root
mode=0644
- register: r3
with_items:
- master.cf
- generic.pcre
notify:
- Reload Postfix
- name: Configure Postfix (2)
template: src=etc/postfix/main.cf.j2
dest=/etc/postfix/main.cf
owner=root group=root
mode=0644
- register: r4
+ register: r3
notify:
- Restart Postfix
- name: Update the static local Postfix database
postmap: cmd=postalias src=/etc/aliases db=cdb
owner=root group=root
mode=0644
# We're using CDB
- name: Delete /etc/aliases.db
file: path=/etc/aliases.db state=absent
- name: Start Postfix
service: name=postfix state=started
- when: not (r1.changed or r2.changed or r3.changed or r4.changed)
+ when: not (r1.changed or r2.changed or r3.changed)
- meta: flush_handlers
diff --git a/roles/common/templates/etc/postfix/main.cf.j2 b/roles/common/templates/etc/postfix/main.cf.j2
index a856843..10d4244 100644
--- a/roles/common/templates/etc/postfix/main.cf.j2
+++ b/roles/common/templates/etc/postfix/main.cf.j2
@@ -18,46 +18,45 @@ append_dot_mydomain = no
mynetworks_style = host
inet_interfaces = loopback-only
inet_protocols = ipv4
# No local delivery
mydestination =
local_transport = error:5.1.1 Mailbox unavailable
alias_maps =
local_recipient_maps =
# All aliases are virtual
default_database_type = cdb
virtual_alias_maps = cdb:/etc/aliases
alias_database = $virtual_alias_maps
# Transform local FQDN addresses to addresses routable on the internet
smtp_generic_maps = pcre:$config_directory/generic.pcre
# Forward everything to our internal mailhub
{% if 'MTA-out' in group_names %}
-# TODO: use a UNIX socket instead
-relay_transport = lmtp:unix:private/mta-out
+relayhost = [127.0.0.1]:{{ MTA_out.port }}
{% else %}
-relayhost = [{{ MTA_out.IPv4 }}]:{{ MTA_out.port }}
+relayhost = [{{ MTA_out.IPv4 }}]:{{ MTA_out.port }}
{% endif %}
-relay_domains =
+relay_domains =
# Tunnel everything through IPSec
smtp_tls_security_level = none
smtp_bind_address = 172.16.0.1
smtpd_tls_security_level = none
# Turn off all TCP/IP listener ports except that dedicated to
# samhain(8), which sadly cannot use pickup through the sendmail binary.
master_service_disable = !16132.inet inet
{% set multi_instance = False %}
{%- for g in postfix_instance.keys() | sort -%}
{%- if g in group_names -%}
{%- if not multi_instance -%}
{%- set multi_instance = True -%}
## Other postfix instances
multi_instance_wrapper = $command_directory/postmulti -p --
multi_instance_enable = yes
multi_instance_directories =
{%- endif %} /etc/postfix-{{ postfix_instance[g].name }}
diff --git a/roles/mx/tasks/main.yml b/roles/mx/tasks/main.yml
index bd04feb..e2da61e 100644
--- a/roles/mx/tasks/main.yml
+++ b/roles/mx/tasks/main.yml
@@ -1,26 +1,27 @@
- name: Install Postfix & Postgrey
apt: pkg={{ item }}
with_items:
- postfix
- postfix-pcre
- postfix-ldap
+ - postfix-cdb
- postgrey
- libnet-ldap-perl
- libauthen-sasl-perl
- name: Configure Postgrey
lineinfile: dest=/etc/default/postgrey
regexp='^POSTGREY_OPTS='
line='POSTGREY_OPTS="--privacy --unix=/var/spool/postfix-{{ postfix_instance[inst].name }}/private/postgrey"'
owner=root group=root
mode=0644
register: r
notify:
- Restart Postgrey
- name: Start Postgrey
service: name=postgrey state=started
when: not r.changed
- meta: flush_handlers
@@ -36,40 +37,38 @@
- 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
- reserved_maps.pcre
- alias_maps.cf
- lists_maps.cf
- alias_catchall_maps.cf
- mailbox_maps.cf
- reserved_transport_maps
- transport_lists_maps.cf
- notify:
- - Restart Postfix
- name: Compile the Reserved Transport Maps
postmap: cmd=postalias instance={{ postfix_instance[inst].name }}
src=/etc/postfix-{{ postfix_instance[inst].name }}/virtual/reserved_transport_maps db=cdb
owner=root group=root
mode=0644
- name: Copy reserved-alias.pl
copy: src=usr/local/sbin/reserved-alias.pl
dest=/usr/local/sbin/reserved-alias.pl
owner=root group=root
mode=0755
- name: Start Postfix
service: name=postfix state=started
when: not r.changed
- meta: flush_handlers
diff --git a/roles/mx/templates/etc/postfix/main.cf.j2 b/roles/mx/templates/etc/postfix/main.cf.j2
index 5c44781..8c1da35 100644
--- a/roles/mx/templates/etc/postfix/main.cf.j2
+++ b/roles/mx/templates/etc/postfix/main.cf.j2
@@ -6,93 +6,97 @@
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 = mx{{ mxno | default('') }}.$mydomain
mydomain = {{ ansible_domain }}
append_dot_mydomain = no
# Turn off all TCP/IP listener ports except that necessary for the mail
# exchange.
master_service_disable = !smtp.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 }}
+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 eXchange
mynetworks_style = host
inet_interfaces = all
inet_protocols = all
# 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 = +
# Forward everything to our internal mailhub
{% if 'MTA-out' in group_names %}
-relay_transport = lmtp:unix:private/mta-out
+relayhost = [127.0.0.1]:{{ MTA_out.port }}
{% else %}
-relayhost = [{{ MTA_out.IPv4 }}]:{{ MTA_out.port }}
+relayhost = [{{ MTA_out.IPv4 }}]:{{ MTA_out.port }}
{% endif %}
-relay_domains =
+relay_domains =
+# Virtual transport
{% if 'LDA' in group_names %}
-virtual_transport = lmtp:unix:private/lda
+virtual_transport = smtp:[127.0.0.1]:{{ LDA.port }}
{% else %}
virtual_transport = smtp:[{{ LDA.IPv4 }}]:{{ LDA.port }}
{% endif %}
virtual_mailbox_domains = ldap:$config_directory/virtual/mailbox_domains.cf
virtual_alias_maps = pcre:$config_directory/virtual/reserved_maps.pcre
ldap:$config_directory/virtual/alias_maps.cf
ldap:$config_directory/virtual/lists_maps.cf
ldap:$config_directory/virtual/alias_catchall_maps.cf
virtual_mailbox_maps = ldap:$config_directory/virtual/mailbox_maps.cf
mailbox_transport_maps = cdb:$config_directory/virtual/reserved_transport_maps
ldap:$config_directory/virtual/transport_lists_maps.cf
-# Pass the client information along to the content filter
+# Don't rewrite remote headers
local_header_rewrite_clients =
+# Pass the client information along to the content filter
smtp_send_xforward_command = yes
+# Avoid splitting the envelope and scanning messages multiple times
smtp_destination_recipient_limit = 1000
+# Tolerate occasional high latency
smtp_data_done_timeout = 1200s
# Tunnel everything through IPSec
smtp_tls_security_level = none
smtp_bind_address = 172.16.0.1
-# Virtual
+# TLS
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_CApath = /etc/ssl/certs/
smtpd_tls_session_cache_database= btree:$data_directory/smtpd_tls_session_cache
smtpd_tls_received_header = yes
smtpd_tls_ask_ccert = yes
smtpd_tls_fingerprint_digest = sha1
smtpd_tls_eecdh_grade = strong
tls_random_source = dev:/dev/urandom
# http://en.linuxreviews.org/HOWTO_Stop_spam_using_Postfix
# http://www.howtoforge.com/block_spam_at_mta_level_postfix
strict_rfc821_envelopes = yes
smtpd_delay_reject = yes
disable_vrfy_command = yes