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.
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:
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))), 'email1@example.com'), ('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com');
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', 'alias@example.com', 'email1@example.com'); 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 email1@example.com 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 alias@example.com 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ı:email1@example.com
şifre: firstpassword
IMAP:example.com
SMTP:example.com
şeklinde kendi adreslerinizi kullarak mail adresinize ulaşabilirsiniz.