E-posti serveri paigaldus
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 tuleks kontrollida, kas vajalikud allikad on lubatud.
sudo vi /etc/apt/source.list
Põhimõtteliselt on vaja main ja universe pakke. Kuid põhimõtteliselt 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.
ANDMEBAASID
MySQL
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 the newly created password 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 default , `destination` varchar(120) NOT NULL default , `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 default , `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 default , `name` varchar(128) NOT NULL default , `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 default , `procmailrc` varchar(128) NOT NULL default , `spamassassinrc` varchar(128) NOT NULL default , 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 concat(home,'/',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
(Vahe-)Kokkuvõte
Sul on nüüd olemas oma esmane meiliserver.
Enne, kui minna juba täpsemate seadistuste juurde, on vaja kontrollida, kas asi üldse töötab. See päästab hilisemast tundidepikkusest agooniast.
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.
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/#config-simple-imap
Väga tugevalt aitab antud juhendit ellu viia Antti Andreimann'i materjal Linuxi administreerimise kohta.