Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:mail_c7:dovecot_3 [05.08.2014 10:20. ] – django | centos:mail_c7:dovecot_3 [18.11.2024 07:08. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Dovecot, Nachrichten auf dem Server mit SIEVE filtern ====== | ====== Dovecot, Nachrichten auf dem Server mit SIEVE filtern ====== | ||
{{: | {{: | ||
- | Zur Filtern von E-Mails auf IMAP-Servern wurde die Programmiersprache **SIEVE** konzipiert - die genaue Spezifikationen erfolgten hierzu im RFC 5228 und vielen Erweiterungen/ | + | Zur Filtern von E-Mails auf IMAP-Servern wurde die Programmiersprache **SIEVE** konzipiert - die genaue Spezifikationen erfolgten hierzu im RFC 5228 und vielen Erweiterungen/ |
Weitere Hintergrundinformationen finden man unter anderem in dem [[http:// | Weitere Hintergrundinformationen finden man unter anderem in dem [[http:// | ||
Zeile 8: | Zeile 8: | ||
===== Installation ===== | ===== Installation ===== | ||
- | Am Einfachsten bedienen wir uns zur Installation des Paketes **dovecot-pigeonhole** eines aktuell gepflegten Dovecot-Repositories, | + | Am Einfachsten bedienen wir uns zur Installation des Paketes **dovecot-pigeonhole** eines aktuell gepflegten Dovecot-Repositories, |
- | Die Installation des Paketes geht dank des Repositories **[[http:// | + | Die Installation des Paketes geht Dank des Repositories **[[http:// |
# yum install dovecot-pigeonhole -y | # yum install dovecot-pigeonhole -y | ||
Zeile 29: | Zeile 29: | ||
Build Host : vml000200.dmz.nausch.org | Build Host : vml000200.dmz.nausch.org | ||
Relocations : (not relocatable) | Relocations : (not relocatable) | ||
- | Packager | + | Packager |
Vendor | Vendor | ||
URL : http:// | URL : http:// | ||
Zeile 467: | Zeile 467: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | ===== Horde-Framework' | ||
+ | Die notwendigen Konfigurationseinstellungen bei der Applikation **[[http:// | ||
===== Paketfilter / Firewall ===== | ===== Paketfilter / Firewall ===== | ||
Damit unsere Kunden mit Ihren Mailclients Verbindungen zum geöffneten Ports **4190** unseres Dovecot-Server aufbauen können, müssen wir für diese noch Änderungen am Paketfilter **firewalld** vornehmen. | Damit unsere Kunden mit Ihren Mailclients Verbindungen zum geöffneten Ports **4190** unseres Dovecot-Server aufbauen können, müssen wir für diese noch Änderungen am Paketfilter **firewalld** vornehmen. | ||
Zeile 531: | Zeile 534: | ||
===== Test ===== | ===== Test ===== | ||
+ | Unser ersten Funktionstest werden wir nun mit **SIEVE** via LMTP durchführen. Bei diesem folgenden Test nutzen wir die Authentifikations-Methode **PLAIN**. Die Anmeldedaten müssen dabei zum einen Base64 codiert werden und das Format **" | ||
+ | | ||
+ | Zum Erstellen dieses Anmeldestrings nutzen wir einfach das script **sieve-auth-command.pl** von //Stephan Bosch//. | ||
+ | # vim / | ||
+ | <file perl / | ||
+ | # | ||
+ | # sieve-auth-command.pl | ||
+ | # --------------------- | ||
+ | # | ||
+ | # Generates ManageSieve AUTHENTICATE command for manually testing the protocol | ||
+ | # using telnet or gnutls-cli (TLS) | ||
+ | # | ||
+ | # Usage: | ||
+ | # | ||
+ | # | ||
+ | # Prints the AUTHENTICATE " | ||
+ | # | ||
+ | # -- | ||
+ | # Stephan Bosch, stephan@rename-it.nl | ||
+ | # | ||
+ | use MIME:: | ||
+ | |||
+ | use strict; | ||
+ | |||
+ | my $username = shift; | ||
+ | my $password = shift; | ||
+ | |||
+ | my $userpass = " | ||
+ | my $encode=encode_base64($userpass); | ||
+ | |||
+ | $encode =~ s/^\s+//; | ||
+ | $encode =~ s/\s+$//; | ||
+ | |||
+ | print " | ||
+ | </ | ||
+ | |||
+ | Um das Script einfach ausführen zu können versehen wir nun noch die Datei-Rechte mit einem **x**. | ||
+ | # chmod +x / | ||
+ | |||
+ | Für unseren User **django@nausch.org** mit dem Passwort **Dj4n90_d3r_G33k!** erstellen wir nun unseren Anmeldestring. | ||
+ | $ sieve-auth-command.pl django@nausch.org Dj4n90_d3r_G33k! | ||
+ | |||
+ | | ||
+ | |||
+ | Diesen Anmeldestring verwenden wir nun bei unserem ersten Test. Bei diesem SIEVE-Test via **telnet** sind die Eingaben am testenden Client in der Farbe < | ||
+ | |||
+ | Als erstes bauen wir eine Verbindung zu unserem Dovecot-Server zum **ManageSieve-Port** **4190** auf und melden uns mit unserem zuvor generierten Anmeldestring am Server an. | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | Connected to 10.0.0.70. | ||
+ | Escape character is ' | ||
+ | <font style=" | ||
+ | & | ||
+ | & | ||
+ | & | ||
+ | & | ||
+ | & | ||
+ | & | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | </ | ||
+ | |||
+ | Als erste Aktion fragen wir ab, welche SIEVE-Scruipte auf dem Server vorhanden sind. Da bis dato noch keine Scripte hinterlegt wurden, sit die Antwort des Servers natürlich etwas spartanisch, | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | </ | ||
+ | |||
+ | Nun wollen wir unser erstes SIEVE Script anlegen. Mit Hilfe dieses Scriptes werden alle Nachrichten sofort gelöscht, sobald diese im Betreff das Wörtchen **p0rn** enthält und der Postfix-MTA die Nachricht via **LMTP** an unseren Backend-server Dovecot übergibt. Das entsprechende Script könnte nun wie folgt aussehen. | ||
+ | |||
+ | < | ||
+ | discard; | ||
+ | stop; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Das script hat insgesamt 96-Zeichen (gefolgt von einem abschließendem **CR**). Zusammen ergibt das also 97 Zeichen. Mit dem Befehl **PUTSCRIPT** laden wir nun dieses script zum Server hoch. | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | if header :comparator " | ||
+ | discard; | ||
+ | stop; | ||
+ | }</ | ||
+ | <font style=" | ||
+ | </ | ||
+ | |||
+ | Fragen wir nun erneut ab, welche Scripte auf dem Server vorliegen, sehen wir auch unser erstes Testscript **erste_sieve-regel_zum_testen**. | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | & | ||
+ | </ | ||
+ | |||
+ | Zum Scharfschalten des Scripts wird der Befehl **SETACTIVE** verwendet. | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | </ | ||
+ | |||
+ | Fragen wir nun erneut die Liste des SIEVE-Scripte ab, sehen wir ein **ACTIVE** hinter dem Scriptnamen **erste_sieve-regel_zum_testen**; | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | & | ||
+ | </ | ||
+ | |||
+ | Wollen wir ein script Herunterladen verwenden wir den Befehl **GETSCRIPT**. | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | & | ||
+ | | ||
+ | stop; | ||
+ | } | ||
+ | & | ||
+ | </ | ||
+ | |||
+ | Zu guter Letzt melden wir uns nun von unserem Server mit dem Befehl **LOGOUT** wieder ab. | ||
+ | |||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | </ | ||
+ | |||
+ | Im Verzeischnis des Users **django@nausch.org** finden wir nun auch das Verzeichnis // | ||
+ | |||
+ | < | ||
+ | ├── .dovecot.sieve -> sieve/ | ||
+ | ├── Maildir/ | ||
+ | │ ├── cur/ | ||
+ | │ │ └── 1407189625.M304698P4532.vml000070.dmz.nausch.org, | ||
+ | │ ├── dovecot.index.cache | ||
+ | │ ├── dovecot.index.log | ||
+ | │ ├── dovecot.mailbox.log | ||
+ | │ ├── dovecot-uidlist | ||
+ | │ ├── dovecot-uidvalidity | ||
+ | │ ├── dovecot-uidvalidity.53dfa2ad | ||
+ | │ ├── .Drafts/ | ||
+ | │ │ ├── cur/ | ||
+ | │ │ ├── dovecot.index.log | ||
+ | │ │ ├── dovecot-uidlist | ||
+ | │ │ ├── maildirfolder | ||
+ | │ │ ├── new/ | ||
+ | │ │ └── tmp/ | ||
+ | │ ├── new/ | ||
+ | │ ├── .Sent/ | ||
+ | │ │ ├── cur/ | ||
+ | │ │ ├── dovecot.index.log | ||
+ | │ │ ├── dovecot-uidlist | ||
+ | │ │ ├── maildirfolder | ||
+ | │ │ ├── new/ | ||
+ | │ │ └── tmp/ | ||
+ | │ ├── subscriptions | ||
+ | │ └── tmp/ | ||
+ | └── sieve/ | ||
+ | ├── erste_sieve-regel_zum_testen.sieve | ||
+ | └── tmp/ | ||
+ | </ | ||
+ | |||
+ | Das aktive Script erkennen wir an dem symlink // | ||
+ | # ll / | ||
+ | |||
+ | | ||
+ | |||
+ | Im Maillog wurden unsere SIEVE-Script Aktivitäten mit Hilfe des Mail-Plugins **ManageSieve** dokumentiert. | ||
+ | < | ||
+ | Aug 5 12:58:29 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:58:29 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:58:29 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:58:29 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:58:29 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:58:29 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:58:29 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:58:29 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:58:29 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:58:29 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:58:29 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:59:09 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 12:59:25 vml000070 dovecot: master: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) | ||
+ | Aug 5 12:59:25 vml000070 dovecot: imap-login: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) | ||
+ | Aug 5 12:59:25 vml000070 dovecot: anvil: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) | ||
+ | Aug 5 12:59:25 vml000070 dovecot: log: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) | ||
+ | Aug 5 13:00:00 vml000070 dovecot: master: Dovecot v2.2.13 starting up for imap, pop3, lmtp, sieve (core dumps disabled) | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve-login: | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:00:18 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | Aug 5 13:02:09 vml000070 dovecot: managesieve(django@nausch.org): | ||
+ | </ | ||
+ | |||
+ | Zum Abschluß unseres Tests liefern wir nun eine Nachricht via **LMTP** bei unserem Dovecot-Server ein. | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | Connected to 10.0.0.70. | ||
+ | Escape character is ' | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | & | ||
+ | & | ||
+ | & | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | To: Django [BOfH] < | ||
+ | Subject: Haben Du Interesse an p0rn? | ||
+ | Date: Mon, 21 Jul 2014 09:00:36 -0000 | ||
+ | |||
+ | HI, | ||
+ | wenn Du haben willst lot of p0rn, Du mir sagen. | ||
+ | Ich habe sehr viel davon. | ||
+ | |||
+ | ttyl | ||
+ | Bazibua | ||
+ | .</ | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | Im Maillog sehen wir nun, dass die Nachricht nicht zugestellt, sonder gelöscht wurde **marked message to be discarded if not explicitly delivered (discard action)**. | ||
+ | |||
+ | < | ||
+ | Aug 5 13:38:02 vml000070 dovecot: lmtp(5300): Connect from 10.0.0.80 | ||
+ | Aug 5 13:38:24 vml000070 dovecot: lmtp(5300): Debug: Loading modules from directory: / | ||
+ | Aug 5 13:38:24 vml000070 dovecot: lmtp(5300): Debug: Module loaded: / | ||
+ | Aug 5 13:38:24 vml000070 dovecot: lmtp(5300): Debug: auth input: django@nausch.org uid=10000 gid=10000 home=/ | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:39:59 vml000070 dovecot: lmtp(5300, django@nausch.org): | ||
+ | Aug 5 13:40:03 vml000070 dovecot: lmtp(5300): Disconnect from 10.0.0.80: Successful quit | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Im Verzeichnis des Users **django@nausch.org** sehen wir keine neue Nachricht, da diese mit Hilfe des SIEVE-scriptes sofort gelöscht wurde. | ||
+ | < | ||
+ | ├── .dovecot.sieve -> sieve/ | ||
+ | ├── .dovecot.svbin | ||
+ | ├── Maildir/ | ||
+ | │ ├── cur/ | ||
+ | │ │ └── 1407189625.M304698P4532.vml000070.dmz.nausch.org, | ||
+ | │ ├── dovecot.index.cache | ||
+ | │ ├── dovecot.index.log | ||
+ | │ ├── dovecot.mailbox.log | ||
+ | │ ├── dovecot-uidlist | ||
+ | │ ├── dovecot-uidvalidity | ||
+ | │ ├── dovecot-uidvalidity.53dfa2ad | ||
+ | │ ├── .Drafts/ | ||
+ | │ │ ├── cur/ | ||
+ | │ │ ├── dovecot.index.log | ||
+ | │ │ ├── dovecot-uidlist | ||
+ | │ │ ├── maildirfolder | ||
+ | │ │ ├── new/ | ||
+ | │ │ └── tmp/ | ||
+ | │ ├── new/ | ||
+ | │ ├── .Sent/ | ||
+ | │ │ ├── cur/ | ||
+ | │ │ ├── dovecot.index.log | ||
+ | │ │ ├── dovecot-uidlist | ||
+ | │ │ ├── maildirfolder | ||
+ | │ │ ├── new/ | ||
+ | │ │ └── tmp/ | ||
+ | │ ├── subscriptions | ||
+ | │ └── tmp/ | ||
+ | └── sieve/ | ||
+ | ├── erste_sieve-regel_zum_testen.sieve | ||
+ | └── tmp/ | ||
+ | </ | ||
+ | |||
+ | ===== Test ===== | ||
+ | //... in Bearbeitung (Vorankündigung)! ...// | ||
====== Links ====== | ====== Links ====== | ||
* **[[centos: | * **[[centos: | ||
* **[[wiki: | * **[[wiki: | ||
* **[[http:// | * **[[http:// | ||
- | |||
- | ~~DISCUSSION~~ | ||