Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:sysadmin:tools:mailforwarder-ansible-playbook

Mailforwarder (Postfix) als Ansible-Playbook

Ich habe einen Mailserver 1). Alle anderen Server sollen diesen Mailserver als Forwarder verwenden.

zuletzt getestet mit Ansible 2.8 und Postfix 3.2 (2019)

Template für postfix/main.cf

Erst mal das Template, das sollte eigentlich auf jedem Linux-System funktionieren auf dem man Postfix installieren kann …

Das Template wohnt hier in meinem Beispiel unter

$HOME/data/ansible/example_org/base_ubuntu_1804/files/postfix_main.cf.j2

Warum ein "base_ubuntu_1804"? Manchmal ändern sich Dinge für verschiedene Distributions-Versionen, z.B. die Paketnamen. Deswegen hat bei mir jede Distributions-Version ein eigenes Verzeichnis.

Ein Template das für verschiedene Typen von Maschinen gilt, könnte natürlich auch wo anders "wohnen" und dementsprechend im Playbook referenziert werden.

##############################################################
# postfix-config fuer mail-forwarder
#
# wird mit ansible generiert
# aenderungen nur via ansible im base playbook machen
##############################################################
 
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
mail_owner = postfix
myhostname = {{ansible_hostname}}.{{ansible_domain}}
mydomain = example.org
myorigin = $mydomain
inet_interfaces = localhost
 
unknown_local_recipient_reject_code = 550
 
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
sample_directory = /etc/postfix
data_directory = /var/lib/postfix
 
setgid_group = postdrop
 
home_mailbox = .maildir/
 
relayhost = [mailgateway.example.org]
 
smtp_always_send_ehlo = yes
 
##############################################################
# postfix-config fuer mail-forwarder
#
# wird mit ansible generiert
# aenderungen nur via ansible im base playbook machen
##############################################################

Ich halte es für sehr sinnvoll, einen deutlichen Hinweis zu hinterlassen, dass Dateien nicht lokal geändert werden sollten, weil sie vom Konfigurationsmanagement überschrieben werden könnten.

MX oder kein MX?

Wichtig: Wenn man keinen MX-Eintrag (im DNS) für mailgateway.example.org hat, muss man den Relay-Host mit eckigen Klammern eintragen.

Wenn man 2 (oder mehr) Relayhosts hat, sollte man aber beide Mailserver im DNS als MX eintragen und die eckigen Klammern weglassen → Beide Mailserver können zum Weiterleiten angesprochen werden. Einfache und gute Hochverfügbarkeit!

(Befehl, um den MX für eine DNS-Domäne herauszufinden: dig -t MX example.org)

Ansible Playbook + Taskfile

Playbooks, bei denen Software installiert wird, sind natürlich abhängig von der Installations-Software.

Hier für apt auf Ubuntu (würde vermutlich unter Debian genauso funktionieren, habe ich aber nicht getestet).

Playbook

$HOME/data/ansible/example_org/base_ubuntu_1804/setup.yml

- hosts: example_org_u1804
  become: yes

  tasks:
    - include: tasks/mailforwarder.yml

  handlers:
    - include: handlers/postfixhandler.yml

Handler

"Handler" bestimmen, was getan werden soll wenn bei den Tasks gewisse service-Zustände z.B. "postfix started" festgelegt sind.

$HOME/data/ansible/example_org/base_ubuntu_1804/handlers/postfixhandler.yml

- name: restart postfix
  service: name=postfix state=restarted

Taskfile

hier das Task-File, in dem alle Aufgaben festgeschrieben sind, die erledigt werden sollen:

$HOME/data/ansible/example_org/base_ubuntu_1804/tasks/mailforwarder.yml

- name: ensure that whe have postfix installed
  apt: pkg=postfix state=present

- name: ensure that postfix is started
  service: name=postfix state=started enabled=true

- name: write postfix config
  template: src=files/postfix_main.cf.j2 dest=/etc/postfix/main.cf
  when: "'mail_gateways' not in group_names"
  tags: postfix
  notify:
    - restart postfix
1)
oder einen kleinen Mailserver-Cluster, siehe →MX oder kein MX?
de/sysadmin/tools/mailforwarder-ansible-playbook.txt · Zuletzt geändert: 2019-10-08 10:53 von hella

Seiten-Werkzeuge

Mastodon Twitter