E-posti serveri paigaldus: Difference between revisions

From ICO wiki
Jump to navigationJump to search
No edit summary
 
(22 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]
Lembit Elmik AK21
Lembit Elmik AK21


PAIGALDUS
Ühte mailiserverit on ikka ja alati vaja. Domeeninimed on meil ka nüüd vabad ju. See on väike juhend sellest, kuidas paigaldada mailiserver, mille kasutajaid hoitakse lokaalse masina kasutajate asemel hoopis MySQL andmebaasis. Selles juhendis ei kaeta paljusid selliseid pisikesi, kuid olulisi vidinaid, mis muudaksid serveri vastupidavamaks. Näiteks võiks olla serveril SASL autentimine, viirusekontroll, rämpspostifilter jne. Meilide lugemiseks näiteks Mozilla Thunderbirdiga kasutan IMAP protokolli. See on POP3 asemel pisut toimivam näiteks juhul, kui postkast on silmini kirju täis. Lisavõimaluste kohta saab lugeda selle teksti kirjutamise (ja minu serveri konfimisel) abiks olnud veebiküljest. Kõigi seadistuste äratoomine siin poleks ilmselt eriti mõistlik.
 
Eeldan, et kasutaja oskab elementaarsel tasemel kasutada tekstiredaktorit "vi"; saab aru, mis on meiliserver; teab, milleks on DNS jms. Muus osas on tegemist üsna täpselt sihile viiva juhendiga. Kõik siin kasutatavad pakid on ka ametlikult tasuta kättesaadavad.
 
 
==Paigaldus==


Alustuseks tuleks siis installeerida operatsioonisüsteem. Mina valisin selleks Ubuntu. Tundus lihtne ja pakihaldus pole ka hullu moodi keeruline.
Alustuseks tuleks siis installeerida operatsioonisüsteem. Mina valisin selleks Ubuntu. Tundus lihtne ja pakihaldus pole ka hullu moodi keeruline.


Nüüd tuleks kontrollida, kas vajalikud allikad on lubatud.
Nüüd tuleb kontrollida, kas vajalikud allikad on lubatud.
sudo vi /etc/apt/source.list
sudo vi /etc/apt/sources.list


Põhimõtteliselt on vaja main ja universe pakke. Kuid põhimõtteliselt ka multiverse ja restricted peaks olema piisavalt turvalised kasutada.
Põhimõtteliselt on vaja main ja universe pakke. Kuid ka multiverse ja restricted peaks olema piisavalt turvalised kasutada.


Enne spetsiifiliste pakkide paigaldamist tuleb kindlasti süsteemi turva- ja muud paigad peale lasta.
Enne spetsiifiliste pakkide paigaldamist tuleb kindlasti süsteemi turva- ja muud paigad peale lasta.
sudo aptitude update  
sudo aptitude update  
sudo aptitude safe-upgrade
sudo aptitude safe-upgrade
 


MySQL - andmebaasimootor
MySQL - andmebaasimootor
sudo aptitude install mysql-client mysql-server
sudo aptitude install mysql-client mysql-server
Postfix - meiliserver
sudo aptitude install postfix postfix-mysql
phpMyAdmin - veebikonsool MySQL haldamiseks
sudo aptitude install phpmyadmin
Vali Yes, et seadistada. Sisesta root mysql password, sisesta phpmyadmin kasutaja password kaks korda. Nõustu, et veebiserverina kasutatakse apache2 veebiserverit.
Courier - IMAP kasutamiseks
sudo aptitude install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-imap-ssl courier-ssl
Küsitakse web-kaustu. Võid vastata No. Samuti hoiatatakse sertifikaadi asukohast. Ära tee välja.
 
Nüüd on vajalikud pakid paigaldatud.
 
==Seadistamine==
 
 
Alustuseks tuleks kontrollida, millised tegevused on tulemüüri poolt üldse lubatud. Tulemüüri tarkvarasid on ka mitmeid ning seetõttu tuleks vajalik seadistamine teha vastavalt sellele, millist müüri kasutatakse. Põhimõtted on ikkagi samad - vajalikud pordid peavad olema väljast sisse liikluseks avatud - SMTP, HTTP, IMAP, SSH
 
*Postfix
 
Pane oma serveri nimi kirja. Näiteks mail.minudomeen.ee kus minudomeen asenda oma domeeninimega.
sudo vi /etc/mailname
 
Nüüd ava peamine postfixi konfiguratsiooni fail.
sudo vi /etc/postfix/main.cf
Alustuseks määra ära oma serveri nimi
# This is already done in /etc/mailname
#myhostname= mail.example.com
Järgmisena määra ära domeen, millelt saadetakse kirju. See võib olla terve serveri nimi või lihtsalt domeeninimi.domain name.
# myorigin=/etc/mailname
myorigin=example.com
Nüüd otsusta, mida kirjutada tervituse bannerisse. Ei midagi sellist, mis potensiaalsele häkkerile abiks oleks...
smtpd_banner = $myhostname ESMTP $mail_name
Nüüd otsusta, kuidas kirjade saatmine toimub. Selleks on põhiliselt kaks võimalust. Saadad ise või läbi oma teenusepakkuja SMTP serveri. See sõltub ka sellest, mida sinu teenusepakkuja võimaldab. Ise saatmise võimalikud tagasilöögid on, et teenusepakkuja ei luba sul omal SMTP teenust jooksutada (pordid kinni), paljud meiliserverid ei võta dünaamilise DNS kirjega serveritelt kirju vastu ja sul on suurem võimalus enda paljastamiseks ründajatele. Ehk siis rohkem tööd oma serveriga. Samas on sul võimalik kirjade saatmist paremini manageerida.
# leave blank to do it yourself
relayhost =
 
# or put it an accessible smtp server
relayhost = smtp.yourisp.com
Järgnusena võrgu seadistamine. Võta vastu ühendusi igalt poolt ja usalda vaid seda masinat.
inet_interfaces = all
mynetworks_style = host
Sa võid maskeerida väljuvaid aadresseid. Näiteks sinu masina nimi on mail.domain.com aga sa ei taha, et väljuvale kiri saadetakse aadressilt username@mail.domain.com, vaid sa eelistad username@domain.com.
# masquerade_domains = mail.example.com www.example.com !sub.dyndomain.com
# masquerade_exceptions = root
Kuna kasutame virtuaalseid domeene peavad need olema tühjad.
local_recipient_maps =
mydestination =
Nüüd mõned numbrid.
# kui pikalt oodata enne saatja teavitamist ebaõnnestunud saatmisest
delay_warning_time = 4h
# on see ajutine või lõplik viga
unknown_local_recipient_reject_code = 450
# kui kaua hoida kirja järjekorras enne vea andmist
maximal_queue_lifetime = 7d
# max ja min aeg sekundites enne kordussaatmist kui ühendus katkeb
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
# kui kaua oodata serveriga ühenduse loomist
smtp_helo_timeout = 60s
# kui palju adressaate võib olla ühel kirjal - aitab masspostituse vastu
smtpd_recipient_limit = 16
# vigade arv taandumiseks
smtpd_soft_error_limit = 3
# vigade arv blokeerimiseks
smtpd_hard_error_limit = 12
Nüüd mõned piirangud. Iga seadistus on tegelikult ainult ühel real.
# HELO sõnumi piirangud
smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit
# Saatja detailide piirangud
smtpd_sender_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
# Piirangud ühenduvale serverile
smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client blackholes.easynet.nl, reject_rbl_client dnsbl.njabl.org
# Saaja aadressi piirangud
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, permit
smtpd_data_restrictions = reject_unauth_pipelining
 
# Nõua korrektset HELO sõnumit
smtpd_helo_required = yes
# Kuluta spämmerite aega enne tagasilükkamist
smtpd_delay_reject = yes
disable_vrfy_command = yes
Virtuaalse domeeni seadistused.
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
# kus asuvad virtuaalse postkasti kaustad
virtual_mailbox_base = /var/spool/mail/virtual
# iga postkasti asukoht igale kasutajale
virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf
# aliastele
virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf
# domain lookups
virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf
# transport_maps = mysql:/etc/postfix/mysql_transport.cf
Võid otsida üles kirja failide omaniku ja siis vaadata tema uid ja gid väärtused. Mina tegin selleks eraldi kasutaja (virtual) ja lisasin sellise rea:
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
Näitena minu /etc/passwd faili sisu selle kasutaja kohta:
virtual:x:5000:5000::/home/virtual:/bin/sh
 
Vaja on seadistada ka aliase fail. Seda kasutatakse vaid lokaalselt.
sudo cp /etc/aliases /etc/postfix/aliases
sudo postalias /etc/postfix/aliases
 
Näitena minu /etc/aliases faili sisu:
# See man 5 aliases for format
postmaster:    root
clamav: root
 
Nüüd tuleb luua kaust, kuhu virtuaalne post pannakse See võib olla ka juba apt-get poolt tehtud. Kindlasti loo ka kasutaja, kes oleks nende kaustade omanik.
sudo mkdir /var/spool/mail/virtual
sudo groupadd --system virtual -g 5000
sudo useradd --system virtual -u 5000 -g 5000
sudo chown -R virtual:virtual /var/spool/mail/virtual
 
 
*Postfix'i MySQL seadistus
 
Meil on vaja luua failid (hiljem ka kasutaja mysql'i), et teha päringuid andmebaasis.
 
Loo (või vajadusel muuda) kasutaja mailbox'i asukoht
sudo vi /etc/postfix/mysql_mailbox.cf
 
user=mail
password=mailPASSWORD
dbname=maildb
table=users
select_field=maildir
where_field=id
hosts=127.0.0.1
additional_conditions = and enabled = 1
 
Kust leida emaili alias
sudo vi /etc/postfix/mysql_alias.cf
 
user=mail
password=mailPASSWORD
dbname=maildb
table=aliases
select_field=destination
where_field=mail
hosts=127.0.0.1
additional_conditions = and enabled = 1
 
Kust leida domeenid
sudo vi /etc/postfix/mysql_domains.cf
 
user=mail
password=mailPASSWORD
dbname=maildb
table=domains
select_field=domain
where_field=domain
hosts=127.0.0.1
additional_conditions = and enabled = 1
 
Pea meeles, et kui asendad hosts=127.0.0.1 hosti reaalse IP'ga, siis käib suhtlus üle TCP protokolli, mitte üle mysql liidese. Kindlasti kirjuta parooli kohale reaalne parool.
 
 
*Andmebaas
 
Nüüd on meil vaja luua reaalsed tabelid sellistele päringutele, mis me just kirjeldasime. Alustuseks on vaja luua kasutaja MySQL tarbeks. Siis tuleb luua andmebaas.
 
Kui see ei ole juba tehtud paki installatsiooni käigus...
mysqladmin -u root password new_password
Logi root kasutajana sisse
mysql -u root -p
Sisesta root kasutaja parool
Enter password:
Loo maili andmebaas
create database maildb;
Loo uus kasutaja "mail"
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'localhost' IDENTIFIED by 'mailPASSWORD';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'%' IDENTIFIED by 'mailPASSWORD';
exit;
 
Ilmselgelt tuleb mailPASSWORD asendada selle parooliga, mis eespool kirjeldatud :)


Postfix - meiliserver
Nüüd oleks vaja luua andmebaasi järgmised tabelid:
sudo aptitude install postfix postfix-mysql
    * aliases
    * domains
    * users
 
Hiljem saab neid vajadusel juurde luua. Praegu teeme ainult need, mida kohe on vaja.
 
 
Logi sisse kasutades "mail" kontot
mysql -u mail -p maildb
Enter password:
 
Jooksute läbi need käsud, et luua tabelid:
CREATE TABLE aliases (
pkid smallint(3) NOT NULL auto_increment,
mail varchar(120) NOT NULL,
destination varchar(120) NOT NULL,
enabled tinyint(1) NOT NULL default '1',
PRIMARY KEY (pkid),
UNIQUE KEY mail (mail)
);
 
CREATE TABLE domains (
pkid smallint(6) NOT NULL auto_increment,
domain varchar(120) NOT NULL,
transport varchar(120) NOT NULL default 'virtual:',
enabled tinyint(1) NOT NULL default '1',
PRIMARY KEY (pkid)
);
 
CREATE TABLE users (
id varchar(128) NOT NULL,
name varchar(128) NOT NULL,
uid smallint(5) unsigned NOT NULL default '5000',
gid smallint(5) unsigned NOT NULL default '5000',
home varchar(255) NOT NULL default '/var/spool/mail/virtual',
maildir varchar(255) NOT NULL default 'blah/',
enabled tinyint(3) unsigned NOT NULL default '1',
change_password tinyint(3) unsigned NOT NULL default '1',
clear varchar(128) NOT NULL default 'ChangeMe',
crypt varchar(128) NOT NULL default 'sdtrusfX0Jj66',
quota varchar(255) NOT NULL,
procmailrc varchar(128) NOT NULL,
spamassassinrc varchar(128) NOT NULL,
PRIMARY KEY (id), UNIQUE KEY id (id)
);
 
Et näha seda, mis sai just tehtud:
describe aliases;
describe domains;
describe users;
Väljumiseks
exit;
 
Järgmiseda muudame MySQL'i my.cnf faili. Ubuntus on see juba vaikimisi loodud. Mandrakes tuleb see fail endal tekitada. Konfigureerida on seda igal juhul vaja.
sudo vi /etc/mysql/my.cnf
 
Eelmistes versioonides oli vaja välja kommenteerida rida
#skip-networking
Tänapäeval seotakse bind-aadress localhostiga.
bind-address = 127.0.0.1
Üsna heaks abiks on alguses logida üles kõik SQL päringud. Seega luba järgnevad read.
general_log_file = /var/log/mysql/mysql.log
general_log = 1
Paari nädala pärast, kui kõik on korras, võid need uuesti välja kommenteerida. Logimine muudab MySQL'i lihtsalt aeglasemaks.
 
Restardi MySQL, et see korjaks külge uued seadistused.
sudo /etc/init.d/mysql restart
 
 
*Courier IMAP
 
Järgnevalt mõned asjad, mida on tarvis muuta:
sudo vi /etc/courier/authdaemonrc
Autentimine MySQL-põhiseks
authmodulelist="authmysql"
Luba logimine.
DEBUG_LOGIN=2
 
sudo vi /etc/courier/authmysqlrc
Kasutajanimi
MYSQL_USERNAME mail
Parool
MYSQL_PASSWORD mailPASSWORD
Baasi nimi
MYSQL_DATABASE maildb
Kasutajate tabeli nimi
MYSQL_USER_TABLE users
Krüptitud parooli hoidmine olgu sisse kommenteeritud
MYSQL_CRYPT_PWFIELD crypt
Teksti kujul paroolide hoidmine kommenteeri välja
# MYSQL_CLEAR_PWFIELD clear
Maildir asukoht
MYSQL_MAILDIR_FIELD maildir
MYSQL_WHERE_CLAUSE enabled=1
 
Lõpetuseks võid vaadata IMAP'i konfi faili, kuid seal pole muudatusi vaja teha.
vi /etc/courier/imapd
 
 
Sul on nüüd olemas oma esmane meiliserver! Aga see ei tööta, sest sul pole ühtegi kasutajat ega domeeni...
 
Kõigepealt tuleks natuke andmeid baasi lisada.
 
Enne kirjade saatmist proovi kirju vastu võtta. (Mõnelt teiselt aadressilt saates.) Kui kirjad jõuavad kohale ja maili-kaustad on automaatselt loodud, alles siis proovi reaalselt ka lugeda kohale tulnud kirju.
 
==Andmete lisamine baasi==
 
*Kasutajate ja domeenide lisamine
 
Meil on nüüd täitsa oma mailiserver püsti pandud. Ainult, et seal pole tegelikult suurt midagi - ei kasutajaid, ei domeene...
Alustuseks lisamine mõned vaikeväärtused, siis nõutud andmeid ja siis veidi neid, mis on lihtsalt mõistlikud.
Siis lisame oma kasutajad ja domeenid
 
*Nõutud domeenid ja kasutajad
 
Alustuseks nõutud domeenid kohaliku maili jaoks
Siin saad kasutada näiteks phpMyAdmin liidest või siis käsurea MYSQL'i
INSERT INTO domains (domain) VALUES
('localhost'),
('localhost.localdomain');
 
Nüüd mõned vaikimisi aliased. Kõiki neid pole ehk isegi vaja, kuid viisakas on need siiski luua.
INSERT INTO aliases (mail,destination) VALUES
('postmaster@localhost','root@localhost'),
('sysadmin@localhost','root@localhost'),
('webmaster@localhost','root@localhost'),
('abuse@localhost','root@localhost'),
('root@localhost','root@localhost'),
('@localhost','root@localhost'),
('@localhost.localdomain','@localhost');
 
Root kasutaja.
INSERT INTO users (id,name,maildir,crypt) VALUES
('root@localhost','root','root/', encrypt('apassword') );
 
 
*Domeenid ja kasutajad
 
Nüüd lisame juba õiged oma andmed.
Oletame, et sa soovid, et see sinu server teenindaks väljamõeldud domeeni kirju: "itk.org".
Sel juhul ütled , et selle masina nimi on "mail.itk.org".
 
INSERT INTO domains (domain) VALUES
('itk.org'), ('mail.itk.org');
 
INSERT INTO aliases (mail,destination) VALUES
('@mail.itk.org','@itk.org'),
('postmaster@itk.org','postmaster@localhost'),
('abuse@itk.org','abuse@localhost');
 
Sul on ka kasutajad Malle ja Kalle.
INSERT INTO users (id,name,maildir,crypt) VALUES
('malle@itk.org','malle','malle/', encrypt('apassword') ),
('kalle@itk.org','kalle','kalle/', encrypt('anotherpassword') );
 
INSERT INTO aliases (mail,destination) VALUES
('malle@itk.org','malle@itk.org'),
('kalle@itk.org','kalle@itk.org');
 
Eksisteerib ka kasutaja Karl, aga ta tahab, et kõik tema kirjad saadetaks edasi välisele meiliaadressile.
INSERT INTO aliases (mail,destination) VALUES ('karl@itk.org','karl@gmail.com');
 
Mõned seletused kasutatud muutujate kohta.
 
Kasutaja loomine täidab ära 4 välja.
ID on kasutaja e-maili aadressi. See on ka kasutajanimi sisselogimisel.
NAME on kasutaja kirjeldus.
MAILDIR on /var/spool/mail/virtual sees olev kaust. see peab lõppema / märgiga, vastasel juhul ei osata seda maildir'na kasutada.
CRYPT on siis parool krüptitud kujul.
 
 
==Seadistuste kontroll==
 
Kõikide kontrolltegevuste käigus tekkinud tõrgete puhul on tungivalt soovitav vaadata /var/log/syslog faili lõppu ja sealt otsida teemakohaseid kirjeid!
 
Postfix'i seadistuste õigsuse kontrolliks saada käsurealt mõnele andmebaasis olevale kliendile kiri ja vaata kas selle peale tekitati kausta /var/spool/mail/virtual kasutaja nimega kaust koos alamkaustadega. Kirja saatmiseks näiteks kasutajale 'kalle' on selline käsk:
mail -s "Tere Kalle" kalle@itk.org
 
Käsu sisestamise tulemusena tekib võimalus sisestada tekst, millest saab kirja sisu ja kui see on tehtud siis kaks korda vajutada Control+D klahvikombinatsiooni. LIsaks leiab selel tegevuse kohta infot [http://www.simplehelp.net/2008/12/01/how-to-send-email-from-the-linux-command-line/ siit]
 
Courier e. IMAP serveri kontrolliks tuleb teha telnet ühendus serveri IMAP porti:
 
telnet localhost 143
 
Kui selle käsu tulemusena ühendus serveri õnnestub luua, siis proovida sealt juba baasis oleva kasutajana sisse logida:
 
0 login ''kasutaja parool''


SASL - paroolide turvaliseks ülekandeks.  
'''NB!''' Ennem, kui postfix test ei ole selle kasutaja aadressil õnnestunult läbi viidud ehk siis kaustas /var/spool/mail/virtual puudub kasutaja nimele vastav kaust, see test ei õnnestu, kuna üritatakse sisse logida olematusse kausta, see kehtib iga kasutaja kohta.
sudo aptitude install libsasl2-modules libsasl2-modules-sql libgsasl7 libauthen-sasl-cyrus-perl sasl2-bin libpam-mysql
Pikemalt leiab infot IMAP testimise kohta [http://www.courier-mta.org/imap/tutorial.setup.html siit]


ClamAV - Viiruse tõrje UNIX tüüpi süsteemidele
Lisaks oleks kasulik installida programm nimega Gamin, muidu annab IMAP sisselogimisel veateate.
sudo aptitude install clamav-base libclamav6 clamav-daemon clamav-freshclam


Amavis, SpamAssassin, postgrey - rämpsposti kontroll
sudo apt-get install gamin
sudo aptitude install amavisd-new
sudo aptitude install spamassassin spamc
sudo aptitude install postgrey


SquirrelMail - webmail
Ja ongi server valmis. Kõigi eelduste kohaselt ka toimiv. Veaotsingul aitab jällegi kasutatud kirjanduse all esimene link.
sudo aptitude install squirrelmail squirrelmail-locales php-pear php5-cli


phpMyAdmin - veebikonsool MySQL haldamiseks
==Kasutatud kirjandus==
sudo aptitude install phpmyadmin
Vali Yes, et seadistada. Sisesta root mysql password, sisesta phpmyadmin kasutaja password kaks korda. Nõustu, et veebiserverina kasutatakse apache2 veebiserverit.


Courier - IMAP kasutamiseks
http://flurdy.com/docs/postfix/<br />
sudo aptitude install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-imap-ssl courier-ssl
Väga tugevalt aitab antud juhendit ellu viia Antti Andreimann'i materjal Linuxi administreerimise kohta.<br />
Küsitakse web-kaustu. Võid vastata No. Samuti hoiatatakse sertifikaadi asukohast. Ära tee välja.
http://www.postfix.org/<br />
http://www.courier-mta.org/<br />
http://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-ubuntu8.04

Latest revision as of 16:59, 16 January 2014


Lembit Elmik AK21

Ühte mailiserverit on ikka ja alati vaja. Domeeninimed on meil ka nüüd vabad ju. See on väike juhend sellest, kuidas paigaldada mailiserver, mille kasutajaid hoitakse lokaalse masina kasutajate asemel hoopis MySQL andmebaasis. Selles juhendis ei kaeta paljusid selliseid pisikesi, kuid olulisi vidinaid, mis muudaksid serveri vastupidavamaks. Näiteks võiks olla serveril SASL autentimine, viirusekontroll, rämpspostifilter jne. Meilide lugemiseks näiteks Mozilla Thunderbirdiga kasutan IMAP protokolli. See on POP3 asemel pisut toimivam näiteks juhul, kui postkast on silmini kirju täis. Lisavõimaluste kohta saab lugeda selle teksti kirjutamise (ja minu serveri konfimisel) abiks olnud veebiküljest. Kõigi seadistuste äratoomine siin poleks ilmselt eriti mõistlik.

Eeldan, et kasutaja oskab elementaarsel tasemel kasutada tekstiredaktorit "vi"; saab aru, mis on meiliserver; teab, milleks on DNS jms. Muus osas on tegemist üsna täpselt sihile viiva juhendiga. Kõik siin kasutatavad pakid on ka ametlikult tasuta kättesaadavad.


Paigaldus

Alustuseks tuleks siis installeerida operatsioonisüsteem. Mina valisin selleks Ubuntu. Tundus lihtne ja pakihaldus pole ka hullu moodi keeruline.

Nüüd tuleb kontrollida, kas vajalikud allikad on lubatud.

sudo vi /etc/apt/sources.list

Põhimõtteliselt on vaja main ja universe pakke. Kuid ka multiverse ja restricted peaks olema piisavalt turvalised kasutada.

Enne spetsiifiliste pakkide paigaldamist tuleb kindlasti süsteemi turva- ja muud paigad peale lasta.

sudo aptitude update 
sudo aptitude safe-upgrade


MySQL - andmebaasimootor

sudo aptitude install mysql-client mysql-server

Postfix - meiliserver

sudo aptitude install postfix postfix-mysql

phpMyAdmin - veebikonsool MySQL haldamiseks

sudo aptitude install phpmyadmin

Vali Yes, et seadistada. Sisesta root mysql password, sisesta phpmyadmin kasutaja password kaks korda. Nõustu, et veebiserverina kasutatakse apache2 veebiserverit. Courier - IMAP kasutamiseks

sudo aptitude install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-imap-ssl courier-ssl 

Küsitakse web-kaustu. Võid vastata No. Samuti hoiatatakse sertifikaadi asukohast. Ära tee välja.

Nüüd on vajalikud pakid paigaldatud.

Seadistamine

Alustuseks tuleks kontrollida, millised tegevused on tulemüüri poolt üldse lubatud. Tulemüüri tarkvarasid on ka mitmeid ning seetõttu tuleks vajalik seadistamine teha vastavalt sellele, millist müüri kasutatakse. Põhimõtted on ikkagi samad - vajalikud pordid peavad olema väljast sisse liikluseks avatud - SMTP, HTTP, IMAP, SSH

  • Postfix

Pane oma serveri nimi kirja. Näiteks mail.minudomeen.ee kus minudomeen asenda oma domeeninimega.

sudo vi /etc/mailname

Nüüd ava peamine postfixi konfiguratsiooni fail.

sudo vi /etc/postfix/main.cf

Alustuseks määra ära oma serveri nimi

# This is already done in /etc/mailname 
#myhostname= mail.example.com 

Järgmisena määra ära domeen, millelt saadetakse kirju. See võib olla terve serveri nimi või lihtsalt domeeninimi.domain name.

# myorigin=/etc/mailname 
myorigin=example.com

Nüüd otsusta, mida kirjutada tervituse bannerisse. Ei midagi sellist, mis potensiaalsele häkkerile abiks oleks...

smtpd_banner = $myhostname ESMTP $mail_name

Nüüd otsusta, kuidas kirjade saatmine toimub. Selleks on põhiliselt kaks võimalust. Saadad ise või läbi oma teenusepakkuja SMTP serveri. See sõltub ka sellest, mida sinu teenusepakkuja võimaldab. Ise saatmise võimalikud tagasilöögid on, et teenusepakkuja ei luba sul omal SMTP teenust jooksutada (pordid kinni), paljud meiliserverid ei võta dünaamilise DNS kirjega serveritelt kirju vastu ja sul on suurem võimalus enda paljastamiseks ründajatele. Ehk siis rohkem tööd oma serveriga. Samas on sul võimalik kirjade saatmist paremini manageerida.

# leave blank to do it yourself 
relayhost =
# or put it an accessible smtp server 
relayhost = smtp.yourisp.com

Järgnusena võrgu seadistamine. Võta vastu ühendusi igalt poolt ja usalda vaid seda masinat.

inet_interfaces = all
mynetworks_style = host

Sa võid maskeerida väljuvaid aadresseid. Näiteks sinu masina nimi on mail.domain.com aga sa ei taha, et väljuvale kiri saadetakse aadressilt username@mail.domain.com, vaid sa eelistad username@domain.com.

# masquerade_domains = mail.example.com www.example.com !sub.dyndomain.com 
# masquerade_exceptions = root

Kuna kasutame virtuaalseid domeene peavad need olema tühjad.

local_recipient_maps =
mydestination =

Nüüd mõned numbrid.

# kui pikalt oodata enne saatja teavitamist ebaõnnestunud saatmisest 
delay_warning_time = 4h
# on see ajutine või lõplik viga 
unknown_local_recipient_reject_code = 450
# kui kaua hoida kirja järjekorras enne vea andmist
maximal_queue_lifetime = 7d
# max ja min aeg sekundites enne kordussaatmist kui ühendus katkeb
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
# kui kaua oodata serveriga ühenduse loomist
smtp_helo_timeout = 60s
# kui palju adressaate võib olla ühel kirjal - aitab masspostituse vastu
smtpd_recipient_limit = 16
# vigade arv taandumiseks
smtpd_soft_error_limit = 3
# vigade arv blokeerimiseks
smtpd_hard_error_limit = 12

Nüüd mõned piirangud. Iga seadistus on tegelikult ainult ühel real.

# HELO sõnumi piirangud
smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit
# Saatja detailide piirangud
smtpd_sender_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
# Piirangud ühenduvale serverile
smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client blackholes.easynet.nl, reject_rbl_client dnsbl.njabl.org
# Saaja aadressi piirangud
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, permit
smtpd_data_restrictions = reject_unauth_pipelining
# Nõua korrektset HELO sõnumit
smtpd_helo_required = yes
# Kuluta spämmerite aega enne tagasilükkamist
smtpd_delay_reject = yes
disable_vrfy_command = yes

Virtuaalse domeeni seadistused.

alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
# kus asuvad virtuaalse postkasti kaustad
virtual_mailbox_base = /var/spool/mail/virtual
# iga postkasti asukoht igale kasutajale
virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf
# aliastele
virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf
# domain lookups
virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf
# transport_maps = mysql:/etc/postfix/mysql_transport.cf

Võid otsida üles kirja failide omaniku ja siis vaadata tema uid ja gid väärtused. Mina tegin selleks eraldi kasutaja (virtual) ja lisasin sellise rea:

virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

Näitena minu /etc/passwd faili sisu selle kasutaja kohta:

virtual:x:5000:5000::/home/virtual:/bin/sh

Vaja on seadistada ka aliase fail. Seda kasutatakse vaid lokaalselt.

sudo cp /etc/aliases /etc/postfix/aliases
sudo postalias /etc/postfix/aliases

Näitena minu /etc/aliases faili sisu:

# See man 5 aliases for format
postmaster:    root
clamav: root

Nüüd tuleb luua kaust, kuhu virtuaalne post pannakse See võib olla ka juba apt-get poolt tehtud. Kindlasti loo ka kasutaja, kes oleks nende kaustade omanik.

sudo mkdir /var/spool/mail/virtual
sudo groupadd --system virtual -g 5000
sudo useradd --system virtual -u 5000 -g 5000
sudo chown -R virtual:virtual /var/spool/mail/virtual


  • Postfix'i MySQL seadistus

Meil on vaja luua failid (hiljem ka kasutaja mysql'i), et teha päringuid andmebaasis.

Loo (või vajadusel muuda) kasutaja mailbox'i asukoht

sudo vi /etc/postfix/mysql_mailbox.cf
user=mail
password=mailPASSWORD
dbname=maildb
table=users
select_field=maildir
where_field=id
hosts=127.0.0.1
additional_conditions = and enabled = 1

Kust leida emaili alias

sudo vi /etc/postfix/mysql_alias.cf
user=mail
password=mailPASSWORD
dbname=maildb
table=aliases
select_field=destination
where_field=mail
hosts=127.0.0.1
additional_conditions = and enabled = 1

Kust leida domeenid

sudo vi /etc/postfix/mysql_domains.cf
user=mail
password=mailPASSWORD
dbname=maildb
table=domains
select_field=domain
where_field=domain
hosts=127.0.0.1
additional_conditions = and enabled = 1

Pea meeles, et kui asendad hosts=127.0.0.1 hosti reaalse IP'ga, siis käib suhtlus üle TCP protokolli, mitte üle mysql liidese. Kindlasti kirjuta parooli kohale reaalne parool.


  • Andmebaas

Nüüd on meil vaja luua reaalsed tabelid sellistele päringutele, mis me just kirjeldasime. Alustuseks on vaja luua kasutaja MySQL tarbeks. Siis tuleb luua andmebaas.

Kui see ei ole juba tehtud paki installatsiooni käigus...

mysqladmin -u root password new_password

Logi root kasutajana sisse

mysql -u root -p

Sisesta root kasutaja parool

Enter password:

Loo maili andmebaas

create database maildb;

Loo uus kasutaja "mail"

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'localhost' IDENTIFIED by 'mailPASSWORD';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'%' IDENTIFIED by 'mailPASSWORD';
exit;

Ilmselgelt tuleb mailPASSWORD asendada selle parooliga, mis eespool kirjeldatud :)

Nüüd oleks vaja luua andmebaasi järgmised tabelid:

   * aliases
   * domains
   * users

Hiljem saab neid vajadusel juurde luua. Praegu teeme ainult need, mida kohe on vaja.


Logi sisse kasutades "mail" kontot

mysql -u mail -p maildb
Enter password:

Jooksute läbi need käsud, et luua tabelid:

CREATE TABLE aliases (
pkid smallint(3) NOT NULL auto_increment,
mail varchar(120) NOT NULL,
destination varchar(120) NOT NULL,
enabled tinyint(1) NOT NULL default '1',
PRIMARY KEY (pkid),
UNIQUE KEY mail (mail)
);
CREATE TABLE domains (
pkid smallint(6) NOT NULL auto_increment,
domain varchar(120) NOT NULL,
transport varchar(120) NOT NULL default 'virtual:',
enabled tinyint(1) NOT NULL default '1',
PRIMARY KEY (pkid)
);
CREATE TABLE users (
id varchar(128) NOT NULL,
name varchar(128) NOT NULL,
uid smallint(5) unsigned NOT NULL default '5000',
gid smallint(5) unsigned NOT NULL default '5000',
home varchar(255) NOT NULL default '/var/spool/mail/virtual',
maildir varchar(255) NOT NULL default 'blah/',
enabled tinyint(3) unsigned NOT NULL default '1',
change_password tinyint(3) unsigned NOT NULL default '1',
clear varchar(128) NOT NULL default 'ChangeMe',
crypt varchar(128) NOT NULL default 'sdtrusfX0Jj66',
quota varchar(255) NOT NULL,
procmailrc varchar(128) NOT NULL,
spamassassinrc varchar(128) NOT NULL,
PRIMARY KEY (id), UNIQUE KEY id (id)
);

Et näha seda, mis sai just tehtud:

describe aliases;
describe domains;
describe users;

Väljumiseks

exit;

Järgmiseda muudame MySQL'i my.cnf faili. Ubuntus on see juba vaikimisi loodud. Mandrakes tuleb see fail endal tekitada. Konfigureerida on seda igal juhul vaja.

sudo vi /etc/mysql/my.cnf

Eelmistes versioonides oli vaja välja kommenteerida rida

#skip-networking

Tänapäeval seotakse bind-aadress localhostiga.

bind-address = 127.0.0.1 

Üsna heaks abiks on alguses logida üles kõik SQL päringud. Seega luba järgnevad read.

general_log_file = /var/log/mysql/mysql.log
general_log = 1 

Paari nädala pärast, kui kõik on korras, võid need uuesti välja kommenteerida. Logimine muudab MySQL'i lihtsalt aeglasemaks.

Restardi MySQL, et see korjaks külge uued seadistused.

sudo /etc/init.d/mysql restart


  • Courier IMAP

Järgnevalt mõned asjad, mida on tarvis muuta:

sudo vi /etc/courier/authdaemonrc 

Autentimine MySQL-põhiseks

authmodulelist="authmysql" 

Luba logimine.

DEBUG_LOGIN=2
sudo vi /etc/courier/authmysqlrc 

Kasutajanimi

MYSQL_USERNAME mail 

Parool

MYSQL_PASSWORD mailPASSWORD 

Baasi nimi

MYSQL_DATABASE maildb 

Kasutajate tabeli nimi

MYSQL_USER_TABLE users 

Krüptitud parooli hoidmine olgu sisse kommenteeritud

MYSQL_CRYPT_PWFIELD crypt 

Teksti kujul paroolide hoidmine kommenteeri välja

# MYSQL_CLEAR_PWFIELD clear 

Maildir asukoht

MYSQL_MAILDIR_FIELD maildir
MYSQL_WHERE_CLAUSE enabled=1

Lõpetuseks võid vaadata IMAP'i konfi faili, kuid seal pole muudatusi vaja teha.

vi /etc/courier/imapd


Sul on nüüd olemas oma esmane meiliserver! Aga see ei tööta, sest sul pole ühtegi kasutajat ega domeeni...

Kõigepealt tuleks natuke andmeid baasi lisada.

Enne kirjade saatmist proovi kirju vastu võtta. (Mõnelt teiselt aadressilt saates.) Kui kirjad jõuavad kohale ja maili-kaustad on automaatselt loodud, alles siis proovi reaalselt ka lugeda kohale tulnud kirju.

Andmete lisamine baasi

  • Kasutajate ja domeenide lisamine

Meil on nüüd täitsa oma mailiserver püsti pandud. Ainult, et seal pole tegelikult suurt midagi - ei kasutajaid, ei domeene... Alustuseks lisamine mõned vaikeväärtused, siis nõutud andmeid ja siis veidi neid, mis on lihtsalt mõistlikud. Siis lisame oma kasutajad ja domeenid

  • Nõutud domeenid ja kasutajad

Alustuseks nõutud domeenid kohaliku maili jaoks Siin saad kasutada näiteks phpMyAdmin liidest või siis käsurea MYSQL'i

INSERT INTO domains (domain) VALUES
('localhost'),
('localhost.localdomain');

Nüüd mõned vaikimisi aliased. Kõiki neid pole ehk isegi vaja, kuid viisakas on need siiski luua.

INSERT INTO aliases (mail,destination) VALUES
('postmaster@localhost','root@localhost'),
('sysadmin@localhost','root@localhost'),
('webmaster@localhost','root@localhost'),
('abuse@localhost','root@localhost'),
('root@localhost','root@localhost'),
('@localhost','root@localhost'),
('@localhost.localdomain','@localhost');

Root kasutaja.

INSERT INTO users (id,name,maildir,crypt) VALUES
('root@localhost','root','root/', encrypt('apassword') );


  • Domeenid ja kasutajad

Nüüd lisame juba õiged oma andmed. Oletame, et sa soovid, et see sinu server teenindaks väljamõeldud domeeni kirju: "itk.org". Sel juhul ütled , et selle masina nimi on "mail.itk.org".

INSERT INTO domains (domain) VALUES
('itk.org'), ('mail.itk.org');
INSERT INTO aliases (mail,destination) VALUES
('@mail.itk.org','@itk.org'),
('postmaster@itk.org','postmaster@localhost'),
('abuse@itk.org','abuse@localhost');

Sul on ka kasutajad Malle ja Kalle.

INSERT INTO users (id,name,maildir,crypt) VALUES
('malle@itk.org','malle','malle/', encrypt('apassword') ),
('kalle@itk.org','kalle','kalle/', encrypt('anotherpassword') );
INSERT INTO aliases (mail,destination) VALUES
('malle@itk.org','malle@itk.org'),
('kalle@itk.org','kalle@itk.org');

Eksisteerib ka kasutaja Karl, aga ta tahab, et kõik tema kirjad saadetaks edasi välisele meiliaadressile.

INSERT INTO aliases (mail,destination) VALUES ('karl@itk.org','karl@gmail.com');

Mõned seletused kasutatud muutujate kohta.

Kasutaja loomine täidab ära 4 välja. ID on kasutaja e-maili aadressi. See on ka kasutajanimi sisselogimisel. NAME on kasutaja kirjeldus. MAILDIR on /var/spool/mail/virtual sees olev kaust. see peab lõppema / märgiga, vastasel juhul ei osata seda maildir'na kasutada. CRYPT on siis parool krüptitud kujul.


Seadistuste kontroll

Kõikide kontrolltegevuste käigus tekkinud tõrgete puhul on tungivalt soovitav vaadata /var/log/syslog faili lõppu ja sealt otsida teemakohaseid kirjeid!

Postfix'i seadistuste õigsuse kontrolliks saada käsurealt mõnele andmebaasis olevale kliendile kiri ja vaata kas selle peale tekitati kausta /var/spool/mail/virtual kasutaja nimega kaust koos alamkaustadega. Kirja saatmiseks näiteks kasutajale 'kalle' on selline käsk:

mail -s "Tere Kalle" kalle@itk.org

Käsu sisestamise tulemusena tekib võimalus sisestada tekst, millest saab kirja sisu ja kui see on tehtud siis kaks korda vajutada Control+D klahvikombinatsiooni. LIsaks leiab selel tegevuse kohta infot siit

Courier e. IMAP serveri kontrolliks tuleb teha telnet ühendus serveri IMAP porti:

telnet localhost 143

Kui selle käsu tulemusena ühendus serveri õnnestub luua, siis proovida sealt juba baasis oleva kasutajana sisse logida:

0 login kasutaja parool

NB! Ennem, kui postfix test ei ole selle kasutaja aadressil õnnestunult läbi viidud ehk siis kaustas /var/spool/mail/virtual puudub kasutaja nimele vastav kaust, see test ei õnnestu, kuna üritatakse sisse logida olematusse kausta, see kehtib iga kasutaja kohta. Pikemalt leiab infot IMAP testimise kohta siit

Lisaks oleks kasulik installida programm nimega Gamin, muidu annab IMAP sisselogimisel veateate.

sudo apt-get install gamin

Ja ongi server valmis. Kõigi eelduste kohaselt ka toimiv. Veaotsingul aitab jällegi kasutatud kirjanduse all esimene link.

Kasutatud kirjandus

http://flurdy.com/docs/postfix/
Väga tugevalt aitab antud juhendit ellu viia Antti Andreimann'i materjal Linuxi administreerimise kohta.
http://www.postfix.org/
http://www.courier-mta.org/
http://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-ubuntu8.04