Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:mail_c6:mta_7 [22.11.2013 12:05. ] – [virtuelle(r) Mailserver] django | centos:mail_c6:mta_7 [22.07.2019 15:06. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== virtuelle(r) Mailserver ====== | ||
+ | Da unser Mailserver nicht nur für die Hauptdomäne **// | ||
+ | |||
+ | Postfix nimmt immer dann Post außerhalb unseres **$mynetworks** an, wenn er sich zuständig fühlt. Hierzu kennt Postfix drei Klassen von Domains: | ||
+ | |||
+ | - echte Domains **$mydestination** \\ Diese Variante haben wir schon bei der [[centos: | ||
+ | - zu relayende Domains **$relay_domains** \\ Mit diese Variante haben wir uns bereits bei der Anbingung unseres Mailservers an ein Backend-Mailgateway im Kapitel [[centos: | ||
+ | - virtuelle Domains **$virtual_alias_domains** \\ Eine alternative Einbindung virtueller Domains ist die Verwendung von **virtual_alias_domains** und **virtual_alias_maps** | ||
+ | |||
+ | <WRAP round important> | ||
+ | Dabei ist es logisch ausgeschlossen, | ||
+ | |||
+ | ===== 2. zu relayende Domains ===== | ||
+ | ==== main.cf ==== | ||
+ | Für die individuelle Weiterleitung unserer Nachrichten benutzen wir die beiden Lookup-Tabellen: | ||
+ | - **transport_maps** | ||
+ | - **relay_domains** | ||
+ | Im ersten Schritt erweitern wir nun unsere Postfix-Konfigurationsdatei um folgende Zeilen. Hierzu nutzen wir wie immer den Editor unserer Wahl, so z.B. **vim**. | ||
+ | # vim / | ||
+ | <code bash># Django : 2012-02-06 | ||
+ | # Zur Weitergabe der angenommenen Nachrichten an das backend-System (Cyrus-IMAP-Server) verwenden wir | ||
+ | # eine separate Tabelle zur individuellen Weiterleitung. | ||
+ | relay_domains = btree:/ | ||
+ | |||
+ | # Lookup-Tabelle zum Aktivieren einer alternativen Mailrouting bei der Zustellung an einen weiteren Mailserver | ||
+ | transport_maps = btree:/ | ||
+ | </ | ||
+ | |||
+ | Die gerade definierten Lookup-Tabellen legen wir nun als nächstes an. | ||
+ | - **transport_maps**: | ||
+ | # Lookup-Tabelle zum Aktivieren einer alternativen Mailrouting bei der Zustellung an einen weiteren Mailserver | ||
+ | # Nach dem Ändern und/oder Erweitern der Tabelle, muß noch mittels | ||
+ | # die zugehörige Datenbank erzeugt werden. | ||
+ | # | ||
+ | # Alle eMails, die an Subdomains von nausch.org gerichtet sind (" | ||
+ | # werden an den/die Mailserver von intra.nausch.org (MX-Records) weitergeleitet. (keine " | ||
+ | # | ||
+ | |||
+ | # Mails an backup.nausch.org werden an den Mailserver (A-Record) auf Port 25 mit Namen mail.intra.nausch.org geschickt. | ||
+ | # | ||
+ | </ | ||
+ | - **relay_domains**: | ||
+ | # Lookup-Tabelle zur Definition der Domänen, für die unser Mailserver Nachricht annehmen soll. | ||
+ | # Nach dem Ändern und/oder Erweitern der Tabelle, muß noch mittels | ||
+ | # die zugehörige Datenbank erzeugt werden. | ||
+ | # | ||
+ | # Relevant ist erst eimal nur die erste Spalte. Die zweite Spalte dient nur zum Erhalten der Tabellenstruktur und | ||
+ | # kann daher z.B. als Hinweisfled zum Dokumentieren verwendet werden. | ||
+ | # Beispiel: | ||
+ | # omni128.de | ||
+ | - **transport_maps __UND__ relay_domains**: | ||
+ | # Lookup-Tabelle zur Definition der Domänenm für die unser Mailserver Nachricht annehmen soll. | ||
+ | # Nach dem Ändern und/oder Erweitern der Tabelle, muß noch mittels | ||
+ | # die zugehörige Datenbank erzeugt werden. | ||
+ | # | ||
+ | # Relevanz ost erst eimal nur die erste Spalte. Die zweite Spalte dient nur zum Erhalten der Tabellenstruktur und | ||
+ | # kann daher z.B. als Hinweisfled zum Dokumentieren verwendet werden. | ||
+ | # Beispiel: | ||
+ | # omni128.de | ||
+ | # | ||
+ | # Da für jede Domäne auch ein Transportweg definiert werden muss, erledigen wir die Definition des selbigen gleich | ||
+ | # hier in dieser Tabelle, in dem wir die Spalte zwei hierzu verwenden. | ||
+ | nausch.org | ||
+ | omni128.de | ||
+ | wetterstation-pliening.info | ||
+ | ebersberger-liedersammlung.de | ||
+ | |||
+ | ==== master.conf ==== | ||
+ | In der // | ||
+ | # vim / | ||
+ | <code bash>... | ||
+ | local | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ===== 3. virtuelle Domains ===== | ||
+ | ==== main.cf ==== | ||
+ | In der **/ | ||
+ | |||
+ | | ||
+ | | ||
+ | Den Defaultwert **$mydestination** für **relay_domains** löschen wir | ||
+ | | ||
+ | |||
+ | Anschließend geben wir unserem Postfix die beiden zusätzlichen Tabellen bekannt, in dem wir ihn einmal durchstarten. | ||
+ | # service postfix restart | ||
+ | |||
+ | ==== virtual_alias_domains ==== | ||
+ | In der **virtual_alias_domains** geben wir an, für welche virtuellen Domains Nachrichten angenommen werden sollen. | ||
+ | <code bash > | ||
+ | # | ||
+ | omni128.de | ||
+ | # | ||
+ | wetterstation-pliening.info | ||
+ | </ | ||
+ | In der ersten Spalte der Tabelle tragen wir nun unsere zusätzlichen Domänen ein, die zweite Spalte ist ein Bemerkungsfeld mit wahlfreiem Inhalt (wird nicht ausgewertet). | ||
+ | ==== virtual_alias_maps ==== | ||
+ | In der **virtual_alias_maps** erfolgt nun die Zuordnung (mappings) der eMailadressen. | ||
+ | < | ||
+ | admin@wetterstation-pliening.info | ||
+ | @wetterstation-pliening.info | ||
+ | Folgende Definitionen haben wir festgelegt: | ||
+ | |||
+ | * **@wetter.nausch.org @nausch.org**: | ||
+ | * **admin@wetterstation-pliening.info michael@nausch.org**: | ||
+ | |||
+ | Nach Änderungen an den beiden vorgenannten **virtual_tables**, | ||
+ | |||
+ | # postmap / | ||
+ | < | ||
+ | -rw-r--r-- 1 root root 772 28. Nov 09:47 virtual_alias_domains | ||
+ | -rw-r--r-- 1 root root 12288 2. Dez 20:59 virtual_alias_domains.db | ||
+ | -rw-r--r-- 1 root root 1109 28. Nov 11:29 virtual_alias_maps | ||
+ | -rw-r--r-- 1 root root 12288 2. Dez 20:59 virtual_alias_maps.db | ||
+ | </ | ||
+ | Voila! Schon nimmt unser MX die Nachrichten den neuen **virtuellen Domains** an und stellt diese in die betreffenden Userpostfächer. | ||
+ | |||
+ | ===== Dynamische Empfänger-Verifizierung ===== | ||
+ | <WRAP round info>Im vorgenannten Konfigurationsbeispiel werden für alle Empfänger Nachrichten angenommen, die in der statischen Lookup-Tabelle gelistet ist. Was ist nun aber, wenn das Backend-System wiederum die Annahme einer weitergeleiteten Nachricht verweigert? Richtig, unser Mailserver würde diese als Bounce zurück zum Absender schicken. Dies wollen wir eben sowenig, wie den zusätzlichen Pflegeaufwand für die richtige und aktuelle relay_recipients-Tabelle!< | ||
+ | </ | ||
+ | </ | ||
+ | Den notwendigen Konfogurationseintrag finden wir bereits in der Hauptkonfigurationsdatei von unserem **Postfix 2.6.6** unter **CentOS 6.x**. | ||
+ | # grep verify / | ||
+ | |||
+ | | ||
+ | |||
+ | Postfix wird mit Hilfe des Moduls **verify** versuchen, noch während der Annahme der Bachricht von einem fremden Mailserver, beim Backend-System in Erfahrung zu bringen, ob dieses die Nachricht auch abnehmen würde. Ist dies der Fall, reicht Postfix die Nachricht an das Backend weiter. Anderenfalls wird die Annahme der Nachricht verweigert. Damit nun der Mailserver nicht jedesmal nachfragen muss, werden wir ihm hierzu eine kleine Datenbanktabelle spendieren, die auch nach einen Neustart des Servers zur Verfügung stehen kann. | ||
+ | ==== Konfiguration ==== | ||
+ | Als erstes legen wir nun das entsprechende Verzeichnis an und schenke es dem Nutzer Postfix. | ||
+ | # mkdir / | ||
+ | |||
+ | # chown postfix.root / | ||
+ | |||
+ | # chmod 700 / | ||
+ | |||
+ | Als nächstes definieren wir noch die entsprechende Datenbank, bzw. den Ort wo Postfix diese Datenbank abspeichern wird. Hierzu tragen wir in die Konfigurationsdatei **main.cf** folgenden Eintrag nach. | ||
+ | # vim / | ||
+ | |||
+ | <code bash># Postfix-eigene verify-Datenbank für die dynamische | ||
+ | # Empfänger-Überprüfung nutzen | ||
+ | address_verify_map = btree:/ | ||
+ | </ | ||
+ | |||
+ | Ferner aktivieren wir noch den in der [[centos: | ||
+ | <code bash># | ||
+ | # Django : 2012-02-06 | ||
+ | # Schutz durch Restrictions für unser SOHO | ||
+ | # | ||
+ | |||
+ | smtpd_recipient_restrictions = | ||
+ | # Postmaster, abuse und andere aufgaben- oder funktionsgebundene E-Mail-Adressen (Role-Accounts) whitelisten | ||
+ | check_recipient_access btree:/ | ||
+ | # Black- und Whitelisting | ||
+ | check_client_access cidr:/ | ||
+ | check_helo_access btree:/ | ||
+ | check_sender_access btree:/ | ||
+ | check_recipient_access btree:/ | ||
+ | # Unsauberer eMails nicht annehmen | ||
+ | reject_non_fqdn_sender, | ||
+ | reject_non_fqdn_recipient, | ||
+ | reject_unknown_sender_domain, | ||
+ | reject_unknown_recipient_domain, | ||
+ | # Unsere eigenen Nutzer zulassen-/ | ||
+ | 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_rbl_client dnsbl.njabl.org, | ||
+ | reject_rhsbl_client multi.uribl.com, | ||
+ | # Dynamische Prüfung auf existente Relay-Empfänger | ||
+ | reject_unverified_recipient, | ||
+ | # Backupserver (MX) erlauben | ||
+ | # | ||
+ | # alles andere an relaying verbieten | ||
+ | reject_unauth_destination, | ||
+ | # Zu guter Letzt alles durchlassen, | ||
+ | permit | ||
+ | </ | ||
+ | |||
+ | 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 // | ||
+ | # postconf address_verify_positive_refresh_time | ||
+ | |||
+ | | ||
+ | |||
+ | 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 | ||
+ | |||
+ | | ||
+ | |||
+ | 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, | ||
+ | |||
+ | # postconf address_verify_negative_refresh_time | ||
+ | |||
+ | | ||
+ | |||
+ | 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 | ||
+ | |||
+ | | ||
+ | |||
+ | Nicht existierende Empfängeradressen werden maximal drei Tage vorgehalten und dann gelöscht. | ||
+ | |||
+ | # postconf address_verify_sender | ||
+ | |||
+ | | ||
+ | |||
+ | # postconf double_bounce_sender | ||
+ | |||
+ | | ||
+ | |||
+ | Dieser Parameter legt fest, mit welchem // | ||
+ | |||
+ | ==== automatische Pflege ==== | ||
+ | <WRAP round important> | ||
+ | # tail -f / | ||
+ | < | ||
+ | Jun 4 22:11:20 vml000080 postfix/ | ||
+ | Jun 4 22:12:06 vml000080 postfix/ | ||
+ | Jun 4 22:12:06 vml000080 postfix/ | ||
+ | Jun 4 22:12:06 vml000080 postfix/ | ||
+ | Jun 4 22:12:06 vml000080 postfix/ | ||
+ | Jun 4 22:12:09 vml000080 postfix/ | ||
+ | Jun 4 22:12:17 vml000080 postfix/ | ||
+ | ... | ||
+ | </ | ||
+ | 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, | ||
+ | < | ||
+ | Jun 4 22:26:07 vml000080 postfix/ | ||
+ | Jun 4 22:26:37 vml000080 postfix/ | ||
+ | Jun 4 22:26:38 vml000080 postfix/ | ||
+ | Jun 4 22:26:38 vml000080 postfix/ | ||
+ | Jun 4 22:26:38 vml000080 postfix/ | ||
+ | Jun 4 22:26:40 vml000080 postfix/ | ||
+ | Jun 4 22:26:49 vml000080 postfix/ | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ==== Einträge suchen/ | ||
+ | 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:/ | ||
+ | |||
+ | <code bash> | ||
+ | peer.heinlein@nausch.org 2: | ||
+ | </ | ||
+ | |||
+ | ==== manuell Einträge 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 / | ||
+ | |||
+ | ====== Links ====== | ||
+ | * **[[centos: | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||
+ | |||