Postfix Mail Server Kurulum Dokumani (Postfix+Mysql +Courier Imap+ SMTP Auth)
Hazirlayan : Umut Besler <umutbesler [at] umutbesler.com>
28.01.2003
Bu dokuman Postfix mail server uzerinde virtual domain olusturarak mail hizmeti vermeyi aciklayacaktir.
Ayný sistemi Debian üzerinde çalýþtýrmak için Postfix Debian dökümanýmdan faydalanabilirsiniz.
Oncelikle belirtmeliyimki bu program paketini kurmaya karar verdiyseniz biraz sabirli olmalisiniz. Cunku kurulum sirasinda veya kurulum sonrasi nerden kaynaklandigini bilmediginiz hatalar cikabiliyor ve bunlar ile biraz ugrasmaniz gerekebiliyor. Ben kendi yasadigim sorunlar kapsaminda bu dokumani yazarak minimum duzeyde sorun yasmanizi saglamaya calisacagim.
Oncelikle kurulmasi gereken paketler:
Mysql
Postfix 1.1.12 (daha ust versiyonlardada ayni sekilde calisacaktir)
Courier Imap
Cyrus-sasl
Pam
Mysql : Domain bilgilerimizi mysql database’inde tutacagiz. Bunun avantaji kullanicilarin database’den direk eklenip silinebilmesidir. Boylece sistem icin web arayuzude yazilmasi kolaylasacaktir.
Postfix : Mail server olarak postfix kullanacagiz.
Courier Imap : Imap ve pop3 server olarak kullanacagiz.
Cyrus Sasl : SMTP Auth yapilabilmesi icin gerekli program.
Pam : SMTP Auth yapilirken cyrus-sasl programinin mysql’den verileri okumasi icin gerekli program.
MySql :
Mysql database yapimiz asagidaki gibi olacak:
mysql> show tables;
+------------------+
| Tables_in_maildb |
+------------------+
| transport |
| users |
| virtual |
+------------------+
3 rows in set (0.00 sec)
mysql> describe transport;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| domain | varchar(128) | | PRI | | |
| transport | varchar(128) | | MUL | | |
+-----------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> describe virtual;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| address | varchar(255) | | PRI | | |
| goto | varchar(255) | | | | |
+---------+--------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql> describe users;
+---------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------------------+------+-----+---------+-------+
| id | varchar(128) | | PRI | | |
| address | varchar(128) | | UNI | | |
| crypt | varchar(128) | | | | |
| clear | varchar(128) | | | | |
| name | varchar(128) | | | | |
| uid | smallint(5) unsigned | | | 0 | |
| gid | smallint(5) unsigned | | | 0 | |
| home | varchar(128) | | | / | |
| domain | varchar(128) | | | | |
| maildir | varchar(255) | | | | |
| imapok | tinyint(3) unsigned | | | 1 | |
| bool1 | tinyint(3) unsigned | | | 1 | |
| bool2 | tinyint(3) unsigned | | | 1 | |
+---------+----------------------+------+-----+---------+-------+
13 rows in set (0.01 sec)
Transport taki alanlarin aciklamalari:
domain |
Host edeceginiz domain adi. “virtual” ve “local” olarak host edecekleriniz dahil. |
transport |
Host edeceginiz domain tipi. Virtual domainler icin “virtual:”, local kullanicilar icin “local:” yazabilirsiniz. |
Virtual daki alanlarin aciklamalari:
address |
Gelen mail adresi |
goto |
Ustteki mail adresinden gelen maillerin yonlendirilecegi adres. |
Users daki alanlarin aciklamalari:
id |
Kullanici adi. [email protected] seklinde |
address |
Kullanici mail adresi. [email protected] seklinde |
crypt |
Sifrenin sifreli (crypted) hali. Eger sifrenin bu sekilde saklanmasini istemiyorsaniz bos birakabilirsiniz. Bu alana mysqlden veri girerken querinizi encrypt(‘password’) seklinde verebilirsiniz. |
clear |
Sifrenin acik hali. |
name |
Kullanicinin ismi. Postfix icin gerekli degil. Courier icin kullanacagiz. |
uid |
virtual uid |
gid |
virtual gid |
home |
Mail klasorunuz “/” veya “/var/spool/postfix” olabilir. |
domain |
Kullanici domain adi. |
maildir |
Kullanicinin maillerinin saklanacagi klasor. Burada tam yolu kullanmanizi tavsiye ederim. Maillerde Maildir yapisini kullanacagimiz icin mutlaka sonraki / isaretini koymak gerekmektedir. (“domain.com/user/Maildir/” seklinde) |
imapok |
Courier imap ile kullanicilarin maillerine ulasmayi saglayan bir ayar. 1 yaziniz. 0 yazan mailine courier uzerinden ulasamaz. |
bool1 |
Ustteki ayar ile ayni |
bool2 |
Ustteki ayar ile ayni |
Simdi databasedeki tablolari tanitalim.
Transport: Bu tablo gelen maillerin domain bilgilerini tutan tablodur. Burada o domain’e ait maillerin virtual mi yoksa sistem uzerinde mi tutulacagi belirlenir.
Virtual: Bu tabloda aliases dosyasindakine benzer bir islem yapilmaktadir. Bir adrese gelen maillerin baska bir adrese/adreslere yonlendirilmesi bu tablodan yapilmaktadir. Mail adresleri arasina “,” konarak bu islem gerceklestirilebilir.
Users: Bu tablo sahip oldugumuz tum kullanicilarin tutuldugu tablodur.
Database’in kolayca yaratilmasi icin mysql kodu asagidadir:
#First Create the DatabaseCyrus SASL
Bu programi SMTP Auth ozelligi icin kullanacagiz.
Program kurulumu icin ftp://ftp.andrew.cmu.edu/pub/cyrus-mail den programi indirebilirsiniz. Eger elinizde rpm kurulum paketi varsa dagitimdan cikan onuda kurabilirsiniz. Yalniz burada onemli olan rpm kurulumda cyrus-sasl-devel paketinide kurmaniz gerekmektedir. Tar.gz kurulumu su sekildedir:
cd cyrus-sasl-<version>
./configure
make
make install
eger rpmden kurulum yaptiysaniz /usr/local/lib/sasl'a bir sembolik link olusturun ve hedefi /usr/lib/sasl olarak verin. Tar.gz den kurulum yaptiysaniz tam tersini yapin.
Or: ln -s /usr/local/lib/sasl /usr/lib/sasl
Postfix
Postfix mail programinin tum ayarlarini main.cf uzerinde yapacagiz daha sonrada 5 adet yeni dosya yaratacagiz. Ayrica main.cf dosyasinda kullanilabilecek komutlar icin /etc/postfix/ icinde sample- seklinde baslayan dosyalara bakabilirsiniz. Oncelikle portfix derlenmesi islemiyle baslayalim:
Postfix programini http://www.postfix.org/ adresinden cekebilirsiniz. Tam link olarak bu dokumanda kullandigim versiyonun linki su sekilde : ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-1.1.12.tar.gz .
Bu adresten cekeceginiz dosyayi
tar zxvf postfix-1.1.12.tar.gz
komutuyla acabilirsiniz. Postfix'i mysql ve sasl destekli derleyebilmek icin MakeFile uzerinde degisiklik yapmamiz gerekmektedir. Bunun icin asagidaki komutu vermelisiniz.
make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -lsasl'
Bu komutun hepsini 1 satira yazmaniz gerekmektedir. Buradaki /usr/include/mysql kismi kurdugunuz dagitima gore degisiklik gosterebilir. Buraya mysql’in include dosyalarinin bulundugu dizini yazmalisiniz. Ayrica cyrus-sasl programinin library dosyalari icinde CCARGS kisminin sonuna “–I/usr/local/include” ve AUXLIBS in sonuna “–L/usr/local/lib“ ekleyebilirsiniz. Bu islem yapildiktan sonra MakeFile bastan olusturulacaktir.
Bundan sonraki islem:
make
make install
Make install asamasindan once sisteme postfix user ve postdrop groupunu acmaniz gerekmektedir. Bazi dagilimlarda bunlar acik halde gelmektedir.
Bu komutlardan sonra postfix mysql ve sasl destekli olarak kurulmus olacaktir.
Bu asamadan sonra /etc/postfix altindaki dosyalardan main.cf uzerinde degisiklikler ve eklemeler yapacagiz.
#main.cf
home_mailbox = Maildir/
mail_spool_directory = /var/spool/mail
transport_maps=mysql:/etc/postfix/transport.cf
virtual_mailbox_maps=mysql:/etc/postfix/mysql_virt.cf
virtual_uid_maps=mysql:/etc/postfix/uids.cf
virtual_gid_maps=mysql:/etc/postfix/gids.cf
virtual_mailbox_base=/
mydestination = $mydomain, $myhostname, $transport_maps
virtual_maps =mysql:/etc/postfix/virtual.cf
#master.cf dosyasinda eger yoksa asagidaki satiri eklememiz gerekmektedir
virtual unix - n n - - virtual
Simdi yeni yaratacagimiz dosyalarin iceriklerini sirayla yazalim:
# transport.cf
user=postfix
password=whatever
dbname=maildb
table=transport
select_field=transport
where_field=domain
hosts=localhost
# mysql_virt.cf
user=postfix
password= whatever
dbname=maildb
table=users
select_field=maildir
where_field=address
hosts=localhost
# uids.cf
user=postfix
password=whatever
dbname=maildb
table=users
select_field=uid
where_field=address
hosts=localhost
# gids.cf
user=postfix
password=whatever
dbname=maildb
table=users
select_field=gid
where_field=address
hosts=localhost
# virtual.cf
user=postfix
password=whatever
dbname=maildb
table=virtual
select_field=goto
where_field=address
hosts=localhost
Courier Imap:
Courier imap programini hem imap hemde pop3 icin kullanabilirsiniz. Ayrica pop3s ve imaps te icinde gelmektedir.
Courier imap programini http://www.inter7.com/courierimap/ adresinden cekebilirsiniz.
Courier imap programinin ilginc bir ozelligi var root olarak compile edemiyorsunuz. Onun icin oncelikle herhangi bir normal kullanicinin ulasabilecegi bir dizine programi kopyalayin. Sonra normal bir kullanici olarak sisteme girip tar.gz dosyasini acin
tar zxvf courier-imap.xxxxx.tgz
bunu actiktan sonra sirasiyla
./configure
make
make check
buradan sonra root olmamiz gerekecektir,
su root
make install
make install-configure
Bunlari yaptigimizda courier imap /usr/lib/courier-imap/dizinine kurulacaktir
Config dosyalari /usr/lib/courier-imap/etc dizininde yer almaktadir. Buradan config dosyalarinin 2 tanesinde degisiklik yapacagiz.
#authmysqlrc dosyasinda
MYSQL_SERVER localhost #mysql server adresi
MYSQL_USERNAME user
MYSQL_PASSWORD password
MYSQL_SOCKET /tmp/mysql.sock #localhosttan calisiyorsaniz bu gerekli
MYSQL_DATABASE maildb
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD crypt
MYSQL_CLEAR_PWFIELD clear
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD id
MYSQL_HOME_FIELD home
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_WHERE_CLAUSE imapok=1 AND bool1=1 AND bool2=1
Yukarda kullandigimiz MYSQL_MAILDIR_FIELD ile ilgili benim yasadigim bir sorun oldu. Program kullanicinin mail dizinini bulamiyordu. Eger boyle bir sorunla karsilasirsaniz mysql’de users tablosuna yeni bir alan ekleyip ornegin adini courierhome yapin ve oraya Maildir/ dizininin tam yolunu yazin. Or: /var/spool/postfix/virtual/domain.com/user/Maildir/ seklinde. Bu sekilde sorun cozulecektir.
Bu ayarlardan sonra birde
Authdaemonrc dosyasinda authmodulelist="authmysql" yapmamiz gerekiyor. Eger baglantiyi pam ile yapmak isterseniz burada uthmodulelist="authpam" kullanmaniz gerekecektir.
Programi calistirmak icin /usr/lib/courier-imap/libexec teki
imapd.rc start
pop3d.rc start
komutlarini vererek imap ve pop3u baslatmis olursunuz.
Cyrus Sasl
Postfix'in smtp auth ozelligini aktif hale getirmek icin main.cf ye asagidakileri eklemeliyiz.
#sasl
broken_sasl_auth_clients=yes
smtpd_sasl_auth_enable=yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_recipient_restrictions = permit_sasl_authenticated, check_relay_domains
ayarlarini yapmamiz gerekecektir.
Bundan sonra yapilmasi gereken /usr/local/lib/sasl/smtpd.conf diye bir dosya olusturmak ve icine pwcheck_method: pam yazmak. Bu sekilde kurulumumuz tamamlandi.
Not: Yeni linux dagitimlarinda genelde saslauthd gelmektedir. Bunu kullanabilmek icin smtpd.conf dosyasina:
pwcheck_method: saslauthd
mech_list: plain login
yazmalisiniz.
Pam
Mysql ile arada baglanti kurulmasini saglayacak pam programi dagitimlarin icinde rpm olarak gelmektedir. Onu kurmaniz yeterlidir. Daha sonra /etc/pam.d icinde eger yok ise smtp isimli bir dosya olusturmamiz ve icerigini su sekilde ayarlamamiz gerekmektedir.
auth optional pam_mysql.so user=postfix passwd=virtualdbmail db=maildb table=users usercolumn=address passwdcolumn=clear crypt=0
account required pam_mysql.so user=postfix passwd=virtualdbmail db=maildb table=users usercolumn=address passwdcolumn=clear crypt=0
Ustte yazilanlar auth satiri tek satir ve account satiri tek satir olmak uzere toplam 2 satira yazilmalidir.
Pam ayarlamamizda burada bitimstir.
Yukarida yapilan tum islemlerden sonra mail paketi kurulumumuz tamamlandi. Postfix icin /etc/init.d altina koyabileceginiz script /etc/postfix'in altinda vardir onu edit edip degisiklikler yapabilirsiniz. Sistemde actiginiz kullaniciya mail geldiginde domain user ve mail dizinleri otomatik olarak postfix tarafindan yaratilacaktir. Eger mail almada veya gondermede problemler oluyorsa /var/log/mail dosyasini inceleyebilir ve hatanin kaynaklandigi yeri ogrenebilirsiniz.