Kurumsal ya da kişisel bir sunucuda e-posta altyapısı kurmak, sysadmin dünyasının en kritik ve bir o kadar da karmaşık görevlerinden biridir. Postfix, bu alanda onlarca yıldır kendini kanıtlamış, güvenli ve esnek bir Mail Transfer Agent (MTA) olarak öne çıkmaktadır. Sendmail’in karmaşıklığına karşı geliştirilen bu yazılım, bugün internet üzerindeki mail sunucularının büyük çoğunluğunu oluşturmaktadır. Bu yazıda Ubuntu/Debian tabanlı bir sistemde Postfix’i sıfırdan kurarak, gerçek bir production ortamına hazır hale getireceğiz.
Ön Gereksinimler ve Hazırlık
Kuruluma başlamadan önce birkaç temel gereksinimi karşılamak gerekir. Bunları atlamak, ileride saatler süren debug seanslarına yol açabilir.
Sunucu Gereksinimleri:
- Temiz bir Ubuntu 22.04 LTS veya Debian 12 kurulumu
- Root ya da sudo yetkisine sahip kullanıcı
- Statik IP adresi (dinamik IP ile mail sunucusu çalıştırmak gerçekten zor)
- Düzgün ayarlanmış hostname
- 25, 587 ve 993 portlarının açık olması
DNS Kayıtları: Mail sunucusunun doğru çalışması için birkaç DNS kaydının önceden hazırlanmış olması gerekir. Bunlar olmadan gönderilen mailler spam kutusuna düşer ya da hiç teslim edilmez.
- A Kaydı: mail.sirketiniz.com –> Sunucu IP’niz
- MX Kaydı: sirketiniz.com –> mail.sirketiniz.com (öncelik: 10)
- PTR Kaydı: Sunucu IP’niz –> mail.sirketiniz.com (Reverse DNS, hosting sağlayıcınızdan talep edilir)
- SPF Kaydı: TXT kaydı olarak –> “v=spf1 mx a ip4:SUNUCU_IP -all”
Hostname ayarını kontrol edelim ve gerekirse düzeltelim:
# Mevcut hostname'i kontrol et
hostname -f
# Hostname'i kalıcı olarak değiştir
hostnamectl set-hostname mail.sirketiniz.com
# /etc/hosts dosyasını düzenle
echo "SUNUCU_IP mail.sirketiniz.com mail" >> /etc/hosts
# Değişikliği doğrula
hostname -f
# Çıktı: mail.sirketiniz.com
Postfix Kurulumu
Sistem paketlerini güncelledikten sonra Postfix’i kuralım. Kurulum sırasında bir dialog ekranı çıkacak, burada “Internet Site” seçeneğini seçin ve domain adınızı girin.
# Sistem güncellemesi
apt update && apt upgrade -y
# Postfix ve gerekli araçları kur
apt install -y postfix postfix-utils mailutils
# Kurulum sonrası servis durumunu kontrol et
systemctl status postfix
# Postfix versiyonunu doğrula
postfix -v
Kurulum tamamlandıktan sonra ana yapılandırma dosyaları /etc/postfix/ dizininde yer alır. En kritik iki dosya main.cf ve master.cf‘tir.
Temel Yapılandırma (main.cf)
/etc/postfix/main.cf dosyası Postfix’in beynidir. Burada yapacağımız değişiklikler mail sunucusunun davranışını doğrudan etkiler.
# Mevcut yapılandırmayı yedekle
cp /etc/postfix/main.cf /etc/postfix/main.cf.backup
# Yapılandırma dosyasını düzenle
nano /etc/postfix/main.cf
Aşağıdaki yapılandırmayı dosyaya uygulayın:
# Temel sunucu kimlik bilgileri
myhostname = mail.sirketiniz.com
mydomain = sirketiniz.com
myorigin = $mydomain
# Hangi ağ arayüzlerinde dinlenecek
inet_interfaces = all
inet_protocols = ipv4
# Bu sunucunun son nokta olduğu domainler
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# Yerel teslimat için relay
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
# Mesaj boyutu limiti (50MB)
message_size_limit = 52428800
# Mailbox boyutu limiti (1GB, 0 = limitsiz)
mailbox_size_limit = 1073741824
# Alias veritabanı
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# Mail kutusu formatı
home_mailbox = Maildir/
# Banner mesajı (versiyon bilgisini gizle)
smtpd_banner = $myhostname ESMTP
# TLS ayarları
smtpd_tls_cert_file = /etc/ssl/certs/mail.crt
smtpd_tls_key_file = /etc/ssl/private/mail.key
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtp_tls_security_level = may
# SMTP kimlik doğrulama
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
# Güvenlik kısıtlamaları
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
# Queue dizini
queue_directory = /var/spool/postfix
Yapılandırmayı kaydedin ve Postfix’i yeniden başlatın:
# Yapılandırma sözdizimini kontrol et
postfix check
# Servisi yeniden başlat
systemctl restart postfix
# Durumu kontrol et
systemctl status postfix
SSL/TLS Sertifikası Oluşturma
Production ortamında Let’s Encrypt kullanmak en mantıklı seçenektir. Ancak test ortamı için self-signed sertifika yeterlidir.
# Let's Encrypt ile ücretsiz sertifika al
apt install -y certbot
# Sertifikayı al (80 portu açık olmalı)
certbot certonly --standalone -d mail.sirketiniz.com
# Sertifika dosyalarının konumunu not et
ls /etc/letsencrypt/live/mail.sirketiniz.com/
# main.cf'deki TLS yollarını güncelle
postconf -e "smtpd_tls_cert_file = /etc/letsencrypt/live/mail.sirketiniz.com/fullchain.pem"
postconf -e "smtpd_tls_key_file = /etc/letsencrypt/live/mail.sirketiniz.com/privkey.pem"
# Postfix'i yeniden başlat
systemctl restart postfix
Dovecot ile IMAP/POP3 Entegrasyonu
Postfix sadece mail transfer işlemlerini yapar. Kullanıcıların mailboxlarına erişebilmesi için Dovecot’a ihtiyaç duyarız. Bu iki yazılım birlikte mükemmel bir mail sunucusu ekosistemi oluşturur.
# Dovecot ve IMAP desteğini kur
apt install -y dovecot-core dovecot-imapd dovecot-pop3d
# Ana yapılandırma dosyasını düzenle
nano /etc/dovecot/dovecot.conf
Dovecot yapılandırmasına eklenecek kritik satırlar:
# /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login
# /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
# /etc/dovecot/conf.d/10-master.conf içine auth-userdb socket ekle
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
# Dovecot'u yeniden başlat
systemctl restart dovecot
systemctl enable dovecot
Alias Yapılandırması
Alias’lar, bir mail adresine gelen maillerin başka bir adrese ya da sisteme yönlendirilmesini sağlar. Özellikle postmaster ve root gibi sistem adreslerinin yönetimi için kritiktir.
# Alias dosyasını düzenle
nano /etc/aliases
# /etc/aliases içeriği
postmaster: root
root: [email protected]
abuse: [email protected]
webmaster: [email protected]
info: info-list
sales: [email protected]
# Belirli bir kullanıcıya birden fazla kişiyi yönlendir
destek: ahmet, mehmet, ayse
# Alias veritabanını yeniden oluştur
newaliases
# Test maili gönder
echo "Test mesaji" | mail -s "Alias Test" root
Spam Koruması ve Güvenlik Ayarları
Bir mail sunucusunu açığa çıkardıktan sonra dakikalar içinde spam ve brute-force saldırıları başlar. Bu nedenle güvenlik önlemlerini erkenden almak şarttır.
Postscreen ile İlk Savunma Hattı
Postscreen, gerçek SMTP oturumu başlamadan önce bağlanan IP adreslerini filtreleyen güçlü bir araçtır. master.cf dosyasını düzenleyelim:
# /etc/postfix/master.cf dosyasında smtp satırını yorum haline getir
# smtp inet n - y - - smtpd
# Yerine postscreen ekle
smtp inet n - y - 1 postscreen
smtpd pass - - y - - smtpd
dnsblog unix - - y - 0 dnsblog
tlsproxy unix - - y - 0 tlsproxy
# main.cf'e postscreen ayarlarını ekle
postconf -e "postscreen_access_list = permit_mynetworks"
postconf -e "postscreen_dnsbl_action = enforce"
postconf -e "postscreen_dnsbl_sites = zen.spamhaus.org*3 bl.spamcop.net*2 b.barracudacentral.org*2"
postconf -e "postscreen_dnsbl_threshold = 3"
postconf -e "postscreen_greet_action = enforce"
systemctl restart postfix
Fail2ban ile Brute-Force Koruması
# Fail2ban kur
apt install -y fail2ban
# Postfix için jail oluştur
cat > /etc/fail2ban/jail.d/postfix.conf << 'EOF'
[postfix]
enabled = true
port = smtp,465,587
filter = postfix
logpath = /var/log/mail.log
maxretry = 5
bantime = 3600
findtime = 600
[postfix-sasl]
enabled = true
port = smtp,465,587
filter = postfix-sasl
logpath = /var/log/mail.log
maxretry = 3
bantime = 7200
EOF
# Fail2ban'i yeniden başlat
systemctl restart fail2ban
# Yasaklanan IP'leri kontrol et
fail2ban-client status postfix
DKIM Kurulumu
DKIM (DomainKeys Identified Mail), gönderilen maillerin şifreli imzayla doğrulanmasını sağlar. Bu olmadan mailiniz büyük ihtimalle spam klasörüne düşer.
# OpenDKIM kur
apt install -y opendkim opendkim-tools
# OpenDKIM yapılandırması
cat > /etc/opendkim.conf << 'EOF'
AutoRestart Yes
AutoRestartRate 10/1h
UMask 002
Syslog yes
SyslogSuccess Yes
LogWhy Yes
Canonicalization relaxed/simple
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
Mode sv
PidFile /run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
UserID opendkim
Socket local:/run/opendkim/opendkim.sock
EOF
# DKIM anahtar çifti oluştur
mkdir -p /etc/opendkim/keys/sirketiniz.com
opendkim-genkey -t -s mail -d sirketiniz.com -D /etc/opendkim/keys/sirketiniz.com/
# Anahtar sahipliğini düzenle
chown -R opendkim:opendkim /etc/opendkim
chmod 640 /etc/opendkim/keys/sirketiniz.com/mail.private
# DNS'e eklenecek DKIM kaydını görüntüle
cat /etc/opendkim/keys/sirketiniz.com/mail.txt
DKIM kaydını DNS panelinizdeki TXT kaydı olarak ekleyin. Çıktı şuna benzeyecektir:
# mail._domainkey.sirketiniz.com TXT kaydı
# v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqh...
# KeyTable ve SigningTable oluştur
echo "mail._domainkey.sirketiniz.com sirketiniz.com:mail:/etc/opendkim/keys/sirketiniz.com/mail.private" > /etc/opendkim/KeyTable
echo "*@sirketiniz.com mail._domainkey.sirketiniz.com" > /etc/opendkim/SigningTable
# TrustedHosts oluştur
cat > /etc/opendkim/TrustedHosts << 'EOF'
127.0.0.1
localhost
sirketiniz.com
mail.sirketiniz.com
EOF
# OpenDKIM'i Postfix ile entegre et
postconf -e "milter_protocol = 6"
postconf -e "milter_default_action = accept"
postconf -e "smtpd_milters = local:run/opendkim/opendkim.sock"
postconf -e "non_smtpd_milters = local:run/opendkim/opendkim.sock"
# Servisleri yeniden başlat
systemctl restart opendkim
systemctl restart postfix
Log İzleme ve Sorun Giderme
Mail sunucusu yönetiminde log okumak en temel beceridir. Postfix’in tüm aktiviteleri /var/log/mail.log dosyasına yazılır.
# Canlı log takibi
tail -f /var/log/mail.log
# Sadece hataları filtrele
grep -i "error|reject|deferred" /var/log/mail.log | tail -50
# Belirli bir kullanıcının maillerini sorgula
grep "to=<[email protected]>" /var/log/mail.log | tail -20
# Mail kuyruğunu görüntüle
postqueue -p
# Kuyruktaki tüm mailleri hemen göndermeyi dene
postqueue -f
# Belirli bir mesajın detaylarını gör
postcat -q MESAJ_ID
# Kuyruktan tek mesaj sil
postsuper -d MESAJ_ID
# Tüm kuyruğu temizle (dikkatli kullan!)
postsuper -d ALL
Submission Port (587) Yapılandırması
Modern mail istemcileri artık 25 yerine 587 portunu kullanmaktadır. master.cf dosyasında bu portun aktif olduğundan emin olalım:
nano /etc/postfix/master.cf
# 587 portu için submission satırının yorumunu kaldır ve düzenle
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
# 587 portunun dinlendiğini doğrula
systemctl restart postfix
ss -tlnp | grep :587
Test ve Doğrulama
Kurulum tamamlandıktan sonra kapsamlı testler yapmak şarttır.
# Yerel test maili gönder
echo "Bu bir test mailidir" | mail -s "Postfix Test" [email protected]
# SMTP bağlantısını manuel test et
telnet localhost 25
# EHLO komutuyla desteklenen özellikleri gör
# Telnet açıkken:
# EHLO mail.sirketiniz.com
# QUIT
# TLS testini yap
openssl s_client -connect mail.sirketiniz.com:587 -starttls smtp
# MX kaydını doğrula
dig MX sirketiniz.com
# SPF kaydını kontrol et
dig TXT sirketiniz.com | grep spf
# DKIM kaydını doğrula
dig TXT mail._domainkey.sirketiniz.com
# Mail-tester.com ile puan al
# echo "" | mail -s "Test" [email protected]
Gerçek Dünya Senaryosu: Şirket Mail Sunucusu
Bir e-ticaret şirketi için kurduğunuzu düşünün. Bu durumda farklı departmanlar için sanal kullanıcılar ve gruplar oluşturmanız gerekecektir.
# Sanal domain desteği için gerekli paketler
apt install -y postfix-mysql dovecot-mysql mysql-server
# Virtual mailbox için main.cf eklentileri
postconf -e "virtual_mailbox_domains = sirketiniz.com, yenidomain.com"
postconf -e "virtual_mailbox_base = /var/mail/vhosts"
postconf -e "virtual_mailbox_maps = hash:/etc/postfix/vmailbox"
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"
postconf -e "virtual_minimum_uid = 100"
postconf -e "virtual_uid_maps = static:5000"
postconf -e "virtual_gid_maps = static:5000"
# Sanal kullanıcı ve grup oluştur
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail/vhosts -m
# Virtual mailbox tablosu oluştur
cat > /etc/postfix/vmailbox << 'EOF'
[email protected] sirketiniz.com/ahmet/
[email protected] sirketiniz.com/mehmet/
[email protected] sirketiniz.com/info/
EOF
# Virtual alias tablosu oluştur
cat > /etc/postfix/virtual << 'EOF'
[email protected] [email protected], [email protected]
[email protected] [email protected]
EOF
# Tabloları derle
postmap /etc/postfix/vmailbox
postmap /etc/postfix/virtual
# Dizin yapısını oluştur
mkdir -p /var/mail/vhosts/sirketiniz.com
chown -R vmail:vmail /var/mail/vhosts
systemctl restart postfix
Periyodik Bakım ve İzleme
Mail sunucusunu kurmak sadece başlangıçtır. Düzenli bakım olmadan sistem zamanla sorunlara yol açar.
# Günlük mail istatistiklerini al (pflogsumm)
apt install -y pflogsumm
# Dünün raporunu al
pflogsumm /var/log/mail.log.1
# Cron ile günlük rapor oluştur
echo "0 7 * * * root pflogsumm /var/log/mail.log.1 | mail -s 'Mail Sunucu Raporu' [email protected]" > /etc/cron.d/mail-report
# Disk kullanımını izle
du -sh /var/mail/vhosts/*
du -sh /var/spool/postfix/*
# Let's Encrypt sertifika yenileme
certbot renew --pre-hook "systemctl stop postfix" --post-hook "systemctl start postfix"
# Postfix kuyruk boyutunu izle
postqueue -p | tail -1
Önemli bakım kontrol listesi:
- Her ay DKIM, SPF ve DMARC kayıtlarını doğrulayın
- Haftalık mail.log dosyasını inceleyin
- Let’s Encrypt sertifikası otomatik yenileme cron’unu test edin
- Kara listeye alınıp alınmadığınızı mxtoolbox.com üzerinden kontrol edin
- Fail2ban engellerini aylık gözden geçirin
- Mail kuyruğunda takılı mesaj olup olmadığını kontrol edin
Sonuç
Postfix kurulumu ve yapılandırması bir defaya mahsus bir iş değildir. Sunucu hayata geçtikten sonra spam koruması, kara liste takibi, sertifika yenileme ve log izleme sürekli dikkat isteyen görevlerdir. Bu yazıda ele aldığımız adımları doğru şekilde uyguladıysanız elinizde şunlar olacak:
- TLS şifrelemeli güvenli SMTP altyapısı
- DKIM imzalaması ile kimlik doğrulamalı mail gönderimi
- SPF ile spam olarak işaretlenme riskini minimize edilmiş bir yapı
- Postscreen ve Fail2ban ile korunmuş servisler
- Dovecot entegrasyonu ile tam işlevli IMAP desteği
En sık karşılaşılan sorun, DNS kayıtlarının eksik ya da yanlış yapılandırılmış olmasıdır. Sunucunuz çalışıyor ama mailler iletilmiyorsa ilk bakacağınız yer her zaman MX, PTR ve SPF kayıtları olsun. mxtoolbox.com ve mail-tester.com bu konuda ücretsiz ve çok değerli araçlardır.
Production’da her zaman değişiklik yapmadan önce yapılandırma dosyalarını yedekleyin ve postfix check komutuyla sözdizimi hatalarını tespit edin. Bir mail sunucusunda yapılan yanlış bir hamle, kullanıcıların saatler ya da günler boyunca mail alamamasına neden olabilir.