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)
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.
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
)
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).
$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" 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
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
gilt für alle Tipps, Tricks & Spickzettel:
dies sind einfache, teils banale Notizen für meinen persönlichen Gebrauch,
die hier eher zufällig auch öffentlich lesbar sind
(vielleicht hilft es ja jemandem weiter). Verwendung auf eigene Gefahr
Fehler-Hinweise, Dankesschreiben , etc. bitte an: web.21@unixwitch.de
weitere Tools / Spickzettel