Exim Mail Sunucusu Kurulum ve Temel Yapılandırma

Mail sunucusu kurulumu denince akla ilk gelen isimlerden biri Exim’dir. Debian ve Ubuntu tabanlı sistemlerde varsayılan MTA (Mail Transfer Agent) olarak gelen Exim, esnekliği ve güçlü yapılandırma seçenekleriyle sistem yöneticilerinin favorisi haline gelmiştir. Bu yazıda sıfırdan başlayarak Exim’i nasıl kuracağınızı, temel yapılandırmayı nasıl yapacağınızı ve yaygın senaryolara nasıl çözüm üreteceğinizi ele alacağız.

Exim Nedir ve Neden Tercih Edilir?

Exim, Philip Hazel tarafından Cambridge Üniversitesi için geliştirilmiş, 1995’ten bu yana aktif olarak geliştirilen bir MTA’dır. Sendmail’in karmaşıklığına kıyasla çok daha okunabilir bir yapılandırma dosyası sunar. Postfix kadar sade olmasa da Exim’in ACL (Access Control List) sistemi ve filtre yetenekleri onu özellikle barındırma sağlayıcıları için vazgeçilmez kılar.

Exim’i tercih etmeniz için birkaç somut neden:

  • Güçlü ACL sistemi: Gelen ve giden e-postaları her aşamada filtreleyebilirsiniz
  • Esnek yönlendirme: Router ve transport kavramlarıyla karmaşık posta akışlarını kolayca yönetirsiniz
  • Yerleşik SpamAssassin entegrasyonu: Spam filtrasyonu için ayrı bir proxy gerekmez
  • Detaylı loglama: Sorun gidermede hayat kurtarır
  • cPanel/WHM entegrasyonu: Paylaşımlı hosting ortamlarında standart çözüm

Kurulum Öncesi Hazırlık

Kuruluma geçmeden önce birkaç şeyi netleştirmeniz gerekiyor. Sunucunuzun hostname’i doğru ayarlanmış olmalı, DNS kayıtlarınız hazır olmalı ve 25. port açık olmalıdır.

Hostname kontrolü ve ayarı:

# Mevcut hostname'i kontrol et
hostname -f

# Hostname'i kalıcı olarak ayarla
hostnamectl set-hostname mail.example.com

# /etc/hosts dosyasını düzenle
echo "192.168.1.10 mail.example.com mail" >> /etc/hosts

DNS tarafında en azından şu kayıtların hazır olması lazım:

  • A kaydı: mail.example.com -> Sunucu IP’niz
  • MX kaydı: example.com -> mail.example.com (öncelik 10)
  • PTR kaydı: IP -> mail.example.com (reverse DNS, hosting sağlayıcınızdan talep edin)
  • SPF kaydı: TXT kaydı olarak “v=spf1 mx ~all”

Exim Kurulumu

Debian/Ubuntu Üzerinde Kurulum

# Sistem paketlerini güncelle
apt update && apt upgrade -y

# Exim4 ve yardımcı araçları kur
apt install exim4 exim4-daemon-heavy mailutils -y

# Servis durumunu kontrol et
systemctl status exim4

Burada exim4-daemon-heavy paketini tercih etmenizi öneririm. exim4-daemon-light paketine kıyasla daha fazla özellik içerir; özellikle MySQL desteği, LDAP entegrasyonu ve content scanning için heavy versiyonu gereklidir.

RHEL/CentOS/AlmaLinux Üzerinde Kurulum

# EPEL repository'sini etkinleştir
dnf install epel-release -y

# Exim'i kur
dnf install exim -y

# Sendmail varsa devre dışı bırak
systemctl stop sendmail
systemctl disable sendmail
systemctl mask sendmail

# Exim'i etkinleştir ve başlat
systemctl enable exim
systemctl start exim

Red Hat tabanlı sistemlerde Sendmail genellikle önceden kurulu gelir. İkisinin aynı anda çalışması 25. port çakışmasına neden olacağından Sendmail’i devre dışı bırakmayı unutmayın.

Temel Yapılandırma

Debian/Ubuntu için Yapılandırma Sihirbazı

Debian tabanlı sistemlerde Exim yapılandırması için kullanışlı bir araç gelir:

dpkg-reconfigure exim4-config

Bu komut size birkaç soru sorar. Tipik bir internet maili sunucusu için seçimleriniz şöyle olmalı:

  • Mail configuration type: internet site; mail is sent and received directly using SMTP
  • System mail name: example.com (FQDN değil, sadece domain)
  • IP addresses to listen on: 0.0.0.0 ; ::1
  • Other destinations for which mail is accepted: example.com; mail.example.com; localhost
  • Domains to relay mail for: Boş bırakın
  • Machines to relay mail for: Boş bırakın
  • Minimize DNS queries: No
  • Delivery method: mbox format in /var/mail

Yapılandırma bölünmüş dosyalar halinde /etc/exim4/conf.d/ altında saklanır. Bunları tek dosyada birleştirmek için:

update-exim4.conf
systemctl restart exim4

Ana Yapılandırma Dosyası

Red Hat tabanlı sistemlerde veya doğrudan yapılandırma yapmak istediğinizde /etc/exim4/exim4.conf veya /etc/exim/exim.conf dosyasını düzenlemeniz gerekir. Temel parametreleri inceleyelim:

# /etc/exim4/exim4.conf.template veya /etc/exim/exim.conf dosyasını düzenle
nano /etc/exim4/exim4.conf.template

Kritik direktifler:

  • primary_hostname: Sunucunuzun FQDN’i, EHLO/HELO yanıtlarında kullanılır
  • domainlist local_domains: Bu sunucunun yerel teslim yapacağı domainler
  • domainlist relay_to_domains: Relay yapılacak domainler
  • hostlist relay_from_hosts: Relay yapmasına izin verilen IP’ler
  • acl_smtp_rcpt: RCPT TO komutunda uygulanacak ACL
  • acl_smtp_data: DATA aşamasında uygulanacak ACL

Gerçek Dünya Yapılandırma Örneği

Küçük bir şirket için tipik bir Exim yapılandırması aşağıdaki gibi görünebilir:

# Temel sistem ayarları
primary_hostname = mail.example.com
domainlist local_domains = example.com : example.net
domainlist relay_to_domains =
hostlist relay_from_hosts = localhost : 127.0.0.1 : 192.168.1.0/24

# TLS ayarları
tls_advertise_hosts = *
tls_certificate = /etc/ssl/certs/mail.example.com.crt
tls_privatekey = /etc/ssl/private/mail.example.com.key

# Bağlantı limitleri
smtp_accept_max = 100
smtp_accept_max_per_host = 10
smtp_accept_queue_per_connection = 50

# Log ayarları
log_selector = +smtp_connection +smtp_incomplete_transaction +tls_cipher

TLS/SSL Yapılandırması

2024 itibariyle TLS olmadan mail sunucusu çalıştırmak kabul edilemez. Let’s Encrypt ile ücretsiz sertifika alabilirsiniz:

# Certbot kur
apt install certbot -y

# Sertifika al (mail servisi durdurularak)
systemctl stop exim4
certbot certonly --standalone -d mail.example.com
systemctl start exim4

# Sertifika yollarını Exim yapılandırmasına ekle
# /etc/exim4/exim4.conf.template içinde:
# tls_certificate = /etc/letsencrypt/live/mail.example.com/fullchain.pem
# tls_privatekey = /etc/letsencrypt/live/mail.example.com/privkey.pem

# Certbot'un oluşturduğu dosyaları Exim'in okuyabilmesi için
chmod 755 /etc/letsencrypt/live/
chmod 755 /etc/letsencrypt/archive/

Sertifika otomatik yenileme için bir hook ekleyin:

# /etc/letsencrypt/renewal-hooks/deploy/exim-reload.sh
cat > /etc/letsencrypt/renewal-hooks/deploy/exim-reload.sh << 'EOF'
#!/bin/bash
systemctl reload exim4
EOF
chmod +x /etc/letsencrypt/renewal-hooks/deploy/exim-reload.sh

ACL ile Spam Koruması

Exim’in en güçlü özelliği ACL sistemidir. Bir e-postanın her aşamasında kontrol uygulayabilirsiniz. İşte temel bir spam koruma ACL örneği:

acl_check_rcpt:
  # Yerel kısımları reddet
  deny    local_parts   = ^.*[@%!/|] : ^\.
  
  # Localhost'tan gelen her şeye izin ver
  accept  hosts         = :
  
  # Blacklist kontrolü
  deny    message       = Rejected: $sender_host_address is in blacklist
          dnslists      = zen.spamhaus.org
  
  # HELO/EHLO doğrulaması
  deny    message       = Helo name is not FQDN
          condition     = ${if match{$sender_helo_name}{N^d+.d+.d+.d+$N}{yes}{no}}
  
  # Yerel domainler için kullanıcı doğrulaması
  deny    message       = Unknown user
          domains       = +local_domains
          !verify       = recipient
  
  # Relay kontrolü
  deny    message       = Relay not permitted
          !hosts        = +relay_from_hosts
          !domains      = +local_domains : +relay_to_domains
  
  accept

Bu ACL ile şunları sağlıyorsunuz:

  • Zararlı karakterler: Local part’ta tehlikeli karakterleri engelliyor
  • DNSBL kontrolü: Spamhaus zen listesiyle bilinen spam kaynaklarını engelliyor
  • HELO doğrulaması: IP adresiyle HELO yapan şüpheli istemcileri reddediyor
  • Kullanıcı doğrulaması: Var olmayan kullanıcılara gelen maili reddediyor
  • Relay koruması: İzinsiz relay’i engelliyor

Mail Kuyruğu Yönetimi

Günlük operasyonlarda mail kuyruğu yönetimi önemli bir yer tutar. Exim bu konuda zengin araçlar sunar:

# Kuyrukta bekleyen mailleri listele
exim -bp

# Kuyruk özetini görüntüle
exim -bpc

# Belirli bir maili görüntüle
exim -Mvh MESAJ_ID

# Belirli bir mesajı yeniden göndermeyi dene
exim -M MESAJ_ID

# Tüm kuyruğu işlemeye zorla
exim -qff

# Belirli bir mesajı kuyruktan sil
exim -Mrm MESAJ_ID

# Belirli bir domain'e giden tüm mesajları sil
exim -bp | grep "spam.com" | awk '{print $3}' | xargs exim -Mrm

Gerçek hayatta sık karşılaşılan bir senaryo: Bir kullanıcı hesabı ele geçirildi ve binlerce spam mail kuyruğa girdi. Hızlı temizlik için:

# Frozen (donmuş) mesajları temizle
exiqgrep -z -i | xargs exim -Mrm

# Belirli bir göndericiden gelen mesajları bul ve sil
exiqgrep -f "[email protected]" -i | xargs exim -Mrm

# Kuyruktaki mesaj sayısını anlık takip et
watch -n 5 'exim -bpc'

Log Analizi ve Sorun Giderme

Exim logları /var/log/exim4/ altında tutulur. Ana log dosyaları:

  • mainlog: Tüm mail aktivitesi
  • rejectlog: Reddedilen bağlantılar
  • paniclog: Kritik hatalar (boş olması idealdir!)

Pratik log analizi komutları:

# Son 100 mail teslimini görüntüle
tail -100 /var/log/exim4/mainlog | grep "Completed"

# Belirli bir alıcıya giden mailleri takip et
grep "[email protected]" /var/log/exim4/mainlog | tail -50

# Bounce oranını kontrol et
grep "rejected" /var/log/exim4/mainlog | wc -l

# En çok mail gönderen IP'leri bul
grep "SMTP connection from" /var/log/exim4/mainlog | 
  awk '{print $6}' | sort | uniq -c | sort -rn | head -20

# Panik logunu kontrol et (kritik!)
cat /var/log/exim4/paniclog

Exim’in yerleşik test araçları da oldukça işe yarar:

# Mail akışını test et (gerçekten göndermeden)
exim -bt [email protected]

# Tüm routing adımlarını göster
exim -bv [email protected]

# SMTP oturumu simüle et
exim -bh 1.2.3.4

# Yapılandırma sözdizimini doğrula
exim -bV

Güvenlik Sertleştirmesi

Temel kurulumun ardından güvenlik ayarlarını sıkılaştırmak gerekir:

# Exim'i ayrı bir kullanıcıyla çalıştır (zaten varsayılan)
# exim kullanıcısının UID/GID'ini kontrol et
id exim

# Exim konfigürasyonu izinlerini ayarla
chmod 640 /etc/exim4/exim4.conf
chown root:Debian-exim /etc/exim4/exim4.conf

# VRFY ve EXPN komutlarını devre dışı bırak
# exim.conf içine ekle:
# smtp_accept_max_nonmail = 0
# pipelining_advertise_hosts =

# Maksimum mesaj boyutunu sınırla (25MB)
# message_size_limit = 25M

# Bağlantı rate limiting
# smtp_ratelimit_hosts = ...

/etc/exim4/exim4.conf.template dosyasına eklenecek güvenlik direktifleri:

# Güvenlik sertleştirme parametreleri
smtp_banner = "$primary_hostname ESMTP"
smtp_accept_max_nonmail = 20
pipelining_advertise_hosts = *
message_size_limit = 25M
recipients_max = 50
smtp_accept_max = 200
smtp_accept_max_per_host = 5
smtp_connect_backlog = 32

# Eski ve güvensiz TLS versiyonlarını devre dışı bırak
tls_require_ciphers = NORMAL:%VERS-SSL3.0
openssl_options = +no_sslv2 +no_sslv3 +no_tlsv1 +no_tlsv1_1

DKIM İmzalama Yapılandırması

Günümüzde DKIM imzalamadan mail göndermek, mailinizin spam klasörüne düşmesi anlamına gelir. Exim’e DKIM desteği eklemek için:

# DKIM anahtar çifti oluştur
mkdir -p /etc/exim4/dkim
openssl genrsa -out /etc/exim4/dkim/example.com.private 2048
openssl rsa -in /etc/exim4/dkim/example.com.private -pubout 
  -out /etc/exim4/dkim/example.com.public

# İzinleri ayarla
chown root:Debian-exim /etc/exim4/dkim/example.com.private
chmod 640 /etc/exim4/dkim/example.com.private

# Public key'i DNS TXT kaydına eklemek için görüntüle
cat /etc/exim4/dkim/example.com.public | 
  grep -v "PUBLIC KEY" | tr -d 'n'

DNS’e eklenecek TXT kaydı: mail._domainkey.example.com -> v=DKIM1; k=rsa; p=

Exim yapılandırmasında DKIM imzalamayı aktifleştirin:

# Transport bölümünde (remote_smtp transport'u altına):
dkim_domain = ${sender_address_domain}
dkim_selector = mail
dkim_private_key = /etc/exim4/dkim/${dkim_domain}.private
dkim_canon = relaxed
dkim_strict = 0

Performans Optimizasyonu

Yüksek hacimli ortamlar için birkaç optimizasyon:

  • smtp_accept_max: Eş zamanlı maksimum bağlantı sayısını sunucu kapasitesine göre ayarlayın, genel kural olarak her GB RAM için 50-100 bağlantı makul bir başlangıçtır
  • queue_run_max: Eş zamanlı kuyruk işleme süreçleri, 5-10 arası çoğu ortam için yeterlidir
  • deliver_queue_load_max: Sistem yükü bu değeri aşarsa yeni teslimat başlatılmaz, 10-15 değeri tipik bir başlangıçtır
  • smtp_accept_queue: Bu sayıda bağlantı olduğunda yeni bağlantılar kuyruğa alınır
  • connection_max_messages: Tek bir SMTP bağlantısında gönderilebilecek maksimum mesaj sayısı

Exim Durum Kontrolü ve İzleme

Sistemi düzenli izlemek için basit bir script:

#!/bin/bash
# /usr/local/bin/exim-health-check.sh

QUEUE_SIZE=$(exim -bpc)
PANIC_LOG=/var/log/exim4/paniclog
ALERT_THRESHOLD=500

echo "=== Exim Sağlık Kontrolü ==="
echo "Tarih: $(date)"
echo "Kuyruk boyutu: $QUEUE_SIZE"
echo "Exim versiyonu: $(exim --version | head -1)"
echo "Servis durumu: $(systemctl is-active exim4)"

if [ "$QUEUE_SIZE" -gt "$ALERT_THRESHOLD" ]; then
  echo "UYARI: Kuyruk boyutu $ALERT_THRESHOLD limitini aştı!"
  mail -s "Exim Kuyruk Uyarisi: $QUEUE_SIZE mesaj" [email protected] << EOF
Exim kuyruğunda $QUEUE_SIZE mesaj bulunuyor.
Lütfen kontrol edin.

İlk 20 mesaj:
$(exim -bp | head -20)
EOF
fi

if [ -s "$PANIC_LOG" ]; then
  echo "KRITIK: Panik logu dolu!"
  cat $PANIC_LOG
fi

Bu scripti cron’a ekleyin:

chmod +x /usr/local/bin/exim-health-check.sh
echo "*/15 * * * * root /usr/local/bin/exim-health-check.sh >> /var/log/exim-health.log 2>&1" 
  >> /etc/crontab

Sık Karşılaşılan Sorunlar

“550 relay not permitted” hatası: Relay listesi yanlış yapılandırılmış demektir. relay_from_hosts ve relay_to_domains değerlerini kontrol edin.

Frozen mesajlar: Teslim edilemeyen mesajlar frozen duruma geçer. exiqgrep -z ile listeleyip inceleyebilirsiniz. Kalıcı sorunsa exim -Mrm ile temizleyin.

“Too many connections” hatası: smtp_accept_max değerini artırın ama önce sunucu kaynaklarını kontrol edin.

TLS handshake hataları: Sertifika zincirinin tam olduğundan emin olun. fullchain.pem kullanmak genellikle bu sorunu çözer.

Panik logu dolu: Her zaman ciddi bir soruna işaret eder. Logu okuyun, sorunu giderin ve > /var/log/exim4/paniclog komutuyla temizleyin.

Sonuç

Exim, doğru yapılandırıldığında son derece güvenilir ve esnek bir mail sunucusudur. Bu yazıda temel kurulumdan TLS yapılandırmasına, ACL ile spam korumasından DKIM imzalamaya kadar geniş bir yelpazede konuları ele aldık. Exim’in gerçek gücü ACL sisteminde yatıyor; spam filtrasyonu, kullanıcı doğrulama ve yönlendirme konularında neredeyse sınırsız esneklik sunuyor.

Bir sonraki adım olarak Dovecot ile IMAP entegrasyonunu, SpamAssassin ile gelişmiş spam filtrelemesini veya yüksek erişilebilirlik için Exim cluster yapılandırmasını incelemenizi öneririm. Mail sunucusu yönetimi sürekli bakım isteyen bir alan; logları düzenli takip edin, blacklist durumunuzu kontrol edin ve TLS sertifikalarınızın geçerliliğini izleyin.

Yorum yapın