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.
[box type="info"]
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)
[/box]
Adım 1: Paket Kurulumu
[bash]apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql dovecot-pop3d[/bash]
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.

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

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:
[bash]mysqladmin -p create mailserver[/bash]
MYSQL de root yetkisi almak için:
[bash]mysql -u root -p[/bash]
komutunu yazıp root şifresini girdiğinizde eğer bir sorun yoksa şu şekilde bir satır gelecek:
[bash]mysql >[/bash]
İ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.
[bash]> GRANT SELECT ON mailserver.* TO ‘mailroot’@’127.0.0.1’ IDENTIFIED BY ‘mailpassword’;[/bash]
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 :
[bash]mysql >FLUSH PRIVILEGES;[/bash]
komutunu çalıştırıyoruz.
Tabloları oluşturmak için veritabanımızı seçiyoruz:
[bash]mysql > USE mailserver;[/bash]
Sanal domain bilgilerini saklayacağımız tablo için :
[bash]CREATE TABLE `virtual_domains`
( `id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`) )
ENGINE=InnoDB DEFAULT CHARSET=utf8;[/bash]
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.
[bash]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;[/bash]
Son olarak takma adlar için tablomuzu oluşturacağız.Takma adlar bir hesap için birden fazla adres tanımlayabilmemizi sağlayacak.
[bash]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;[/bash]
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.
[bash]INSERT INTO `mailserver`.`virtual_domains`
(`id` ,`name`)
VALUES
(‘1’, ‘example.com’),
(‘2’, ‘hostname.example.com’);[/bash]
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]xample.com'),
('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.
[bash]mysql > exit[/bash]
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.
[bash]cp /etc/postfix/main.cf /etc/postfix/main.cf.orig[/bash]
Artık rahat bir şekilde posfix yapılandırma dosyasını düzenleyebiliriz.
[bash]nano /etc/postfix/main.cf[/bash]
Komutuyla dosyayı düzenleyelim.İlk olarak TLS parametrelerini yorum satırı yaparak etkisiz hale getiriyoruz ve hemen altına yeni parametrelerimizi ekliyoruz:
[bash]# 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
[/bash]
mydestination parametresini yorum satırı yaparak hemen altına
[bash]#mydestination = example.com, hostname.example.com, localhost.example.com, localhost
mydestination = localhost[/bash]
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.
[bash]virtual_transport = lmtp:unix:private/dovecot-lmtp[/bash]
Son olarak Postfix in adres,kullanıcı,ve takma ad bilgilerini mysql den almasını sağlamak için şu satırları ekliyoruz:
[bash]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
[/bash]
Şimdi postfix in mysql ile bağlantı kurmasını sağlayacak olan dosyaları oluşturalım.Sanal adresler için:
[bash]nano /etc/postfix/mysql-virtual-mailbox-domains.cf[/bash]
komutu ile dosyayı oluşturalım ve içerisine
[bash]user = mailroot
password = mailpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name=’%s’[/bash]
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.
[bash]service postfix restart[/bash]
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.
[bash]postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf[/bash]
Sıradaki dosyamızı oluşturmak için :
[bash]nano /etc/postfix/mysql-virtual-mailbox-maps.cf[/bash]
Dosya içeriği :
[bash]user = mailroot
password = mailpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email=’%s’[/bash]
Posfix i yeniden başlatıyoruz:
[bash]service postfix restart[/bash]
Doğrulamak için :
[bash]postmap -q
[email protected] mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf[/bash]
Son olarak takma adlar için kullandığımız dosyayı oluşturalım :
[bash]nano /etc/postfix/mysql-virtual-alias-maps.cf[/bash]
Dosya içeriği:
[bash]user = mailroot
password = mailpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source=’%s’[/bash]
[bash]service postfix restart[/bash]
Doğrulamak için :
[bash]postmap -q
[email protected] mysql:/etc/postfix/mysql-virtual-alias-maps.cf[/bash]
SMTP üzerinden bağlanmak için 587. portu açmalıyız.Bunun için /etc/postfix/master.cf dosyasını düzenleyelim.
[bash]nano /etc/postfix/master.cf[/bash]
Bu dosyada aşağıdaki satırları bulup başlarındaki # işaretini kaldırmalısınız:
[bash]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[/bash]
[bash]service postfix restart[/bash]
Adım 4 : Dovecot Yapılandırması
İlk olarak dovecot yapılandırması yaparken değiştireceğimiz dosyaların yedeklerini alalım.
[bash]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
[/bash]
dovecot yapılandırma dosyasını açalım:
[bash]nano /etc/dovecot/dovecot.conf[/bash]
[bash]!include conf.d/*.conf[/bash]
satırını bulup bu satırın aktif yani yorumlanmamış olduğunu kontrol edelim. Sonrasında protokolleri aktif etmek için
[bash]!include_try /usr/share/dovecot/protocols.d/*.protocol[/bash]
satırını bulup hemen altına
[bash]protocols = imap lmtp pop3[/bash]
satırını ekliyoruz.
Sırada 10-mail.conf dosyası var :
[bash]nano /etc/dovecot/conf.d/10-mail.conf[/bash]
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.
[bash]mail_location = maildir:/var/mail/vhosts/%d/%n[/bash]
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.
[bash]mail_privileged_group = mail[/bash]
Mail dizinimizin dosya izinlerini ayarlayalım:
ilk önce mail işlemlerimizde yetkili olacak kullanıcıyı ve grubu oluşturalım:
[bash]groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail[/bash]
sonrasında kullanacağımız her domain için aşağıdaki gibi klasör oluşturalım.
[bash]mkdir -p /var/mail/vhosts/example.com[/bash]
Şimdi mail dizinimizin sahibini ve grubunu belirleyelim:
[bash]chown -R vmail:vmail /var/mail[/bash]
işlemler tamamlandıktan sonra sorun olmadıysa
[bash]ls -ld /var/mail[/bash]
komutun çıktısı aşağıdaki şekilde olmalı(Dosya izinleri):
[bash]drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail[/bash]
Dovecot u yapılandırmaya 10-auth.conf dosyasıyla devam ediyoruz.
[bash]nano /etc/dovecot/conf.d/10-auth.conf[/bash]
[bash]disable_plaintext_auth = yes[/bash]
satırını buluyoruz ve satırı aktif hale getiriyoruz.
auth_mechanisms değerini buluyoruz ve aşağıdaki gibi düzenliyoruz.
[bash]auth_mechanisms = plain login[/bash]
[bash]!include auth-system.conf.ext[/bash]
satırını buluyoruz ve yorum satırı yaparak etkisiz bırakıyoruz.
[bash]#!include auth-sql.conf.ext[/bash]
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.
[bash]nano /etc/dovecot/conf.d/auth-sql.conf.ext[/bash]
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.
[bash]passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}[/bash]
Şimdi /etc/dovecot/dovecot-sql.conf.ext dosyasını düzenleyelim
[bash]nano /etc/dovecot/dovecot-sql.conf.ext[/bash]
dirver parametresini aktif hale getireli m ve değerini mysql olarak ayarlıyalım
[bash]driver = mysql [/bash]
connect satırını aktif hale getirin ve kendi bilgilerinizi kullanarak aşağıdaki gibi düzenleyin
[bash]connect = host=127.0.0.1 dbname=mailserver user=mailroot password=mailpassword[/bash]
default_pass_scheme paremetresini aktif hale getirin ve aşağıdaki şekilde değiştirin
[bash]default_pass_scheme = SHA512-CRYPT[/bash]
password_query parametresini aktif hale getirin ve aşağıdaki gibi değiştirin
[bash]password_query = SELECT email as user, password FROM virtual_users WHERE email=’%u’;[/bash]
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:
[bash]service dovecot restart[/bash]
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