E-posti serveri paigaldus

From ICO wiki
Revision as of 08:45, 25 March 2011 by Leelmik (talk | contribs)
Jump to navigationJump to search

Lembit Elmik AK21

See on väike juhend sellest, kuidas paigaldada mailiserver, mille kasutajaid hoitakse lokaalse masina kasutajate asemel hoopis MySQL andmebaasis. Lisaks mõned enam kasutatavad vidinad, mis ühe tüüpilise mailiserveriga ikka kaasas käivad.


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

SASL - paroolide turvaliseks ülekandeks.

sudo aptitude install libsasl2-modules libsasl2-modules-sql libgsasl7 libauthen-sasl-cyrus-perl sasl2-bin libpam-mysql

ClamAV - Viiruse tõrje UNIX tüüpi süsteemidele

sudo aptitude install clamav-base libclamav6 clamav-daemon clamav-freshclam 

Amavis, SpamAssassin, postgrey - rämpsposti kontroll

sudo aptitude install amavisd-new 
sudo aptitude install spamassassin spamc 
sudo aptitude install postgrey

SquirrelMail - webmail

sudo aptitude install squirrelmail squirrelmail-locales php-pear php5-cli

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.