Postfix, Dovecot ve MySQL ile Mail Server Kurulumu

Giriş

Bu yazı sonunda  sanal  domainler ,kullanıcılar ve takma adlar oluşturabileceğiniz bir mail sunucusu kurmuş olacaksınız.Ayrıca SpamAssassin ile  spam  mesajlara karşı korunmuş olacaksınız.

Başlamadan önce sunucunuzda olması  gerekenler:

* Sunucunuza yönlendirilmiş bir domain (setup domain)
* Kurulu ve çalışan  MySQL  (setup mysql)
* Root yetkili bir kullanıcı (setup new users– omit step 5)
* FQDN tanımlanası (setup FQDN)

İsteğe bağlı: SSL sertifikası (setup free signed ssl certificate)

Adım 1: Paket Kurulumu

apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql dovecot-pop3d

Bu komuttan sonra dovecot  SSL sertifikası oluşturup oluşturmayacağınızı  soruyor ,eğer SSL sertifikanız varsa hayır deyip devam edebilirsiniz.Bu yazıda Dovecot un oluşturduğu SSL sertifikasını kullanacağımız için evet seçeneğini seçiyoruz.

Sonrasında SSL sertifikası oluşturulurken kullanılacak domain adresini isteyecek ,buraya sunucunuzun ana domain adresini  yazıp  devam edin.  Postfix yapılandırma sayfası karşınıza gelecek ,”Internet Site” seçeneğini seçip tamam diyoruz.

postfix-configiration

Sonrasında  sitem mail adresini girmemiz gerekiyor.Bu değer FQDN adresiniz yada ana domain adresiniz olabilir.

postfix-configiration1

Adım 2 : Veri tabanı oluşturma,Sanal domain ,Kullanıcılar ve Takma adlar

Kurulumu  bitirdikten sonra Domainler,kullanıcılar ve takma adlar için üç tane  tablo oluşturacağız.Tablolar için servermail isimli bir veri tabanı oluşturacağız, isterseniz başka bir isim kullanabilirsiniz.

Servermail veri tabanını oluşturmak için:

mysqladmin -p create mailserver

MYSQL de root yetkisi  almak için:

mysql -u root -p

komutunu yazıp  root  şifresini girdiğinizde eğer bir sorun yoksa şu şekilde bir satır gelecek:

mysql >

İlk  olarak bir kullanıcı oluşturacağız ve o kullanıcıya mailserver veri tabanındaki  tüm tablolar için SELECT yetkisi vereceğiz.

> GRANT SELECT ON mailserver.* TO 'mailroot'@'127.0.0.1' IDENTIFIED BY 'mailpassword';

mailroot isimli mailpassword şifreli bir kullanıcı oluşturup mailserver veri tabaında SELECT yetkisini vermiş olduk. İşlemimizin geçerli olması için MYSQL ayarlarını yeniden yüklemeliyiz bunun için :

mysql >FLUSH PRIVILEGES;

komutunu çalıştırıyoruz.

Tabloları oluşturmak için veritabanımızı seçiyoruz:

mysql > USE mailserver;

Sanal domain bilgilerini  saklayacağımız tablo için :

CREATE TABLE `virtual_domains`
 ( `id` INT NOT NULL AUTO_INCREMENT,
 `name` VARCHAR(50) NOT NULL,
 PRIMARY KEY (`id`) )
 ENGINE=InnoDB DEFAULT CHARSET=utf8;

Kullanıcı bilgilerini saklamak için virtual_user tablosunu oluşturacağız. Bu tabloya mail adresi ve şifre bilgilerini yazacağız mail adresinin domain ile eşleşmesi gereklidir.

CREATE TABLE `virtual_users`
( `id` INT NOT NULL AUTO_INCREMENT,
 `domain_id` INT NOT NULL,
 `password` VARCHAR(106) NOT NULL,
 `email` VARCHAR(120) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `email` (`email`),
 FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE )
 ENGINE=InnoDB DEFAULT CHARSET=utf8;

Son olarak takma adlar için tablomuzu oluşturacağız.Takma adlar bir hesap için birden fazla adres tanımlayabilmemizi sağlayacak.

CREATE TABLE `virtual_aliases`
( `id` INT NOT NULL AUTO_INCREMENT,
 `domain_id` INT NOT NULL,
 `source` varchar(100) NOT NULL,
 `destination` varchar(100) NOT NULL,
 PRIMARY KEY (`id`),
 FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE )
 ENGINE=InnoDB DEFAULT CHARSET=utf8;

Tablolarımız oluşturduk artık veri ekleme işlemine geçebiliriz.

Sanal Adresler

Virtual_domains tablosuna kullanmak istediğiniz her adresi  ekleyebilirsiniz.Örnek olarak example.com ve hostname.example.com adreslerini ekleyeceğim.

INSERT INTO `mailserver`.`virtual_domains`
(`id` ,`name`)
VALUES
('1', 'example.com'),
('2', 'hostname.example.com');

Sanal Mail adresleri

Virtual_users tablosuna kullanacağımız  mail  adreslerini tanımlıyoruz.Bu adreslerin domain isimleri virtual_domains tablosunda kayıtlı olmalı.

INSERT INTO `mailserver`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]'),
('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]');

Yukarıdaki istekte password alanında  rand() ile 0-1 arasında bir rastgele sayi ürettik. Ardından sha() ile bunu hashledik ve substring(hash, -16) ile bu hash değerinin son 16 hanesini aldık. concat(‘$6$’, hash’in son 16 hanesi) ile elimizdeki değerin başına $6$ ekledik ki bu da crypt icin SHA512 anlamına gelir. Ardından ENCRYPT ile şifremizi ve az önce oluşturduğumuz şifremizi birleştirip  bu değeri verdik.

Sanal Takma Adlar

Virtual_aliases tablomuza takma adlarımızı ekleyeceğiz.

INSERT INTO `mailserver`.`virtual_aliases`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', '[email protected]', '[email protected]');

Mysql ile işimizi bitirdik artık çıkış yapabliriz.
mysql > exit

 Adım 3: Postfix Yapılandırması

Posfix SMPT ayarlarını ve Mysql bağlantısı ile sanal adresleri kullanabilecek şekilde yapılandırmamız gerekiyor. İlk olarak aşağıdaki komutla postfix yapılandırma dosyasının bir yedeğini alalım.

cp /etc/postfix/main.cf /etc/postfix/main.cf.orig

Artık rahat bir şekilde posfix yapılandırma dosyasını düzenleyebiliriz.

nano /etc/postfix/main.cf

Komutuyla dosyayı düzenleyelim.İlk olarak TLS parametrelerini yorum satırı yaparak etkisiz hale getiriyoruz ve hemen altına yeni parametrelerimizi ekliyoruz:

# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# pem ve key dosyaları dovecot un oluşturduğu dosyalar
# ---
smtpd_tls_cert_file=/etc/dovecot/dovecot.pem
smtpd_tls_key_file= /etc/dovecot/private/dovecot.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtpd_tls_security_level=may
smtpd_tls_protocols = !SSLv2, !SSLv3
# ---
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

mydestination parametresini yorum satırı yaparak hemen altına

#mydestination = example.com, hostname.example.com, localhost.example.com, localhost
mydestination = localhost

myhostname parametresi sunucunuzun FQDN adresi olmalıdır. Eğer FQDN adresiniz sunucunuzda doğru bir şekilde tanımlıysa bu mydestination ve myhostname parametreleri sunucunuzun adres bilgilerine göre ayarlanmış olacaktır,yani example.com yerine sizin domaininiz yazacaktır.

Sanal domainler  için post teslim alma işlemini dovecot un üsleneceğini belirtmek için dosyanın sonuna şu satırı ekliyoruz.

virtual_transport = lmtp:unix:private/dovecot-lmtp

Son olarak Postfix in adres,kullanıcı,ve takma ad bilgilerini mysql den almasını sağlamak için şu satırları ekliyoruz:

virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Şimdi postfix in mysql ile bağlantı kurmasını sağlayacak olan dosyaları oluşturalım.Sanal adresler için:

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

komutu ile dosyayı oluşturalım ve içerisine

user = mailroot
password = mailpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'

yazıp kaydediyoruz.Buradaki bilgiler MYSQL veritabanımızı oluşturduktan sonra oluşturduğumuz ve SELECT yetkisi verdiğimiz kullanıcının bilgileri.Dosyamızın aktif olması için postfix i  yeniden başlatmalıyız.

service postfix restart

Postfix in adresimizi bulabildiğini kontrol etmek için aşağıdaki komutu çalıştırın eğer 1 değerini dönerse çalışıyor demektir.

postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Sıradaki dosyamızı oluşturmak için :

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

Dosya içeriği :

user = mailroot
password = mailpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'

Posfix i  yeniden başlatıyoruz:

service postfix restart

Doğrulamak için :

postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Son olarak takma adlar için kullandığımız dosyayı oluşturalım :

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

Dosya içeriği:

user = mailroot
password = mailpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'
service postfix restart

Doğrulamak için :

postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-alias-maps.cf

SMTP üzerinden  bağlanmak için 587. portu açmalıyız.Bunun için /etc/postfix/master.cf dosyasını düzenleyelim.

nano /etc/postfix/master.cf

Bu dosyada aşağıdaki satırları bulup başlarındaki # işaretini kaldırmalısınız:

submission inet n       -       -       -       -       smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
service postfix restart

Adım 4 : Dovecot Yapılandırması

İlk olarak dovecot yapılandırması yaparken değiştireceğimiz dosyaların yedeklerini alalım.

cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig

dovecot yapılandırma dosyasını  açalım:

nano /etc/dovecot/dovecot.conf
!include conf.d/*.conf

satırını  bulup bu satırın aktif yani yorumlanmamış olduğunu kontrol edelim. Sonrasında protokolleri  aktif  etmek için

!include_try /usr/share/dovecot/protocols.d/*.protocol

satırını bulup hemen altına

protocols = imap lmtp pop3

satırını  ekliyoruz.

Sırada 10-mail.conf dosyası var :

nano /etc/dovecot/conf.d/10-mail.conf

mail_location değerini bulup şu şekilde değiştiriyoruz.Eğer yorum satırı ise baştaki # işaretini kaldırarak aktif hale getiriyoruz.

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

mail_privileged_group değerini bulup aşağıdaki  şekilde değiştiriyoruz.Eğer yorum satırı ise baştaki # işaretini kaldırarak aktif hale getiriyoruz.

mail_privileged_group = mail

Mail dizinimizin  dosya izinlerini  ayarlayalım:

ilk önce mail  işlemlerimizde yetkili olacak kullanıcıyı ve grubu oluşturalım:

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail

sonrasında kullanacağımız  her domain için aşağıdaki gibi  klasör oluşturalım.

mkdir -p /var/mail/vhosts/example.com

Şimdi mail dizinimizin sahibini ve grubunu  belirleyelim:

chown -R vmail:vmail /var/mail

işlemler tamamlandıktan sonra sorun olmadıysa

ls -ld /var/mail

komutun çıktısı aşağıdaki şekilde olmalı(Dosya izinleri):

drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail

Dovecot u yapılandırmaya 10-auth.conf dosyasıyla devam ediyoruz.

nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes

satırını  buluyoruz ve satırı aktif hale getiriyoruz.

auth_mechanisms değerini buluyoruz ve aşağıdaki gibi  düzenliyoruz.

auth_mechanisms = plain login
!include auth-system.conf.ext

satırını  buluyoruz ve yorum satırı yaparak etkisiz bırakıyoruz.

#!include auth-sql.conf.ext

satırını bulup satırı aktif hale getiriyoruz.

Şimdi  dovecot  mysql ile iletişim kurabilsin diye auth-sql-conf.ext dosyasını düzenlemeliyiz.

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

komutu ile dosyayı açıp içerisindeki bütün satırları yorum satırı yapıyoruz yada siliyoruz ve dosya içeriğine aşağıdaki kodları ekliyoruz.

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

Şimdi /etc/dovecot/dovecot-sql.conf.ext dosyasını düzenleyelim

nano /etc/dovecot/dovecot-sql.conf.ext

dirver parametresini aktif hale getireli m ve değerini mysql olarak ayarlıyalım

driver = mysql 

connect satırını aktif hale getirin ve kendi  bilgilerinizi kullanarak aşağıdaki gibi düzenleyin

connect = host=127.0.0.1 dbname=mailserver user=mailroot password=mailpassword

default_pass_scheme paremetresini aktif hale getirin ve aşağıdaki şekilde değiştirin

default_pass_scheme = SHA512-CRYPT

password_query parametresini aktif hale getirin ve aşağıdaki gibi  değiştirin

password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

Sonrasında /etc/dovecot/conf.d/10-master.conf dosyasını düzenlememiz gerekiyor biraz karışık bir dosya olduğu için hazır halini paylaşacağım içeriği kopyalayıp kendi sunucunuzdaki dosya ile değiştirin.

/etc/dovecot/conf.d/10-master.conf :
https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-master.conf.txt

Hepsi bu kadar son olarak dovecot u  baştan başlatıyoruz:

service dovecot restart

kullanıcıadı:[email protected]
şifre: firstpassword
IMAP:example.com
SMTP:example.com

şeklinde kendi adreslerinizi kullarak mail adresinize ulaşabilirsiniz.

kaynak :https://www.digitalocean.com/community/tutorials/how-to-configure-a-mail-server-using-postfix-dovecot-mysql-and-spamassasin

Samet ATABAŞ

Giresun Üniversitesi Öğretim Görevlisi

Bir Yorum Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.