Kategorie: HOWTOS 

    (Einträge gesamt: 13)     Seiten (13) [ «   9 10 11 12 13   » ]
Δ  

Mailserver mal anders

     12.08.2011 [08:26]  (Matthias Nitzschke)

**********************************************************************************************************

	sysop am 24.5.2005 (http://www.mn-portal.de oder http://www.mn-portal.at)

	noch ein howto ?? warum, es gibt ja schon so viele zum thema mailserver?

	ganz einfach. ich wollte mails auf einem lokalen server ablegen, wenn der client NICHT online
	ist ansonsten wollte ich über den client mittels kmail direkt die mails abholen. dazu habe ich
	aber keine anleitung gefunden. also habe ich das ganze selber gebaut.
	
	der gedanke war der, einerseits keinen umweg über einen eigenen kompletten mail-server zu gehen
	(wenn ich mit dem client sowieso online bin, kann ich die mails auch direkt anbholen, dass geht
	schneller und ist einfacher) andererseits wollte ich auf meine mails auch dann zugreifen können,
	wenn ich ausser haus bin und der server zuhause	läuft.
	die verbindung direkt zum provider wo die mailaccounts liegen ist mir zu umständlich, weil ich 
	mehrere accounts für unterschiedliche projekte habe und mich nicht dauernd aus und wieder im nächsten
	account einloggen will. 
	
	noch ein howto deshalb, weil ich stundenlang im internet gesucht habe und mir aus mehreren all-
	gemeinen ansätzen meine lösung erst zusammenbauen musste. nichts hatte so richtig funktioniert,
	bis ich alles so hatte, wie ich mir das vorgestellt habe, war einige zeit vergangen.
	da auch andere sicher ähnliche anforderungen stellen wie ich, kann dieses howto sicher nützlich
	sein den einen oder anderen problemfall zu lösen oder ansätze für lösungen zu zeigen.
	
	bei mir läuft alles auf einem suse linux 9.0 mit apache2, fetchmail, procmail und squirrtelmail.
	
**********************************************************************************************************

was baraucht man also an software:

1.
linux mit apache2, php und ssl unterstützung, fetchmail und procmail zum abholen der mails, beides ist
bei suse (so wie bei den meisten distributionen) dabei und perl, damit wir squirrelmail konfigurieren können.
ausserdem sollte die interne firewall installiert und eingeschalten sein, http und https sollten freigegeben 
sein, damit wir unseren rechner auch vom netz erreichen.
2.
dovecot (http://www.dovecot.org) als imap-server für den zugriff per squirrelmail.
3.
squirrelmail (http://www.squirrelmail.org) als webmail front-end.

alle programme müssen installiert sein, darauf gehe ich nicht ein. eine beschreibung, wie die software zu
installieren ist, liegt den einzelnen programmen bei.

###############################################################################################################

ALLGEMEIN

ich starte den server mit einem minimalen user-account (nix root-rechte oder so. was man braucht ist einfach 
ein userverzeichnis und einen user, unter dessen namen man den ablauf regeln kann. ich nenne den einfach USER 
und ihr ersetzt USER einfach so, wie ihr wollt). 

da ich keine grafische oberfläche benutze, arbeite ich mit "vi" als editor.

USER --> ist also der benutzername auf eurem linux-rechner, unter dem die mails abgeholt werden. wer in diesem
howto USER durch seinen usernamen ersetzt, bekommt schon alle soweit fertig aufgelistet (achtet darauf, dass
beim erstezen das ganze auf case-sensitiv gestellt wird, dann wirds auch nur USER erstezt und user bleibt wie
es ist, kleingeschrieben und "user".

alle vorarbeiten die hier beschrieben werden sollten als root gemacht werden, damit ihr keine probleme mit den
rechten habt. wann man sich als USER einloggt sage ich dann noch.

ACHTUNG !
---------
* linux konsolen-befehle habe ich unter anführungszeichen gesetzt, die NICHT mitgeschrieben werden. 
* das verzeichnis "Mail" in den userverzeichnissen kann unter umständen auch kleingeschrieben werden (dann muss 
  mail auch in diesem howto überall klein geschrieben werden). da linux case-sensitiv ist, macht das einen grossen
  unterschied. gleiches gillt für befehle, die mit einem parameter gesetzt werden. die befehle:
  
  "ps -C dovecot"   und    "ps -c dovecot"
  
  sind etwas vollkommen anderes. also bitte auf die gross und klein schreibung achten.

###############################################################################################################


###
A.#
###
zuerst fetchmail konfigurieren damit die mails abgeholt werden.
-----------------------------------------------------------------

mit "cd /home/USER" kommt man ins home-verzeichnis von USER.

mit "vi .fetchmailrc" den editor starten und folgendes eingeben 
(durch drücken der tast i gelangt man in den insert-mode)

	set logfile $HOME/Mail/log
	set postmaster "USER"

	poll XXX protocol pop3 username YYY password ZZZ is USER
	fetchall
	forcecr
	mda "/usr/bin/procmail -f %F -d %T";

(mit ESC verlässt man den insert-mode wieder)
mit der eingabe von ":x" werden die daten gespeichert und vi wird beendet

XXX -> ist der pop-server, der euch von eurem provider genannt wurde.
YYY -> ist euer benutzername mit dem ihr euch anmelden müsst
ZZZ -> ist das passwort für den account.

die bezeichnungen "username" und "password" bitte genau so ausschreiben wie es oben angegeben wurde.
das passwort wird in echt (klartext) eingegeben, daher sollte diese datei nur von USER selbst lesbar sein.
das erledigt man, indem man die datei chmoded und zwar:

"chmod 600 .fetchmailrc"

fetchmail loggt sich beim provider ein und sucht nach neuen mails. die mails werden abgeholt und dann ins
lokale mailverzeichnis gelegt. unter suse ist das standardmässig /var/spool/mail/USER, wobei USER eine datei
ist, die alle mails auffängt.

der teil:
	
	poll XXX protocol pop3 username YYY password ZZZ is USER
	fetchall
	forcecr
	mda "/usr/bin/procmail -f %F -d %T";

kann für verschiedene accounts in der gleichen .fetchmailrc wiederholt werden. ich selber habe dort 4 einträge
für 4 mailaccounts. die einträge XXX, YYY und ZZZ müssen dann für jeden account angepasst werden.

ANMERKUNG:
----------
fetchall sollte man vorsichtig behandeln. wer fetchmail so aufruft, dass die mails auf dem server nicht gelöscht
werden, wird hier eine grosse menge an mails sammeln, die php kaum mehr abholen kann. das php-script wird dann
mit einem timeout abbrechen und eventuell daten zerstören. "fetchall" also bitte nur einsetzen, wenn man die
mails auch auf dem server löscht.

###############################################################################################################


###
B.#
###
procmail konfigurieren, damit die mails auch da landen, wo sie hingehören.
--------------------------------------------------------------------------

mit "vi .procmailrc" den editor starten und folgendes eingeben:
(durch drücken der tast i gelangt man in den insert-mode)

	# Hier liegt das Mailverzeichnis
	MAILDIR=$HOME/Mail

	# Wo wurden die Mails gespeichert?
	LOGFILE=$MAILDIR/log
	EOF

(mit ESC verlässt man den insert-mode wieder)
mit der eingabe von ":x" werden die daten gespeichert und vi wird beendet

ANMERKUNG:
----------
wir können uns nun erst mal ein mail auf unseren account schicken und sehen, ob alle einstellungen in 
ordnung sind.
vorher müssen wir noch sicherstellen, dass fetchmail die abgeholten mails auch im entsprechenden verzeichnis
ablegen kann. dazu braucht fetchmail eine datei die USER gehört und in die die mails geschrieben werden können.

der befehl 
"touch /var/spool/mail/USER" --> erstellt die datei unseres users
"chown USER /var/spool/mail/USER" --> sichert unserem user USER die rechte an der datei
"chmod 600 /var/spool/mail/USER" --> lässt nur den user auf die datei lesen und schreiben

nun der test !  
dazu müssen wir uns als USER einloggen und geben folgenden befehl ein:

"/usr/bin/fetchmail -v -L /home/USER/Mail/log -f /home/USER/.fetchmailrc"

fetchmail sollte nun redselig werden und versuchen die mails abzuholen. sofern das gelingt, werden alle
mails in /var/spool/mail/USER abgelegt. im verzeichnis /home/USER/Mail liegt nun eine datei namens "log" 
in der alles aufgezeichnet wurde. mit "less /home/USER/Mail/log" kann man diese datei ansehen un darin blättern.

wenn alles klappt machen wir (wieder als root) weiter.........

###############################################################################################################


###
C.#
###
apache konfigurieren, damit man auch ein webmail betreiben kann.
----------------------------------------------------------------

ich gehe mal davon aus, das apache und squirrelmail schon installiert ist und gehe darauf nicht näher ein.
apache muss aber nun noch dazu gebracht werden, ssl verbindungen herzustellen, damit man das webmail über 
eine gesicherte verbindung (https://.....) aufrufen kann und passwörter nicht im klartext gesendet werden. 

eigeben von "cd /etc/sysconfig"

mit "vi apache2" wird die datei apache2 im editor geöffnet.
(durch drücken der tast i gelangt man in den insert-mode)

suche die stelle APACHE_SERVER_FLAGS="" und ersetze das durch:

	APACHE_SERVER_FLAGS="SSL"

(mit ESC verlässt man den insert-mode wieder)
mit der eingabe von ":x" werden die daten gespeichert und vi wird beendet

eingeben von "cd /etc/apache2/vhost.d"

mit der eingabe von 

"cp vhost-ssl.template vhost-ssl.conf" 

wird der sll-mode für apache aktiviert. apache muss nun neu gestartet werden. das erreicht man durch 
einbgabe von: 

"/etc/init.d/apache2 restart".

nun ist apache fähig ssl verbindungen aufzubauen. mit https://localhost/squirrelmail kann man schon eine ssl
verbindung zu squirrelmail aufbauen. allerdings horcht squirrelmail nach einem imap-server, der uns noch fehlt.
	
###############################################################################################################


###
D.#
###
dovecot konfigurieren, damit wir uns per imap bei squirrelmail einloggen können.
--------------------------------------------------------------------------------

eingeben von "cd /usr/local/etc"

in diesem verzeichnis liegt eine datei namens dovecot.conf, die wir sichern, ich habe eine kurze version dieser
datei, zum nachlesen ist aber das original recht nützlich. also kopieren wir das original zuerst, löschen dann 
die datei dovecot.conf und legen sie dann wieder neu an.

die eingaben von 

"cp dovecot.conf dovecot.org" --> kopiert die datei
"rm dovecot.conf" --> löscht das original.

mit "vi dovecot.conf" den editor starten und folgendes eingeben:
(durch drücken der tast i gelangt man in den insert-mode)

	## Dovecot 1.0 configuration file
	protocols = imap
	ssl_disable = no
	login_chroot = yes
	login = imap
	login_user = USER # das ist der user für\\\'s mail abholen
	login_process_per_connection = yes
	login = pop3
	verbose_proctitle = yes
	first_valid_uid = 0 # root wird nie akzeptiert, eion versuch sich als root einzuloggen misslingt immer
	first_valid_gid = 0
	valid_chroot_dirs = ~/mail # unser emailverzeichnis
	default_mail_env = mbox:/var/spool/mail/%u
	client_workarounds = oe6-fetch-no-newmail outlook-idle outlook-pop3-no-nuls
	maildir_copy_with_hardlinks = yes
	auth = default
	auth_mechanisms = plain # digest-md5
	auth_userdb = passwd
	auth_passdb = shadow
	auth_user = root
	auth_verbose = yes

(mit ESC verlässt man den insert-mode wieder)
mit der eingabe von ":x" werden die daten gespeichert und vi wird beendet

ich gehe davon aus, dass die linux-konfiguration die passwörter in einer shadow-datei ablegt, misslingt ein 
login, versucht ihr "auth_passdb = shadow" durch "auth_passdb = passwd" zu ersetzen. misslingt auch das,
solltet ihr in der gesicherten dovecot-datei (dovecot.org) nachsehen, was es noch für möglichkeiten gibt.

###############################################################################################################


###
E.#
###
squirrelmail konfigurieren, damit wir auch im webmail nachsehen können, welche mails angekommen sind.
-----------------------------------------------------------------------------------------------------

squirrelmail liefert eine perl-konfigurations-script mit, mit dessen hilfe man squirrelmail konfigurieren
kann. das ganze ist menügesteuert, also leicht konfigurierbar.

mit "cd /srv/www/htdocs/squirrelmail/config" wechselt man ins entspechende verzeichnis.

mit dem befehl "perl conf.pl" ruft man das script auf. das sieht dann so aus:

	SquirrelMail Configuration : Read: config.php (1.2.0)
	---------------------------------------------------------
	Main Menu --
	1.  Organization Preferences
	2.  Server Settings
	3.  Folder Defaults
	4.  General Options
	5.  Themes
	6.  Address Books (LDAP)
	7.  Message of the Day (MOTD)
	8.  Plugins
	9.  Database
	
	D.  Set pre-defined settings for specific IMAP servers

	C.  Turn color on
	S   Save data
	Q   Quit

	Command >>

unter 1 
sollte man "Organization Name" auf den server-namen ändern
unter 2 
wird mit B der smtp-server angegeben, den man von seinem provider genannt bekommen hat. je nachdem ob der
provider einen relay-server hat, kann man dann auch mails über squirrelmail versenden.
ausserdem habe ich hier unter dem punkt A den imap-server definiert, mit dem gearbeitet wird. es werden
mit 8 einige server vorgeschlagen, ich habe "other" eingetragen, der genutzte wird ja nicht aufgeführt.

so sieht das dann aus:

	SquirrelMail Configuration : Read: config.php (1.2.0)
	---------------------------------------------------------
	Server Settings

	General
	-------
	1.  Domain                 : eure-domain.xy
	2.  Invert Time            : false
	3.  Sendmail or SMTP       : SMTP

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

	B.  Update SMTP Settings   : euer-smtp.server:25
	H.  Hide IMAP Server Settings

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

Command >>



unter 3 sieht das ganze bei mir so aus:

	SquirrelMail Configuration : Read: config.php (1.2.0)
	---------------------------------------------------------
	Folder Defaults
	1.  Default Folder Prefix         :
	2.  Show Folder Prefix Option     : false
	3.  Trash Folder                  : INBOX.trash
	4.  Sent Folder                   : INBOX.outbox
	5.  Drafts Folder                 : INBOX.drafts
	6.  By default, move to trash     : true
	7.  By default, move to sent      : true
	8.  By default, save as draft     : true
	9.  List Special Folders First    : true
	10. Show Special Folders Color    : true
	11. Auto Expunge                  : true
	12. Default Sub. of INBOX         : true
	13. Show \\\'Contain Sub.\\\' Option    : false
	14. Default Unseen Notify         : 2
	15. Default Unseen Type           : 1
	16. Auto Create Special Folders   : true
	17. Folder Delete Bypasses Trash  : true
	18. Enable /NoSelect folder fix   : false

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

	Command >> 

eventuell solltet ihr die anpassungen noch vornehmen.

###############################################################################################################


###
F.#
###
der erste start und die shell-scripte erstellen und als cron-job eintragen, damit man nicht immer alles zu 
fuss starten muss.
----------------------------------------------------------------------------------------------------------
	
so wie das ganze nun konfiguriert ist, läuft noch nichts, da dovecot erst gestartet werden muss um sich 
über den imap-server auf squirrelmail verbinden zu können. ausserdem muss noch sichergestellt werden, dass
die datei, in der die mails abgelegt werden auch vorhanden ist.

zuerst also die letzten dateien erstellen (sollte das noch nicht geschehen sein, als wir den fetchmail test
gemnacht haben) also eventuell nochmal:

der befehl 
"touch /var/spool/mail/USER" --> erstellt die datei unseres users
"chown USER /var/spool/mail/USER" --> sichert unserem user USER die rechte an der datei
"chmod 600 /var/spool/mail/USER" --> lässt nur den user auf die datei lesen und schreiben

der letzte punkt (das chmod 600) wird eventuell noch per script geändert, je nachdem, wie man die mails dann 
dem client zur verfügung stellen will. nun sind alle grundkonfigurationen abgeschlossen und man kann erst 
mal per hand starten.

der befehl "/usr/local/sbin/dovecot" startet dovecot, den imap server. um zu sehen, ob der dienst auch 
läuft, geben wir folgendes ein:

	ps -C dovecot
	
ist alles ok, sollte sowas wie folgt ausgegeben werden:
  
  PID TTY          TIME CMD
  629 ?        00:00:00 dovecot

die PID kann abweichen, dass ist die ProzessID. ein einlogversuch mit "https://localhost/squirrelmail" 
(vorausgesetzt, ihr habt squirrelmail in diesem verzeichnis installiert) sollte euch zum login bringen.
als username geben wir nun USER ein und dessen passwort. hier entscheidet sich nun alles. wer sich nicht
einloggen kann (user oder passwort existiert nicht) sieht unter punkt D. bei "auth_passdb = shadow" nochmal
nach und probiert.
ich gehe mal davon aus, dass alles klappt. da wir den dovecot prozess nicht nach jedem neustart des servers
von hand starten wollen, kann man das auch anders regeln. ich habe den start in den startprozess des rechners
eingebunden, indem ich in die datei "boot.local " folgendes ganz unten eingetragen habe:

##
## startet den imap-server
## 24.3.2005
##
/usr/local/sbin/dovecot
##
##
##

also eingeben con "cd /etc/init.d"

mit "vi boot.local" den editor starten und die datei laden.
(durch drücken der tast i gelangt man in den insert-mode)

das obige am ende der datei eintragen

(mit ESC verlässt man den insert-mode wieder)
mit der eingabe von ":x" werden die daten gespeichert und vi wird beendet.

der dovecot prozess wird nun automatisch nach jedem neustart des rechners gestartet. ausserdem habe ich mir 
noch 2 shell-scripte geschrieben, die zum einen prüfen, ob der client im netz verfügbar ist und zum anderen
fetchmail startet um die mails abzuholen. da das ganze nur dann passieren soll, wenn der client NICHT im netz
ist, ruft das erste script das zweite nur auf, wenn der client nicht gefunden wird. beide scripte sind im
verzeichnis /usr/sbin abgelegt, also:

eingeben von "cd /usr/sbin"

mit "vi myhol_mail" den editor starten und folgendes eingeben:
(durch drücken der tast i gelangt man in den insert-mode)

	#!/bin/sh

	IP=192.168.1.1

	ping -c 1 $IP >> /dev/null

	if [ $? == 0 ]
	then
	 echo "rechner online, kein fetchmail gestartet --> Datum:`date +%F`  Zeit:`date +%T`" >> /home/USER/Mail/log

	else
	 echo "fetchmail gestartet --> Datum:`date +%F`  Zeit:`date +%T`" >> /home/USER/Mail/log
	 /usr/sbin/mymails
	fi;

(mit ESC verlässt man den insert-mode wieder)
mit der eingabe von ":x" werden die daten gespeichert und vi wird beendet.
	
das script stellt fest, ob der rechner mit der ip 192.168.1.1 online ist, indem er ein ping schickt. wenn
ja, wird ein eintrag in die logdatei gemacht, dass fetchmail nicht getartet wurde, weil der client gefunden
wurde. wenn der rechner nicht gefunden wird, wird ein eintrag in die logdatei gemacht und das zweite script
wird aufgerufen:

script 2 erstellen wir so:

mit "vi mymails" den editor starten und folgendes eingeben:
(durch drücken der tast i gelangt man in den insert-mode)

	/usr/bin/fetchmail -L /home/USER/Mail/log -f /home/USER/.fetchmailrc
	chmod 666 /var/spool/mail/USER

(mit ESC verlässt man den insert-mode wieder)
mit der eingabe von ":x" werden die daten gespeichert und vi wird beendet.

das chmod 666 /var/spool/mail/USER ist nur dann notwendig, wenn man über das netzwerk die mails vom client ab-
holen lässt. da die datei dann als leere datei geschrieben werden muss, brauchen wir schreibrechte.
procmail wird sich ob dieser tatsache aufregen, aber was solls. wer die mails zustellen lässt, braucht diesen
eintrag nicht.
ich habe mir in mjeinem netz das verzeichnis /var/spool/mail auf dem client gemountet und hole die mails dort
direkt ab.

beide scripte müssen ausführbar sein, das erledigt man durch folgenden befehl:

"chmod +x myhol_mail"
"chmod +x mymails"

nun kann man erst mal testen, indem man myhol_mail eingibt. ist der client online, sollte nichts passieren
ausser einem eintrag im logfile. ist der client offline, sollte fetchmail gestartet werden und die mails 
abholen.
sehen wir uns mal die logdatei an. dazu geben wir folgendes ein:

"cat /home/USER/Mail/log"

die logdatei sollte nun gelistet werden und die letzten einträge werden hoffentlioch sichtbar. je nachdem ob
die mails geholt wurden oder nicht, finden wir nun einen logeintrag mit datum und uhrzeit. das sieht
dann ca so aus (unten ein paar bei mir automatisch angelegte einträge im test, mit und ohne mailabholung):

	USER rechner online, kein fetchmail gestartet --> Datum:2005-05-24  Zeit:20:16:45
	fetchmail gestartet --> Datum:2005-05-24 time: 20:30:10
	fetchmail: No mail for YYY at XXX
	fetchmail: No mail for YY2 at XX2
	fetchmail: No mail for YY3 at XX3
	fetchmail: No mail for YY4 at XX4
	USER rechner online, kein fetchmail gestartet --> Datum:2005-05-24  Zeit:20:45:01
	USER rechner online, kein fetchmail gestartet --> Datum:2005-05-24  Zeit:21:00:01
	USER rechner online, kein fetchmail gestartet --> Datum:2005-05-24  Zeit:21:15:00
	USER rechner online, kein fetchmail gestartet --> Datum:2005-05-24  Zeit:21:30:00

"fetchmail: No mail for YYY at XXX" 
das bedeutet, dass fetchmail versucht hat mails zu holen, es waren aber keine da.

"USER rechner online, kein fetchmail gestartet --> Datum:2005-05-24  Zeit:21:15:00"
das sind einträge, wo der client gefunden wurde, deshalb wurden keine mails abgeholt.

###############################################################################################################



damit unser script auch regelmässig abläuft, wird das ganze als cronjob zeit gesteuert. dazu wechseln wir den
benutzer und loggen uns als USER ein. dann geben wir folgendes ein:

durch eingabe von "crontab -e" startet der cron editor und folgedes wird eingegeben:
(durch drücken der tast i gelangt man in den insert-mode)

	0,15,30,45 * * * * /usr/sbin/myhol_mail

(mit ESC verlässt man den insert-mode wieder)
mit der eingabe von ":x" werden die daten gespeichert und der editor wird beendet.
jetzt ist ein cronjob gestartet, der alle 15 minuten das script myhol_mail startet. was das script macht, steht
ja schon oben.

###############################################################################################################

ich hoffe, es war was für euch dabei. einiges ist wie gesagt nicht 100% aber für meine bedürfnisse reicht es.
über ein echo würde ich mich freuen. meine internetadresse steht ja ganz oben, dort kann man mich erreichen.

viel spass und gutes gelingen

sysop

Details und Downloads >>>
Suchen
id-switcher
    (Einträge gesamt: 13)     Seiten (13) [ «   9 10 11 12 13   » ]
Δ    
Script-Laufzeit: 0.003158 Sek.     gelesene Files: 6     SQL-Laufzeit: 0.002214 Sek.     Gesamt :1.644.335    Heute :12    Rekord :224.165   ; PHP:7.2.34-nmm8