home Sonstiges Linux OpenBSD Links

E-Mail System mit Linux

1. neuen User anlegen
Solange man nur Mails empfangen will, ist dieser Schritt eigentlich egal, aber sobald man auch was verschicken will, muß der User auf dem eigenen System dem User in der E-Mail-Adresse entsprechen! Man kann auch User mappen, aber der Einfachheit halber sollte es so sein ;)
Beispiel:
E-Mail Adresse:testuser@example.com
Username auf dem eignen System:testuser

2. Installation von fetchmail
Fetchmail dient zum abholen der Mails vom Server und einsortieren in die lokalen Mailboxen. Die aktuelle Version gibt es unter http://www.fetchmail.info/. Die Installation gestaltet sich einfach:

root@pd6000:~ # cd /usr/src
root@pd6000:/usr/src # tar xfz /von/wo/man/das/halt/gespeichert/hat/fetchmail-6.3.8.tar.gz
root@pd6000:/usr/src # cd fetchmail-6.3.8
root@pd6000:/usr/src/fetchmail-6.3.8 # ./configure --prefix=/usr --with-ssl
root@pd6000:/usr/src/fetchmail-6.3.8 # make
root@pd6000:/usr/src/fetchmail-6.3.8 # make install
Die Option --with-ssl nur angeben, wenn man auch SSL-Support haben will. Mittlerweile unterstützen web.de und GMX die verschlüsselte Übertragung. Für SSL muß die OpenSSL Bibliothek installiert sein. Eine Installationsanleitung gibt es auf der Seite zu OpenSSH.

3. Installation von postfix
Postfix ist ein alternativer MTA (Mail Transfer Agent) und kann unter http://www.postfix.org/ bezogen werden. Postfix ist nicht so schwer zu konfigurieren, aber es kann einen trotzdem zur Weißglut bringen wie sendmail ;). Als erstes sollte man ein vorhandenes sendmail entfernen. Unter Debian geht das so:

# /etc/init.d/sendmail stop
# dpkg -r sendmail

Wobei man sagen muß, das das nicht immer hinhaut...
Postfix läuft aus Sicherheitsgründen unter dem User postfix, eventuell gibt es den einen oder anderen Benutzer oder Gruppe schon (ich richte postfix auf einen neuen LFS 6.0 Systen ein):

root@pd6000:~ # groupadd postfix
root@pd6000:~ # groupadd postdrop
root@pd6000:~ # groupadd -g 65534 nogroup
root@pd6000:~ # useradd -c postfix -d /dev/null -g postfix -s /bin/false postfix
root@pd6000:~ # useradd -c nobody -d /home -g nogroup -s /bin/bash -u 65534 nobody
root@pd6000:~ # chown postfix:postfix /var/mail
root@pd6000:~ # cd /usr/src
root@pd6000:/usr/src # tar xfz /von/wo/man/das/halt/gespeichert/hat/postfix-2.4.1.tar.gz
root@pd6000:/usr/src # cd postfix-2.4.1
root@pd6000:/usr/src/postfix-2.4.1 # make
root@pd6000:/usr/src/postfix-2.4.1 # make install
Die Fragen kann man alle mit den vorbelegten Antwort abhaken.

Jetzt muß noch überprüft werden, ob eine eventuell alte sendmail Datei wirklich durch die neue von postfix ersetzt worden ist:

# ls -l /usr/sbin/sendmail
Das Datum der Datei sollte von heute sein (oder halt jedenfalls von dann, wann man postfix installiert hat...), wenn nicht:
# cp /usr/src/postfix-2.4.1/src/sendmail/sendmail /usr/sbin/sendmail
4. Konfiguration von fetchmail
Der Benutzer root holt die Mails ab und gibt sie zum Einsortieren weiter. Damit fetchmail weiß, wo es überhaupt die Mails herholen soll, muß die Datei /root/.fetchmailrc editiert werden:
poll pop.example.com protocol POP3 user testuser@example.com password blabla is testuser ssl

pollhole Mails
pop.example.comvom Mailserver pop.example.com
protocol POP3mit dem Protokol POP3
user testuser@example.comvom User testuser@example.com
password blablader das Password blabla hat
is testuserund sortiere sie in die lokale
Mailbox vom User testuser ein
sslSSL-Verschlüsselung nutzen

Man kann mehrere dieser Zeilen in die fetchmail Konfiguration eintragen, je nachdem, wieviel User man bedienen will. Natürlich müssen die dann ihr Passwort rausrücken ;). Die Datei .fetchmailrc soll nur für den Benutzer root lesbar sein:
# chmod 600 /root/.fetchmailrc
5. Konfiguration von postfix
Die postfix-Konfiguration ist nicht sehr aufwändig, es müssen nur vier Zeilen am Ende der Datei /etc/postfix/main.cf angehangen werden:
myhostname = localhost.localdomain
relayhost = mail.example.com
defer_transports = smtp
disable_dns_lookups = yes

6. Einrichten des Start-Stop-Scriptes
postfix sollte immer laufen, da es sonst keine Mail entgegen nehmen kann. Am besten löst man dieses über ein Init-Script. Dazu die Datei /etc/init.d/postfix (unter LFS 6.0 /etc/rc.d/init.d/postifx) anlegen mit folgenden Inhalt:
#!/bin/sh
#
# Start and stopping postfix MTA.

case "$1" in start) echo "Starting MTA postfix" /usr/sbin/postfix start ;; stop) echo "Stopping MTA postfix" /usr/sbin/postfix stop ;; *) echo "Usage: /etc/init.d/postfix {start|stop}" exit 1 ;; esac

exit 0

Danach müssen noch die symbolischen Links gesetzt werden:
# cd /etc/rc0.d
# cd /etc/rc0.d# ln -s ../init.d/postfix K20postfix
# cd /etc/rc0.d# cd ../rc1.d
# cd /etc/rc1.d# ln -s ../init.d/postfix K20postfix
# cd /etc/rc1.d# cd ../rc2.d
# cd /etc/rc2.d# ln -s ../init.d/postfix S20postfix
# cd /etc/rc2.d# cd ../rc6.d
# cd /etc/rc6.d# ln -s ../init.d/postfix K20postfix

7. Testen des Systems
Als erstes muß postfix gestartet werden (was mit dem Script eigentlich bei jeden Neustart auch geschehen sollte), ansonsten folgender Befehl (als Benutzer root):

# /etc/init.d/postfix start

8. Testen von fetchmail
Dazu folgender Befehl eingeben:

# fetchmail -v -a -k

-vmehr Ausgaben
-aalle Mails holen
-kMails auf Mailserver nicht löschen
Danach loggt man sich als User testuser ein und startet sein Mailprogramm (z. Bsp.: pine). In der Inbox sollten sich die abgeholten Mails befinden. Um Mails mit pine auch zu verschicken, muß die Konfiguration noch angepaßt werden:

1. bei dem Hauptmenü ins Setup gehen ( S )
2. danach Config wählen ( C )
3. und bei user-domain gmx.de angeben
4. danach mit Exit ( E ) verlassen
5. und speichern ( Y )

Jetzt ein Mail an irgendeinen anderen Account schreiben, wo man Zugriff hat und danach als root folgenden Befehl ausführen:

# sendmail -q

Damit sollte die Mail bei bestehende Internetverbindung weggeschickt worden sein. (dieses ist nicht das originale sendmail, sondern nur eine Datei von postfix, die aus Kompatibelitätsgründen beiliegt)
Um die ganze Sache zu automatisieren, kann man folgende zwei Zeilen in der Datei /etc/ppp/ip-up anhängen:

/usr/bin/fetchmail -a -v
/usr/sbin/sendmail -q
Damit sollte zumindest unter Debian nach jeden Verbindungsaufbau Mails abholt und gesendet werden...

Falls diese Anleitung nicht funktionieren sollte, ist es eine gute Hilfe, auf einer anderen Konsole die Dateien /var/log/mail.* mit einen tail mitlaufen zu lassen.

9. User mappen
Manchmal ist es nötig, lokale User auf reale Adressen zu mappen. Normalerweise gibt man im Mailprogramm die Absender Domain an (siehe zum Beispiel in diesen Artikel weiter oben bei Pine). Solche Optionen bieten fast alle Programme, aber es klappt halt nicht immer. Eins von diesen Programmen ist der Newsreader slrn. In dessen Config kann man zwar einstellen, welche Domain er nutzen soll, aber er macht es einfach nicht. Mails wurden immer mit testuser@localhost.localhost verschickt. Diese Mails nimmt GMX (in den Bespielen hier reden wir immer von example.com) aus Anti-Spam Gründen erst gar nicht an (was auch gut ist). Nach langen suchen bin ich auf http://www.linux-community.de/Neues/story?storyid=5184 gestossen.
Hier eine Anleitung in Kompaktform:

als erstes die Datei /etc/postfix/canonical editieren, am Ende die Usermappings anhängen:

#lokaler User                  richtige E-Mail Adresse
testuser@localhost.localhost   testuser@example.com
Diese Datei muß in eine Datenbank umgewandelt werden:
# postmap /etc/postfix/canonical
In der Datei /etc/postfix/main.cf hängen wir jetzt am Ende noch folgende Zeile an:
sender_canonical_maps = hash:/etc/postfix/canonical
Anschließend Postfix neu starten. Eine E-Mail mit zum Beispiel slrn verfassen und mit mailq kontrollieren, ob der Absender nun korrekt ist.

Diese Anleitung stellt nur einen sehr kleinen Teil der möglichen Dinge vor, die man mit postfix anstellen kann. Als Buch würde ich dieses empfehlen:
hier klicken um zu bestellen
(ein Klick auf die Grafik führt zu amazon.de)

zurück zur Linux-Übersicht
Letzte Aktualisierung dieser Seite: 26. April 2007