Postfix, Dovecot ve MySQL ile Sanal Kullanici ve Alan Adlari icin E-posta yapilandirilmasi

Yazi biraz uzun, dolayisiyla gezegeni web’den takip edenlerden ozur diliyorum.

Bir gorsel kimi zaman bin kelimeden daha etkili olabildigi icin bir gorselle anlatima baslamak sistemin nasil calistigini aktarabilmek icin faydali olacaktir diye dusunuyorum. Gorsel icin .dia dosyasini yazinin sonundaki adresten indirebilir, indirdiginiz dosyayi istediginiz gibi duzenleyebilir ve dagitabilirsiniz. Kaynak gosterseniz hos olur ama zorunda degilsiniz.

mail

Bu gorselde bulunan sayilara karsilik gelen istek ve yanitlar ise su sekilde;

Gelen Posta
1) Gonderici, posta gondermek istedigi adres icin MX kayitlarini ister
2) DNS sunucu MX kayitlarini gondericiye iletir
3) Gonderici MX kaydinin gosterdigi sunucuya posta gondermek istedigini soyler
4) Postayi alan sunucudaki MTA(postfix), MySQL’e alicinin tanimli olup olmadigini sorar
5) MySQL ustteki sorguya evet ya da hayir cevabini verir.
6) Evet cevabini alan Postfix, Dovecot’a postayi kendisi icin saklamasini soyler
7) Dovecot(MDA) gelen postayi kullaniciya ait dizine depolar

Posta Kontrolu
8) Alici Dovecot’a postalarini kontrol etmek istedigini soyler
9) Dovecot aliciya iletisim icin bu sertifikayi kullan diyerek cevap verir
10) Alici, gelen sertifika ile hesap bilgilerini sifreler ve tekrar yollar
11) Dovecot MySQL’e hesap bilgilerinin dogru olup olmadigini sorar
12) MySQL bu sorguyu yanitlar.
13) Dovecot depolama yaptigi dizinden kullanici icin tuttugu postalari ister
14) Bilgi Dovecot’a gonderilir
15) Gondermesi gereken her seye sahip olan Dovecot kullaniciya postalarini iletir

Giden Posta
16) Alici, Postfix’e posta gondermek istedigini soyler
17) Postfix sertifikasini gonderir ve kimlik dogrulamasi yapmasini ister alicidan
18) Alici gelen sertifika ile kimlik bilgilerini sifreler ve geri yollar
19) Postfix, Dovecot’tan gelen bilgileri kendisi icin kontrol etmesini ister
20) Dovecot, MySQL’e kullanici bilgilerinin dogru olup olmadigini sorar
21) MySQL, Dovecot’a yanit verir
22) Dovecot, Postfix’e kimlik dogrulamasinin sonucunu bildirir
23) Postfix kullaniciya kimliginin dogru oldugunu postayi gonderebilecegini soyler
24) Alici, postayi Postfix’e iletir.
25) Postfix, karsi tarafin MTA’sina postayi iletir (karsi tarafin MX kaydina sahip oldugu varsayilmistir)

Artik sistemin nasil calistigini anladigimiza gore neye ihtiyacimiz oldugunu listelemeye gecebiliriz. Oncelikle posta gondermek isteyen birinin bizi bulabilmesi icin MX kayitlarimiza erisebilmesi gerekiyor. Dolayisiyla bu kayitlari yapilandiracagiz. Ardindan Postfix, Dovecot ve MySQL kurulumunu yapacagiz. MySQL bizim icin alan adlarini, kullanicilarin kimlik bilgilerini ve takma adlarini saklayacak. Dovecot, IMAP ve POP3 sunucu olarak calismasinin yani sira SASL(Simple Authentication and Security Layer) implementasyonu sayesinde Postfix icin kimlik dogrulamasi yapacak. Postfix ise gelen ve giden postalari ilgili yerlere iletme gorevini ustlenecek. Postfix ve Dovecot ile iletisimin duz metin olarak yapilmamasi icin SSL sertifikalari kullanacagiz. Anlatimi Ubuntu 12.04 LTS uzerinde yaptigimi da hatirlatayim.

Host adinin ayarlanmasi
Ben bu rehberde Venus’un bir ayi olarak dusunulen fakat daha sonradan olmadigi anlasilan neith adini kullanacagim. Posta alip gonderecegimiz adres ise .tk’den ucretsiz olarak kayit ettigim konusmalar.tk adresi olacak. Islemleri root olarak gerceklestiriyorum. Ardindan sudo kullanabilen bir kullanici olusturup SSH uzerinden root girisini kapatacagim fakat o baska bir anlatimin konusu.

nano /etc/hosts<br></br>  
127.0.0.1 localhost konusmalar.tk<br></br>  
198.199.112.50 konusmalar.tk neith<br></br>  
echo neith > /etc/hostname<br></br>  
hostname -F /etc/hostname```

Bu asamada hostname ve hostname -f ciktilari sirayla su sekilde donmeli.  

hostname


neith


hostname -f


konusmalar.tk```

DNS kayitlarinin eklenmesi
MX kayitlari iki alandan olusuyor. Priority (oncelik) ve host adi. Ben VPS saglayicinin DNS hizmetini kullandigimdan kontrol paneline gidip oncelige 10, host adina da konusmalar.tk diyecegim bir kayit yaratacagim. Bu anlatimda tek bir posta sunucu yapilandiracagimizdan onceligin ne ise yaradiginin aslinda bir onemi yok ama kisaca aciklamak gerekirse birden fazla posta sunucu kurdugumuzda hangisinin tercih edilmesi gerektigini soylemek icin kullaniyoruz. Ornegin 10 konusmalar.tk ve 20 alt.konusmalar.tk MX kayitlarimiz var. alt ve @ farkli IP adresleri donduren A kayitlarina sahipler. Bize e-posta gondermek isteyen biri MX sorgusu yapiyor ve bu iki kaydi da aliyor. Ilk olarak onceligi yuksek olan (sayi degeri dusuk olan, bu durumda 10) sunucu ile iletisime gecmek istiyor. Eger bu sunucudan bir nedenden oturu cevap alamazsa ikinci siradaki sunucu ile iletisime gecmeye calisiyor. Basitce oncelik alaninin yaptigi is bu. Fakat dedigim gibi tek bir sunucu yapilandiracagimizdan 100 de verilse 1 de verilse bir onemi olmayacaktir. DNS konusundaki ikinci ve son onemli nokta ise MX kaydini tutan hostun bir A kaydina sahip olmasi gerektigi. Bu ornekte ben sunucunun FQDN’i icin (hostname -f ciktisi) konusmalar.tk kullandim karisikliga neden olmamak icin fakat posta.konusmalar.tk ya da oncelik ayarinda anlattigim gibi alt.konusmalar.tk gibi bir FQDN de kullanabilirdim. Eger boyle bir isim kullansaydim konusmalar.tk DNS alaninin (zone) alt ya da posta isimleri icin bir A kaydina (bu adresin IP’si nedir kaydi A kaydi oluyor) cevap vermesi gerekecekti. Eger sunucu adinizi bu sekilde yapilandirdiysaniz ve posta alamiyorsaniz DNS kaydinizi kontrol etmenizde yarar var.

Gerekli paketlerin kurulmasi

sudo apt-get install mysql-server postfix-mysql dovecot-mysql dovecot-lmptd dovecot-imapd dovecot-pop3d

Bu paketler zaten gerekli olan birkac diger paketi de kuracagindan kurulmasi gereken tum paketleri apt-get’e vermemize gerek yok. POP3 destegi vermek istemiyorsak dovecot-pop3d paketini kurmamiza gerek yok. Ayni sey IMAP icin de gecerli. Geri kalanlar anlatimin takip edilmesi icin mutlaka kurulmasi gereken paketleri iceriyor. Belki dovecot-lmptd biraz yabanci gelebilir. LMTP local mail transfer protocol anlamina geliyor. Kavrami aciklamadan once mail queue ne ise yarar ona bakalim. Diyelim postfix’e su iki posta adresine bizim icin bu postayi ilet dedik. Postfix ilk posta adresine gonderimizi iletti fakat ikincisine ilk denemesinde ulasamadi. Iste bu durumda postfix bizim icin daha sonra denemek uzere gonderimizi kuyruga aliyor ve bir sure sonra tekrar iletmeye calisiyor. Yerelde ise bu isi yapmak cekirdek citlemek icin cekic kullanmaya benziyor. Bu yuzden posta iletilebiliyorsa ileten, iletemiyorsa reddeden bir protokol gereksinimi ortaya cikiyor ve adina da LMTP deniyor. Postfix, Dovecot ile LMTP sayesinde iletisim kuruyor.

Kurulum asamasinda MySQL icin root sifresi istenecek. Sonrasinda gelen postfix yapilandirma ekraninda Internet Site secimi yapip, System mail name sordugu yere konusmalar.tk adresini girecegim. Eger alt.konusmalar.tk ya da posta.konusmalar.tk olarak yapilandirsaydim DNS kayitlarimi buraya o degerlerden biri gelecekti.

MySQL yapilandirmasi

Yazinin baslarinda MySQL’in bizim icin kullanici ve alan adi bilgilerini tutacagini soylemistik. Bunun icin bir veritabani ve bu veritabaninda uc adet tablo olusturacagiz. Veritabanina sanalposta, olusturacagimiz uc tabloya ise sirayla, sanalalanadlari, sanalkullanicilar ve sanal_takmaadlar isimlerini verecegim. Bu veritabanini kontrol eden kullanici sanalpostayoneticisi olacak ve sifresi anlatim kolayligi acisindan 12345 olacak. Umarim kendi sunucunuzda boyle bir sifre kullanmiyorsunuzdur.

mysql -u root -p<br></br>  
>> CREATE DATABASE sanalposta;<br></br>
>> GRANT SELECT ON sanalposta.* TO 'sanalpostayoneticisi'@'127.0.0.1' IDENTIFIED BY '12345';<br></br>
>> FLUSH PRIVILEGES;```

Ilk satirda veritabanimizi olusturduk. Ardindan gelen iki satirda ise localhost’tan erisim yapacak ve 12345 sifresiyle kimlik dogrulayacak kullaniciya, sanalposta veritabaninda olusturacagimiz tum tablolarda SELECT islemi yapabilmesi icin izin verdik. Sira geldi sanal_alanadlari tablosunu olusturmaya.

CREATE TABLE sanal_alanadlari (

id int(5) UNSIGNED ZEROFILL NOT NULL auto_increment,

name varchar(64) NOT NULL,

PRIMARY KEY (id)


) ENGINE=InnoDB DEFAULT CHARSET=utf8;```

En son RFC’yi kontrol ettigimde bir alan adi nokta dahil maksimum 64 karakter olabiliyordu. Dolayisiyla name sutununu 64 karaktere sinirladik. int(5) ise sadece gorsellik acisindan onemli oldugundan uzerinde durmaya pek gerek yok. sanal_kullanicilar tablomuzu ise su sekilde olusturuyoruz.

>> CREATE TABLE `sanal_kullanicilar` (<br></br>
`id` int(5) UNSIGNED ZEROFILL NOT NULL auto_increment,<br></br>
`domain_id` int(5) UNSIGNED ZEROFILL NOT NULL,<br></br>
`password` varchar(106) NOT NULL,<br></br>
`email` varchar(100) NOT NULL,<br></br>
PRIMARY KEY (`id`),<br></br>  
UNIQUE KEY `email` (`email`),<br></br>  
FOREIGN KEY (domain_id) REFERENCES sanal_alanadlari(id) ON DELETE CASCADE<br></br>  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;```

Kullanici tablomuzda bir kullanici id’si, bu tabloyu alan adlari tablosuna baglayan domain_id, kullanici sifresi ve e-posta sutunlarini olusturduk. @alanadi.com su asamada maksimum 65 karakter tutabileceginden kullanici adina 35 karakter yer kaliyor. Eger daha uzun kullanici adlari tanimlayacaksaniz email kismindaki varchar degerini degistirebilirsiniz. Son olarak sanal_takmaadlar tablomuzu olusturalim.

CREATE TABLE sanal_takmaadlar (

id int(5) UNSIGNED ZEROFILL NOT NULL autoincrement,

domain_id int(5) UNSIGNED ZEROFILL NOT NULL,

source varchar(100) NOT NULL,

destination varchar(100) NOT NULL,

PRIMARY KEY (id),


FOREIGN KEY (domain
id) REFERENCES sanal_alanadlari(id) ON DELETE CASCADE


) ENGINE=InnoDB DEFAULT CHARSET=utf8;```

Bir onceki asamada email alani icin varchar degerini degistirdiyseniz buradaki source ve destination alanlarinda da ayni degisikligi yapmak isteyeceksiniz. Gelelim olusturdugumuz bu tablolara veri eklemeye.

>> INSERT INTO `sanalposta`.`sanal_alanadlari`<br></br>
(`id` ,`name`)<br></br>
VALUES<br></br>  
('1', 'konusmalar.tk');```

>> INSERT INTO `sanalposta`.`sanal_kullanicilar`  
 (`id`, `domain_id`, `password` , `email`)  
 VALUES  
 (‘1′, ‘1’, ENCRYPT(‘sifre1′, CONCAT(‘$6$’, SUBSTRING(SHA(RAND()), -16))), ‘kullanici1@konusmalar.tk’),  
 (‘2′, ‘1’, ENCRYPT(‘sifre2′, CONCAT(‘$6$’, SUBSTRING(SHA(RAND()), -16))), ‘kullanici2@konusmalar.tk’);

Yukaridaki istekte rand() ile 0-1 arasinda bir rastgele sayi urettik. Ardindan sha() ile bunu hashledik ve substring(hash, -16) ile bu hash degerinin son 16 hanesini aldik. concat(‘$6$’, hash’in son 16 hanesi) ile elimizdeki degerin basina $6$ ekledik ki bu da crypt icin SHA512 anlamina gelir. Ardindan ENCRYPT ile sifremizi ve az once olusturdugumuz tuzumuzu birlestirip sifre alanimiza bu degeri verdik. /etc/shadow dosyanizdaki root girdisine bakarsaniz benzer bir yapi goreceksiniz.

INSERT INTO sanalposta.sanal_takmaadlar

(id, domain_id, source, destination)

VALUES


('1', '1', 'root@konusmalar.tk', 'kullanici1@konusmalar.tk');```

root posta hesabi icin de bir yonlendirme belirlemis olduk boylece takmaadlar tablomuzda. Simdi bu degerleri kontrol edebiliriz.

>> USE sanalposta;<br></br>
>> SHOW TABLES;```

+——————–+  
 | Tables_in_anlatim |  
 +——————–+  
 | sanal_alanadlari |  
 | sanal_kullanicilar |  
 | sanal_takmaadlar |  
 +——————–+  
 3 rows in set (0.00 sec)

>> SELECT * FROM sanal_alanadlari;

+——-+—————+  
 | id | name |  
 +——-+—————+  
 | 00001 | konusmalar.tk |  
 +——-+—————+  
 1 row in set (0.00 sec)

>> SELECT * FROM sanal_kullanicilar;

+——-+———–+———————————————————–+  
 | id | domain_id | password | email |  
 +——-+———–+——————-+—————————————+  
 | 00001 | 00001 | $6$bf198693267470de$YukkyGzAs/ | kullanici1@konusmalar.tk |  
 | 00002 | 00001 | $6$da2ea5ba6e70ac34$pRLBLvIRtJ | kullanici2@konusmalar.tk |  
 +——-+———–+———————————————————–+  
 2 rows in set (0.00 sec)

password alani burada gosterdigimden cok daha uzun olacak, duzgun gozukmesi icin bir kismini kestim. $ isaretlerine dikkat ederseniz concat ve encrypt islemlerinin sonucunu gorebilirsiniz.

`>> SELECT * FROM sanal_takmaadlar;`

+——-+———–+——————–+————————–+  
 | id | domain_id | source | destination |  
 +——-+———–+——————–+————————–+  
 | 00001 | 00001 | root@konusmalar.tk | kullanici1@konusmalar.tk |  
 +——-+———–+——————–+————————–+  
 1 row in set (0.00 sec)

Yukaridakilere benzer ciktilar goruyorsaniz her sey yolunda demektir.

**Postfix Yapilandirmasi**

/etc/postfix/main.cf dosyasinin yorumlardan arindirilmis nihai hali su sekilde olacak. Bu ayarlari dosyayi gosterdikten sonra aciklayacagim.

smtpdbanner = $myhostname ESMTP $mailname (Ubuntu)


biff = no


appenddotmydomain = no


readmedirectory = no


smtpd
tlscertfile=/etc/ssl/certs/dovecot.pem


smtpdtlskeyfile=/etc/ssl/private/dovecot.pem


smtpd
tlssecuritylevel=may


smtpdtlsauthonly=yes


smtpd
sasltype = dovecot


smtpd
saslpath = private/auth


smtpd
saslauthenable = yes


smtpdrecipientrestrictions = permitsaslauthenticated, permitmynetworks, rejectunauthdestination


myhostname = konusmalar.tk


alias
maps = hash:/etc/aliases


aliasdatabase = hash:/etc/aliases


myorigin = /etc/mailname


mydestination = localhost


relayhost =


mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 198.199.112.50


mailbox
sizelimit = 0


recipient
delimiter = +


inetinterfaces = all


virtual
transport = lmtp:unix:private/dovecot-lmtp


virtualmailboxdomains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf


virtualmailboxmaps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf


virtualaliasmaps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf```

Postfix, bence, belgelendirmesi en iyi olan ozgur yazilim projelerinden biri. main.cf altindaki her ayarin aciklamasini da http://www.postfix.org/postconf.5.html adresinden bulabilirsiniz. Ustte paylastigim 25-30 tanesinin kisa aciklamalari soyle.

smtpdbanner = $myhostname ESMTP $mailname (Ubuntu)

Herhangi bir bilgisayardan asagidaki komutu verirseniz

telnet konusmalar.tk 587

size suna benzer bir cikti donecektir.

Trying 198.199.112.50...<br></br>  
Connected to konusmalar.tk.<br></br>  
Escape character is '^]'.<br></br>  
220 konusmalar.tk ESMTP Postfix (Ubuntu)```

iste buradaki 220 konusmalar.tk ESMTP Postfix (Ubuntu) satirini smtpd_banner ayari ile kontrol ediyoruz. smtpd_banner’in $myhostname ile baslamasi zorunlu, fakat bunun disinda istediginiz degisikligi yapabilirsiniz. Yani soyle bir goruntu elde etmek mumkun. Fakat bu kisimda belki Ubuntu’yu silmek disinda bir degisiklik yapmanizi pek onermem. Zannetmiyorum ama bu bilgileri e-posta gondermek icin kullanmaya calisan enteresan(!) uygulamalar olabilir.

Trying 198.199.112.50...


Connected to konusmalar.tk.


Escape character is '^]'.


220 konusmalar.tk Linux cok guzel, gelsenize!```

Eger 1980’de yasamiyorsaniz biff ayarini no yapmanizda bir sakinca yok. Kullanicilar posta kontrol etmek icin lokal hesaplariyla sisteme giris yapmayacaklarindan -hatta bir lokal hesaplari olmayacagindan- biff kullanmak istemiyoruz.

appenddotmydomain ayari lokal posta icin gitmesi gereken adresin sonuna alanadinin koyulup koyulmayacagini soyluyor. yani root a gitsin bu posta dediginizde sonuna @konusmalar.tk koymak isteyip istemediginiz soyluyorsunuz. Hayir diye devam ediyorum.

readme_directory derleme, calistirma islemlerini anlatan dosyalarin nerede tutulacagini soyluyor ki hic ihtiyacimiz yok.

smtpdtlscertfile=/etc/ssl/certs/dovecot.pem
smtpd
tlskeyfile=/etc/ssl/private/dovecot.pem
smtpdtlssecuritylevel=may
smtpd
tlsauthonly=yes

Onemli kisimlardan bir tanesi burasi. Iletisimin duz metin olarak yapilmamasi icin sertifika kullanacagimizi soylemistik. Postfix icin sertifika ayarini burada yapiyoruz. Dovecot kurulurken bizim icin sertifika olusturuyor. Dolayisiyla eger bir CA tarafindan imzalanmis sertifika kullanmiyorsak Dovecot’in bizim icin urettiklerini kullanabiliriz. smtpdtlscertfile ve smtpdtlskeyfile sertifikanin ve ozel anahtarin nerede tutuldugunu belirtiyor. smtpdtlssecuritylevel ile iletisimin mumkunse sertifika ile sifrelenmesini istiyoruz. Burada encrypt ile zorunlu tutabilirdik fakat SquirrelMail kurulumu yaptigimizda encrypt biraz basimizi agritabilir. Eger securitylevel icin may dersek smtpdtlsauth_only ile giris yapilmasi icin sertifika kullanilmasini zorunlu hale getirebiliriz ki istedigimiz de zaten buydu.

Bir sonraki onemli kisim SASL ayarlarini yaptigimiz kisim. Yazinin basinda Postfix’in kimlik dogrulamasi yaparken Dovecot’a benim icin su kullaniciyi dogrular misin diyecegini ve bu islemi SASL ile yapacagini soylemistik.

smtpdsaslauthenable = yes
smtpd
sasltype = dovecot
smtpd
sasl_path = private/auth

authenable ile Postfix’e SASL kullanacagimizi soyledik. SASL icin konusacagi daemon’i da smtpdsasl_type’a dovecot degerini vererek gosterdik. Dovecot ile konusurken kullanacagi soketin yerini path degiskeniyle verdik. Buraya Dovecot’i yapilandirirken bir daha deginecegiz.

smtpdrecipientrestrictions = permitsaslauthenticated, permitmynetworks, rejectunauth_destination

Yukaridaki ayar hangi kullanicilarin posta gonderebilecegini yapilandirmak icin gereken bir ayar. Icinde reject ya da defer tipinden en az bir tane deger olmasi gerekiyor. permitsaslauthenticated eger bir kullanici SASL kullarak giris yapmissa posta gondermesine izin verilecegi anlamina geliyor. permitmynetworks mynetworks’te belirtilen agdaki istemcilere posta gonderme izini verildigini soyluyor. rejectunauth_destination ile eger posta Postfix’in bildigi bir alana gelmiyor ise reddetmesi gerektigini anlatiyoruz.

myhostname = konusmalar.tk
aliasmaps = hash:/etc/aliases
alias
database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 198.199.112.50
mailboxsizelimit = 0
recipientdelimiter = +
inet
interfaces = all

Yukaridaki bolumde myhostname, mydestination ve mynetworks parametreleri ilgi alanimiza giriyor. myhostname’i MX kaydindaki gibi ayarliyoruz. mydestination’da sadece localhost’u birakiyoruz. mynetworks’e ise kendi IP adresimizi ekliyoruz.

Gelelim Postfix’in MySQL ile nasil konusacagina.

virtualtransport = lmtp:unix:private/dovecot-lmtp
virtual
mailboxdomains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual
mailboxmaps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual
alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

virtual_transport degeri bize Postfix’in postalari MDA(Dovecot) ile nasil degis tokus edecegini anlatiyor. Bunun icin daha once de bahsettigimiz gibi LMTP protokolunu kullanacagiz.

virtualmailboxdomains kisminda Postfix’in kontrol edecegi alan adlarini MySQL’den nasil alacagini anlatan dosyayi, virtualmailboxmaps’te ise eslesen alanadlari icin kullanicilari nasil bulacagini gosteren dosyayi belirtiyoruz. virtualaliasmaps ise MySQL’de son olarak ekledigimiz sanal_takmaadlar tablosundaki sorgularin nasil yapilacagini anlatiyor. Boylelikle Postfix yapilandirmasinda son asamaya girmis oluyoruz. O da az once verdigimiz dosya yollarindaki dosyalari olusturmak.

/etc/postfix/mysql-virtual-mailbox-domains.cf dosyasi

user = sanalpostayoneticisi<br></br>  
password = 12345<br></br>  
hosts = 127.0.0.1<br></br>  
dbname = sanalposta<br></br>  
query = SELECT 1 FROM sanal_alanadlari WHERE name='%s'```

/etc/postfix/mysql-virtual-mailbox-maps.cf dosyasi

user = sanalpostayoneticisi


password = 12345


hosts = 127.0.0.1


dbname = sanalposta


query = SELECT 1 FROM sanal_kullanicilar WHERE email='%s'```

/etc/postfix/mysql-virtual-alias-maps.cf dosyasi

user = sanalpostayoneticisi<br></br>  
password = 12345<br></br>  
hosts = 127.0.0.1<br></br>  
dbname = sanalposta<br></br>  
query = SELECT destination FROM sanal_takmaadlar WHERE source='%s'```

Simdi Postfix’i yeniden baslatalim ve bakalim MySQL ile konusabiliyor mu test edelim.

service postfix restart


postmap -q konusmalar.tk mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf


postmap -q kullanici1@konusmalar.tk mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf


postmap -q root@konusmalar.tk mysql:/etc/postfix/mysql-virtual-alias-maps.cf```

Ilk iki sorgu icin 1 ciktisini, son sorgu icin ise hangi posta hesabina yonlendirdiysek onun ciktisini gormeliyiz. Ciktilar dedigim sekildeyse bir sorun yok demektir.

Dovecot yapilandirmasi

Dovecot 2.x surumlerine kadar tek bir yapilandirma dosyasina sahipti fakat yapilandirmanin daha kolay(!) olacagi dusunulerek 2.x surumleri itibariyle bu tek yapilandirma dosyasi birden cok dosyaya dagitildi. Bana sorarsaniz birden cok dosya ile yapilandirmasi daha zor. Fakat gelecege yatirim acisindan bu halini ogrenmek amaciyla birden cok dosya ile yapilandirma yapacagiz. Islem bittiginde doveconf -n ile aslinda bunca isin tek bir dosya ile ne kadar kolay yapilabilecegini gorecegiz.

Dovecot’un bizim icin yapacagi isler sunlardi. MySQL ile konusup kullanicilarin kimliklerini kontrol edecek Postfix icin. Postfix ile LMTP uzerinden konusup kullanicilarin postalarini dosya sisteminde ilgili dizine gonderecek. IMAP ya da POP3 sunucu olarak gorev yapip SSL destegi sunacak.

Ise /etc/dovecot/dovecot.conf ile baslayacagiz. Dosya ayni squid yapilandirma dosyasi gibi inanilmaz sayida yorum iceriyor. Yorumlari kaldirdiktan sonra elimizde kalanlar ise sunlar.

!include_try /usr/share/dovecot/protocols.d/*.protocol<br></br>
protocols = imap lmtp<br></br>  
dict {<br></br>  
#quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext<br></br>
#expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext<br></br>
}<br></br>
!include conf.d/*.conf<br></br>
!include_try local.conf```

Bu dosyaya bizim ekledigimiz aslinda su satirlar.

!include_try /usr/share/dovecot/protocols.d/*.protocol  
 protocols = imap pop3 lmtp

POP3 ya da IMAP istemiyorsak buradan kaldirabiliriz. Siradaki dosya /etc/dovecot/conf.d/10-mail.conf dosyasi. Yine yorumlardan sonra icerigi su sekilde.

maillocation = maildir:/var/mail/vhosts/%d/%n


mail
privileged_group = mail```

mail_location’da postalarin tutulmasini istedigimiz dizini veriyoruz. %d alanadini %n ise kullanici adini ifade ediyor. Bu dosyayla da isimiz bitti.

Simdi gerekli dizini yaratalim.

mkdir -p /var/mail/vohsts/konusmalar.tk

Simdi de Dovecot’un dosya sisteminde posta saklamak icin kullanacagi kullanici hesabini olusturalim.

groupadd -g 2000 vmail<br></br>  
useradd -g vmail -u 2000 vmail -d /var/mail<br></br>  
chown -R vmail:vmail /var/mail```

/etc/dovecot/conf.d/10-auth.conf dosyasina gelip kimlik kanitlama ayarlarini yapalim. Yorumlanmis satirlardan sonra kalan satirlar soyle. !include auth-system.conf.ext satirinin basina # koyalim. Sisteme giris yapmis kullanici diye bir sey olmayacagindan ayarina da gerek yok.

disableplaintextauth = yes


auth_mechanisms = plain login


!include auth-sql.conf.ex``` t

auth-sql.conf.ext dosyasi ile MySQL ile nasil konusacagini anlatacagiz.

/etc/dovecot/conf.d/auth-sql.conf.ext

passdb {<br></br>  
driver = sql<br></br>  
args = /etc/dovecot/dovecot-sql.conf.ext<br></br>  
}<br></br>
userdb {<br></br>  
driver = static<br></br>  
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n<br></br>  
}```

Yukaridaki dosyada belirttigimiz dovecot-sql.conf.ext dosyasinin icerigi ise soyle olacak yorumlardan sonra.

driver = mysql


connect = host=127.0.0.1 dbname=sanalposta user=sanalpostayoneticisi password=12345


defaultpassscheme = SHA512-CRYPT


passwordquery = SELECT email as user, password FROM sanalkullanicilar WHERE email='%u';```

Dizin sahipligini duzeltelim.

chown -R vmail:dovecot /etc/dovecot<br></br>  
chmod 750 /etc/dovecot```

/etc/dovecot/conf.d/10-master.conf dosyasinda soket ayari su sekilde yapiliyor. SSL kullanmasini istedigim icin imap-login ve pop-login’in port degerini 0 ile degistirdim. service-lmtp ve smtp-auth icin postfix’e gosterdigim ayarlari yaptim. Dosyadaki kimi yorumlari eklemelerin nereye yapilacagini gostermek icin birakiyorum.

service imap-login {


inetlistener imap {


port = 0


}

inet
listener imaps {

port = 993

ssl = yes

}```

Number of connections to handle before starting a new process. Typically

# the only useful values are 0 (unlimited) or 1. 1 is more secure, but 0
# is faster.
#service_count = 1

Number of processes to always keep waiting for more connections.

#processminavail = 0

If you set service_count=0, you probably need to grow this.

#vsz_limit = 64M
}

service pop3-login {
inetlistener pop3 {
port = 0
}
inet
listener pop3s {
#port = 995
#ssl = yes
}
}

service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}

Create inet listener only if you can’t use the above UNIX socket

#inet_listener lmtp {
# Avoid making LMTP visible for the entire internet
#address =
#port =
#}
}

service imap {
# Most of the memory goes to mmap()ing files. You may need to increase this
# limit if you have huge mailboxes.
#vsz_limit = 256M

Max. number of IMAP processes (connections)

#process_limit = 1024
}

service pop3 {
# Max. number of POP3 processes (connections)
#process_limit = 1024
}

service auth {
# authsocketpath points to this userdb socket by default. It’s typically
# used by dovecot-lda, doveadm, possibly imap process, etc. Its default
# permissions make it readable only by root, but you may need to relax these
# permissions. Users that have access to this socket are able to get a list
# of all usernames and get results of everyone’s userdb lookups.

unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}

unix_listener auth-userdb {
mode = 0600
user = vmail
#group = vmail
}

Postfix smtp-auth

#unix_listener /var/spool/postfix/private/auth {
# mode = 0666
#}

Auth process is run as this user.

user = dovecot
}

service auth-worker {
# Auth worker process is run as root by default, so that it can access
# /etc/shadow. If this isn’t necessary, the user should be changed to
# $defaultinternaluser.
user = vmail
}

service dict {
# If dict proxy is used, mail processes should have access to its socket.
# For example: mode=0660, group=vmail and global mailaccessgroups=vmail
unix_listener dict {
#mode = 0600
#user =
#group =
}
}

Siradaki dosya /etc/dovecot/conf.d/10-ssl.conf dosyasi. Yorumlardan sonra kalan satirlar su sekilde. Ayarlar zaten kendini aciklar nitelikte.

ssl = required<br></br>  
ssl_cert = ssl_key = ```

Bu asama ile posta sunucu yapilandirmamizi tamamladik. Dovecot ve Postfix servislerini yeniden baslatalim.

service postfix restart


start dovecot```

Thunderbird ile ornek olarak olusturdugumuz kullanicilardan birini yapilandirabilirsiniz. Yeni kullanicilar ya da alanadlari eklemek icin MySQL komut satirina dusup ornek kullanicilari ekledigimiz sekilde sorgulari ya da istekleri tekrar calistirmaniz gerekiyor. Tabii bu arada hangi alanadinin hangi id ile tutuldugu gibi detaylar gozden kacirilmamali. Catchall diye tabir edilen ve bir kullanici adiyla eslesmeyen tum postalari yakalamak icin sanal_takmaadlari tablosuna source icin @alanadi.com adresini verebilirsiniz.

Squirrelmail kurulumu ile rehberi tamamlamadan once yapmak isteyebileceginiz bir iki sey uzerinde durayim. Submission portunu(587) acmak icin /etc/postfix/master.cf dosyasini duzenlemelisiniz. Benim yapilandirmamda ilgili bolum soyle gorunuyor. Farkettiginiz uzere bu dosyada da main.cf dosyasinda oldugu gibi smtpdsaslauthenable ve smptdclient_restrictions gibi secenekleri kullanabiliyoruz.

submission inet n - - - - smtpd<br></br>  
-o syslog_name=postfix/submission<br></br>
-o smtpd_sasl_auth_enable=yes<br></br>
-o smtpd_client_restrictions=permit_sasl_authenticated,permit_mynetworks,reject```

Servislerin calisip calismadigi, calisiyorlarsa hangi portlari dinlediklerini gormek icin ise benim kullandigim komut su. IPv6 henuz ilginizi cekmiyorsa buyuk hata yapiyorsunuz fakat t’nin yanina 4 ekleyebilirsiniz sadece IPv4 icin. Ilk uc kolonu almazsak cikti suna benzeyecektir. Ben sadece IMAPs sundugum icin 993, SMTP icin ise 25 ve 587 calistiriyorum. Siz bu ciktida SSH ve calistiriyorsaniz diger daemon’lari da goreceksiniz.

`netstat -plnt4`

Active Internet connections (only servers)  
 Local Address Foreign Address State PID/Program name  
 127.0.0.1:3306 0.0.0.0:* LISTEN 22790/mysqld  
 0.0.0.0:587 0.0.0.0:* LISTEN 24543/master  
 0.0.0.0:25 0.0.0.0:* LISTEN 24543/master  
 0.0.0.0:993 0.0.0.0:* LISTEN 22920/dovecot

**Squirrelmail yapilandirmasi**

Ilk olarak gerekli paketi kuruyoruz.

`apt-get install squirrelmail`

Squirrelmail bir suru bagimliligiyla birlikte kurulacaktir. Ardindan su komutu veriyoruz.

`squirrelmail-configure`

SquirrelMail Configuration : Read: config.php (1.4.0)  
 ———————————————————  
 Main Menu —  
 1. Organization Preferences  
 2. Server Settings  
 3. Folder Defaults  
 4. General Options  
 5. Themes  
 6. Address Books  
 7. Message of the Day (MOTD)  
 8. Plugins  
 9. Database  
 10. Languages

D. Set pre-defined settings for specific IMAP servers

C Turn color on  
 S Save data  
 Q Quit

Command >>

gibi bir ekran bizi karsilayacaktir. Onemli bolum 2. Server Settings dedigi bolum. R ile bir onceki menuye donuluyor. S ile yapilan ayarlar kaydediliyor. Q ise ile yapilandirmadan cikiliyor. 2’ye basrak ayarlara gecelim. Bu menude A ve B tuslariyla IMAP ve SMTP ayarlarinizi yapabilirsiniz.

Son islem ise Apache’ye squirrelmail yapilandirmasini tanitmak. Hazir gelen yapilandirmayi kopyalayalim.

`cp /usr/share/squirrelmail/config /etc/apache2/sites-available`

Sites-available altina aldigimiz dosyada istedigimiz degisiklikleri yapabiliriz. Ornegin alias direktifini duzenleyelim.

Alias /posta /usr/share/squirrelmail

Degisikliklerimizi de yaptiktan sonra Apache’yi yeniden yukleyelim.

`service apache2 reload`

Artik kullanicilar hesaplarina http://konusmalar.tk/posta adresine eriserek giris yapabileceklerdir.

[![Screenshot from 2013-05-20 14:09:59](https://blog.cagriemer.net/wp-content/uploads/2013/05/Screenshot-from-2013-05-20-140959-300x229.png)](https://blog.cagriemer.net/wp-content/uploads/2013/05/Screenshot-from-2013-05-20-140959.png)

Ekler:  
 doveconf -n ile tek bir dosya olsaydi yapilandirmanin nasil olacagini gorecegiz demistim. Su sekilde gozukuyor.

2.0.19: /etc/dovecot/dovecot.conf

OS: Linux 3.2.0-23-virtual x86_64 Ubuntu 12.04.2 LTS ext4

authmechanisms = plain login


mail
location = maildir:/var/mail/vhosts/%d/%n


mailprivilegedgroup = mail


passdb {


args = /etc/dovecot/dovecot-sql.conf.ext


driver = sql


}

protocols = imap lmtp


service auth-worker {


user = vmail


}

service auth {


unixlistener /var/spool/postfix/private/auth {


group = postfix


mode = 0666


user = postfix


}

unix
listener auth-userdb {


mode = 0600


user = vmail


}

user = dovecot


}

service imap-login {


inetlistener imap {


port = 0


}

}

service lmtp {


unix
listener /var/spool/postfix/private/dovecot-lmtp {


group = postfix


mode = 0600


user = postfix


}

}

service pop3-login {


inetlistener pop3 {


port = 0


}

}

ssl = required


ssl
cert = ssl_key = userdb {


args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n


driver = static


}

```

Diyagramin kaynagi ise surada: https://blog.cagriemer.net/wp-content/uploads/2013/05/posta.dia

20 Mayıs 2013

Posted In: Dovecot, E-posta, Gezegen, MySQL, Postfix, Sanal E-posta, SquirrelMail, Ubuntu 12.04

Pardus 2011’e Bir Bakış

Bu inceleme için hayli geç kaldım aslında. Zira 20 Ocak’ta 2011 sürümü yayınlanan, Linux dünyasının en keskin tırnaklı, en sivri dişli, en yırtıcı dağıtımını geç de olsa bir süredir aktif olarak kullanıyorum. Aslında bir açıdan bakınca bu gecikmiş incelemem iyi. Çünkü aceleci ve dolayısıyla ön yargılı bir değerlendirme yapmaktan da sakınmış oldum. 2007.3’ten 2008’e geçtiğimizde çok fazla […]

18 Şubat 2011

Posted In: Amarok, Amd, Animasyon, Bespin, Clementine, Çomak, E-posta, Efekt, Faenza, Gimp, Gnome, Güncel, Gwenview, Hd, İletişim, Iso, Kaptan, Kde4, kdenlive, Kontact, libre office, linux, Masaüstü, Milky, Orta, Oxygen, pardus, Qt Curve, Radeon, Simge, Sütlü, Tema, ubuntu, Xfce, Yalı, Yeni

WP Twitter Auto Publish Powered By : XYZScripts.com