PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mailserver auf Debian mit Imap, Smarthost und Filter



Gargi
15.03.2009, 15:02
Wir wollen uns nun für den Hausgebrauch einen kleinen Mailserver einrichten, der für uns einige Aufgaben erledigt. Was wollen wir eigentlich mit unserem Mailserver? Wir haben nun einige Mailboxen extern bei unseren Internetprovidern, Webdiensten oder eigene Webauftritte extern liegen. Diese Mails rufen wir dann normalerweise mit einem Mailprogramm auf unserem Rechner ab. Haben wir nun mehrere Rechner, so muss dies für jede Maschine mühevoll eingerichtet werden. Hier kommt nun unser kleiner Server ins Spiel, der bei uns daheim steht. Hierzu muss dieser natürlich ständig mit dem Internet verbunden sein, wo hier definitiv nur eine echte Flatrate in Frage kommt. Alles andere wäre auch nicht bezahlbar. Zudem wollen wir von extern mit einem Webmailer unsere Mails einsehen können und auch versenden. Dies setzt voraus, dass auf unserem Webserver ein Apache läuft. Entsprechende Sicherheitsmaßnahmen wie Firewall und einem IP Filter wie Fail2ban setze ich voraus, aber ich denke, dass aufmerksame Leser dieses Forums entsprechendes bei sich dann am Laufen haben. Als Basis verwende ich dann zudem ein Linux Debian 5 (Lenny).

Wir werden in diesem Tutorial lernen, wie wir E-Mails von unseren externen Mailboxen in einem kurzen Intervall regelmäßig abrufen, diese auf Viren und Spam überprüfen, dann über ein Verteilsystem in unsere lokalen Mailboxen vorsortieren und schon nach jeweiligen Inhalten (Werbung, Privates etc.) aufteilen können, ohne dass entsprechende Filterregeln von lokalen Mailprogrammen erst bemüht werden müssen.
Desweiteren müssen wir unserem Server beibringen, auch Mails über einen externen Mailserver (Smarthost) zu versenden und wir richten uns einen kleinen Webmailer ein.

Den Weg einer Mail auf unserem Server habe ich einmal über ein Schema verdeutlicht, das uns zeigen soll, welche Bausteine wir benötigen, um eine Mail bei uns daheim sauber in die Kiste zu bringen:


http://www.gargi.org/stuff/serverprojekt/schema_mail.jpg

Hier also einmal den Ablauf: Eine Mail landet auf dem Server unseres Providers und liegt dort in seiner Mailbox. Sie wartet daruf, dass wir diese zunächst mit getmail abrufen. Hier wird bereits dann die Mail mit Spamassassin geprüft, ob diese eine Spam Mail ist. Die Mail wird dann an den Procmail übergeben, der zum einen entscheidet, in welches Postfach und in welchen Ordner des Postfachs die Mail landen wird. Hierbei wird noch überprüft, ob die Mails frei von Viren sind. Dazu wird das Virenprogramm ClamAV mit Clamassassin verwendet. Herr der Mailboxen und den Verzeichnissen dann ist der IMAP Server Dovecot, der allen Mailprogrammen die Verzeichnisse im Netz intern und extern zur Verfügung stellt. Wer dann von außerhalb über einen Browser auf seine Mails zugreifen möchte, der kann das dann mit einem Webmailer auf dem Apache Webserver bewerkstelligen. Als Webmailer nehmen wir dann den Squirrelmail, der unsere Schnittstelle nach außen darstellt. Es kann natürlich sein, dass Ihr gerade über den Webailer eine Mail wieder versenden wollt. Das übernimmt dann der MTA (Mail Transport Agent) Exim4, der diese Mail dann an einen externen SMTP Server des Providers (Smarthost) weitergibt und dieser dann dafür sorgt, dass die Mail auch seinen Empfänger erreicht.

Ihr seht, wir haben einiges vor, dann legen wir doch gleich einmal los!


1.) Installation von Getmail und die Konfiguration

Wir installieren zuerst getmail mit einem


apt-get install getmail4

Wir legen nun eine neuen User getmail an, der für uns in Zukunft die Sache erledigen wird:


adduser getmail

Vergebt hier das Passwort. Da das kein Standarduser sein soll und falls Ihr einen ftp am Laufen habt, dann schließt bitte diesen User vom ftp- Zugriff aus. Dies erledigt Ihr, indem Ihr den User getmail in die Datei /etc/ftpusers eintragt. Startet nach einer Änderung den proftp neu:


/etc/init.d/proftpd restart

Gleiches machen wir nun mit einem User postfach1. Ihr könnt den Namen frei auswählen, denn das werden dann die Mailnutzer werden, die dann via IMAP ihre Mails abrufen können. Legt auch diese mit adduser an und schließt diese aus dem ftp-Zugriff aus.

Jetzt wollen wir auch nicht, dass eventuell über ssh auf die Mailboxen zugegriffen werden kann. Wenn Ihr einen ssh Clienten nach außen offen habt, dann ist das sicherlich auch ratsam. Ihr könnt das Anmelden (auch damit lokal am Rechner) unterbinden, indem Ihr in der /etc/passwd für den jeweiligen User hinten das /bin/bash in /bin/false abändert. Dann ist auch das Anmelden nicht mehr möglich.

Um jetzt auch ganz sicher zu sein, dass Ihr das richtig konfiguriert habt versucht Euch jeweils mittels ftp und dann nochmal via ssh an beide User anzumelden. Erst wenn sichergestellt ist, dass beide Verbindungen nicht möglich sind können wir weiter machen.

Um später aber einen Test mit getmail durch zu führen muss die Änderung in der /etc/passwd nochmal rückgängig gemacht werden. Aber auch hier gehe ich dann im Bedarfsfall darauf ein.

Wenn das erledigt ist müssen wir aber immer daran denken, dass wir die als root angelegten Dateien später immer dann den jeweiligen User zuweisen, damit es kein Rechteproblem gibt. Darauf gehe ich dann aber noch ein, wenn es soweit ist.

Nun wechseln wir in das Verzeichnis /home/getmail :


cd /home/getmail

und legen ein neues verstecktes Verzeichnis an:


mkdir .getmail

Dort erstellen wir nun eine Konfigurationsdatei:


touch .getmail/mailbox1.conf

Diese befüllen wir nun mit folgenden Inhalt:


[options]
verbose = 0
delete = true # true= mails werden auf Server gelöscht false= Mails werden nicht gelöscht
read_all = false # true= alle Mails werden abgeholt false= nur neue Mails werden abgeholt
message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben

[retriever]
type = SimplePOP3Retriever
server = mail.euerprovider.de # Die Adresse des Mailserversers Eures Providers
username = username # Der Username des Mailservers
password = euerpasswort # Passwort, Achtung, kann gelesen werden, wer auf den Server kommt

[destination]
type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt
path = /usr/bin/procmail # Procmail nimmt alles in die Hand
arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt
(HINWEIS: Bitte entfernt die Kommentare hinten an den Zeilen - alles was mit # losgeht)

Wenn Ihr nun mehrere externe Mailboxen besitzt legt dann für jede Mailbox eine eigene Konfigurationsdatei an. Bennent jede Konfiguratiionsdatei eindeutig, damit Ihr diese später auseinanderhalten könnt. Zudem legt in jeder Datei fest, welcher Nutzer die Mails dann bekommen soll. Das wird im Bereich


arguments = ("-dxyz", )

festgelegt. xyz = der jeweilige Nutzer, der die Mails bekommen soll.

Damit nur getmail die Datei lesen darf regelt die Zugriffsrechte nun wie folgt:
Aus dem Verzeichnis /home/getmail heraus gebt nun folgende Befehle ab:


cd /home/getmail
chown getmail:getmail -R .getmail
chmod 640 .getmail/*

Im Grunde haben wir nun unseren kleinen Dämonen schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Bedenkt aber, wenn Ihr ein firewall- Skript am Laufen habt, dass Ihr den Port 110 (TCP_OUT) freischaltet, sonst kann Euer Server nicht auf den externen POP3 zugreifen.


2.) Installation von Procmail und die Konfiguration

Procmail bekommt ja nun die Mails alle in einen Topf geschmissen und verteilt die Mails nun nach entsprechenden Schematas in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail bereits schon auf Eurem System vorhanden ist. Um hier sicher zu gehen setzt als root schnell mal ein


apt-get install procmail

ab. Jetzt wechselt in das Verzeichnis des Users postfach1:


cd /home/postfach1

Dort legt nun eine Konfigurationsdatei an:


touch .procmailrc

Zudem zwei neue Verzeichnisse:


mkdir mail
mkdir log

Nun befüllt die .procmailrc mit folgenden Inhalt:


MAILDIR=$HOME/mail # Hier kommen die Mails rein
LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden in der log gespeichert
VERBOSE=on

:0
* ^TO_.*beispiel.de # Mails dern Empfänger auf beispiel.de enden
.test/ # landen in INBOX.test

:0
* ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden gelöscht
/dev/null

:0
* ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden in
.test2/ # in die INBOX.test2 einsortiert

:0
./ # Alles andere an direkten Posteingang

Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit eingezogen und es gibt entsprechende Missmatches. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.missmatches/ benennen. Denn wenn mal was nicht in den Regeln zutreffen sollte, dann landet die Mail immer erst hier. Dann kann man in der Logfile nachsehen, warum die Mail nicht zugeordnet wurde und entsprechend die Regeln in der .procmailrc anpassen.

Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein TO oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet Missmatches bei zusätzlichen Leerzeichen.


3.) Erster Test

Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann müsst Ihr Euch als User getmail einloggen. Hierfür müssen wir unsere Sperre in der /etc/passwd rückgängig machen. In der Zeile des Users getmail ändert dort wieder das /bin/false auf /bin/bash ab. Jetzt funktioniert die Anmeldung:


su getmail

Ändert zum Testen auch in Eurer Getmail Config das


delete = true

auf


delete = false

ab, da Ihr garantiert das öfters testen müsst, bis es passt!

Führt nun den Abruf aus:


getmail -v --rcfile ~/.getmail/mailbox1.conf

Wenn Ihr mehrere Boxen abruft, dann einfach diese zusätzlich anhängen:


getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf

Wenn alles gut läuft bekommt Ihr eine entsprechende Meldung:

getmail -v --rcfile ~/.getmail/mailbox1.conf
getmail version 4.7.8
Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2.
SimplePOP3Retriever:blah@mail.beispiel.de:110:
msg 1/14 (2428090 bytes) delivered
msg 2/14 (3415 bytes) delivered
msg 3/14 (3253 bytes) delivered
msg 4/14 (2940 bytes) delivered
msg 5/14 (4124 bytes) delivered
msg 6/14 (3687 bytes) delivered
msg 7/14 (4498 bytes) delivered
msg 8/14 (5705 bytes) delivered
msg 9/14 (5377 bytes) delivered
msg 10/14 (3863 bytes) delivered
msg 11/14 (4275 bytes) delivered
msg 12/14 (5422 bytes) delivered
msg 13/14 (3715 bytes) delivered
msg 14/14 (4015 bytes) delivered
14 messages (2482379 bytes) retrieved, 0 skipped

Loggt Euch wieder aus:


exit

Nun geht in das Homverzeichnis des Postfach1 und seht unter /mail nach, ob Ihr Mails dort unter new liegen habt. Wenn diese im Spam Ordner gelandet sind, dann stimmt was mit der procmail Regel nicht und müsst diese anpassen. Zum erneuten Test löscht dann unter /mail alle Verzeichnisse und wiederholt das so lange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheiten müsst Ihr dann Eure Regeln entsprechend anpassen. Die procmailrc wird Euch somit noch lange begleiten bis alles wie gewünscht funktioniert.

Nun werden wir den Mailabruf automatisieren. Dazu öffnet noch als user getmail angemeldet die crontab mit


crontab -e

Dort fügt nun Euren Getmail-Aufruf ein und ergänzt die Zeile wie folgt (rot markiert):


*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1

Das ruft den Prozess nun alle 5 Minuten ab. D.h. alle 5 Minuten werden Eure externen Mailboxen auf neue E-Mails überprüft und dem procmail übergeben, der Weiteres für Euch erledigt, indem er filtert und in Mailboxen verteilt.

Wenn alles glatt läuft, dann meldet Euch als getmail ab und sperrt wieder den Zugriff auf den getmail in der /etc/passwd und setzt dort den User wieder auf /bin/false.


4.) Imap mit Dovecot

Beim Imap Server möchte ich es Euch recht einfach machen. Ihr benötigt hierfür einen Installationsbefehl und ein paar Kleinigkeiten zum Editieren. Dann habe ich Euch ein Skript gebaut, über das Ihr passend die Mailboxen auf Eurer NSLU2 einrichten könnt. Ihr werdet sehen, es geht ganz einfach!

Editiert zunächst die /etc/hosts


nano /etc/hosts

Die ersten zwei Zeilen sehen ungefähr so aus:


127.0.0.1 localhost
127.0.0.1 meinserver.example.org meinserver

Damit es später keinen Huddel gibt beim Erstellen der Sicherheitszertifikate ändert diese auf


127.0.0.1 localhost
192.168.1.77 192.168.1.77 meinserver

ab. Die Änderung speichert Ihr ab. Jetzt könnt Ihr die benötigten Programme installieren:


apt-get install dovecot-common dovecot-imapd getmail4

Dabei werden automatisch die Zertifikate

/etc/ssl/certs/dovecot.pem
/etc/ssl/private/dovecot.pem

angelegt. Solltet Ihr diese aus irgendeinem Grund neu generieren wollen dann löscht beide dovecot.pem Dateien und generiert diese wieder mit einem:


dpkg-reconfigure dovecot-common

Nun müssen wir ans Eingemachte. Das wird einwenig komplexer, aber wenn Ihr genau aufpasst, geht nichts schief. Wir editieren die Zentrale Dovecot Konfigurationsdatei:


nano /etc/dovecot/dovecot.conf

Folgende Zeile müssen geändert oder auskommentiert werden. Ich schreibe hier Zeile für Zeile die entsprechenden Zeilen hin:

protocols = imap imaps
(dort eben imap / imaps ergänzen)

disable_plaintext_auth = no
(# entfernen und auf no setzen)

ssl_disable = no
(# entfernen)

ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem
(# entfernen)

WICHTIG folgenden Parameter dann setzen:

mail_location = maildir:/home/%u/mail

Das war es dann auch schon. Speichert die Änderung und startet Euren Imap Server neu.


/etc/init.d/dovecot restart

An der stelle könnt Ihr Euch schon an den IMAP Server mittels Euren Mail Clienten wie den Thunderbird einloggen. Alternativ installieren wir jetzt noch den Webmailer Squirrelmail:


5.) Squirrelmail Webmailer

Auf einem Debian Webserver (Apache2, php, MySQL) ist Squirrelmail (http://www.squirrelmail.org) recht schnell installiert.

Zunächst installieren wir Squirrelmail an der Konsole:


apt-get install squirrelmail

Solltet Ihr noch das Shared Kalender Plugin verwenden wollen, müssen noch zwei zusätzliche Pakete installiert werden:


apt-get install php-db php-pear

Squirrel verteilt sich entsprechend im Dateisystem. Die Files selbst liegen im Verzeichnis /usr/share/squirrelmail . Damit der Apache diese auch findet, richten wir einfach einen virtuellen Host ein. Editiert dazu die /etc/apache2/sites-enabled/000-default und fügt unter dem ersten Alias Abschnitt folgenden Abschnitt mit ein (bitte INNERHALB des virtual host Abschnitts!!!):


Alias /squirrelmail /usr/share/squirrelmail
<Directory /usr/share/squirrelmail>
Options Indexes
AllowOverride none
DirectoryIndex index.php
Order allow,deny
allow from all
</Directory>

Damit wird wenn Ihr an Eure URL /squirrelmail mit anfügt der Webmailer aufgerufen, da er über die Alias dann in das Verzeichnis /usr/share/squirrelmail geroutet werdet.

Konfiguriert nun Euren Webmailer mit


squirrelmail-configure

Ihr seht nun das Hauptmenü:


SquirrelMail Configuration : Read: config_default.php (1.4.0)
---------------------------------------------------------
Main Menu --
1. Organization Preferences
2. Server Settings
3. Folder Defaults
4. General Options
5. Themes
6. Address Books
7. Message of the Day (MOTD)
8. Plugins
9. Database
10. Languages

D. Set pre-defined settings for specific IMAP servers

C Turn color on
S Save data
Q Quit

Command >>

Wählt hier D aus. Danach seht Ihr folgendes Menü:


Please select your IMAP server:
bincimap = Binc IMAP server
courier = Courier IMAP server
cyrus = Cyrus IMAP server
dovecot = Dovecot Secure IMAP server
exchange = Microsoft Exchange IMAP server
hmailserver = hMailServer
macosx = Mac OS X Mailserver
mercury32 = Mercury/32
uw = University of Washington's IMAP server

quit = Do not change anything
Command >>

Wir nehmen hier natürlich den dovecot.

Danach müssen die Serversettings eingestellt werden (Im Hauptmenü Punkt 2) :


Server Settings

General
-------
1. Domain : example.com
2. Invert Time : false
3. Sendmail or SMTP : SMTP

A. Update IMAP Settings : localhost:143 (dovecot)
B. Update SMTP Settings : localhost:25

R Return to Main Menu
C Turn color on
S Save data
Q Quit

Command >>

Stellt hier unter 1.) Euren Domain Namen ein. Dann geht in den Unterpunkt A.) :



IMAP Settings
--------------
4. IMAP Server : localhost
5. IMAP Port : 143
6. Authentication type : login
7. Secure IMAP (TLS) : false
8. Server software : dovecot
9. Delimiter : detect

B. Update SMTP Settings : localhost:25
H. Hide IMAP Server Settings

R Return to Main Menu
C Turn color on
S Save data
Q Quit

Command >>

Hier müssen die Settings entsprechend angepasst werden. Euer domain Name wo der Imap zu finden ist (localhost normalerweise). Zudem den Port auf 993 für SSL umstellen und Secure Imap auf True umstellen.

Im Unterpunkt 10 des Hauptmenüs könnt Ihr noch das en_US


Language preferences
1. Default Language : en_US
2. Default Charset : iso-8859-1
3. Enable lossy encoding : false

R Return to Main Menu
C Turn color on
S Save data
Q Quit

Command >>

... in de_DE umstellen. Speichert die Änderungen mit S ab und beendet das Konfigurationsprogramm mit Q .

Falls auf Lenny der Squirrel nicht auf Deutsch geht, obwohl Ihr das de_DE eingestellt habt, dann fehlt Euch noch "de_DE iso-8859-1" in den locales, da bei einer deutschen Installation standardmaäßig nur de_DE UTF-8 ausgewählt wurde. Also führt


dpkg-reconfigure locales

aus und fügt bei den Sprachen de_DE iso 8859-1 mit hinzu. Den Rest lasst ihr einfach wie voreingestellt.


Danach startet den Apachen neu:


/etc/init.d/apache2 restart

Ruft nun Euren Webmailer über


http://EURE_URL/squirrelmail

auf.


6.) E-Mails via Exim4 verschicken

Jetzt wollen wir noch E-Mails über den Server versenden können. Da wir keinen eigenen smtp Server einrichten wollen nehmen wir einfach den unseres Providers als smarthost (Ihr solltet Euch vergewissern, dass Euer Provider da nichts dagegen hat, allerdings merkt er nicht, ob ein Homeserver oder ein normaler Mail Client versendet. Solltet Euer Rechner als Spamschleuder missbraucht werden wird früher oder später Euer Provider auf den Plan treten ;)

Um einen Smarthost einzurichten startet die Konfiguration mit einem


dpkg-reconfigure exim4-config

Folgende Konfigurationsschritte:

1.) Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail

2.) Email Name des Systems: Lasst einfach den voreingestellten Domänen Name stehen

3.) IP-Adressen, dan denen eingehende SMTP-Verbindungen erwartet werden: 127.0.0.1

4.) Weitere Ziele, für die die E-Mails angenommen werden sollen: Auch hier den default Domän Namen stehen lassen

5.) Rechner für die die E-Mails weitergeleitet werden sollen (Relay): Leer lassen, wenn nicht ein weiterer Rechner DIESEN Rechner als Smarthost verwendet. Also normal leer lassen.

6.) IP Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails:
Hier und genau hier kommt die IP Adresse oder der Rechnername (mail/smtp.xyz) Eures ISP rein!

7.) Lokalen E-Mail Namen in ausgehende Mails verbergen: Ja

8.) Sichtbarer Domänennamen für lokalen Benutzer: Hier gebt eine Adresse ein, die Ihr besitzt (in der Form meinepage.de)

9.) DNS Anfrage minimieren: Ja

10.) Versandart bei lokaler Mailzustellung: Mbox Format in /var/mail/

11.) Einstellungen auf kleine Dateien aufteilen: Nein

Danach startet der MTA neu. Jetzt kann es auch sein, dass Euer Smarthost eine Authentifizierung abverlangt. Diese hinterlegt in der folgenden Datei: /etc/exim4/passwd.client

Hier das Passwort wie folgt hinterlegen:


IP_des_Mailserver_oder_Name:LOGIN:PASSWORT

Die Datei sollte nur lesbar für root sein.

Startet danach den MTA neu:


/etc/init.d/exim4 restart

Jetzt könnt Ihr auch Mails verschicken.


7.) Viren mit ClamAV herausfiltern

Viren haben nichts auf unseren Servern und schon gar nichts in unseren Mailboxen zu suchen. Deswegen installieren wir einen Mailscanner, der damit beauftragt wird, die einströmenden Mails auf Viren zu prüfen. Viren können als normale Datei anhängen oder als gepackte Versionen. Deswegen muss unser Server auch in der Lage sein, gepackte Dateien zu prüfen. Wir benötigen dazu einen ganzen Bündel an neuen Files. Dazu müssen wir erstmal unsere sources.list erweitern:


nano /etc/apt/sources.list

Bei unseren Standard Repositories setzen wir folgende Erweiterungen (rot markiert). Zudem noch ein zusätzliches Repository, falls noch nicht vorhanden (grün markiert):


deb http://ftp.de.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.de.debian.org/debian/ lenny main contrib non-free

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free

deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

Wir frischen nun die Repositories auf:


apt-get update

Nun können wir folgendes nachinstallieren:


apt-get install clamav clamav-base clamav-daemon clamav-freshclam unzip rar unrar lha

Die rar Pakete werden allerdings aus urheberrechtlichen Gründen seit einiger Zeit von ClamAV nicht mehr unterstützt.

Variante A) getmail

Fügt nun in jder getmail Konfig Eures getmail Users noch folgenden Abschnitt mit ein:


[filter-virus]
type = Filter_classifier
path = /usr/bin/clamdscan
arguments = ("--stdout", "--no-summary", "-")
exitcodes_drop = (1, )

Das filtert nun nach dem ClamAV erkannte Virenmails heraus. Viren die in gepackten Dateien enthalten sind werden auch nach aktuellen Stand der Datenbank aussortiert.

Wenn Ihr wollt könnt Ihr Euch von heise Security aus Testviren (harmlos!) zusenden lassen. Diese könnt Ihr unter folgender URL anfordern: http://www.heise.de/security/dienste/emailcheck/demos/go.shtml?kategorie=virendummies
Lasst Euch hier eine normale Testmail und eine mit einem zip Paket zuschicken. Wenn alles klappt wird die Testmail Eure Mailbox nie erreichen, da diese kommentarlos gedropped (gelöscht) wird. Ob dies tatsächlich der Fall ist seht Ihr entweder in der .getmail/xyz.log , dort wird ausgegeben, welche Mail mit welchen Absender gedropped wurde. Ebenso seht Ihr unter /var/log/clamav/clamav.log, ob Viren gefunden wurden.

Variante B) procmail

Eine meiner Meinung nach etwas schönere Lösung gibt es über den Procmail mittels clamassassin. Das Script kann in den procmail integriert werden, markiert den Titel einer infizierten Mail mit einer entsprechenden Warnung und schiebt dies dann in einen eigenen Ordner. Auf diesem Weg werden keine Falschmeldungen einfach gelöscht und man hat die Mail nochmal vor Augen. Der User sollte diese dann tunlichst löschen, wenn er diese vielleicht noch mit einem Scanner auf seinem Rechner geprüft hat.

Als erstes installieren wir den clamassassin aus den Repositories:


apt-get install clamassassin

Dieser arbeitet out of the box allerdings anscheinend nur mit dem clamscan und nicht über den deutlich schnelleren Weg des clamdscan Deamons. Von daher müssen wir den clamassassin aus den Quellen nochmal neu kompilieren. Hierzu bitte die build-essentials installieren und ein Arbeitsverzeichnis erstellen, in das wir dann gleich wechseln:


cd /
mkdir work
apt-get install build-essential
cd /work

Jetzt laden wir uns die Quellen herunter:


wget wget http://jameslick.com/clamassassin/clamassassin-1.2.4.tar.gz
(bitte auf http://jameslick.com/clamassassin nach der aktuellen Versionsnummer des Paketes schauen!)

Wir paken den Sourcecode aus:


tar zvxf clamassassin-1.2.4.tar.gz

und wechseln in das Hauptverzeichnis des Quellcodes:


cd clamassassin-1.2.4

Jetzt muss der Übersetzungsvorgang vorbereitet werden. Hierzu folgendes eingeben:


./configure --bindir=/usr/bin --enable-clamdscan --enable-subject-rewrite=***INFECTED***

Damit haben wir Folgendes geregelt:[LIST]
Die übersetzte Datei wird nach /usr/bin installiert
clamassassin wird clamdscan verwenden, wenn dieser läuft
Die Mailüberschrift wird mit ***INFECTED*** markiert


Jetzt installieren wir das Script:


make install

Das sollte ohne Fehler durchlaufen.

In der ~/.procmailrc schreiben wir dann als erste Regeln (das muss ja auf alle eingehenden Mails angewandt werden) folgende:


:0 fw
| /usr/bin/clamassassin

:0:
* ^X-Virus-Status: Yes
.virus/

Danach werden alle Mails, in denen ein Virus entdeckt wurde, in den Ordner virus in Eurer Mailbox erschoben.


8.) Spam tilgen mit Spamassassin

Jetzt widmen wir uns der schlimmsten Mailplage im Netz, dem Spam. Auch hier gibt es einige Möglichkeiten, gegen Spam anzutreten. Unter Linux hat sich derweilen als Filter das Programm Spammassassin etabliert. Wir wollen nun unseren Mailserver so konfigurieren, dass er eingehende Mails auf Spam untersucht und sollte er der Meinung sein, dass es sich um Spam handelt, dieser die Mails als Spam markiert und in einen eigenen Ordner Junk verschiebt. Der User hat dann die Möglichkeit, den Ordner weiterhin auf "Falsepositives" zu untersuchen und löscht einfach den Rest raus. Hier sind zumindest die Mails vorsortiert und man geht dabei nicht das Risiko ein, dass vielleicht irgendwo noch erwünschte Mails einen generellen Löschvorgang zum Opfer fallen.

Zuerst installieren wir den Spamassassin:


apt-get install spamassassin

Dies liefert uns noch wietere zahlreiche Pakete hauptsächlich aus dem Bereich "perl". Wenn die Pakete installiert sind, dann bauen wir erstmal eine einfache Grundkonfiguration auf, die natürlich noch durch viele weitere ausgeklügelte Filtermaßnahmen erweitert werden können. Wir editieren zuerst einmal die Datei


/etc/spamassassin/local.cf

Hier bitte folgende Zeilen auskommentieren (also das "#" entfernen):


rewrite_header Subject *****SPAM*****

required_score 5.0

use_bayes 1

bayes_auto_learn 1

bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status

Unter die drei bayes_ignore Zeilen schreibt dann bitte noch folgende Zeilen:


bayes_ignore_header X-getmail-filter-classifier

Das verhindert, dass Headererweiterungen des Getmail irgendwann als Spam ausgewertet und gekennzeichnet werden.

Jetzt editiert bitte die Datei /etc/deafault/spamassassin

Dort stellt die Eintragung


ENABLED=0

auf


ENABLED=1

Dies stellt sicher, dass der Filter beim Booten des Servers automatisch gestartet wird. Da dieser eben nach der Installation nicht angefahren wird können wir den Spamfilter auch manuell scharf machen ohne erst dafür unseren Server neu zu starten:


/etc/init.d/spamassassin start

Damit das alles über den Getmail läuft, geht dann noch in Eure jeweilige Getmail Konfiguration unter .getmail und fügt zum Schluss der Konfigurationsdatei folgende Filterregel ein:


[filter]
type = Filter_external
path = /usr/bin/spamc

Über Procmail lassen wir nun noch nach der Headererweiterung *****SPAM***** suchen. Dazu fügen wir folgende Regel (am besten als erste Regel unterhalb der Virenregeln) in der ~/.procmailrc ein:


:0
* ^Subject:.******SPAM*****
.Junk/

Das sollte nun alle vom Spamassassin mit SPAM gekennzeichnete Mails in den Junk - Ordner schieben.

Hinweis: Da der Procmail als Platzhalter ein Sternchen * verwendet, ist es auch ratsam, die Subject Markierung auf ein anderes Symbol zu setzen, beispielsweise +++++SPAM+++++ . Ändert dies dann in der /etc/spamassassin/local.cf ab und in der .procmailrc. Danach natürlich den Spamassassin neu starten:


/etc/init.d/spamassassin restart

Woran sehe ich nun, ob der Spamfilter läuft? Hierzu schickt Euch einfach mal eine Testmail. Als Betreff dann gleich die entsprechende Änderung, die eben der Spamassassin einfügen würdee, wenn Spam erkannt werden würde (also beispielsweise +++++SPAM+++++). Das zeigt uns dann erstmal, ob der Procmail dann auch sauber filtern würde und die Mail in unseren Junk Ordner verschiebt. Wenn Ihr Eure Mail dann im Junk Ordner liegen habt, dann seht Euch den Quelltext an. Im Header der Mail solltet Ihr dann in etwa Folgendes lesen können:


X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on myserver
X-Spam-Level: *
X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,SPF_FAIL autolearn=no
version=3.2.5

Hier seht Ihr, dass der Spamassassin aktiv war und seinen Score ( 1.5 ) eingetragen hat. Daneben steht der benötigte Score, damit die Mail als Spam markiert wird. Ihr könnt hier jetzt nur abwarten und zusehen, ob die Geschichte auf Dauer Euch in der Form genügt, oder Ihr noch ein paar "Goodies" einbauen wollt.


9.) Scripterweiterungen

An der Stelle werde ich noch ein paar Konfigurationserweiterungen für Spamassassin, procmail und getmail bringen.

a) Openprotects Spamassassin Updates einbauen
Um immer auf den laufenden zu bleiben empfiehlt es sich, nun auch die aktuellen Filterregeln parat zu haben. Diese lassen sich recht einfach einbauen.
Stellt zunächst einmal fest, dass die TCP Ports 8090 und 11371 (Out/Ausgang) offen sind und passt gegebenfalls Eure Firewall an.

Jetzt arbeitet folgende Einträge ab (bitte prüft hier (http://saupdates.openprotect.com/) vorher nach, ob die öffentlichen Schlüssel noch aktuell sind):


gpg --keyserver pgp.mit.edu --recv-keys BDE9DC10
gpg --armor -o pub.gpg --export BDE9DC10
sa-update --import pub.gpg

Um nun regelmäßig das Update durchzuführen, könnt Ihr ein Script anlegen. Dieses schickt mir dann auch jeweils ein E-Mail, wenn alles geklappt hat.

Einfach unter /usr/local/bin das Script spamupdater anlegen:


touch /usr/local/bin/spamupdater

Das füllt mit folgenden Inhalt (bitte prüft hier (http://saupdates.openprotect.com/) vorher nach, ob der öffentliche Schlüssel noch aktuell ist):


#!/bin/sh

#altes logfile loeschen
rm /var/log/spamupdate.log

#Updates downloaden. Bitte sicherstellen, ob
#port TCP 8090 (out) freigeschaltet ist

sa-update --allowplugins --gpgkey D1C035168C1EBC08464946DA258CDB3ABDE9DC10 --channel saupdates.openprotect.com --channel updates.spamassassin.org

#Spamassasin Dienst neu starten
/etc/init.d/spamassassin restart >> /var/log/spamupdate.log

#Uhrzeit eintragen
echo "" >> /var/log/spamupdate.log
date >> /var/log/spamupdate.log

#Statusmail versenden
mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] Spamupdate" deine @ emailadresse < /var/log/spamupdate.log

Macht das Teil ausführbar:


chmod +x /usr/local/bin/spamupdater

Dazu fügt den Aufruf in Eure cron mit ein:


crontab -e

Aufruf:


1 5 * * * /usr/local/bin/spamupdater > /dev/null

Das Update wird dann jeden Tag um 5.01 Uhr ausgeführt.


b) Mails mit speziellen Anhängen filtern

Manche Anhänge einer Mail sind potentielle Risiken. Hier kann man um die Aufmerksamkeit einwenig zu heben solche Mails gleich von Haus aus in einen speziellen Ordner (Bsp.: dangerous) schieben. Der USer sieht dann gleich, dass man hier besondere Vorsicht walten lassen sollte im Umgang mit einer derartigen Mail. Der Code für die .procmailrc würde so aussehen:


:0 B:
* name=.*\.(vbs\"|wsf\"|exe\"|vbe\"|src\"|rar\"|dll\*)
.dangerous/

Dies könnt Ihr mit entsprechenden Erweiterungen noch versehen. Die Regel setzt am besten recht weit nach oben unter die Spamregel.


10.) Gargi's Schlusswort

Das soll uns nun für einen Mailserver genügen, der sowohl von außen als auch vom internen Netz zu erreichen ist. Dass man hier noch einiges an Finetuning betreiben kann ist klar. Aber ein Gerüst für ein funktionierenden Mailverteiler ist das allemal und sollte im Homebereich und für kleine Büros sicher genügen. Einen echten SMTP aufzubauen wäre der nächste Schritt. Nur wird man sich nach wie vor schwer tun, einen Server ohne full qualified Domäne im Netz ernsthaft als Mailserver zu betreiben, da die Mails schneller auf den Spamlisten landen als Ihr Spam aussprechen könnt. Aber das ist auch nicht nötig, denn für den Hausgebrauch reicht das dicke!

Viel Spaß!
Euer
Gargi



Quellen
Dovecot: http://www.dovecot.org/
Getmail: http://pyropus.ca/software/getmail/
Procmail: http://www.procmail.org/
Spamassassin: http://spamassassin.apache.org/
Openprotects Spamassassin Updates: http://saupdates.openprotect.com/
ClamAV: http://www.clamav.net/
ClamAssassin: http://jameslick.com/clamassassin
Squirrelmail: http://www.squirrelmail.org/
Debian: http://www.debian.org

Literatur
Spam & Viren bekämpfen: http://www.amazon.de/Open-Source-Tools-Spam-Viren-bek%C3%A4mpfen/dp/389721377X/ref=sr_1_1?ie=UTF8&s=books&qid=1240062399&sr=8-1
Debian Server: Linux-Server mit Debian GNU/Linux. Das umfassende Handbuch und Praxisbuch f&uuml;r die Versionen Etch (Debian 4.0) und Sarge (Debian 3.1): Das umfassende Praxis-Handbuch: Eric Amberg: Amazon.de: B&uuml;cher (http://www.amazon.de/Linux-Server-umfassende-Handbuch-Praxisbuch-Versionen/dp/3826615875/ref=sr_1_1?ie=UTF8&s=books&qid=1237125613&sr=8-1)

Postfix: Postfix. Ein sicherer und leicht zu verwaltender MTA f&uuml;r Unix: Amazon.de: Kyle D. Dent: B&uuml;cher (http://www.amazon.de/Postfix-sicherer-leicht-verwaltender-Unix/dp/3897213729/ref=sr_1_28?ie=UTF8&s=books&qid=1237125653&sr=8-28)

Linux Server Hacks: Linux Server Hacks: Amazon.de: Rob Flickenger: Englische B&uuml;cher (http://www.amazon.de/Linux-Server-Hacks-Rob-Flickenger/dp/0596004613/ref=sr_1_1?ie=UTF8&s=books-intl-de&qid=1237125698&sr=8-1)

100 neue Linux Server Hacks: 100 neue Linux Server Hacks: Amazon.de: William von Hagen, Brian K. Jones: B&uuml;cher (http://www.amazon.de/100-neue-Linux-Server-Hacks/dp/389721461X/ref=sr_1_2?ie=UTF8&s=books&qid=1237125698&sr=8-2)

Gargi
16.03.2009, 06:58
Updates:

Im Bereich Scripterweiterungen (Abschnitt 9) habe ich nun eine weitere Filterregel für den Procmail eingefügt und das Einbinden von aktualisierten Spam Regeln via Spamassassin Update.

cu
Gargi

paquito
26.05.2009, 21:28
Danke erstmal für das sehr gute Tutorial. Läßt wenige Fragen offen.

Dennoch: Wie kann ich die mittels getmail bei einem Mailserver abgeholten und an procmail weitergereichten Mails entsprechend der Darstellung zu Beginn des Tutorials durch eine möglichst "zentrale" procmail-Regel an verschiedene Userkonten im maildir-Format weiterreichen?

Danke schon mal vorab.

Paquito

Gargi
27.05.2009, 00:33
Hi Paquito und Willkommen im Forum! Also für jedes externe Postfach baust Du Dir ja eine eigene getmail Konfiguration, die Du über den Cron anstößt. Wenn Du nun getrennte Mailboxen (Ziele) verwenden möchtest, musst Du das der jeweiligen getmail Config weitergeben. Das legste im Destination Abschnitt fest:


[destination]
type = MDA_external
path = /usr/bin/procmail
arguments = ("-d.................", )

Also direkt hinter dem -d

Hier weiß dann der Procmail, dass er da die Mails reinlegen und sortieren soll. Das wird dann eben in einer eigenen procmailrc im jeweiligen Homeverzeichnis geregelt. Soll überall die gleiche Konfiguration genutzt werden, dann denke ich sollteste die untereinander verlinken. Wobei das irgendwann meiner Meinung nach nicht gut geht, denn früher oder später wirste die Sortierregeln in Deinen Mailboxen individualisieren wollen.

Viele Grüße,
Gargi

paquito
27.05.2009, 20:50
Hi Gargi, danke für die schnelle Antwort. Das war mir soweit klar, ist ja auch nur eine kleine Erweiterung Deines exzellent geschriebenen Tutorials.
Meine Frage war wohl nicht ganz verständlich formuliert. Ich versuche es deshalb noch mal anders herum:
Ich empfange von meinem Mailprovider (ein User, ein Passwort) mittels eines einzigen Aufrufs von getmail Mail für meine gesamte Familie. Die verschiedenen Familienmitglieder sind dort nur als aliase auf mich eingerichtet. Alle Nachrichten landen also zunächst beim einzigen User getmail. Dort und mittels procmail-script erfolgen weitere Prüfungen. Wenn schließlich alles OK ist (d. h. keine Viren, kein Spam ...) dann sollen die Nachrichten anhand der sich unterscheidenden TO-Zeilen in die Maildir-Verzeichnisse der verschiedenen lokalen User verteilt werden.
Das sollte doch machbar sein, wenn procmail z. B. mit Superuserrechten läuft. Nur wie?
Danke schon im voraus.
paquito

Gargi
27.05.2009, 23:01
Ah okay, da habe ich Dich falsch verstanden gehabt :) Pauschal fällt mir da bezüglich dem Procmail erstmal auf die Schnelle nichts ein. Was aber nicht bedeutet, dass es nicht geht. Da muss ich ein wenig in der Dokumentation nach kramen.

Nur vielleicht ein anderer Ansatz (Habs selbst nicht probiert, aber vielleicht läuft das): Im Dovecot hat man ja festgelegt, wo sich das Mailverzeichnis jedes Users befindet. Ich würde den Procmail über das nennen wir es "Masterpostfach" alles entsprechend in die jeweiligen Verzeichnisse über sein Regel laufen lassen. Dann eine neue Gruppe (postfach oder so) anlegen. Die jeweiligen Verzeichnissen auf masterpostfachuser : postfach chown'en und dann in die jeweiligen Mailverzeichnissen der anderen User linken. Die einzelnen User dann in die Gruppe postfach eintragen. Ich könnte mir vorstellen, dass dann eben hier der Zugriff auf das Verzeichnis erfolgen kann. Außer der Dovecot wirft hier sein Veto ein, weil er eventuell nichts mit Links anfangen kann.

Unabhängig davon schau ich mal, ob es über den Procmail noch eine elegantere Lösung gibt ;)

cu
Gargi

Harbinger
29.05.2009, 02:26
Hi,

Die verschiedenen Familienmitglieder sind dort nur als aliase auf mich eingerichtet. Alle Nachrichten landen also zunächst beim einzigen User getmail. Dort und mittels procmail-script erfolgen weitere Prüfungen. Wenn schließlich alles OK ist (d. h. keine Viren, kein Spam ...) dann sollen die Nachrichten anhand der sich unterscheidenden TO-Zeilen in die Maildir-Verzeichnisse der verschiedenen lokalen User verteilt werden.
ich versuchs einfach mal mit meinen beischeidenen procmailrc-Kenntnissen :D

Ich nehme folgendes an:

Globale procmail-Konfiguration (in /etc/procmailrc)
Aliasnamen gleich den lokalen Benutzernamen


Leider kann ich's derzeit nicht testen. Möchte ungern auf unserem Produktivsystem experimentieren. Aus der Theorie sollte es wie folgt funktionieren:

...
USER_LIST = "(user1|user2|user3)"

:0:
*$ ^TO_\/$USER_LIST@
* MATCH ?? ()\/[^@]+
/home/$MATCH/mail

...
In USER_LIST listen wir einfach die entsprechenden Aliase auf. Sollte in "To:", "Cc:" oder "Bcc:" ein Alias gefunden werden, wird die Mail im Verzeichnis "mail" innerhalb des entsprechenden Heimatverzeichnisses abgelegt.

Wenn die Benutzernamen NICHT den Aliasnamen entsprechen, dann muss für jeden Benutzer eine eigene Regel erstellt werden:

...
:0:
$* ^TO_\/alias1@
/home/user1/mail

:0:
$* ^TO_\/alias2@
/home/user2/mail

:0:
$* ^TO_\/alias3@
/home/user3/mail

# usw.
...
Die hier beschriebenen Vorgehensweisen stelle ich OHNE FUNKTIONSGARANTIE zur Verfügung. Die Regeln sind nicht getestet. Ich habe sie frei nach meinem Wissen erstellt. Zum Testen ist es sehr empfehlenswert folgende Zeilen an den Anfang der procmailrc-Datei zu schreiben:

LOGFILE=/var/log/procmail
VERBOSE=yes

Für Kritik bin ich jederzeit offen.

Mit digitalen Grüßen

Harbinger

neko63
04.06.2009, 09:32
Hallo und Guten Morgen

Ich habe mir das Tutorial aus diesem Forum zur Vorlage genommen, um mir einen Mailserver zu installieren.

Erst mal Danke für dieses Tutorial. Es ist sehr gut erklärt. Nur bin ich wohl etwas zu deppern, es umzusetzen.

Folgendes Problem:

Ich habe Debian Lenny in der Grundinstallation eingerichtet. Bin dann nach dem Tutorial gegangen und habe "getmail" installiert und eingerichtet. Danach habe ich auch einen User "email" angelegt und die notwendige ".procmailrc" erstellt. Auch habe ich die notwendigen Verzeichnisse angelegt.

Wenn ich mich nun aber mit dem Benutzer "getmail" anmelde und den Befehl "getmail -v --rcfile ~/getmail/mailbox_email.conf" ausführe, erhalte ich folgende Fehler von Procmail:


getmail version 4.7.8
Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2.
SimplePOP3Retriever:email@uhlig63.de@pop.1und1.de: 110:
Delivery error (command procmail 3220 error (0, procmail: Error while writing to "/home/email/log/procmail.log"
procmail: [3220] Thu Jun 4 09:06:22 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy.uJ3JKB.neko63"
procmail: [3220] Thu Jun 4 09:06:30 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy,uJ3JKB.neko63"
procmail: [3220] Thu Jun 4 09:06:38 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy+uJ3JKB.neko63"
procmail: [3220] Thu Jun 4 09:06:46 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy%uJ3JKB.neko63"
procmail: [3220] Thu Jun 4 09:06:54 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy.OK3JKB.neko63"
procmail: [3220] Thu Jun 4 09:07:02 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy,OK3JKB.neko63"
procmail: [3220] Thu Jun 4 09:07:10 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy+OK3JKB.neko63"
procmail: [3220] Thu Jun 4 09:07:18 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy%OK3JKB.neko63"
procmail: Lock failure on ".Inbox.unsortet/.lock"
procmail: Unable to treat as directory ".Inbox.unsortet"
procmail: Assigning "LASTFOLDER=.Inbox.unsortet"
procmail: Opening ".Inbox.unsortet"
procmail: Error while writing to ".Inbox.unsortet"
procmail: Locking "/var/mail/email.lock"
procmail: Assigning "LASTFOLDER=/var/mail/email"
procmail: Opening "/var/mail/email"
procmail: Acquiring kernel-lock
procmail: Unlocking "/var/mail/email.lock"
procmail: Notified comsat: "email@2288180:/var/mail/email"
From getmail Thu Jun 4 09:06:22 2009
Subject: nekos neuigkeiten und informationen - Ein Benutzerkonto wurde für Sie
Folder: /var/mail/email 1887))
msg 1/22 (1756 bytes), delivery error (command procmail 3220 error (0, procmail: Error while writing to "/home/email/log/procmail.log"
procmail: [3220] Thu Jun 4 09:06:22 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy.uJ3JKB.neko63"
procmail: [3220] Thu Jun 4 09:06:30 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy,uJ3JKB.neko63"
procmail: [3220] Thu Jun 4 09:06:38 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy+uJ3JKB.neko63"
procmail: [3220] Thu Jun 4 09:06:46 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy%uJ3JKB.neko63"
procmail: [3220] Thu Jun 4 09:06:54 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy.OK3JKB.neko63"
procmail: [3220] Thu Jun 4 09:07:02 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy,OK3JKB.neko63"
procmail: [3220] Thu Jun 4 09:07:10 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy+OK3JKB.neko63"
procmail: [3220] Thu Jun 4 09:07:18 2009
procmail: Locking ".Inbox.unsortet/.lock"
procmail: Error while writing to ".Inbox.unsortet/_Uy%OK3JKB.neko63"
procmail: Lock failure on ".Inbox.unsortet/.lock"
procmail: Unable to treat as directory ".Inbox.unsortet"
procmail: Assigning "LASTFOLDER=.Inbox.unsortet"
procmail: Opening ".Inbox.unsortet"
procmail: Error while writing to ".Inbox.unsortet"
procmail: Locking "/var/mail/email.lock"
procmail: Assigning "LASTFOLDER=/var/mail/email"
procmail: Opening "/var/mail/email"
procmail: Acquiring kernel-lock
procmail: Unlocking "/var/mail/email.lock"
procmail: Notified comsat: "email@2288180:/var/mail/email"
From getmail Thu Jun 4 09:06:22 2009
Subject: nekos neuigkeiten und informationen - Ein Benutzerkonto wurde für Sie
Folder: /var/mail/email 1887))

Procmail kann nicht in die Verzeichnisse von dem Benutzer "email" schreiben.

Ich stehe nun etwas auf den Schlauch, wo ich ansetzen muss zur Fehklerkontrolle.

Hier mal noch meine .getmail/mailbox_email.conf


[options]
verbose = 0
delete = false
read_all = true
message_log = ~/.getmail/mailbox_email.log

[retriever]
type = SimplePOP3Retriever
server = pop.1und1.de
username = email@uhlig63.de
password = xxxxxxx (#von mir für Kommentar ersetzt)

[destination]
type = MDA_external
path = /usr/bin/procmail
arguments = ("-demail", )

Hier mal noch meine /home/email/.procmailrc

MAILDIR=$HOME/mail
LOGFILE=$HOME/log/procmail.log
VERBOSE=on

:0:
.Inbox.unsortet/

Kann mir bitte mal jemand einen Denkanstoss geben, wo ich mit der Fehlersuche ansetzen kann?

Gruss neko63

Gargi
04.06.2009, 11:01
Hallo und Willkommen im Forum! Versuch es mal mit folgender procmail.rc:


MAILDIR=$HOME/mail
LOGFILE=$HOME/log/procmail.log
VERBOSE=on

:0:
.unsorted/

cu
Gargi

neko63
04.06.2009, 18:30
Hallo und Guten Tag Gargi

Danke das Du mir hilfst.

Hier mal meine neue .procmailrc


MAILDIR=$HOME/mail
LOGFILE=$HOME/log/procmail.log
VERBOSE=on

:0:
.unsortet/

Und das bekomme ich zu sehen wenn ich den Befehl ausführe:


getmail@neko63:~$ getmail -v --rcfile ~/.getmail/mailbox_email.conf
getmail version 4.7.8
Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2.
SimplePOP3Retriever:email@uhlig63.de@pop.1und1.de: 110:
Delivery error (command procmail 3030 error (0, procmail: Error while writing to "/home/email/log/procmail.log"
procmail: [3030] Thu Jun 4 18:19:47 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv.jQ_JKB.neko63"
procmail: [3030] Thu Jun 4 18:19:55 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv,jQ_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:03 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv+jQ_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:11 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv%jQ_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:19 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv.DR_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:27 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv,DR_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:35 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv+DR_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:43 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv%DR_JKB.neko63"
procmail: Lock failure on ".unsortet/.lock"
procmail: Unable to treat as directory ".unsortet"
procmail: Assigning "LASTFOLDER=.unsortet"
procmail: Opening ".unsortet"
procmail: Error while writing to ".unsortet"
procmail: Locking "/var/mail/email.lock"
procmail: Assigning "LASTFOLDER=/var/mail/email"
procmail: Opening "/var/mail/email"
procmail: Acquiring kernel-lock
procmail: Unlocking "/var/mail/email.lock"
procmail: Notified comsat: "email@4215691:/var/mail/email"
From getmail Thu Jun 4 18:19:47 2009
Subject: nekos neuigkeiten und informationen - Ein Benutzerkonto wurde für Sie
Folder: /var/mail/email 1887))
msg 1/23 (1756 bytes), delivery error (command procmail 3030 error (0, procmail: Error while writing to "/home/email/log/procmail.log"
procmail: [3030] Thu Jun 4 18:19:47 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv.jQ_JKB.neko63"
procmail: [3030] Thu Jun 4 18:19:55 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv,jQ_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:03 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv+jQ_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:11 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv%jQ_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:19 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv.DR_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:27 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv,DR_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:35 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv+DR_JKB.neko63"
procmail: [3030] Thu Jun 4 18:20:43 2009
procmail: Locking ".unsortet/.lock"
procmail: Error while writing to ".unsortet/_Wv%DR_JKB.neko63"
procmail: Lock failure on ".unsortet/.lock"
procmail: Unable to treat as directory ".unsortet"
procmail: Assigning "LASTFOLDER=.unsortet"
procmail: Opening ".unsortet"
procmail: Error while writing to ".unsortet"
procmail: Locking "/var/mail/email.lock"
procmail: Assigning "LASTFOLDER=/var/mail/email"
procmail: Opening "/var/mail/email"
procmail: Acquiring kernel-lock
procmail: Unlocking "/var/mail/email.lock"
procmail: Notified comsat: "email@4215691:/var/mail/email"
From getmail Thu Jun 4 18:19:47 2009
Subject: nekos neuigkeiten und informationen - Ein Benutzerkonto wurde für Sie
Folder: /var/mail/email 1887))

Was mich wundert, ist diese Zeile:


procmail: Assigning "LASTFOLDER=/var/mail/email"

Warum benutzt Procmail immer noch den Standard Pfad /var/mail?
Denn in diesen wird auch die Datei "email" mit den Inhalten der empfangenen Emails angelegt....

Wie gesagt die Verzeichnisse "log" und "mail" in "/home/email" habe ich als root auch angelegt. Also müsste doch Procmail da schreiben können. Oder muss ich dem Verzeichnis "/home/email" andere Berechtigungen geben?

Es grüßt ganz herzlich
neko63

Gargi
04.06.2009, 19:01
Ah okay! Das kann natürlich sein. Du hast das Verzeichnis mail unter home manuell angelegt? Dann entferne das Verzeichnis nochmal und lege einen User email an. Das Homeverzeichnis wird dann automatisch generiert:


adduser email

Dann wechsle in das Verzeichnis email und werde erstmal der Nutzer email:


su email

Danach legste entsprechend die procmail und das Mailverzeichnis an. Das Unterverzeichnis .unsortet generierste nicht selbst, das macht procmail dann für Dich!

cu
Gargi

neko63
04.06.2009, 20:50
Hallo und Guten Abend Gargi

Super!! So hat es funktioniert :)

Nur noch mal zum Verständnis für mich, ich muss also jeden User der angelegt wurde einmal mit su ... anmelden und dann so die .procmailrc erstellen?
Danach dann alle User in der "/etc/passwd" auf "/bin/false" setzen?

Ich wusste es, irgendwie hatte ich einen Denkfehler. Nun gefällt mir das Tutorial noch mal so gut. Hatte schon drei Tage gewerkelt ohne zum Ziel zu kommen

Es grüßt ganz herzlich
neko63

Gargi
04.06.2009, 21:08
Halt die User, die als Mailboxen fungieren auf /bin/false setzen. Du kannst das auch weg lassen sofern Du keinen ftp Server betreibst und / oder der Server via ssh von außen her erreichbar ist. Ist halt nur eine Variante zu verhindern, dass jemand versucht via ftp auf die Mailbox zu zu greifen. Dann könnte man da recht schön die Mails herunterladen und dort offline lesen (sollte jemand das Passwort herausfinden etc.).

Ist aber so beim Drübersehen auch im Tutorial an der Stelle nicht wirklich gut beschrieben. Ich werde das bei Gelegenheit im Bereich procmail noch einwenig besser darstellen, damit man hier nicht an der Stelle auf das Problem läuft :)

Freut mich dass es klappt! Viel Spaß weiterhin!

cu
Gargi

neko63
20.06.2009, 02:23
Hallo und Guten Morgen

Ich bin immer noch dabei, das Howto umzusetzen. Mails abholen funktioniert, IMAP funktioniert fast. Wo ich generell noch an den Einstellungen zweifel ist bei exim4.

Gehe ich genau nach Anleitung vor, kann ich mich über squirellmail anmelden und auch Emails versenden und die empfangenen Emails bearbeiten. Möchte ich nun aber mit Outlook von einem anderen Rechner im Netzwerk mich am Mailserver anmelden, kann ich auch die Emails lesen aber keine versenden.

Nun habe ich in den exim4 Einstellungen folgende Änderungen vorgenommen:

IP-Adressen, an denen eingehende SMTP-Verbindungen erwartet werden: 127.0.0.1;172.20.141.84

Weitere Ziele, für die E-Mails angenommen werden sollen:
skmail.schlosshotel-klink.de;hogatex

Rechner, für die E-Mails weitergeleitet werden (Relay):
172.20.141.0/24

Zumindest funktioniert so jetzt auch das Senden von Emails von anderen Rechnern im Netzwerk.

Meine Frage nun, habe ich so ein offenes Relay geschaffen? Denn in der Anleitung stand ja, das ich da nichts ändern sollte.

Ein weiteres Problem besteht noch, das dovecot immer wieder "einschläft".


dovecot: 2009-06-20 02:09:38 Info: imap-login: Login: user=<b.uhlig>, method=PL$
dovecot: 2009-06-20 02:10:20 Info: IMAP(b.uhlig): Connection closed
dovecot: 2009-06-20 02:10:20 Info: IMAP(b.uhlig): Disconnected: Logged out
dovecot: 2009-06-20 02:11:42 Info: imap-login: Login: user=<b.uhlig>, method=PL$
dovecot: 2009-06-20 02:11:42 Info: imap-login: Login: user=<b.uhlig>, method=PL$
dovecot: 2009-06-20 02:12:25 Info: IMAP(b.uhlig): Disconnected: Logged out
dovecot: 2009-06-20 02:12:25 Info: IMAP(b.uhlig): Connection closed
dovecot: 2009-06-20 02:13:47 Info: imap-login: Login: user=<b.uhlig>, method=PL$
dovecot: 2009-06-20 02:13:47 Info: imap-login: Login: user=<b.uhlig>, method=PL$
dovecot: 2009-06-20 02:14:32 Info: IMAP(b.uhlig): Disconnected: Logged out
dovecot: 2009-06-20 02:14:32 Info: IMAP(b.uhlig): Disconnected: Logged out
dovecot: 2009-06-20 02:15:54 Info: imap-login: Login: user=<b.uhlig>, method=PL$
dovecot: 2009-06-20 02:15:54 Info: imap-login: Login: user=<b.uhlig>, method=PL$
dovecot: 2009-06-20 02:16:37 Info: IMAP(b.uhlig): Connection closed

Ist das normal so?

An einem weiteren Problem arbeite ich auch noch. Denn Outlook meldet immer einen Fehler wenn ich mich am Mailserver anmelde, das das Zertifikat nicht gültig ist. Ich muss nun mal schauen, wie ich das Zertifikat von dovecot in Outlook importieren kann.

Ansonsten lerne ich so einiges mit dieser Anleitung.

Es grüßt ganz herlich aus dem schönen Land an der blauen Müritz
neko63

Stephan
28.07.2009, 22:12
Guten Tag!
Leider funktioniert das Versenden von EMail nicht.
- squirrelmail "versendet" anstandslos
- ob dann exim4 etwas tut oder nicht ist nicht erkennbar
- wo sind logfiles fuer exim4?

Besten Gruss und Dank fuer die sonst sehr gute Anleitung
Stephan

Stephan
28.07.2009, 22:36
zu:Mail versenden mit exim4

nach einem Neustart kommt jetzt beim Versenden von EMail aus Squirrelmail>

Message not sent. Server antwortete:
"Verbindungsaufbau abgelehnt
111 Can't open SMTP stream."

Was kann ich tun?

Gruss und Dank, Stephan

Gargi
29.07.2009, 06:23
Hallo Stephan und herzlich Willkommen im Forum! Bei Deinem Problem würde ich zunächst einmal den Hebel ganz unten ansetzen:

Hast Du zum einen iptables laufen und den smtp Port rauswärts freigeschaltet (TCP 25) ?
Zum anderen funktioniert exim4 von der Konsole aus?


echo "Hallo, das ist ein Test" > test.txt
mail -a "Content-Type: text/plain; charset=UTF-8" -s "Grüße von exim" deinemail@deineadresse.de < /var/log/test.txt
rm test.txt

Wenn der Port freigegeben ist und exim nicht von der Konsole verschickt, dann überprüfe bitte noch einmal die Konfiguration.



- wo sind logfiles fuer exim4?


/var/log/exim4/
Dort findest Du die log-Dateien.

cu
Gargi

Reo
13.02.2010, 00:53
Hallo,

erstmal möchte ich mich herzlich für die Anleitung bedanken. Ich habe vieles geschafft und nur noch ein paar Dinge sind offen.
Ich habe im Moment ein Problem, das Versenden von eMails über exim4 geht nicht. Wieso? Keine Ahnung. Aber das finde ich noch raus.
Ich habe aber grundsätzlich eine Frage und hoffe, dass Du mir weiterhelfen kannst.

Ich möchte meinen Server, den ich ja soweit eingerichtet habe gerne so nutzen, dass ich von verschiendenen Anbietern meine eMails abhole. Also z.B. von gmx.de, web.de etc.
Das Abholen sollte auch kein großes Problem sein, denke ich. Hab es mit gmx getestet und dort funktioniert es wunderbar. Ich habe nur eine Frage zum Versenden:
Kann man es irgendwie so einstellen, dass man von der gleichen eMail versendet, von der man empfangen hat?

Also Beispiel:
Ich bekomme eine eMail über die Adresse mail1@gmx.de
Ich möchte auf diese eMail nun in meinem Outlook antworten. Das geht zwar noch nicht, aber bekomme ich wohl irgendwie hin.
Kann ich nun aber, wenn ich eine eMail über die Adresse mail2@web.de bekomme auch von web.de antworten?
Ich möchte alles, wenn möglich über ein IMAP-Konto regeln und im Grunde auf dem Server (von mir aus per Regeln) festlegen, über welche eMail-Adresse versendet werden soll.

Ist sowas möglich? Wenn ja: wie bekommt man das am besten hin?


Danke soweit. Ich hoffe, dass meine Frage verständlich genug ausgedrückt ist.

Gargi
13.02.2010, 20:38
Also im Thunderbird habe ich es so gemacht, dass ich auch bei den Empfängeradressen den jeweiligen smtp eingetragen habe. Das ist leider im Outlook meines Wissens nicht möglich, hier mehrere smtp innerhalb eines Profils einzutragen. Dazu schau Dir wie schon gesagt den Thunderbird an. Der macht das.

cu
Gargi

Kirsch
02.10.2010, 16:49
Die Benutzer hätte ich mit dem Komando adduser --disable-login --shell /usr/sbin/nologin username angelegt.
Und mit dem Komando
su --login --shell /bin/sh
kann man sich dann trotzdem einlogen.
Das erspart das manuelle editieren der /etc/passwd.

@Reo
Erstell in Outlook ein zweites Konto und gib da die web.de Adresse an. Beim Versenden einer E-Mail kann man das Konto auswählen mit welchem gesendet werden soll.

Leider kann man bei Outlook kein Konto ohne Posteingangsserver einrichten, da muss man halt irgendwas eintragen und danach das Konto beim automatischen Empfang ausschließen.


@all
Kann man mehrere Smarthosts einrichten, je nach Absenderadresse wird dann ein anderer verwendet?

Wenn man mail.gmx.net als Smarthost einstellt, muss man sich mit seinem GMX Account authentifizieren und es werden nur E-Mails angenommen deren Absenderadressen dem GMX-Account zugeordnet sind.

Außerdem muss man bei GMX beachten, wenn der Spam-Filter aktiviert ist, werden alle E-Mail abgelehnt (also beim Empfang) die eine GMX.Adresse als Absender haben und nicht über mail.gmx.net als SNTP-Server versendet wurden.

Gargi
02.10.2010, 16:56
Hallo und willkommen im Forum! Den Smarthost legste ja über Debian für den MTA fest. Da geht nur einer.

cu
Gargi

Frank
12.09.2011, 11:53
Guten morgen,

heute werde ich mal versuche Postfix nach deiner Anleitung zu Installieren,
ich hoffe wenn ich ne Frage habe, das man hier im Forum Neulinge helfen wird :feeep:




mfg Frank

Gargi
12.09.2011, 23:02
Na dann erstmal viel Spaß beim Basteln! :)

Frank
12.09.2011, 23:42
Doch erst morgen, heute hatte ich zu viel mit deiner firewall zu tun. :feeep:

Gargi
13.09.2011, 15:24
Mit dem Mailserveraufsetzen haste aber auch gut zu tun, das kann ich Dir jetzt schon flüstern ;-) Nimm' dir da gut Zeit dafür, desto weniger frustrierend wird das werden.
Have fun!
Pierre