Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

centos:mail_c7:postfix3_9 [10.02.2019 12:09. ]
django Backup-Mailserver mit Postfix 3.x unter CentOS 7 #CentOS7 #Postfix3 #BackupMX
centos:mail_c7:postfix3_9 [22.07.2019 15:11. ]
Zeile 1: Zeile 1:
-====== Backup-Mailserver mit Postfix 3.x unter CentOS 7 ====== 
-{{:​centos:​mailserver:​postfix:​postfixlogo.gif |Postfix-Logo}} Nur mit einem Mailserver in Produktion zu gehen, wirft natürlich für das Thema //geplante Wartungsarbeiten / Downtime// schon einige Fragen auf. Egal ob nun ein Hardewardefekt,​ eine Überlastung des Servers oder des verantwortlichen Postmasters vorliegt, nach Ablauf der gängigen Queue-Life-Time von 3 - 6 Tagen, wären wir definitiv in gewisser Art und Weise arbeitsunfähig. ​ 
-Bevor nun die Domains, bei einer längeren "​Abwesenheit"​ unseres Mailservers,​ nun gar nicht mehr erreichbar ist, ist es schon weitaus angenehmer auf einen Backup-Mailserver,​ der unseren // **__höchsten Ansprüchen__** // an Sicherheits- und SPAM-Abwehrmechanismen genügt, zurück greifen zu können. Aus gutem Grund gibt es für fast jede ordentlich gepflegte Domäne in der Regel mindestens einen Backupmailserver. 
- 
-Wir setzen aus den gerade genannten Gründen einen sog. **„Store-and-Forward“**-Backup-Server ein. Hierbei werden bei Bedarf die eMails vom Backup-Server angenommen und sobald der **eigentlichen MX-Server** wieder verfügbar ist, an diesen zugestellt. ​ 
- 
-===== DNS-Einträge ===== 
-Für unsere Domäne definieren wir die zugehörigen MX-Records und legen hierzu die entsprechenden [[centos:​mail_c7:​mta_3#​mx_record|DNS-Einträge]] fest. In unserem Fall hat nun unser Produktivsystem **mx1.nausch.org** die Priorität **10** und der Backupmailserver **mx1.tachtler.net** die Priorität **20**. 
-   # dig nausch.org MX 
-    
-   ;; ANSWER SECTION: 
-   ​nausch.org. ​            ​86400 ​  ​IN ​     MX      10 mx1.nausch.org. 
-   ​nausch.org. ​            ​86400 ​  ​IN ​     MX      20 mx1.tachtler.net. 
- 
-===== Backupmailserver definieren ===== 
-Über die Variable **permit_mx_backup** wird unser Mailserver angewiesen, eMails anzunehmen und weiterzuleiten,​ sofern nur ein MX-Record auf unseren Mailserver zeigt. Mit Hilfe von **permit_mx_backup_networks** kann und muss dies nun soweit eingeschränkt werden, so dass der höchste MX-Host aus dem hier definierten Netzwerk kommen muss! 
-Wir tragen also die IP-Adressen,​ bzw. die Netzbereiche in die **main.cf** am Ende der Section **ZUSTÄNDIGKEITEN,​ VERTRAUENSWÜRDIGE NETZE UND NETZWERKK-DEFINITIONEN** entsprechend ein. 
-   # vim /​etc/​postfix/​main.cf 
-<code bash>... 
- 
-# Django : 2019-02-10 - Backup-Mailserver explizit erlauben 
-# default: permit_mx_backup_networks = 
-permit_mx_backup_networks = 88.217.171.167/​32 
-</​code>​ 
- 
-===== Dynamische Empfänger-Adress-Verifizierung ===== 
-==== Datenbank anlegen ==== 
-Ähnlich wie schon bei der Anbindung unseres Postfix-Mailservers an einem [[centos:​mail_c7:​mta_6|Backend-Mailserver]] (Dovecot-IMAP-Server) verwenden wir auch hier das Modul **[[centos:​mail_c7:​mta_1#​verify|verify]]**. 
- 
-Den notwendigen Konfigurationseintrag finden wir bereits in der Hauptkonfigurationsdatei von unserem **Postfix 3.x** unter **CentOS 7.x**. 
-   # grep verify /​etc/​postfix/​master.cf 
- 
-   ​verify ​   unix  -       ​- ​      ​n ​      ​- ​      ​1 ​      ​verify 
- 
-Postfix wird mit Hilfe des Moduls **verify** versuchen, noch während der Annahme der Nachricht von einem fremden Mailserver, beim Backend-System in Erfahrung zu bringen, ob dieses die Nachricht auch abnehmen würde. Ist dies der Fall, reicht der Backup-Mailserver die Nachricht an unseren Mailserver weiter, sobald dieser wieder erreichbar ist. Anderenfalls wird die Annahme der Nachricht verweigert. Damit nun der Mailserver nicht jedes mal nachfragen muss, werden wir ihm hierzu eine kleine Datenbanktabelle zur Verfügung stellen, die auch nach einen Neustart des Servers sofort genutzt werden kann. 
- 
-Als erstes legen wir nun das entsprechende Verzeichnis an und schenke es dem Nutzer postfix. 
-   # mkdir /​var/​spool/​postfix/​data 
- 
-   # chown postfix.root /​var/​spool/​postfix/​data 
- 
-   # chmod 700 /​var/​spool/​postfix/​data 
- 
-==== Datenbank definieren ==== 
-Als nächstes definieren wir noch die entsprechende Datenbank, bzw. den Ort wo Postfix diese Datenbank abspeichern wird. Hierzu tragen wir in die Konfigurationsdatei //​**/​etc/​postfix/​main.cf**//​ am ende der Sektion **## LOOKUP-TABELLEN** nachfolgenden Eintrag nach. 
-   # vim /​etc/​postfix/​main.cf 
- 
-<code bash>... 
- 
-# Django : 2019-02-10 - Ergebnisse der Adress-Verification cachen 
-#          Kapitel 12.2.2 Dynamische Empfänger-Verifizierung 
-#          Kapitel 9.5.5 envelope Sender überprüfen 
-# default: address_verify_map = btree:​$data_directory/​verify_cache 
-address_verify_map = btree:/​var/​spool/​postfix/​data/​verify 
-</​code>​ 
- 
-==== Backup-MX definieren ==== 
-Ferner aktivieren wir noch den in der [[postfix3_4#​smtp_recipient_restrictions|Grundkonfiguration unserers Restrictions-Regelwerk]] vorbereiteten Eintrag ''​**permit_mx_backup**''​. 
-   # vim /​etc/​postfix/​main.cf 
-<code bash>################################################################################​ 
-## SMTP RECIPIENT RESTRICTIONS 
-# 
-# Django : 2019-02-10 - Schutz unserer Empfänger mit Hilfe der Recipient ​ 
-#          Restrictions ​ 
-# default: smtpd_recipient_restrictions = 
-smtpd_recipient_restrictions = 
-#          Postmaster, abuse und andere aufgaben- oder funktionsgebundene ​ 
-#          eMail-Adressen (Role-Accounts) whitelisten 
-           ​check_recipient_access btree:/​etc/​postfix/​access_recipient-rfc 
- 
-#          Black- und Whitelisting ​      ​(Kapitel 8.2.3 White- und Blacklisting) 
-           ​check_client_access cidr:/​etc/​postfix/​access_client 
-           ​check_helo_access btree:/​etc/​postfix/​access_helo 
-           ​check_sender_access btree:/​etc/​postfix/​access_sender 
-           ​check_recipient_access btree:/​etc/​postfix/​access_recipient 
- 
-#          Unsere eigenen Nutzer zulassen-/​erlauben ​             
-#                                (Kapitel 8.2.2 Relaying erlauben und verbieten) 
-           ​permit_sasl_authenticated 
-           ​permit_mynetworks 
- 
-#          RBL überprüfen ​              ​(Kapitel 10.11 Realtime Blackhole Lists) 
-           ​reject_rbl_client zen.spamhaus.org 
-           ​reject_rbl_client ix.dnsbl.manitu.net 
-           ​reject_rbl_client bl.spamcop.net 
-           ​reject_rhsbl_client multi.uribl.com 
- 
-#          Greylisting via postgrey checken via Unix-Socket 
-#                                          (Kapitel 9.2.5 postgrey installieren) 
-#          check_policy_service unix:​postgrey/​socket,​ 
- 
-#          Policyd-Weight check over TCP-Connection ​ 
-#                                      (Kapitel 9.3 policyd-weight installieren) 
-#          check_client_access btree:/​etc/​postfix/​policyd_weight_client_whitelist,​ 
-#          check_policy_service inet:​127.0.0.1:​12525,​ 
- 
-#          Dynamische Prüfung auf existente Relay-Empfänger 
-#                            (Kapitel 12.2.2 Dynamische Empfänger-Verifizierung) 
-           ​reject_unverified_recipient 
- 
-#          Backupserver (MX) erlauben 
-           ​permit_mx_backup 
- 
-#          alles andere an relaying verbieten ​   
-#                                (Kapitel 8.2.2 Relaying erlauben und verbieten) 
-           ​reject_unauth_destination 
- 
-#          Quota-Status-Policy-Daemon am Dovecot-Backend-System 
-#          Dovecotbuch (ISBN 978-3-95539-74-7) Seite 219 ff.  ​ 
-#                          (Kapitel 11.11 "Der Quota-Policy-Server für Postfix"​) 
-           ​check_policy_service inet:​10.0.0.77:​10000 
- 
-#          Zu guter Letzt alles durchlassen,​ was bis jetzt noch nicht  
-#          beanstandet wurde 
-           ​permit 
-</​code>​ 
- 
-Zusätzlich aktivieren wir noch den in der Section ​ 
- ​**SMTP RELAY RESTRICTIONS** beim [[postfix3_4#​smtp_relay_restrictions|Grundkonfiguration unserers Restrictions-Regelwerk]] vorbereiteten Eintrag ''​**permit_mx_backup**''​. 
-   # vim /​etc/​postfix/​main.cf 
-<​code>​... 
- 
-################################################################################​ 
-## SMTP RELAY RESTRICTIONS 
-# 
-# Django : 2019-02-10 - Definition, wer über unseren MX relayen darf oder nicht. ​ 
-#          http://​www.postfix.org/​postconf.5.html#​smtpd_relay_restrictions 
-# default: smtpd_relay_restrictions = permit_mynetworks, ​ 
-#          permit_sasl_authenticated,​ defer_unauth_destination 
-# 
-smtpd_relay_restrictions = 
-# Unsere eigenen Nutzer zulassen-/​erlauben 
-           ​permit_sasl_authenticated 
-           ​permit_mynetworks 
-# Backupserver (MX) erlauben 
-#           ​permit_mx_backup 
-# alles andere an relaying verbieten, d.h. mit einem finalen error 550 abweisen 
-           ​reject_unauth_destination 
-</​code>​ 
- 
-==== Adressüberprüfung festlegen ==== 
-Die Pflege der verify-Datenbank übernimmt dabei Postfix selbst, trägt neue Adressen ein und löscht auch regelmäßig alte Einträge - kurz und gut, der Postfix betreibt also eine Art //​Brutpflege//​. Da wir keine Änderungen an weiteren Parametern vorgenommen hatten, greifen hier die Default-Werte. 
-   # postconf address_verify_positive_refresh_time 
- 
-   ​address_verify_positive_refresh_time = 7d 
- 
-Nach Ablauf der sieben Tage wird das verify-Modul eine bereits bekannte und positiv gekennzeichnete eMailadresse erneuit beim Zielserver anfragen und die Aktualität des Datensatzes überprüfen. 
- 
-   # postconf address_verify_positive_expire_time 
- 
-   ​address_verify_positive_expire_time = 31d 
- 
-Erst nach Ablauf von 31 Tagen wird eine bekannte und positive Adresse aus der Datenbank entfernt. Da aber bereits nach 7 Tagen eine Überprüfung der Adresse stattfindet,​ werden "gute Adressen"​ quasi nie gelöscht, sondern stehen sofort zur Verfügung! 
- 
-   # postconf address_verify_negative_refresh_time 
- 
-   ​address_verify_negative_refresh_time = 3h 
- 
-Nach drei Stunden wird das verify-Modul eine noch nicht existente gecachte Empfänger-Adresse beim Zielserver erneut anfragen. 
- 
-   # postconf address_verify_negative_expire_time 
- 
-   ​address_verify_negative_expire_time = 3d 
- 
-Nicht existierende Empfängeradressen werden maximal drei Tage vorgehalten und dann gelöscht. 
- 
-   # postconf address_verify_sender 
- 
-   ​address_verify_sender = $double_bounce_sender 
- 
-   # postconf double_bounce_sender 
- 
-   ​double_bounce_sender = double-bounce 
- 
-Dieser Parameter legt fest, mit welchem //​Envelope-From//​ die Anfragen an den Zielserver gerichtet werden sollen. 
- 
-=== Aktivierung === 
-Zum Aktivieren unserer Konfigurationsänderung führen wir einen **reload** des postfix-Daemons durch. 
-   # systemctl reload postfix.service 
- 
-Der **Reload** wurde im maillog dokumentiert. Bei Bedarf können wir den Status unseres Postfix-Servers abfragen. 
-   # systemctl status postfix.service 
- 
-<​html><​pre class="​code">​ 
-<font style="​color:​ rgb(0, 255, 0)"><​b>​● </​b></​font>​postfix.service - Postfix Mail Transport Agent 
-   ​Loaded:​ loaded (/​usr/​lib/​systemd/​system/​postfix.service;​ enabled; vendor preset: disabled) 
-   ​Active:​ <font style="​color:​ rgb(0, 255, 0)"><​b>​active (running)</​b></​font>​ since Sun 2019-02-10 12:43:21 CET; 4min 22s ago 
-  Process: 27475 ExecStop=/​usr/​sbin/​postfix stop (code=exited,​ status=0/​SUCCESS) 
-  Process: 27592 ExecReload=/​usr/​sbin/​postfix reload (code=exited,​ status=0/​SUCCESS) 
-  Process: 27492 ExecStart=/​usr/​sbin/​postfix start (code=exited,​ status=0/​SUCCESS) 
-  Process: 27489 ExecStartPre=/​usr/​libexec/​postfix/​chroot-update (code=exited,​ status=0/​SUCCESS) 
-  Process: 27486 ExecStartPre=/​usr/​libexec/​postfix/​aliasesdb (code=exited,​ status=0/​SUCCESS) 
- Main PID: 27566 (master) 
-   ​CGroup:​ /​system.slice/​postfix.service 
-           ​├─27566 /​usr/​libexec/​postfix/​master -w 
-           ​├─27603 pickup -l -t unix -u 
-           ​└─27604 qmgr -l -t unix -u 
- 
-Feb 10 12:47:39 vml000080.dmz.nausch.org systemd[1]: Reloading Postfix Mail Transport Agent. 
-Feb 10 12:47:39 vml000080.dmz.nausch.org postfix/​master[27566]:​ reload -- version 3.3.2, configuration /​etc/​postfix 
-Feb 10 12:47:39 vml000080.dmz.nausch.org systemd[1]: Reloaded Postfix Mail Transport Agent.</​font>​ 
-</​pre>​ 
-</​html>​ 
- 
-==== Logging ==== 
-Im Maillog werden dann entsprechend positive wie negative Überprüfungen dokumentiert. 
- 
-   # tail -f /​var/​log/​maillog 
-<​code>​... 
-Feb 10 12:51:20 vml000080 postfix/​smtpd[13738]:​ connect from unknown[192.168.10.45] 
-Feb 10 12:51:06 vml000080 postfix/​cleanup[13743]:​ 55C673A: message-id=<​20120604201206.55C673A@mx1.nausch.org>​ 
-Feb 10 12:51:06 vml000080 postfix/​qmgr[13643]:​ 55C673A: from=<​double-bounce@nausch.org>,​ size=253, nrcpt=1 (queue active) 
-Feb 10 12:51:06 vml000080 postfix/​lmtp[13744]:​ 55C673A: to=<​django@nausch.org>,​ relay=10.0.0.70[10.0.0.70]:​24,​ delay=0.08, delays=0.04/​0.01/​0.02/​0.01,​ dsn=2.1.5, status=deliverable (250 2.1.5 ok) 
-Feb 10 12:51:06 vml000080 postfix/​qmgr[13643]:​ 55C673A: removed 
-Feb 10 12:51:09 vml000080 postfix/​smtpd[13738]:​ 563E13A: client=unknown[192.168.10.45] 
-Feb 10 12:51:17 vml000080 postfix/​smtpd[13738]:​ disconnect from unknown[192.168.10.45] 
-... 
-</​code>​ 
- 
-Das Beispiel zeigt einen erfolgreichen Überprüfungsversuch // **status=deliverable (250 2.1.5 ok)** // ).  
- 
-Wir im Gegensatz versucht an einen nicht existierenden Empfänger eine Nachricht zuzustellen,​ erfolgt hier der Vermerk // **status=undeliverable** //.  
-<​code>​... 
-Feb 10 12:53:07 vml000080 postfix/​smtpd[13753]:​ connect from unknown[192.168.10.45] 
-Feb 10 12:53:37 vml000080 postfix/​cleanup[13760]:​ F0DAC3A: message-id=<​20120604202637.F0DAC3A@mx1.nausch.org>​ 
-Feb 10 12:53:38 vml000080 postfix/​qmgr[13643]:​ F0DAC3A: from=<​double-bounce@nausch.org>,​ size=253, nrcpt=1 (queue active) 
-Feb 10 12:53:38 vml000080 postfix/​lmtp[13761]:​ F0DAC3A: to=<​peer.heinlein@nausch.org>,​ relay=10.0.0.70[10.0.0.70]:​24,​ delay=0.08, delays=0.04/​0.01/​0.01/​0.01,​ dsn=5.1.1, status=undeliverable (host 10.0.0.70[10.0.0.70] said: 550-Mailbox unknown. ​ Either there is no mailbox associated with this 550-name or you do not have authorization to see it. 550 5.1.1 User unknown (in reply to RCPT TO command)) 
-Feb 10 12:53:38 vml000080 postfix/​qmgr[13643]:​ F0DAC3A: removed 
-Feb 10 12:53:40 vml000080 postfix/​smtpd[13753]:​ NOQUEUE: reject: RCPT from unknown[192.168.10.45]:​ 450 4.1.1 <​peer.heinlein@nausch.org>:​ Recipient address rejected: unverified address: host 10.0.0.70[10.0.0.70] said: 550-Mailbox unknown. ​ Either there is no mailbox associated with this 550-name or you do not have authorization to see it. 550 5.1.1 User unknown (in reply to RCPT TO command); from=<​swat@nausch.org>​ to=<​peer.heinlein@nausch.org>​ proto=SMTP helo=<​ich>​ 
-Feb 10 12:53:49 vml000080 postfix/​smtpd[13753]:​ disconnect from unknown[192.168.10.45] 
-... 
-</​code>​ 
- 
-Werfen wir nun einen Blick in die verify-Datenbank von Postfix können wir für beide Beispiele die entsprechenden Einträge finden. 
-   # postmap -s btree:/​var/​spool/​postfix/​data/​verify 
-<code bash>​django@nausch.org 0:​0:​1338840726:​250 2.1.5 ok 
-peer.heinlein@nausch.org 2:​0:​1338841598:​host 10.0.0.70[10.0.0.70] said: 550-Mailbox unknown. ​ Either there is no mailbox associated with this 550-name or you do not have authorization to see it. 550 5.1.1 User unknown (in reply to RCPT TO command) 
-</​code>​ 
- 
-==== Eintrag in der Datenbank (manuell) löschen ==== 
-Wollen wir, warum auch immer, einen Eintrag der verify-Datenbank manuell entfernen, greifen wir auch auf den Befehl **postmap** zurück. 
-   # postmap -d peer.heinlein@nausch.org /​var/​spool/​postfix/​data/​verify 
- 
-==== nicht existierende Empfänger blocken ==== 
-Nach den erfolgreichen Testläufen definieren wir nun noch, dass Zustellversuche an nicht existierende Empfänger auf dem eigentlichen Zielsystem auch wirklich mit einem **500er** geblockt werden. Hierzu aktivieren wir den bei der [[postfix3_4#​zustaendigkeiten_vertrauenswuerdige_netze_und_netzwerk-definitionen|Basiskonfiguration]] vorbereiteten Eintrag in der Section **ZUSTÄNDIGKEITEN,​ VERTRAUENSWÜRDIGE NETZE UND NETZWERKK-DEFINITIONEN** 
-   # vim /​etc/​postfix/​main.cf 
-<code bash>​... ​ 
- 
-# default: unbekannte Empfänger sollen abgewiesen und nicht mit einem 
-#          temporären Fehler 450 abgewiesen werden. 
-# default: unknown_local_recipient_reject_code = 550 
-#          unverified_recipient_reject_code = 450 
-unverified_recipient_reject_code = 577 
- 
-... 
-</​code>​ 
- 
-Anschließend werden die Änderungen wie gewohnt durch einen Reload aktiviert: 
-   # systemctl reload postfix 
- 
-====== Links ====== 
-  * **[[centos:​mail_c7:​start|Zurück zum Kapitel >>​Mailserverinstallation unter CentOS 7<<​]]** 
-  * **[[wiki:​start|Zurück zu >>​Projekte und Themenkapitel<<​]]** 
-  * **[[http://​dokuwiki.nausch.org/​doku.php/​|Zurück zur Startseite]]** 
- 
-~~AUTOTWEET:​~~ 
  
  • centos/mail_c7/postfix3_9.txt
  • Zuletzt geändert: 22.07.2019 15:11.
  • (Externe Bearbeitung)