PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mailserver mit Postfix auf Fedora Core 3



Antorox
23.10.05, 22:14
Hi,

ich schreibe dieses HowTo weil ich bis jetzt nichts im Netz gefunden habe, was alle Bereiche aufgreift und auch funktioniert auf Fedora Core 3. Wenns Probleme gibt bitte eine Nachricht an mich schicken, genauso sind Verbesserungsvorschläge willkommen. Natürlich gibt es tausend Wege die nach Rom führen. Man könnte sich zum Beispiel Procmail sparen, ich habe es aber trotzdem eingesetzt.

EMail Server mit:

Postfix
Fetchmail
Procmail
Cyrus-Imap

Diese Komponenten kommen später dazu:

Amavis-new
Virenscanner
Spamassassin
Webfrontend mit Squirrelmail

Hier der IST-Zustand:

Fedora Core 3
SSH Zugang mit putty und WinSCP
freigeschaltete Ports in der FW:
25 smtp
110 pop3
143 imap
dyndns Adresse mit MX Eintrag auf eigenen Host
bzw. Domain mit der Möglichkeit MX Einträge zu setzen in Verbindung mit dyndns

Hier der Sollzustand:

lokale, interne zu externe, externe zu interne und externe zu externe Mailzustellung
Einsortierung der Mails in eigene Postfächer mit Procmail
Logins verschlüsselt über sasldb2
IMAP Server
Virenscanner
Spamfilterung mit Spamassassin
Weiterleitungen von Mails (z.bsp. root an benutzer)
Mailinglisten
Webmail

zur Zeit verwendete Quellen:

http://www.bieli.de/main/node4.html
http://www.newbie-net.de/anleitung_netbsd_cyrus.html#procmail

Wenn eine Neuinstallation vorgenommen wird hat sich folgende Dateistruktur bewährt:

/ 500 MB
/usr 2000 MB
/tmp 500 MB
/home 2000 MB
swap 500 MB
/var Rest (ausreichend gross)

1. Zeit einstellen über ntp !!!

2. FQDN Hostname festlegen

etc/hosts:


127.0.0.1 localhost
127.0.0.1 myhostname.mynetworkid.tld myhostname


/etc/sysconfig/network:


NETWORKING=yes
HOSTNAME=myhostname.mynetworkid.tld

/etc/sysconfig/network-scripts/ifcfg-eth0:


DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
DHCP_HOSTNAME=myhostname.mynetworkid.tld


3. Reboot


shutdown -r now


4. Überprüfung des Mailservers:


alternatives --display mta


5.Installieren der benötigten Programmteile:


yum install postfix fetchmail procmail cyrus-imapd cyrus-imapd-utils cyrus-sasl cyrus-sasl-plain


6. Switchen des Mailservers


alternatives --config mta


7. Reboot


shutdown -r now


8. Mailserver testen


telnet localhost 25
quit


9. /etc/postfix/main.cf und master.cf bearbeiten

main.cf:


soft_bounce = no
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
default_privs = nobody
# hier kommt der fqdn rein zum bsp. host.user.dyndns.org
myhostname = myhostname.mynetworkid.tld
# hier kommt die domain rein zum bsp. user.dyndns.org
mydomain = mynetworkid.tld
myorigin = $mydomain
inet_interfaces = all
# nach localhost.$mydomain kommt anstelle von mynetworkid.tld user.dyndns.org
mydestination = $mydomain, $myhostname, localhost.$mydomain, mynetworkid.tld
unknown_local_recipient_reject_code = 550
mynetworks_style = host
# hier en richtigen lokalen Netzbereich eintragen
mynetworks = 172.16.0.0/16, 127.0.0.0/8
relay_domains = $mydestination
# hier den relayhost eintragen zum bsp. mx.freenet.de
relayhost = [mx.freenet.de]
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.1.5/samples
readme_directory = /usr/share/doc/postfix-2.1.5/README_FILES
mailbox_command = /usr/bin/procmail -t -a $EXTENSION

master.cf:
hier habe die Zeilen mit deliver geändert, den Pfad angepasst


# ================================================== ========================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ================================================== ========================
smtp inet n - n - - smtpd
#smtps inet n - n - - smtpd
# -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
#submission inet n - n - - smtpd
# -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes -o smtpd_etrn_restrictions=reject
#628 inet n - n - - qmqpd
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - n 300 1 oqmgr
#tlsmgr fifo - - n 300 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - n - - showq
error unix - - n - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
#
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# maildrop. See the Postfix MAILDROP_README file for details.
#
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
#
# The Cyrus deliver program has changed incompatibly, multiple times.
#
old-cyrus unix - n n - - pipe
flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user}
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
cyrus unix - n n - - pipe
user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient


10. nach Änderungen in der main.cf/master.cf immer ein postfix reload ausführen


postfix reload


11. Die Datei alias bearbeiten (z.Bsp alle Mails für root an einen Systemuser weiterleiten

/etc/aliases


# Person who should get root's mail
root: user



newaliases


12. Das ist erstmal nicht notwendig:

Weiterleitungen für Domains und User in /etc/transport


#Zustellung von eMail erfolgt normal
#telmecsa.com local:
#Weiterleitung auf anderen Mailserver
#teletext.de smpt:mail.example2.de


14. Postfix neu starten


/etc/init.d/postfix restart


15. Cyrus SASL konfigurieren

/etc/sysconfig/saslauthd:

mech=shadow ersetzen mit mech=pam

16. saslauthd starten


/sbin/service saslauthd start

saslauthd beim Systemstart immer starten:


/sbin/chkconfig saslauthd on

runlevel testen:


chkconfig --list saslauthd


16.Cyrus-Imap starten


/sbin/service cyrus-imapd start

Cyrus-Imap beim Systemstart immer starten:


/sbin/chkconfig cyrus-imapd on

runlevel testen:


/sbin/chkconfig --list cyrus-imapd


17. testen mit imtest
(systemuser muss vorher angelegt sein)


imtest -a user -u user localhost

Passwort für cyrus setzen:


passwd cyrus

mit cyradm einloggen:


cyradm --user cyrus localhost


18.Mailbox anlegen


createmailbox user.systemuser


user bleibt stehen und mit systemuser ist Euer User gemeint, den Ihr angelegt habt und für den Ihr eine Mailbox erstellen wollt.

19. Einsortierung der Mails in die Postfächer
procmailrc für die einzelnen user anlegen:


touch /home/userverzeichnis/.procmailrc
chmod 644 /home/userverzeichnis/.procmailrc

unter /var/log/ eine datei procmail anlegen für den log und Rechte setzen:


touch /var/log/procmail
chmod 777 /var/log/procmail

in die jeweilige .procmailrc folgendes reinschreiben:


# Verbose on = ausführliches Log
#
VERBOSE=on
LOGFILE=/var/log/procmail

# deliver sortiert die Mails in die Cyrus-Mailboxen ein
#
DELIVERMAIL="/usr/lib/cyrus-imapd/deliver"

# Kurznamen" fuer einige Zustellbefehle
#
IMAP="$DELIVERMAIL -e -a $LOGNAME -m user.$LOGNAME"

# Zustellung in die INBOX des Users:
#
:0 w
| /bin/sed 1d | $IMAP


20. Rechte von deliver verändern und sticky bit setzen


chmod 4777 /usr/lib/cyrus-imapd/deliver

deliver einem anderen user/gruppe zuordnen:


chgrp mail /usr/lib/cyrus-imapd/deliver
chown cyrus /usr/lib/cyrus-imapd/deliver


nun noch mal zur Überprüfung:

[root@base ~]# ls -al /var/lib/imap/socket/lmtp
srwxrwxrwx 1 root root 0 16. Okt 10:52 /var/lib/imap/socket/lmtp

[root@base ~]# ls -al /usr/lib/cyrus-imapd/deliver
-rwsrwxrwx 1 cyrus mail 851764 5. Apr 2005 /usr/lib/cyrus-imapd/deliver

wenns Probleme gibt bitte das hier checken und eventuell den Parameter -a in der cyrus.conf angeben.

in postfix (main.cf):

mailbox_transport = lmtp:unix:/pfad/zu/imap/socket

in cyrus (cyrus.conf):

lmtpunix cmd="lmtpd -a" listen="/pfad/zu/imap/socket" prefork=0

der parameter '-a' schaltet die authentifizierung ab, deshalb auf die filepermissions für den socket achten. prefork muss evtl. auch angepasst werden.


21.zur sicherheit alles nochmal neu starten:


postfix restart
/sbin/service cyrus-imapd restart


22. jetzt lokale mailzustellung testen:

als user einloggen:


mail root
irgendwas
irgendwas
.
return taste
return taste


23. z.Bsp. Outlook Express an Eurer entfernten Windows Kiste einrichten

als Namen bzw. Adresse nehmt ihr den User, für den ihr vorhin in Cyrus eine Mailbox angelegt habt:

Adresse währe dann user@user.dyndns.org
Unter Imap Server Eure dyndns Adresse eintragen
unter smtp Adresse genauso Eure dyndns Adresse eintragen

Jetzt einen Versuch wagen indem ihr eurer Konto abruft. Iihr müsstest jetzt, da ja "root" Mails auf den User weitergeleitet werden, die erste Mail empfangen.

24. mit fetchmail mails von externen postfächern abholen, wenn gewünscht

fetchmailrc anlegen und in root verzeichnis packen:


touch /root/.fetchmailrc


fetchmailrc mit folgendem Inhalt editieren, um Mails von gmx abzuholen:

systemuser steht für den user für den ihr eine mailbox angelegt habt und der auf dem system geaddet ist


poll pop.gmx.net proto pop3 user username@gmx.net with pass geheim is systemuser here

fetchmail als Daemon einrichte, der jede Minute Mails abruft:


fetchmail -d 60

25. Mail versand von intern nach extern einrichten

als mailrelay wird freenet genommen mit smtp auth
zuerst bei freenet mail addy besorgen
dann datei anlegen und ins postfix dir packen


touch /etc/postfix/sasl_passwd

Datei nur für root lesbar machen:


chown root:root /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd

Dtei mit folgenden Inhalt erstellen:


mx.freenet.de user@freenet.de:passwort

Datenbank erstellen:


postmap hash:/etc/postfix/sasl_passwd

jetzt die main.cf editieren und folgende Zeilen ergänzen:


# SASL Unterstützung für relayhost zum Versenden der Mails
smtp_sasl_auth_enable = yes
# Pfad angeben zur Datei mit den Daten für den relayhost
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =


Postfix conf neu einlesen:


postfix reload

Mail von intern nach extern senden:


mail deine externe mail addy
bla
bla
.
return taste


Mail von deiner Windows Kiste von deiner externen mail addye abrufen.

26. Mail Versand von extern einrichten zunächst der Einfachhalthalber über saslauth. Das Ganze nennt man auch SMTP-Auth-einrichten, da ja sonst jeder über Euren Mailserver therotisch eine Email schicken kann, ohne sich zu authentifizieren

Zuerst die main.cf um folgende Zeilen ergänzen:


smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

dann:


postfix reload

jetzt die sasldb2 mit unserem User füttern, für den wir ja vorhin die Mailbox angelegt haben:


saslpasswd2 -c user

Der Benutzer wird mit dem Realm angelegt, der so heisst wie Euer FQDN ( Hostname mit Domain). Jetzt solltet Ihr Euch aber im klaren sein, daß die Passwörter in PLAINTEXT übetragen werden, also jederzeit mitgelesen werden können, falls einer Euer Netzwerk snifft. Wie das ganze verschlüsselt geht kommt demnächst.

Bitte zum testen Euren Email Clienten mit dem Servernamen, dem Benutzer und dem Passwort füttern, daß Ihr über die Sasldb2 angelegt habt. Jetzt könnt Ihr eine Mail schreiben von Eurem Server am besten mit Putty und Sie extern von Eurer Windows Kiste abrufen und Sie auch gleich beantworten.

Der Rest kommt später ......

cya

Tomek
24.10.05, 13:20
Danke für dein Howto. Ich habe den Thread ins Forum "Hier Suchen und Finden, Links, Tutorials" verschoben.