Disclaimer :
Dit document is niet juist en is niet meer onderhouden.
|
Virteel Mailhosting Systeem Gids
1.
Introductie
Voor de meeste Gentoo gebruikers zal een eenvoudige mailclient en fetchmail
volstaan. Indien je echter een domein host op je systeem heb je nood aan een
volledig geintegreerde MTA (Mail Transfer Agent). En indien je meerdere domeinen
host heb je zeker behoefte aan een robuuste oplossing die alle e-mail voor je
gebruikers afhandelt. Het systeem dat we hier beschrijven is ontworpen om een
elegante oplossing te zijn voor dit probleem.
Een virtueel mailsysteem moet e-mails kunnen afhandelen van verschillende
domeinen met verschillende gebruikers langs verschillende interfaces. Dit zorgt
voor enkele moeilijkheden die opgelost moeten worden. Wat moet je bijvoorbeeld
doen indien er 2 gebruikers zijn van verschillende domeinen met een gelijke
gebruikersnaam? Indien je imap-toegang wil geven en via smtp-auth wil werken,
hoe combineer je dan de verschillende identiteits verificatiedaemons in een
enkelvoudig systeem? Hoe zorg je voor de veiligheid tussen de verschillende
componenten op je systeem? Hoe beheer je dit allemaal?
Deze howto zal je tonen hoe je een mailsysteem opstelt dat mails kan afhandelen
voor verschillende domeinen, virtuele mailgebruikers ondersteunt die geen
shelltoegang moeten hebben, domeinafhankelijke gebruikersnamen ondersteunt, via
http, imap, smtp en pop3 kan laten identificeren tegen een enkelvoudige
database, gebruik maakt van ssl voor de transportlaag veiligheid, een
webinterface aanbiedt, mailinglists ondersteunt voor alle domeinen en
onderhouden kan worden via een eenvoudige, centrale MySQL database.
Er zijn verschillende methodes om een virtueel mailhosting systeem op te
stellen. Met al die mogelijkheden is het mogelijk dat een andere oplossing een
betere keuze is voor jouw situatie. Overweeg het onderzoeken van
http://www.qmail.org/ en http://www.exim.org/ om alle
mogelijkheden te kennen.
De volgende pakketten worden in deze setup gebruikt: apache, courier-imap,
pam_mysql, postfix, mod_php, mod_ssl, phpmyadmin, squirrelmail, cyrus-sasl,
mysql, php, en mailman.
Zorg ervoor dat je de volgende USE variabelen in /etc/make.conf
activeert alvorens je de pakketten compileert: USE="mysql imap libwww
maildir sasl ssl". Anders zal je hoogstwaarschijnlijk de pakketten
moeten hercompileren voor welke je ondersteuning vereist van alle protocollen.
Verder is het een goed idee om alle andere netwerk-gerelateerde variabelen,
zoals ipv6, uit te schakelen.
Belangrijk:
Deze howto is geschreven voor postfix versie 2.0.x. Indien je postfix < 2
gebruikt zullen enkele variabelen in dit document anders zijn. Een update is
aangeraden. Sommige pakketten in deze howto zijn ook zeer verschillend tussen
onderlinge versies. Je wordt aangeraden om de documentatie te lezen die bij de
pakketten bijgeleverd wordt indien je problemen tegen komt.
|
Belangrijk:
Dit document gebruikt apache-1.3.x. Apache-2 is als stabiel aangeduid in
Portage. Er zijn echter nog steeds enkele problemen met PHP-integratie.
Totdat php ondersteuning in apache-2.0.x stabiel is aangeduid zal deze
handleiding de 1.3.x versie blijven gebruiken.
|
Belangrijk:
Je moet een domeinnaam hebben om een publieke mailserver te draaien, of toch op
zijn minst een MX record voor een domein. Idealiter heb je controle over
minstens 2 domeinen om de volledige potentiaal van het virtuele domeinhosting
te kunnen benutten.
|
Belangrijk:
Zorg ervoor dat /etc/hostname de juiste hostname van je mailserver
bevat. Verifieer of je hostname correct ingesteld is met hostname.
Verifieer tevens of er geen conflicten zitten in /etc/hosts.
|
Nota:
Het is aangeraden dat je dit volledige document leest en jezelf vertrouwd
maakt met alle stappen alvorens je de installatie begint. Indien je problemen
tegenkomt in een van de stappen, bekijk dan de probleemoplosser gids op het
eind van dit document. Niet alle gerefereerde pakketten zijn broodnodig, deze
setup is zeer flexibel. Indien je bijvoorbeeld geen webinterface nodig hebt,
dan mag je gerust de squirrelmail sectie overslaan.
|
2.
Postfix Basics
Codevoorbeeld 2.1: Installeren van postfix |
# emerge postfix
|
Waarschuwing:
Verifieer dat je niet een andere MTA geinstalleerd hebt, zoals ssmtp, exim of
qmail, want anders zal je zeker in de problemen komen.
|
Nadat postfix geinstalleerd is, is het tijd om te configureren. Pas de volgende
opties aan in /etc/postfix/main.cf:
Codevoorbeeld 2.2: /etc/postfix/main.cf |
myhostname = $host.domain.name
mydomain = $domain.name
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain $mydomain
mynetworks = my.ip.net.work/24, 127.0.0.0/8
home_mailbox = .maildir/
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
|
Pas dan het volgende in /etc/postfix/master.cf aan. Dit zal meer
uitvoer geven wat handig is voor het debuggen:
Codevoorbeeld 2.3: /etc/postfix/master.cf |
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (50)
#
==========================================================================
smtp inet n - n - - smtpd -v
|
Vervolgens pas je /etc/mail/aliases aan en voeg je je lokale
aliassen toe. Er moet minstens een alias beschikbaar zijn voor root, zoals
root: je@email.adres.
Codevoorbeeld 2.4: Postfix voor de eerste keer opstarten |
# /usr/bin/newaliases
# /etc/init.d/postfix start
|
Nu postfix draait probeer je jezelf een mailtje sturen met je favoriete mail
programma. Ik gebruik mutt voor al mijn consolemails.
Verifieer dat postfix inderdaad de mails afhandelt voor je lokale gebruikers.
Eenmaal dat in orde is, is het tijd voor de volgende stappen.
Nota:
Ik raad je ten sterkste aan dat je deze configuratie test alvorens je verder
gaat.
|
3.
Courier-imap
Codevoorbeeld 3.1: Installatie courier-imap |
# emerge courier-imap
|
Codevoorbeeld 3.2: Courier-imap configuratie |
# cd /etc/courier-imap
# nano -w pop3d.cnf
# nano -w imapd.cnf
# mkpop3dcert
# mkimapdcert
|
Codevoorbeeld 3.3: Start de courier-services die je nodig hebt |
# /etc/init.d/courier-imapd start
# /etc/init.d/courier-imapd-ssl start
# /etc/init.d/courier-pop3d start
# /etc/init.d/courier-pop3d-ssl start
|
Start je favoriete mailclient op en verifieer dat alle connecties die je
gestart hebt werken om mails te verzenden of te ontvangen. Nu dat deze
basis-zaken werken gaan we vanalles en nogwat in 1 trek uitvoeren om de rest
van je systeem werkende te krijgen. Nogmaals, verifieer of je configuratie op
dit moment werkt.
4.
Cyrus-sasl
Allereerst gaan we cyrus-sasl installeren. Sasl zal de identiteits verificatie
afhandelen door de identificatievariabelen aan pam te geven, welke deze
informatie zal doorgeven aan mysql om de smtp-gebruikers te kunnen
identificeren. Voor deze howto gaan we niet verifieren of sasl werkt of niet
totdat mysql draaiende is en een testgebruiker bevat. En dit is eigenlijk geen
probleem aangezien we uiteindelijk toch tegen de mysql-database gaan
identificeren.
Nota:
Nu, om een of andere bizarre reden wil sasl niet goed samenwerken met pam via
shadow bestanden. Ik heb al lang zitten zoeken naar een oplossing, zonder
resultaat. Indien je weet waarom sasl niet tegen het shadow bestand wil
identificeren, gelieve mij (Engels) te
e-mailen aangezien ik dolgraag een oplossing hiervoor wil hebben.
|
Codevoorbeeld 4.1: Configuratie en installatie van de cyrus-sasl ebuild |
# USE='-ldap -mysql' emerge cyrus-sasl
|
Pas nu /usr/lib/sasl2/smtp.conf aan.
Codevoorbeeld 4.2: sasl starten |
# nano -w /usr/lib/sasl2/smtp.conf
pwcheck_method: saslauthd
mech_list: LOGIN PLAIN
# /etc/init.d/saslauthd start
|
5.
SSL Certs voor Postfix en Apache
Nu maken we een set ssl-certificaten aan voor postfix en apache.
Codevoorbeeld 5.1: Certificaten aanmaken |
# cd /etc/ssl/
# nano -w openssl.cnf
countryName_default
stateOrProvinceName_default
localityName_default
0.organizationName_default
commonName_default
emailAddress_default.
# cd misc
# nano -w CA.pl
# create a certificate
system ("$REQ -new -nodes -x509 -keyout newreq.pem -out newreq.pem $DAYS");
# create a certificate request
system ("$REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS");
# ./CA.pl -newca
# ./CA.pl -newreq
# ./CA.pl -sign
# cp newcert.pem /etc/postfix
# cp newreq.pem /etc/postfix
# cp demoCA/cacert.pem /etc/postfix
# openssl req -new > new.cert.csr
# openssl rsa -in privkey.pem -out new.cert.key
# openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 365
|
6.
Toevoegen van SSL en SASL support voor Postfix
Pas nu postfix' configuratiebestanden aan zodat het weet van je sasl
installatie en ssl mogelijkheden. Voeg de volgende parameters aan het eind van
je bestand toe waar je ze later gemakkelijk kan vinden.
Codevoorbeeld 6.1: /etc/postfix/main.cf |
# nano -w /etc/postfix/main.cf
smtpd_sasl_auth_enable = yes
smtpd_sasl2_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/newreq.pem
smtpd_tls_cert_file = /etc/postfix/newcert.pem
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
# postfix reload
|
Nu gaan we de configuratie verifieren.
Codevoorbeeld 6.2: Verifieren van sasl en tls ondersteuning |
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.domain.com ESMTP Postfix
EHLO domain.com
250-mail.domain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-XVERP
250 8BITMIME
^]
telnet> quit
|
Verifieer dat de bovenstaande AUTH en STARTTLS regels in je postfix installatie.
Zoals ik al zei, op dit moment zal AUTH nog niet werken, aangezien sasl tegen
sasldb wil identificeren in plaats van de shadow paswoordfile, welke
(sasldb) we niet opgemaakt hebben. Dus gaan we gewoon verder doen en mysql
instellen om alle identificatie- en virtuele domeininformatie te bevatten.
7.
MySQL
Nu installeren en configureren we MySQL. Je hebt genericmailsql.sql
's dumpbestand nodig om deze stap tot een goed einde te brengen.
Codevoorbeeld 7.1: Installatie en configuratie van MySQL |
# emerge mysql
# /usr/sbin/mysql_install_db
# /etc/init.d/mysql start
# mysqladmin -u root -p create mailsql
# mysql -u root -p --opt mailsql < genericmailsql.sql
# mysql -u root -p mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE
-> ON mailsql.*
-> TO mailsql@localhost
-> IDENTIFIED BY '$password';
-> quit
# mysql -u mailsql -p mailsql
|
Je nieuwe database heeft default waarden en tabellen opsteld voor twee
domeinen. De volgende tabellen zijn bijgeleverd:
-
alias - lokale e-mail en mailmain informatie.
-
relocated - geherloceerde gebruiker e-mailadressen.
-
transport - default mail transport informatie voor alle domeinen die je host
-
users - alle gebruikers hun account-informatie
-
virtual - virtueel domein e-mail aliassen
Codevoorbeeld 7.2: alias table voorbeeld |
id alias destination
1 root foo@bar.com
2 postmaster foo@bar.com
|
Codevoorbeeld 7.3: user table voorbeeld |
id email clear name uid gid homedir \
maildir quota postfix
10 foo@virt-bar.org $password realname virtid virtid /home/vmail \
/home/vmail/virt-bar.org/foo/.maildir/ y
13 foo@bar.com $password realname localid localid /home/foo \
/home/foo/.maildir/
|
Codevoorbeeld 7.4: transport table voorbeeld |
id domain destination
1 bar.com local:
2 virt-bar.org virtual:
|
Codevoorbeeld 7.5: virtual table voorbeeld |
id email destination
3 root@virt-bar.org other@email.address
|
8.
Apache en phpMyAdmin
We stellen nu apache in en voegen een interface toe waarmee hij gemakkelijk met
de database kan interageren.
Codevoorbeeld 8.1: Apache en phpmyadmin installeren en configureren |
# emerge apache mod_php mod_ssl phpmyadmin
|
Er zijn verschillende handleidingen beschikbaar over hoe je apache met php
installeert. Een daarvan is http://www.linuxguruz.org/z.php?id=31.
Er zijn tevens verschillende postings hierover op
http://forums.gentoo.org die uitleggen hoe je problemen met de
installatie oplost (zoek naar 'apache php'). Dus, met dat gezegd zijnde, ga ik
hier niet uitleggen hoe je dat doet. Installeer apache en php, en ga dan verder
met deze handleiding. Nu een woordje voor de mensen die opletten: .htaccess de
directorie waarin je phpmyadmin installeert. Indien je dat niet doet zullen
zoekrobotten langskomen en de pagina indexeren waardoor iedereen je
phpmyadmin-pagina via google kan vinden en je database kan aanpassen. Dit is
SLECHT! Er zijn verschillende howto's hieromtrent, zoals
http://docs.csoft.net/micro/black-htaccess.html.
Nu gaan we de Apache certificaten installeren die we eerder gemaakt hebben. De
Apache-SSL opdrachten die je nodig hebt om de certificaten te laten gebruiken
zijn:
- SSLCertificateFile /path/to/certs/new.cert.cert
- SSLCertificateKeyFile /path/to/certs/new.cert.key
Codevoorbeeld 8.2: Installeer de Apache SSL certificaten |
# cp /etc/ssl/misc/new.cert.cert /etc/apache/conf/ssl/
# cp /etc/ssl/misc/new.cert.key /etc/apache/conf/ssl/
# nano -w /etc/apache/conf/vhosts/ssl.default-vhost.conf
ServerName host.domain.name
ServerAdmin your@email.address
SSLCertificateFile /etc/apache/conf/ssl/new.cert.cert
SSLCertificateKeyFile /etc/apache/conf/ssl/new.cert.key
# /etc/init.d/apache restart
|
Nota:
Indien je een bestaande apache installatie hebt is het waarschijnlijk dat je
een volledige serverreboot zal moeten doen om je nieuwe certificaten te laten
gebruiken. Controleer je logs en verifieer of Apache correct herstart werd.
|
Configureer nu phpMyAdmin.
Codevoorbeeld 8.3: phpMyAdmin configureren |
# nano -w /home/httpd/htdocs/phpmyadmin/config.inc.php
$cfg['Servers'][$i]['host'] = 'localhost'; // MySQL hostname
$cfg['Servers'][$i]['controluser'] = 'mailsql'; // MySQL control user settings
// (this user must have read-only
$cfg['Servers'][$i]['controlpass'] = '$password'; // access to the "mysql/user"
// and "mysql/db" tables)
$cfg['Servers'][$i]['user'] = 'mailsql'; // MySQL user
$cfg['Servers'][$i]['password'] = '$password'; // MySQL password
|
Ga nu naar de phpmyadmin pagina en bezoek de tabellen. Je zal er je eigen
lokale aliassen in willen steken, je gebruikertabel aanvullen met een
testgebruiker en je transport-table aanpassen zodat ze informatie over jouw
domeinen bevat. De default waarden in de dumpfile zouden een voldoende
handleiding moeten zijn om te weten welke variabelen waar moeten staan. Zorg
ervoor dat de informatie die je in de database steekt accuraat is. Zorg er
bijvoorbeeld voor dat de homedirectories van de gebruikers bestaan en een
correcte uid/gid waarde hebben. De maildirs worden automatisch aangemaakt
wanneer de gebruiker zijn eerste e-mail verkrijgt. Algemeen is het dus een goed
idee om een "Welkom" mail te verzenden naar elke nieuwe gebruiker
zodat je er zeker van bent dat zijn ~/.maildir aangemaakt wordt.
9.
De vmail gebruiker
Op dit punt vraag je je misschien af welke gebruikers en directories je moet
gebruiken voor virtuele mailgebruikers, en dat is maar goed ook. Dus laten we
dat eens in elkaar knutselen.
Codevoorbeeld 9.1: De vmail gebruiker aanmaken |
# adduser -d /home/vmail -s /bin/false vmail
# uid=`cat /etc/passwd | grep vmail | cut -f 3 -d :`
# groupadd -g $uid vmail
# mkdir /home/vmail
# chown vmail. /home/vmail
|
Bij het aanmaken van de vmail gebruikeraccount noteer je de uid, gid en
homedirectorie. Wanneer we de lokale gebruikeraccounts aanmaken zijn het die
uid, gid en homedirectorie die je zal moeten gebruiken. We zouden eigenlijk een
php beheerspagina kunnen aanmaken waarin al deze configuratie via een mooie
interface gebeurt, maar we zijn daar nog niet aan toegekomen omdat phpmyadmin
voor ons meer dan voldoende is.
10.
Configureren van MySQL Identiteits verificatie en vhosts
Nu gaan we de identiteits verificatie aanpassen zodat deze de mailsql database
gebruikt voor courier-imap en postfix. In alle volgende voorbeelden vervang je
$password met het paswoord dat je ingegeven hebt voor de mailsql
mysql-gebruiker.
Codevoorbeeld 10.1: Identiteits verificatie aanpassen |
# emerge /usr/portage/sys-libs/pam_mysql/pam_mysql-$currentversion.ebuild
# nano -w /etc/pam.d/imap
#auth required pam_nologin.so
#auth required pam_stack.so service=system-auth
#account required pam_stack.so service=system-auth
#session required pam_stack.so service=system-auth
auth optional pam_mysql.so server=localhost db=mailsql user=mailsql \
passwd=$password table=users usercolumn=email passwdcolumn=clear crypt=0
account required pam_mysql.so server=localhost db=mailsql user=mailsql \
passwd=$password table=users usercolumn=email passwdcolumn=clear crypt=0
# nano -w /etc/pam.d/pop3
# nano -w /etc/pam.d/smtp
|
Nu moeten we courier's identiteits verificatie configuratie aanpassen.
Codevoorbeeld 10.2: Courier's identiteits verificatie aanpassen |
# nano -w /etc/courier-imap/authdaemonrc
authmodulelist="authmysql authpam"
# nano -w /etc/courier-imap/authdaemond.conf
AUTHDAEMOND="authdaemond.mysql"
# nano -w /etc/courier-imap/authmysqlrc
MYSQL_SERVER localhost
MYSQL_USERNAME mailsql
MYSQL_PASSWORD $password
MYSQL_DATABASE mailsql
MYSQL_USER_TABLE users
#MYSQL_CRYPT_PWFIELD crypt (make sure this is commented out since we're storing plaintext)
MYSQL_CLEAR_PWFIELD clear
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD homedir
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
# /etc/init.d/authdaemond restart
# /etc/init.d/saslauthd restart
|
We zijn er bijna! Nu moeten we de rest van de nodige configuraties aanpassen
zodat postfix via de database werkt voor al zijn transport-functies.
Codevoorbeeld 10.3: /etc/postfix/mysql-aliases.cf |
# nano -w /etc/postfix/mysql-aliases.cf
# mysql-aliases.cf
user = mailsql
password = $password
dbname = mailsql
table = alias
select_field = destination
where_field = alias
hosts = unix:/var/run/mysqld/mysqld.sock
|
Codevoorbeeld 10.4: /etc/postfix/mysql-relocated.cf |
# nano -w /etc/postfix/mysql-relocated.cf
# mysql-relocated.cf
user = mailsql
password = $password
dbname = mailsql
table = relocated
select_field = destination
where_field = email
hosts = unix:/var/run/mysqld/mysqld.sock
|
Codevoorbeeld 10.5: /etc/postfix/mysql-transport.cf (optional) |
# nano -w /etc/postfix/mysql-transport.cf
# mysql-transport.cf
user = mailsql
password = $password
dbname = mailsql
table = transport
select_field = destination
where_field = domain
hosts = unix:/var/run/mysqld/mysqld.sock
|
Codevoorbeeld 10.6: /etc/postfix/mysql-virtual-gid.cf (optional) |
# nano -w /etc/postfix/mysql-virtual-gid.cf
#myql-virtual-gid.cf
user = mailsql
password = $password
dbname = mailsql
table = users
select_field = gid
where_field = email
additional_conditions = and postfix = 'y'
hosts = unix:/var/run/mysqld/mysqld.sock
|
Codevoorbeeld 10.7: /etc/postfix/mysql-virtual-maps.cf |
# nano -w /etc/postfix/mysql-virtual-maps.cf
#myql-virtual-maps.cf
user = mailsql
password = $password
dbname = mailsql
table = users
select_field = maildir
where_field = email
additional_conditions = and postfix = 'y'
hosts = unix:/var/run/mysqld/mysqld.sock
|
Codevoorbeeld 10.8: /etc/postfix/mysql-virtual-uid.cf (optional) |
# nano -w /etc/postfix/mysql-virtual-uid.cf
# mysql-virtual-uid.cf
user = mailsql
password = $password
dbname = mailsql
table = users
select_field = uid
where_field = email
additional_conditions = and postfix = 'y'
hosts = unix:/var/run/mysqld/mysqld.sock
|
Codevoorbeeld 10.9: /etc/postfix/mysql-virtual.cf |
# nano -w /etc/postfix/mysql-virtual.cf
# mysql-virtual.cf
user = mailsql
password = $password
dbname = mailsql
table = virtual
select_field = destination
where_field = email
hosts = unix:/var/run/mysqld/mysqld.sock
|
Pas nu /etc/postfix/main.cf als volgt aan:
Codevoorbeeld 10.10: /etc/postfix/main.cf |
# nano -w /etc/postfix/main.cf
alias_maps = mysql:/etc/postfix/mysql-aliases.cf
relocated_maps = mysql:/etc/postfix/mysql-relocated.cf
local_transport = local
local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname
virtual_transport = virtual
virtual_mailbox_domains =
virt-bar.com,
$other-virtual-domain.com
virtual_minimum_uid = 1000
virtual_gid_maps = static:$vmail-gid
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
virtual_uid_maps = static:$vmail-uid
virtual_mailbox_base = /
#virtual_mailbox_limit =
|
Vanaf PostFix versie 2.0.x zijn er verschillende aanpassingen gemaakt ten
opzichte van de 1.1.x versie, onder andere zijn de transport, virtual-gid en
virtual-uid tabellen niet meer nodig. Ze zijn wel nog steeds beschikbaar indien
je deze wenst te gebruiken.
Nota:
Het is aangeraden dat je VIRTUAL_README leest die in de postfix documentatie
zit indien je meer informatie wenst.
|
Codevoorbeeld 10.11: postfix herladen |
# postfix reload
|
Indien alles goed ging heb je nu een werkende mailhost. Gebruikers hebben de
mogelijkheid te identificeren tegen de sql database via hun volledige
e-mailadres, dit zowel met pop3, imap als smtp. Ik raad ten zeerste aan dat je
alles verifieert en kijkt of alles werkt. Indien je problemen tegenkomt (wat
zeer goed mogelijk is met alle aanpassingen die we gemaakt hebben) controleer
dan best de probleemoplosser sectie in deze handleiding.
11.
Squirrelmail
Codevoorbeeld 11.1: squirrelmail installeren |
# emerge squirrelmail
# ln -s /home/httpd/htdocs/squirrelmail/ /home/httpd/htdocs/mail
# cd /home/httpd/htdocs/mail/conf
# ./conf.pl
|
12.
Mailman
De laatste stap: mailman. De nieuwe versie van mailman heeft een zeer goede
virtuele domeinen-mogelijkheid, welke de reden is waarom ik het graag gebruik,
en het is trouwens een prachtige tool. Om deze te installeren en werkende te
krijgen hebben we wel nog een beetje nood aan hacking. Ik raad ten zeerste aan
om de mailman documentatie te lezen, inclusief README.POSTFIX.gz, om te weten
te komen wat we hier doen.
Verder installeren de huidige versies van mailman zich in
/usr/local/mailman. Indien je de default locatie wil
aanpassen kan je de INSTALLDIR variabele aanpassen.
Codevoorbeeld 12.1: /usr/portage/net-mail/mailman/mailman-$ver.ebuild |
# nano -w /usr/portage/net-mail/mailman/mailman-$ver.ebuild
MAILGID="280"
|
Codevoorbeeld 12.2: mailman installeren |
# emerge mailman
# zless /usr/share/doc/mailman-$ver/README.gentoo.gz
|
Codevoorbeeld 12.3: Defaults instellen: Mailman/Defaults.py |
# nano -w /var/mailman/Mailman/Defaults.py
DEFAULT_EMAIL_HOST='domain.com'
DEFAULT_URL_HOST='www.domain.com'
|
Codevoorbeeld 12.4: mailman config: mm_cfg.py |
# nano -w /var/mailman/Mailman/mm_cfg.py
MTA = "Postfix"
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['virt-domain.com', 'virt.domain2.com']
add_virtualhost('www.virt.domain.com', 'virt.domain.com')
add_virtualhost('www.virt.domain2.com', 'virt.domain2.com')
|
Codevoorbeeld 12.5: Een mailinglist aanmaken |
# su mailman
# cd ~
# bin/newlist test
Enter the email of the person running the list: your@email.address
Initial test password:
Hit enter to continue with test owner notification...
# bin/genaliases
# nano -w data/aliases
# STANZA START: test
# CREATED:
test: "|/var/mailman/mail/mailman post test"
test-admin: "|/var/mailman/mail/mailman admin test"
test-bounces: "|/var/mailman/mail/mailman bounces test"
test-confirm: "|/var/mailman/mail/mailman confirm test"
test-join: "|/var/mailman/mail/mailman join test"
test-leave: "|/var/mailman/mail/mailman leave test"
test-owner: "|/var/mailman/mail/mailman owner test"
test-request: "|/var/mailman/mail/mailman request test"
test-subscribe: "|/var/mailman/mail/mailman subscribe test"
test-unsubscribe: "|/var/mailman/mail/mailman unsubscribe test"
# STANZA END: test
# /etc/init.d/mailman start
# rc-update add mailman default
|
Codevoorbeeld 12.6: Mailman alias ondersteuning voor postfix toevoegen |
# nano -w /etc/postfix/main.cf
owner_request_special = no
recipient_delimiter = +
alias_maps =
hash:/var/mailman/data/aliases,
mysql:/etc/postfix/mysql-aliases.cf
virtual_alias_maps =
hash:/var/mailman/data/virtual-mailman,
mysql:/etc/postfix/mysql-virtual.cf
|
Je kan nu je mailinglists instellen op eender welk domein op je server. Als
laatste opmerking vraag ik je om alle mailmancommando's als gebruiker mailman
uit te voeren (su mailman) want anders zullen de permissies verkeerd
zijn en zal je ze moeten aanpassen. Lees de mailman documentatie voor meer
informatie over hoe je de mailman lijsten onderhoudt.
13.
Content Filtering en Anti-Virus
Dit komt later... Het is al bijna af, maar ik heb nog wat perl-help
en tests nodig om het af te werken. Indien je vrijwilliger bent, mail me dan.
14.
Afwerken
Voila, je bent klaar en opgelapt; verander /etc/postfix/master.cf
en verwijder de verbose-mode voor het productie-gebruik. Je zal waarschijnlijk
enkele services willen toevoegen aan je opstartroutine om ervoor te zorgen dat
ze allemaal opgestart worden tijdens het booten. Zorg ervoor dat alle services
die je draait (apache, mysql, saslauthd, postfix, courier-imapd,
courier-imapd-ssl, courier-pop3d, courier-pop3d-ssl) allemaal werken
(naargelang of je bepaalde ondersteuning niet wenst natuurlijk). Ik heb alle
services aan staan.
Codevoorbeeld 14.1: Afwerken |
# postfix reload
# rc-update add $service default
|
Veel plezier!
15.
Probleemoplosser
Introductie
Dit is een kleine probleemoplosser die de voorheen besproken stappen bespreekt.
Ze is niet heel uitgebreid, maar eerder bedoelt als plaats waar je met je
eerste problemen kan afkomen. Met een dergelijke gecompliceerde installatie is
het belangrijk dat je je probleem isoleert zodat je weet wat er eigenlijk
misloopt. In het algemeen doe ik dat in 5 stappen. We starten vanuit de basis
van het systeem en werken zo naar het probleem toe terwijl we andere
componenten als potentieel probleem elimineren, totdat we het defecte component
vinden.
Stap 1: Controleer je configuratiebestanden.
Typo's zijn dodelijk, vooral indien je met identiteits verificatiesystemen w
erkt. Scan je config en mailsql database voor typefouten. Je kan debuggen
zoveel je wil, maar als je niet de juiste informatie tussen de systemen stuurt,
zal het niet werken. Indien je een aanpassing aan een configuratiebestand
gemaakt hebt, zorg er dan voor dat je de service herstart zodat hij zijn
configuratie-aanpassingen inleest.
Codevoorbeeld 15.1: Services herstarten |
# /etc/init.d/service restart
|
Stap 2: Zijn alle services werkelijk aan het draaien?
Indien het niet draait, start het dan op. Het is enorm moeilijk om een service
te debuggen indien die niet draait :) Soms lijkt het alsof een service draait
maar niet functioneert. Soms gebeurt het, bij slechte configuratie of slechte
transmissie in een of ander component, dat de service blijft hangen en
bijgevolg de poort zelf niet vrijgeeft voor een nieuw proces. Je kan dit soms
detecteren met netstat. Of, indien je al een tijdje aan het probleem bezig
bent, neem dan een pauze en herstart de server. Dit zal alle hangende services
elimineren. Na je pauze kom je (verfrist) terug en probeer je opnieuw.
Codevoorbeeld 15.2: De service status bekijken |
# /etc/init.d/$service status
# netstat -a | grep $service (or $port)
|
Stap 3: Gebruiken alle services de laatste configuratiebestanden?
Indien je onlangs een aanpassing hebt gemaakt aan een configuratiebestand,
herstart dan de service om er zeker van te zijn dat hij de recentste versie
gebruikt. Sommige componenten zullen hun configuratie ook op het scherm
weergeven, zoals postfix.
Codevoorbeeld 15.3: Alles herstarten |
# apachectl fullstatus (vereist lynx)
# apachectl configtest (controleert de configuratiebestanden)
# postconf -n (vertelt je welke parameters postfix gebruikt)
# /etc/init.d/$service restart
|
Stap 4: Controleer de logs
Zeg het luidop: logbestanden zijn mijn vrienden. Mijn volgende stap is altijd
het controleren van de logbestanden. Soms is het handig om een mislukte
operatie opnieuw uit te voeren en de logs te bekijken zodat de foutmelding
helemaal onderaan staat (of bovenaan afhankelijk van je logger) in plaats van
ergens in het midden te zweven. Kijk of er geen informatie geleverd wordt die
je kan helpen met het oplossen van het probleem, of toch op zijn minst
informatie levert over welke component er mislukt.
Codevoorbeeld 15.4: Log bestanden lezen |
# kill -USR1 `ps -C metalog -o pid=`(schakel metalog buffering uit)
# nano -w /var/log/mail/current
# cat /var/log/mysql/mysql.log
# tail /var/log/apache/error_log
|
Je kan tevens de debug_peer parameters in main.cf handig vinden. Deze zal de
logs uitgebreider maken, wat soms zeer handig kan zijn.
Codevoorbeeld 15.5: debug_peer ondersteuning activeren |
# nano -w /etc/postfix/main.cf
debug_peer_level = 5
debug_peer_list = $host.domain.name
|
Stap 5: Babbel zelf met de services
SMTP, IMAP en POP3 kunnen alle 3 met gewone tekst aangesproken worden via een
telnet sessie. Dit hebben we al eerder gedaan toen we de PostFix configuratie
verifieerden. Soms is het handig om een telnet sessie op te starten om met de
service zelf te communiceren zodat we zien wat er gebeurt.
Codevoorbeeld 15.6: Testen met telnet |
# telnet localhost $port
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.
|
Stap 6: Soms is het echt zware geschut nodig: strace
strace is een zeer belangrijke tool voor het debuggen van software. Je kan
commando's opstarten van de commandoregel met strace en dan alle
systeemoproepen bekijken terwijl ze gebeuren. strace levert massaal veel
informatie dus ofwel bekijk je het in realtime, ofwel dump je alle tekst in een
bestand voor later.
Codevoorbeeld 15.7: Strace installeren en gebruiken |
# emerge strace
# strace $command
# strace -p `ps -C $service -o pid=`
|
Stap 7: Onderzoeken
Eenmaal je alle informatie hebt kan je het probleem opsporen en oplossen. Neen?
Toch niet? Wel, dan zal je op het internet op zoek moeten gaan naar informatie
die je verder kan helpen. Hieronder is een lijst van websites waarop je je
error kan opzoeken en zien of er iemand al een oplossing voor heeft. Er is ook
een zeer goede howto over hoe je smtp-auth installeert welke veel goede
debugging-ideeen voorstelt.
|