CentOS6.6 MySQL Tabanlı Sanal Kullanıcı ve Alan Adlarıyla Postfix Dovecot Yapılandırması

Başlangıç Yapılandırması

Bu yazı HowtoForge ve Linode makalelerinden alıntı yapılarak 32bitlik Bir CentOS 6 dağıtımına e-posta sunucu işlevi kazandırabilmek için hazırlanmıştır. CentOS6.5 Mükemmel Server makalemizin devamı olarak yapılandırılmakla birlikte, yalnızca e-posta sunucusu için sadece bu makale yeterlidir. Makale içerisinde paragraflarda değiştirilmesi gereken bazı alanlar mevcut olup bunları öncesinde/sonrasında belirttik. Değişiklik yapılması gereken dosya muhteviyatında kırmızı/kalın kısımlar bu şekilde değiştirilecek/eklenecek demektir. [...] ibaresi, ilgili dosyada öncesinde ve sonrasında kodlar/ibareler mevcuttur, sadece belirtilen alanların değiştirilmesi gerektiği anlamına geliyor.

Salt haldeki CentOS 6 dağıtımına EPEL ve RepoForge ek depolarını ekleyip, diğer başlangıç ayarlamalarını yapıyoruz:

MySQL Kurulumu

MySQL sunucusu ve istemcisi kurulmamışsa şayet buradaki komutlarla kuruyoruz. e-Posta Sunucusu için gerekli olacak.

MySQL'i sistem başlangıcında otomatik başlayacak şekilde ayarlayıp, servisi başlatıyoruz:

MySQL root şifresini ve başlangıç yapılandırmasını ayarlıyoruz:

Set root password? [Y/n] <-- ENTER
New password: <-- MySQL-ROOT-Şifreniz
Re-enter new password: <-- MySQL-ROOT-Şifreniz
Remove anonymous users? [Y/n] <-- ENTER
Disallow root login remotely? [Y/n] <-- ENTER
Remove test database and access to it? [Y/n] <-- ENTER
Reload privilege tables now? [Y/n] <-- ENTER

Postfix Kurulumu

Aşağıdaki Shell komutlarıyla şayet mevcutsa sendmail paketinin sistem başlangıç ayarı ve servisin kendisi durdurulur, gereksinimlere (depencies) dokunmadan sistemden kaldırılır ve postfix paketi kurulur, sistem başlangıcında otomatik başlayacak şekilde ayarlanır ve de başlatılır:

Dovecot Kurulumu

Aşağıdaki Shell komutlarıyla dovecot kurulur, sistem başlangıcında otomatik başlayacak şekilde ayarlanır ve de başlatılır:

e-Posta Sunucusu için Postfix (MySQL) Ayarlamaları

Aşağıdaki Shell komutlarıyla postfix programının kullanacağı mysql veritabanı oluşturulur, (maildbname=veritabanının adı mailusername=bu veritabaınını kullanacak olan mysql kullanıcısı, mailpass=mysql veritabanını kullanacak mysql kullanıcısın şifresi. Bu ibarelerin yerine kendi bilgilerimizi yazmalıyız):

Burdan itibaren geçilecek komutlar mysql komutlarıdır ve yukarıda belirtilen değiştirilmesi gereken ibarelere dikkat etmeliyiz:

alanadi.com yerine kendi domain adresimizi yazmalıyız:

!!!!EPOSTASIFRESI!!!! yerine e-posta hesaplarında kullanılacak şifreleri user@alanadi.com yerine belirlemek istediğimiz e-posta hesabını yazıyoruz, bu düzende yeni satırlar eklenerek çoğaltılabilir:

Bu kısımda info@alanadi.com'a gelen e-postaların root@alanadi.com'a gitmesi ayarlanıyor:

Aşağıdaki Shell komutlarıyla mevcut /etc/postfix/main.cf dosyasını yedekliyoruz ve nano ile açıyoruz:

/etc/postfix/main.cf dosyasında yapacağımız değişiklikler (alanadi.com ibaresi kendi domainimizle değişmeli, siyah kısımlar mevcut ibarelerdir, kırmızı ve kalın kısımlar eklenir veya değiştirilir) şu şekilde olmalı:

[...]
#myhostname = virtual.domain.tld
myhostname = mail.alanadi.com
[...]
#mydomain = domain.tld
mydomain = alanadi.com
[...]
#myorigin = $myhostname
#myorigin = $mydomain
myorigin = $mydomain
[...]
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost
inet_interfaces = all
[...]
#inet_protocols = all
inet_protocols = ipv4
[...]
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
[...]
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
relayhost =
[...]
#recipient_delimiter = +
recipient_delimiter = +
[...]
#smtpd_banner = $myhostname ESMTP $mail_name
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no
[...]
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES

# TLS parameters
smtpd_tls_cert_file=/etc/pki/tls/certs/www.alanadi.com.net.crt
smtpd_tls_key_file=/etc/pki/tls/private/www.alanadi.com.key
smtpd_use_tls=yes
smtpd_tls_auth_only = yes

#Enabling SMTP for authenticated users, and handing off authentication to Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

#Enabling SMTP for authenticated users, and handing off authentication to Dovecot
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

#Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
virtual_transport = lmtp:unix:private/dovecot-lmtp

#Virtual domains, users, and aliases
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

#content_filter = amavis:[127.0.0.1]:10024
#receive_override_options = no_address_mappings

CTRL+X kombinasyonu ve Y tuşlarına basarak /etc/postfix/main.cf dosyasını kaydedip kapatıyoruz.

Aşağıdaki Shell komutuyla yeni bir /etc/postfix/mysql-virtual-mailbox-domains.cf dosyası açıyoruz:

/etc/postfix/mysql-virtual-mailbox-domains.cf dosyasına aşağıdaki satırları ekliyoruz (değiştirilmesi gerekli alan kırmızı dikkat edelim):

user = mailusername
password = mailpass
hosts = 127.0.0.1
dbname = maildbname
query = SELECT destination FROM virtual_aliases WHERE source='%s'

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

Aşağıdaki Shell komutuyla yeni bir mysql-virtual-mailbox-domains.cf dosyası açıyoruz:

mysql-virtual-mailbox-domains.cf dosyasına aşağıdaki satırları ekliyoruz (değiştirilmesi gerekli alan kırmızı dikkat edelim):

user = mailusername
password = mailpass
hosts = 127.0.0.1
dbname = maildbname
query = SELECT 1 FROM virtual_domains WHERE name='%s'

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

Aşağıdaki Shell komutuyla yeni bir mysql-virtual-mailbox-maps.cf dosyası açıyoruz:

mysql-virtual-mailbox-maps.cf dosyasına aşağıdaki satırları ekliyoruz (değiştirilmesi gerekli alan kırmızı dikkat edelim):

user = mailusername
password = mailpass
hosts = 127.0.0.1
dbname = maildbname
query = SELECT 1 FROM virtual_users WHERE email='%s'

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

Aşağıdaki komutlarla servisi yeniden başlatıp kurulumun sağlamasını yapıyoruz (değiştirilmesi gereken alanları değiştiriyoruz):

Aşağıdaki Shell komutlarıyla /etc/postfix/master.cf dosyasını yekleyip nano ile dosyayı açıyoruz:

başlarında # (diyez) olan satırların aşağıdaki değişiklere göre #'leri kaldırarak değişikliklerini yapıyoruz:

[...]
submission inet - n - - smtpd
[...]
smtps inet n - n - - smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
[...]

dosyanın en altına aşağıdaki ibareleri ekliyoruz:

#
# Dovecot LDA
dovecot unix - n n - - pipe
  flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient}

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

e-Posta Sunucusu için Dovecot Ayarlamaları

Aşağıdaki komutlarla değişiklik yapacağımız dovecot yapılandırma dosyalarını yedekliyoruz:

Değişikliklere başlıyoruz:

[...]
# Protocols we want to be serving.
!include_try /usr/share/dovecot/protocols.d/*.protocol
#protocols = imap imaps pop3 pop3s lmtp
protocols = imap pop3 lmtp
[...]

[...]
# connection is considered secure and plaintext authentication is allowed.
#disable_plaintext_auth = yes
disable_plaintext_auth = yes
[...]
# NOTE: See also disable_plaintext_auth setting.
auth_mechanisms = plain login
[...]
#!include auth-deny.conf.ext
#!include auth-master.conf.ext

#!include auth-system.conf.ext
!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

[...]
# <doc/wiki/MailLocation.txt>
#
#mail_location =
mail_location = maildir:/var/spool/mail/vhosts/%d/%n:INDEX=/var/spool/mail/vhosts/%d/%n:INBOX=/var/spool/mail/vhosts/%d/%n/.INBOX
[...]
# Typically this is set to "mail" to give access to /var/mail.
#mail_privileged_group =
mail_privileged_group = mail
[...]

(Bu dosyanın birkaç paragrafında değişiklikler mevcut!)

[...]
service imap-login {
inet_listener imap {
port = 143
}
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. <doc/wiki/LoginProcess.txt>
#service_count = 1

# Number of processes to always keep waiting for more connections.
#process_min_avail = 0

# If you set service_count=0, you probably need to grow this.
#vsz_limit = 64M
vsz_limit = 0
}
[...]

[...]
service pop3-login {
inet_listener pop3 {
port = 110
}
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 auth {
# auth_socket_path 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
# $default_internal_user.
user = vmail
}
[...]

[...]
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
#ssl = yes
ssl = yes
[...]
# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
#ssl_key = </etc/pki/dovecot/private/dovecot.pem
ssl_cert = </etc/pki/tls/certs/www.alanadi.com.crt
ssl_key = </etc/pki/tls/private/www.alanadi.com.key
[...]

SSL Sertifikası oluşturmak için buraya bakabiliriz.

[...]
plugin {
autocreate = Drafts
autocreate2 = Sent
autocreate3 = Trash
autosubscribe = Drafts
autosubscribe2 = Sent
autosubscribe3 = Trash
}

komutuyla yeni bir /etc/dovecot/auth-sql.conf.ext dosyası oluşturup, içine;


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

satırlarını ekliyoruz.

komutuyla yeni bir /etc/dovecot/auth-sql.conf.ext dosyası oluşturup, içine; dovecot-sql.conf.ext dosyasının içeriğini ekliyoruz. (maildbname, mailusername ve mailpass ibarelerini içerir. Bu yüzden bunları kendi verilerimizle değiştiriyoruz.)
Alternatif bağlantılar (dovecot-sql.conf.ext): 1 2 3

komutlarıyla gerekli grupları oluşturuyoruz, gerekli izinler veriliyor.

komutuyla /etc/aliases dosyasını açıyoruz, dosyanın sonuna;

root: root@alanadi.com
user: user@alanadi.com

satırlarını ekliyoruz. Bu satırlarla linuxdaki kullanıcılar ile mysql'e eklediğimiz sanal kullanıcıları birleştirmiş oluyoruz. Eklenecek satırlarla çoğaltılabilir.

bu komutlarla da aliases veritabanını güncellenir ve ilgili servisler yeniden başlatılır.

Deneme e-Postası Oluşturma

mailx paketini kurduk, yapılandırma dosyasını yedekledik, nano ile açtık, içinde şöyle değişiklikler yapıyoruz:

[...]
# Outgoing messages are sent in ISO-8859-1 if all their characters are
# representable in it, otherwise in UTF-8.
#set sendcharsets=iso-8859-1,utf-8
set sendcharsets=utf-8
[...]

Bu yazı, DigitalOcean Platformu üzerinde CentOS6.5 dağıtımı olarak kurulup üzerine kurulan paket, yazılımlar ve ayarlamalarla stabil bir şekilde çalışan sunucunun şablonudur. Evdeki pc'ye kurulmuş veya başka firma veya platformlardan edinilen vps/vds/dedicated tarzı bir CentOS6.6 dağıtımında da çalışması muhtemeldir fakat çıkabilecek sorunlardan ve tutarsızlıklardan mesul olmadığımı en başta belirtmek isterim.

Şayet henüz üye değilseniz https://www.digitalocean.com/?refcode=55be147097e7 linki ile DigitalOcean platformuna benim referansımla üye olursanız, 10$ hediye kazanacaksınız. Bu sayede giriş seviyesi bir VPS planı (512MB RAM, 20GB SSD Depolama Alanı) ile 2 aylık veya giriş seviyesinin üstü bir VPS planı (1GB, 30 GB SSD Depolama Alanı) 2 aylık kullanım hakkı kazanabilirsiniz. Ayrıca hesabınıza (bu hediye 10$'dan başka) PayPal ile 25$ yüklediğinizde (tek seferde şart değil, ör: ilk ay 5 sonra 10 ve sonra da 10$ yüklediğinizde bile olur) ben de 25$ kazanmış olacağım. Bu makaleye ve emeğime teşekkür etmek isteyenlerin yapabileceği en makbul şeylerden biridir benim için 🙂

Bu kısımda info@alanadi.com'a gelen e-postaların root@alanadi.com'a gitmesi ayarlanıyor:

Aşağıdaki Shell komutlarıyla mevcut /etc/postfix/main.cf dosyasını yedekliyoruz ve nano ile açıyoruz:

/etc/postfix/main.cf dosyasında yapacağımız değişiklikler (alanadi.com ibaresi kendi domainimizle değişmeli, siyah kısımlar mevcut ibarelerdir, kırmızı ve kalın kısımlar eklenir veya değiştirilir) şu şekilde olmalı:

[...]
#myhostname = virtual.domain.tld
myhostname = mail.alanadi.com
[...]
#mydomain = domain.tld
mydomain = alanadi.com
[...]
#myorigin = $myhostname
#myorigin = $mydomain
myorigin = $mydomain
[...]
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost
inet_interfaces = all
[...]
#inet_protocols = all
inet_protocols = ipv4
[...]
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
[...]
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
relayhost =
[...]
#recipient_delimiter = +
recipient_delimiter = +
[...]
#smtpd_banner = $myhostname ESMTP $mail_name
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no
[...]
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES

# TLS parameters
smtpd_tls_cert_file=/etc/pki/tls/certs/www.alanadi.com.net.crt
smtpd_tls_key_file=/etc/pki/tls/private/www.alanadi.com.key
smtpd_use_tls=yes
smtpd_tls_auth_only = yes

#Enabling SMTP for authenticated users, and handing off authentication to Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

#Enabling SMTP for authenticated users, and handing off authentication to Dovecot
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

#Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
virtual_transport = lmtp:unix:private/dovecot-lmtp

#Virtual domains, users, and aliases
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

#content_filter = amavis:[127.0.0.1]:10024
#receive_override_options = no_address_mappings

CTRL+X kombinasyonu ve Y tuşlarına basarak /etc/postfix/main.cf dosyasını kaydedip kapatıyoruz.

Aşağıdaki Shell komutuyla yeni bir /etc/postfix/mysql-virtual-mailbox-domains.cf dosyası açıyoruz:

/etc/postfix/mysql-virtual-mailbox-domains.cf dosyasına aşağıdaki satırları ekliyoruz (değiştirilmesi gerekli alan kırmızı dikkat edelim):

user = mailusername
password = mailpass
hosts = 127.0.0.1
dbname = maildbname
query = SELECT destination FROM virtual_aliases WHERE source='%s'

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

Aşağıdaki Shell komutuyla yeni bir mysql-virtual-mailbox-domains.cf dosyası açıyoruz:

mysql-virtual-mailbox-domains.cf dosyasına aşağıdaki satırları ekliyoruz (değiştirilmesi gerekli alan kırmızı dikkat edelim):

user = mailusername
password = mailpass
hosts = 127.0.0.1
dbname = maildbname
query = SELECT 1 FROM virtual_domains WHERE name='%s'

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

Aşağıdaki Shell komutuyla yeni bir mysql-virtual-mailbox-maps.cf dosyası açıyoruz:

mysql-virtual-mailbox-maps.cf dosyasına aşağıdaki satırları ekliyoruz (değiştirilmesi gerekli alan kırmızı dikkat edelim):

user = mailusername
password = mailpass
hosts = 127.0.0.1
dbname = maildbname
query = SELECT 1 FROM virtual_users WHERE email='%s'

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

Aşağıdaki komutlarla servisi yeniden başlatıp kurulumun sağlamasını yapıyoruz (değiştirilmesi gereken alanları değiştiriyoruz):

Aşağıdaki Shell komutlarıyla /etc/postfix/master.cf dosyasını yekleyip nano ile dosyayı açıyoruz:

başlarında # (diyez) olan satırların aşağıdaki değişiklere göre #'leri kaldırarak değişikliklerini yapıyoruz:

[...]
submission inet - n - - smtpd
[...]
smtps inet n - n - - smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
[...]

dosyanın en altına aşağıdaki ibareleri ekliyoruz:

#
# Dovecot LDA
dovecot unix - n n - - pipe
  flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient}

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

e-Posta Sunucusu için Dovecot Ayarlamaları

Aşağıdaki komutlarla değişiklik yapacağımız dovecot yapılandırma dosyalarını yedekliyoruz:

Değişikliklere başlıyoruz:

[...]
# Protocols we want to be serving.
!include_try /usr/share/dovecot/protocols.d/*.protocol
#protocols = imap imaps pop3 pop3s lmtp
protocols = imap pop3 lmtp
[...]

[...]
# connection is considered secure and plaintext authentication is allowed.
#disable_plaintext_auth = yes
disable_plaintext_auth = yes
[...]
# NOTE: See also disable_plaintext_auth setting.
auth_mechanisms = plain login
[...]
#!include auth-deny.conf.ext
#!include auth-master.conf.ext

#!include auth-system.conf.ext
!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

[...]
# <doc/wiki/MailLocation.txt>
#
#mail_location =
mail_location = maildir:/var/spool/mail/vhosts/%d/%n:INDEX=/var/spool/mail/vhosts/%d/%n:INBOX=/var/spool/mail/vhosts/%d/%n/.INBOX
[...]
# Typically this is set to "mail" to give access to /var/mail.
#mail_privileged_group =
mail_privileged_group = mail
[...]

(Bu dosyanın birkaç paragrafında değişiklikler mevcut!)

[...]
service imap-login {
  inet_listener imap {
    port = 143
  }
  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. <doc/wiki/LoginProcess.txt>
  #service_count = 1

  # Number of processes to always keep waiting for more connections.
  #process_min_avail = 0

  # If you set service_count=0, you probably need to grow this.
  #vsz_limit = 64M
  vsz_limit = 0
}
[...]

[...]
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  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 auth {
  # auth_socket_path 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
  # $default_internal_user.
  user = vmail
}
[...]

[...]
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
#ssl = yes
ssl = yes
[...]
# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
#ssl_key = </etc/pki/dovecot/private/dovecot.pem
ssl_cert = </etc/pki/tls/certs/www.alanadi.com.crt
ssl_key = </etc/pki/tls/private/www.alanadi.com.key
[...]

SSL Sertifikası oluşturmak için buraya bakabiliriz.

[...]
plugin {
  autocreate = Drafts
  autocreate2 = Sent
  autocreate3 = Trash
  autosubscribe = Drafts
  autosubscribe2 = Sent
  autosubscribe3 = Trash
}

komutuyla yeni bir /etc/dovecot/auth-sql.conf.ext dosyası oluşturup, içine;


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

satırlarını ekliyoruz.

komutuyla yeni bir /etc/dovecot/auth-sql.conf.ext dosyası oluşturup, içine; dovecot-sql.conf.ext dosyasının içeriğini ekliyoruz. (maildbname, mailusername ve mailpass ibarelerini içerir. Bu yüzden bunları kendi verilerimizle değiştiriyoruz.)
Alternatif bağlantılar (dovecot-sql.conf.ext): 1 2 3

komutlarıyla gerekli grupları oluşturuyoruz, gerekli izinler veriliyor.

komutuyla /etc/aliases dosyasını açıyoruz, dosyanın sonuna;

root: root@alanadi.com
user: user@alanadi.com

satırlarını ekliyoruz. Bu satırlarla linuxdaki kullanıcılar ile mysql'e eklediğimiz sanal kullanıcıları birleştirmiş oluyoruz. Eklenecek satırlarla çoğaltılabilir.

bu komutlarla da aliases veritabanını güncellenir ve ilgili servisler yeniden başlatılır.

Deneme e-Postası Oluşturma

mailx paketini kurduk, yapılandırma dosyasını yedekledik, nano ile açtık, içinde şöyle değişiklikler yapıyoruz:

[...]
# Outgoing messages are sent in ISO-8859-1 if all their characters are
# representable in it, otherwise in UTF-8.
#set sendcharsets=iso-8859-1,utf-8
set sendcharsets=utf-8
[...]

Bu yazı, DigitalOcean Platformu üzerinde CentOS6.5 dağıtımı olarak kurulup üzerine kurulan paket, yazılımlar ve ayarlamalarla stabil bir şekilde çalışan sunucunun şablonudur. Evdeki pc'ye kurulmuş veya başka firma veya platformlardan edinilen vps/vds/dedicated tarzı bir CentOS6.6 dağıtımında da çalışması muhtemeldir fakat çıkabilecek sorunlardan ve tutarsızlıklardan mesul olmadığımı en başta belirtmek isterim.

Şayet henüz üye değilseniz https://www.digitalocean.com/?refcode=55be147097e7 linki ile DigitalOcean platformuna benim referansımla üye olursanız, 10$ hediye kazanacaksınız. Bu sayede giriş seviyesi bir VPS planı (512MB RAM, 20GB SSD Depolama Alanı) ile 2 aylık veya giriş seviyesinin üstü bir VPS planı (1GB, 30 GB SSD Depolama Alanı) 2 aylık kullanım hakkı kazanabilirsiniz. Ayrıca hesabınıza (bu hediye 10$'dan başka) PayPal ile 25$ yüklediğinizde (tek seferde şart değil, ör: ilk ay 5 sonra 10 ve sonra da 10$ yüklediğinizde bile olur) ben de 25$ kazanmış olacağım. Bu makaleye ve emeğime teşekkür etmek isteyenlerin yapabileceği en makbul şeylerden biridir benim için 🙂

Bu kısımda info@alanadi.com'a gelen e-postaların root@alanadi.com'a gitmesi ayarlanıyor:

Aşağıdaki Shell komutlarıyla mevcut /etc/postfix/main.cf dosyasını yedekliyoruz ve nano ile açıyoruz:

/etc/postfix/main.cf dosyasında yapacağımız değişiklikler (alanadi.com ibaresi kendi domainimizle değişmeli, siyah kısımlar mevcut ibarelerdir, kırmızı ve kalın kısımlar eklenir veya değiştirilir) şu şekilde olmalı:

[...]
#myhostname = virtual.domain.tld
myhostname = mail.alanadi.com
[...]
#mydomain = domain.tld
mydomain = alanadi.com
[...]
#myorigin = $myhostname
#myorigin = $mydomain
myorigin = $mydomain
[...]
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost
inet_interfaces = all
[...]
#inet_protocols = all
inet_protocols = ipv4
[...]
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
[...]
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
relayhost =
[...]
#recipient_delimiter = +
recipient_delimiter = +
[...]
#smtpd_banner = $myhostname ESMTP $mail_name
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no
[...]
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES

# TLS parameters
smtpd_tls_cert_file=/etc/pki/tls/certs/www.alanadi.com.net.crt
smtpd_tls_key_file=/etc/pki/tls/private/www.alanadi.com.key
smtpd_use_tls=yes
smtpd_tls_auth_only = yes

#Enabling SMTP for authenticated users, and handing off authentication to Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

#Enabling SMTP for authenticated users, and handing off authentication to Dovecot
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

#Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
virtual_transport = lmtp:unix:private/dovecot-lmtp

#Virtual domains, users, and aliases
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

#content_filter = amavis:[127.0.0.1]:10024
#receive_override_options = no_address_mappings

CTRL+X kombinasyonu ve Y tuşlarına basarak /etc/postfix/main.cf dosyasını kaydedip kapatıyoruz.

Aşağıdaki Shell komutuyla yeni bir /etc/postfix/mysql-virtual-mailbox-domains.cf dosyası açıyoruz:

/etc/postfix/mysql-virtual-mailbox-domains.cf dosyasına aşağıdaki satırları ekliyoruz (değiştirilmesi gerekli alan kırmızı dikkat edelim):

user = mailusername
password = mailpass
hosts = 127.0.0.1
dbname = maildbname
query = SELECT destination FROM virtual_aliases WHERE source='%s'

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

Aşağıdaki Shell komutuyla yeni bir mysql-virtual-mailbox-domains.cf dosyası açıyoruz:

mysql-virtual-mailbox-domains.cf dosyasına aşağıdaki satırları ekliyoruz (değiştirilmesi gerekli alan kırmızı dikkat edelim):

user = mailusername
password = mailpass
hosts = 127.0.0.1
dbname = maildbname
query = SELECT 1 FROM virtual_domains WHERE name='%s'

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

Aşağıdaki Shell komutuyla yeni bir mysql-virtual-mailbox-maps.cf dosyası açıyoruz:

mysql-virtual-mailbox-maps.cf dosyasına aşağıdaki satırları ekliyoruz (değiştirilmesi gerekli alan kırmızı dikkat edelim):

user = mailusername
password = mailpass
hosts = 127.0.0.1
dbname = maildbname
query = SELECT 1 FROM virtual_users WHERE email='%s'

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

Aşağıdaki komutlarla servisi yeniden başlatıp kurulumun sağlamasını yapıyoruz (değiştirilmesi gereken alanları değiştiriyoruz):

Aşağıdaki Shell komutlarıyla /etc/postfix/master.cf dosyasını yekleyip nano ile dosyayı açıyoruz:

başlarında # (diyez) olan satırların aşağıdaki değişiklere göre #'leri kaldırarak değişikliklerini yapıyoruz:

[...]
submission inet - n - - smtpd
[...]
smtps inet n - n - - smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
[...]

dosyanın en altına aşağıdaki ibareleri ekliyoruz:

#
# Dovecot LDA
dovecot unix - n n - - pipe
  flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient}

CTRL+X kombinasyonu ve Y tuşlarına basarak dosyayı kaydedip kapatıyoruz.

e-Posta Sunucusu için Dovecot Ayarlamaları

Aşağıdaki komutlarla değişiklik yapacağımız dovecot yapılandırma dosyalarını yedekliyoruz:

Değişikliklere başlıyoruz:

[...]
# Protocols we want to be serving.
!include_try /usr/share/dovecot/protocols.d/*.protocol
#protocols = imap imaps pop3 pop3s lmtp
protocols = imap pop3 lmtp
[...]

[...]
# connection is considered secure and plaintext authentication is allowed.
#disable_plaintext_auth = yes
disable_plaintext_auth = yes
[...]
# NOTE: See also disable_plaintext_auth setting.
auth_mechanisms = plain login
[...]
#!include auth-deny.conf.ext
#!include auth-master.conf.ext

#!include auth-system.conf.ext
!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

[...]
# <doc/wiki/MailLocation.txt>
#
#mail_location =
mail_location = maildir:/var/spool/mail/vhosts/%d/%n:INDEX=/var/spool/mail/vhosts/%d/%n:INBOX=/var/spool/mail/vhosts/%d/%n/.INBOX
[...]
# Typically this is set to "mail" to give access to /var/mail.
#mail_privileged_group =
mail_privileged_group = mail
[...]

(Bu dosyanın birkaç paragrafında değişiklikler mevcut!)

[...]
service imap-login {
  inet_listener imap {
    port = 143
  }
  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. <doc/wiki/LoginProcess.txt>
  #service_count = 1

  # Number of processes to always keep waiting for more connections.
  #process_min_avail = 0

  # If you set service_count=0, you probably need to grow this.
  #vsz_limit = 64M
  vsz_limit = 0
}
[...]

[...]
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  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 auth {
  # auth_socket_path 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
  # $default_internal_user.
  user = vmail
}
[...]

[...]
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
#ssl = yes
ssl = yes
[...]
# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
#ssl_key = </etc/pki/dovecot/private/dovecot.pem
ssl_cert = </etc/pki/tls/certs/www.alanadi.com.crt
ssl_key = </etc/pki/tls/private/www.alanadi.com.key
[...]

SSL Sertifikası oluşturmak için buraya bakabiliriz.

[...]
plugin {
  autocreate = Drafts
  autocreate2 = Sent
  autocreate3 = Trash
  autosubscribe = Drafts
  autosubscribe2 = Sent
  autosubscribe3 = Trash
}

komutuyla yeni bir /etc/dovecot/auth-sql.conf.ext dosyası oluşturup, içine;


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

satırlarını ekliyoruz.

komutuyla yeni bir /etc/dovecot/auth-sql.conf.ext dosyası oluşturup, içine; dovecot-sql.conf.ext dosyasının içeriğini ekliyoruz. (maildbname, mailusername ve mailpass ibarelerini içerir. Bu yüzden bunları kendi verilerimizle değiştiriyoruz.)
Alternatif bağlantılar (dovecot-sql.conf.ext): 1 2 3

komutlarıyla gerekli grupları oluşturuyoruz, gerekli izinler veriliyor.

komutuyla /etc/aliases dosyasını açıyoruz, dosyanın sonuna;

root: root@alanadi.com
user: user@alanadi.com

satırlarını ekliyoruz. Bu satırlarla linuxdaki kullanıcılar ile mysql'e eklediğimiz sanal kullanıcıları birleştirmiş oluyoruz. Eklenecek satırlarla çoğaltılabilir.

bu komutlarla da aliases veritabanını güncellenir ve ilgili servisler yeniden başlatılır.

Deneme e-Postası Oluşturma

mailx paketini kurduk, yapılandırma dosyasını yedekledik, nano ile açtık, içinde şöyle değişiklikler yapıyoruz:

[...]
# Outgoing messages are sent in ISO-8859-1 if all their characters are
# representable in it, otherwise in UTF-8.
#set sendcharsets=iso-8859-1,utf-8
set sendcharsets=utf-8
[...]

Bu yazı, DigitalOcean Platformu üzerinde CentOS6.5 dağıtımı olarak kurulup üzerine kurulan paket, yazılımlar ve ayarlamalarla stabil bir şekilde çalışan sunucunun şablonudur. Evdeki pc'ye kurulmuş veya başka firma veya platformlardan edinilen vps/vds/dedicated tarzı bir CentOS6.6 dağıtımında da çalışması muhtemeldir fakat çıkabilecek sorunlardan ve tutarsızlıklardan mesul olmadığımı en başta belirtmek isterim.

Şayet henüz üye değilseniz https://www.digitalocean.com/?refcode=55be147097e7 linki ile DigitalOcean platformuna benim referansımla üye olursanız, 10$ hediye kazanacaksınız. Bu sayede giriş seviyesi bir VPS planı (512MB RAM, 20GB SSD Depolama Alanı) ile 2 aylık veya giriş seviyesinin üstü bir VPS planı (1GB, 30 GB SSD Depolama Alanı) 2 aylık kullanım hakkı kazanabilirsiniz. Ayrıca hesabınıza (bu hediye 10$'dan başka) PayPal ile 25$ yüklediğinizde (tek seferde şart değil, ör: ilk ay 5 sonra 10 ve sonra da 10$ yüklediğinizde bile olur) ben de 25$ kazanmış olacağım. Bu makaleye ve emeğime teşekkür etmek isteyenlerin yapabileceği en makbul şeylerden biridir benim için 🙂