, ,

Linux Üzerinde Mail Sunucusu Kurulumu


Mail kavramı, elektronik ortamda mesaj gönderme ve alma işlemlerini içeren bir iletişim yöntemidir. Geleneksel fiziksel postanın dijital eşdeğeridir. Mail sisteminin temel bileşenlerini şu şekilde açıklayabiliriz:

Mail Sisteminin Temel Bileşenleri

  • Postfix: Mail Transfer Agent (MTA) olarak görev yapar. E-postaları bir göndericiden alıcıya taşır.
  • STARTTLS: Veriyi şifreleyerek güvenliği artırır.
  • SMTP AUTH (SASL): Kullanıcıların kimlik doğrulama mekanizmasıdır.
  • Dovecot: Mail Delivery Agent (MDA) olarak çalışır ve IMAP/POP3 sunucularını temsil eder.
  • Şifreleme için SSL/TLS kullanır.
  • MySQL: Sanal kullanıcılar ve alan adlarının bilgilerini depolar.
  • Spam Filtreleri (Rspamd/SpamAssassin): İstenmeyen e-postaları engellemek ve filtrelemek için kullanılır.

Mail İşleyiş Süreci

  • Gönderme: Postfix gibi bir MTA, gönderici e-postasını alır ve hedef sunucuya ulaştırır. STARTTLS kullanımı, iletim sırasında mesajın şifrelenmesini sağlar.
  • Alma: Dovecot, kullanıcıların e-postalarını çekmesine olanak tanır (IMAP ya da POP3 protokolleriyle). SSL/TLS şifrelemesi ile alıcı sunucuda güvenlik sağlanır.

Veritabanı Kullanımı

Mail sistemlerinde, MySQL gibi veritabanları kullanıcı hesaplarını, parolalarını ve alan adı bilgilerini sanal ortamda saklar. Bu, büyük ölçekli mail sistemlerinde kullanıcı yönetimini kolaylaştırır.

Spam ve Güvenlik

Spam filtreleri, gelen kutusuna istenmeyen içeriklerin ulaşmasını engeller. SpamAssassin veya Rspamd bu işlemi yürütmek için yaygın olarak kullanılan araçlardır.

Bu yapı, modern bir mail sunucusunun temelini oluşturur.

Mail ve DNS İlişkisi

E-posta gönderim ve alımının sorunsuz bir şekilde gerçekleşmesi için DNS kayıtlarının doğru bir şekilde yapılandırılması gereklidir. DNS kayıtları, mail sunucularının diğer sunucularla iletişim kurmasını sağlar ve güvenliği artırır.

DNS Kayıtları

  • A Kaydı (Address Record): Mail sunucusunun tam nitelikli alan adını (FQDN) IPv4 adresine yönlendiren kayıttır.
  • MX Kaydı (Mail Exchange): Alan adına gelen e-postaların hangi sunucuya yönlendirileceğini belirler.
  • SPF Kaydı (Sender Policy Framework): Alan adından e-posta göndermeye yetkili sunucuları tanımlayan ve sahtecilik ile spam’ı önlemeye yardımcı olan bir güvenlik kaydıdır.
  • PTR Kaydı (Reverse DNS): IP adresinin tam nitelikli alan adına karşılık geldiğini doğrular. Bu, özellikle e-posta gönderiminde güvenilirlik açısından önemlidir.

Mail Sunucusu Yapılandırması

DNS kayıtlarının doğru yapılandırılmasının yanı sıra, mail sunucularının aşağıdaki şekilde yapılandırılması gerekir:

  • SMTP, IMAP ve POP3 gibi protokollerin uygun şekilde yapılandırılması.
  • STARTTLS/SSL/TLS gibi şifreleme yöntemleri ile iletişim güvenliğinin sağlanması.
  • Spam ve kötüye kullanımı önlemek için SPF, DKIM ve DMARC gibi güvenlik önlemlerinin uygulanması.

DNS ve Mail Sisteminin Birlikte Çalışması

Mail sunucusu, e-posta gönderim ve alımında DNS kayıtlarını kullanır. Gönderim sırasında hedef alan adına ait MX kaydı sorgulanır. SPF kaydı ile gönderen sunucunun yetkisi doğrulanır ve PTR kaydı ile gönderen sunucunun kimliği kontrol edilir. Bu yapılandırma, e-postaların doğru bir şekilde iletilmesini ve güvenliğini sağlar.

Önkoşullar

Sanal mail sunucusu kurulumuna başlamadan önce aşağıdaki gereksinimleri karşılamanız gerekmektedir:

  1. Linux İşletim Sistemi
    Ubuntu, Debian veya CentOS gibi bir Linux dağıtımı kullanmalısınız.
  2. DNS Alan Adı (Domain)
    Yönetebileceğiniz bir alan adına sahip olmanız gerekir.
  3. TXT ve MX Kayıtları
    Alan adınız için TXT ve MX kayıtlarını oluşturmanız gereklidir. Bu kayıtlar, kendi oluşturduğunuz “zone” dosyasına eklenmelidir.
  4. SSL Sertifikası
    Güvenli bir bağlantı için Let’s Encrypt sitesinden ücretsiz bir SSL sertifikası oluşturmanız gereklidir.

Not

Linux kurulumu, DNS alanı ayarları ve Let’s Encrypt üzerinden ücretsiz SSL sertifikası oluşturma adımları için aşağıdaki makaleme göz atabilirsiniz:
LAMP Server: A Comprehensive Guide for Linux System Administrators

Haydi kuruluma başlayalım! 🙂

Zone Dosyasını Düzenleyerek TXT ve MX kayıtlarını ekleyelim;

sudo vim /etc/bind/db.exampledomain.com
$TTL 86400
@ IN SOA ns1.exampledomain.com. root.mail.exampledomain.com. (
2022011101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)

@ IN NS ns1.exampledomain.com.
ns1 IN A 192.168.1.100
mail IN MX 10 mail.exampledomain.com.
exampledomain.com. IN A 192.168.1.100
mail IN A 192.168.1.100
exampledomain.com. IN TXT "v=spf1 mx ~all"

DigitalOcean’da PTR Kaydı Oluşturması:

PTR kaydı (Reverse DNS), DigitalOcean tarafından droplet’in hostname’ine (sunucu adı) göre otomatik olarak yapılandırılır.

Droplet’inizin adını değiştirmek için şu adımları izleyin:

  1. DigitalOcean Kontrol Paneline giriş yapın.
  2. Droplets bölümüne gidin ve adını değiştirmek istediğiniz droplet’e tıklayın.
  3. Droplet detay penceresinde, droplet’inizin adına tıklayın (bu seçeneğin mevcut olduğunu bilmeyebilirsiniz).
  4. Settings (Ayarlar) sekmesine gidin, giriş alanına yeni ismi yazın ve onay işaretine tıklayın.

Ayrıca, droplet’inizin hostname’ini dahili olarak da güncellemeniz gereklidir. Bunun için:

  • /etc/hostname ve /etc/hosts dosyalarını düzenleyin.
  • Sunucuyu yeniden başlatın.

PTR kaydı, DNS önbelleği nedeniyle birkaç saat içinde otomatik olarak güncellenmelidir.

1. Gerekli Paketleri Yüklemek

apt update && apt install postfix postfix-mysql postfix-doc dovecot-common dovecot-imapd dovecot-pop3d libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql mailutils dovecot-mysql dovecot-sieve dovecot-managesieved

2. MySQL’i Yapılandırmak ve Postfix ile Bağlantı Kurmak

MySQL veritabanı oluşturun ve gerekli tabloları ekleyin:

mysql -u root
mysql> CREATE DATABASE mail;
mysql> USE mail;
mysql> CREATE USER 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain));
mysql> CREATE TABLE users (email varchar(80) NOT NULL, password varchar(128) NOT NULL, PRIMARY KEY (email));
mysql> CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source));
mysql> exit

3. Postfix’i MySQL ile Konfigüre Etmek

a) Sanal alan adı tanımları için mysql_virtual_domains.cf adlı dosyayı oluşturalım şu parametreleri ekleyelim:

vim /etc/postfix/mysql_virtual_domains.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT domain FROM domains WHERE domain='%s'
hosts = 127.0.0.1

b) Yönlendirme tabloları için mysql_virtual_forwardings.cf adlı dosyayı oluşturalım ve şu parametreleri ekleyelim:

vim /etc/postfix/mysql_virtual_forwardings.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1

c) Sanal posta kutusu tanımları için mysql_virtual_mailboxes.cf adlı dosyayı oluşturalım ve şu parametreleri ekleyelim:

vim /etc/postfix/mysql_virtual_mailboxes.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1

d) Email doğrulama için mysql_virtual_email2email.cf adlı dosyayı oluşturalım ve şu parametreleri ekleyelim:

vim /etc/postfix/mysql_virtual_email2email.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1

Postfix konfigürasyonu tamamlandıktan sonra dosyaların izinlerini ayarlayın:

chmod o-rwx /etc/postfix/mysql_virtual_*
chown root.postfix /etc/postfix/mysql_virtual_*

4. Posta İşlemeleri İçin Kullanıcı ve Grup Oluşturmak

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

5. Postfix Ayarları

Postfix’in temel ayarlarını yönetmek için aşağıdaki komutları kullanın:

postconf -e "myhostname = mail.exampledomain.com"
postconf -e "mydestination = mail.exampledomain.com, localhost, localhost.localdomain"
postconf -e "mynetworks = 127.0.0.0/8"
postconf -e "message_size_limit = 31457280"
postconf -e "virtual_alias_domains ="
postconf -e "virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_forwardings.cf, mysql:/etc/postfix/mysql_virtual_email2email.cf"
postconf -e "virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains.cf"
postconf -e "virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailboxes.cf"
postconf -e "virtual_mailbox_base = /var/vmail"
postconf -e "virtual_uid_maps = static:5000"
postconf -e "virtual_gid_maps = static:5000"
postconf -e "smtpd_sasl_auth_enable = yes"
postconf -e "broken_sasl_auth_clients = yes"
postconf -e "smtpd_sasl_authenticated_header = yes"
postconf -e "smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination"
postconf -e "smtpd_use_tls = yes"
postconf -e "smtpd_tls_cert_file = /etc/letsencrypt/live/mail.exampledomain.com/fullchain.pem"
postconf -e "smtpd_tls_key_file = /etc/letsencrypt/live/mail.exampledomain.com/privkey.pem"
postconf -e "virtual_transport=dovecot"
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'

6. SMTP AUTH (SASLAUTHD ve MySQL) Yapılandırması

saslauthd için gerekli dizini oluşturun:

mkdir -p /var/spool/postfix/var/run/saslauthd

saslauthd Konfigürasyon dosyasını düzenleyip şu parametreleri ekleyin:

vim /etc/default/saslauthd

START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="pam"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Yeni bir PAM dosyası oluşturup şu parametreleri ekleyin:

vim /etc/pam.d/smtp

auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=3
account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=3

SASL ayarlarını düzenleyin:

vim /etc/postfix/sasl/smtpd.conf

pwcheck_method: saslauthd
mech_list: plain login
log_level: 4

Gerekli izinleri ayarlayın:

chmod o-rwx /etc/pam.d/smtp
chmod o-rwx /etc/postfix/sasl/smtpd.conf

Postfix kullanıcısını SASL grubuna ekleyin:

usermod -aG sasl postfix

postfix ve saslauthd yeniden başlatın:

systemctl restart postfix
systemctl restart saslauthd

7. Dovecot (POP3/IMAP) Yapılandırması

Postfix ile Dovecot entegrasyonu için:

vim /etc/postfix/master.cf

Dosyanın sonuna ekleyin:

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

Dovecot konfigürasyon dosyasını düzenleyin:

vim /etc/dovecot/dovecot.conf
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/var/vmail/%d/%n/Maildir
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date
namespace {
inbox = yes
location =
prefix = INBOX.
separator = .
type = private
}
passdb {
args = /etc/dovecot/dovecot-sql.conf
driver = sql
}
protocols = imap pop3
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
unix_listener auth-master {
mode = 0600
user = vmail
}
user = root
}
userdb {
args = uid=5000 gid=5000 home=/var/vmail/%d/%n allow_all_users=yes
driver = static
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
log_path = /var/vmail/dovecot-deliver.log
mail_plugins = sieve
postmaster_address = postmaster@example.com
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
service stats {
unix_listener stats-reader {
user = dovecot
group = vmail
mode = 0660
}
unix_listener stats-writer {
user = dovecot
group = vmail
mode = 0660
}
}
ssl = yes
ssl_cert = </etc/letsencrypt/live/mail.exampledomain.com/fullchain.pem
ssl_key = </etc/letsencrypt/mail.exampledomain.com/privkey.pem

Dovecot SQL dosyasını oluşturup şu parametreleri ekleyin:

vim /etc/dovecot/dovecot-sql.conf
driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail_admin password=mail_admin_password
default_pass_scheme = PLAIN-MD5
password_query = SELECT email as user, password FROM users WHERE email='%u';

dovecot’u yeniden başlatın:

systemctl restart dovecot

8. Alan Adları ve Sanal Kullanıcılar Eklemek

MySQL’de alan adı ve kullanıcı eklemek için:

mysql -u root
mysql> USE mail;
mysql> INSERT INTO domains (domain) VALUES ('exampledomain.com');
mysql> INSERT INTO users(email,password) VALUES('u1@exampledomain.com', MD5('123'));
mysql> INSERT INTO users(email,password) VALUES('u2@exampledomain.com', MD5('123'));
mysql> quit;

9. Mail Sistemi Testi

Bir mail istemcisi (Thunderbird gibi) kullanarak hem yerel hem de harici hesaplarla test yapın. Mail gönderimi ve alımını kontrol edin.

Thunderbird’de Yapılandırma

  1. Hesap Oluşturma: Thunderbird’ü başlatın ve “Hesap Ekle” seçeneğini seçin.
  2. Bilgileri Girin:
  • Ad: Kullanıcınızın adı.
  • Email: Örneğin, u1@crystalmind.academy.
  • Şifre: Daha önce belirlediğiniz şifre.

3. Manuel Yapılandırma:

  • Gelen Posta Sunucusu: IMAP, Sunucu Adı: mail.crystalmind.academy, Port: 993, SSL: TLS/SSL, Kimlik Doğrulama: Normal Şifre.
  • Giden Posta Sunucusu: SMTP, Sunucu Adı: mail.crystalmind.academy, Port: 587, SSL: STARTTLS, Kimlik Doğrulama: Normal Şifre.

4. Hesabı Kaydet: Ayarları onaylayıp hesabı oluşturun.

5. Test Etme: Bir test e-postası göndererek ve alarak kurulumun başarılı olup olmadığını kontrol edin.

Bu adımları dikkatlice takip ederek kendi sanal mail sunucunuzu başarıyla kurabilirsiniz.

Sorunsuz bir işleyiş için her adımı test etmeniz önerilir.


Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts