Postfix ile Mail Arşivleme ve Kayıt Tutma

Mail sunucularında arşivleme ve kayıt tutma konusu, hem yasal uyumluluk hem de sorun giderme açısından hayati önem taşıyor. Bir şirkette mail akışının takibini yapamamak, güvenlik olaylarında adeta kör uçmak gibi. Postfix bu konuda oldukça güçlü araçlar sunuyor ve doğru yapılandırıldığında hem tüm mesajları arşivleyebilir hem de detaylı log tutabilirsiniz.

Neden Mail Arşivleme Gerekli?

Birkaç farklı senaryoyu düşünelim. Hukuk departmanı, üç ay önce gönderilen bir mailin içeriğini istiyor. IT güvenlik ekibi, bir çalışanın hassas veri sızdırıp sızdırmadığını soruşturuyor. Ya da sadece “bu maili gönderdim, karşı taraf almadı” tartışmasını çözmek istiyorsunuz. Bunların hepsinde merkezi bir mail arşivi sizi kurtarır.

Postfix kendi başına bir arşivleme çözümü değil, ancak BCC mekanizması ve always_bcc direktifi sayesinde tüm mailleri merkezi bir kutuda toplayabilirsiniz. Buna ek olarak syslog entegrasyonu ve özel log formatları ile akışı tamamen izlenebilir hale getirebilirsiniz.

Temel Log Yapısını Anlama

Postfix varsayılan olarak /var/log/mail.log veya /var/log/maillog dosyasına yazar (dağıtıma göre değişir). Her mesaj için birden fazla log satırı üretilir ve bu satırlar queue_id ile birbirine bağlanır.

Tipik bir mail akışı logu şöyle görünür:

tail -f /var/log/mail.log

Çıktı örneği:

Jan 15 09:23:41 mailserver postfix/smtpd[12345]: connect from client.example.com[192.168.1.100]
Jan 15 09:23:41 mailserver postfix/smtpd[12345]: 3F4A21234: client=client.example.com[192.168.1.100]
Jan 15 09:23:41 mailserver postfix/cleanup[12346]: 3F4A21234: message-id=<[email protected]>
Jan 15 09:23:41 mailserver postfix/qmgr[1234]: 3F4A21234: from=<[email protected]>, size=2048, nrcpt=1
Jan 15 09:23:42 mailserver postfix/smtp[12347]: 3F4A21234: to=<[email protected]>, relay=mail.domain.com[10.0.0.1]:25, delay=0.5, status=sent (250 OK)
Jan 15 09:23:42 mailserver postfix/qmgr[1234]: 3F4A21234: removed

Bu yapıyı anlamak log analizinin temelini oluşturuyor. queue_id değeri olan 3F4A21234, bir mesajın tüm yaşam döngüsünü takip etmenizi sağlar.

Log Seviyelerini Yapılandırma

Postfix’in main.cf dosyasında log ayrıntı seviyesini artırabilirsiniz. /etc/postfix/main.cf dosyasını düzenleyin:

# Mevcut debug level ayarlarini gorun
postconf | grep debug
# main.cf icin onerilen log ayarlari
debug_peer_level = 2
smtp_tls_loglevel = 1
smtpd_tls_loglevel = 1

TLS loglamasını aktifleştirmek özellikle önemli. smtp_tls_loglevel = 1 ile hangi bağlantıların şifreli, hangilerinin düz metin gittiğini görebilirsiniz. Değeri 2 yaparsanız sertifika detaylarını da loglar ama bu çok fazla gürültü yaratır, üretim ortamında 1 yeterli.

Belirli bir IP adresini detaylı debug için izlemek istiyorsanız:

# main.cf
debug_peer_list = 192.168.1.100
debug_peer_level = 3

Yapılandırmayı uyguladıktan sonra:

postfix reload

always_bcc ile Merkezi Arşivleme

En pratik arşivleme yöntemi always_bcc direktifi. Gönderilen veya alınan her mailden bir kopyayı belirlediğiniz adrese yönlendirir.

Önce arşiv için bir kullanıcı ve mailbox oluşturun:

# Sistem kullanicisi olustur (login olmayan)
useradd -r -s /sbin/nologin mailarchive

# Postfix icin alias tanimlama
echo "mailarchive: /var/mail/archive/mailarchive" >> /etc/aliases
newaliases

Arşiv dizinini hazırlayın:

mkdir -p /var/mail/archive
chown mailarchive:mailarchive /var/mail/archive
chmod 700 /var/mail/archive

Şimdi main.cf dosyasına ekleyin:

# /etc/postfix/main.cf
always_bcc = mailarchive@localhost

Bu kadar basit. Artık sisteminizden geçen her mail bu adrese de kopyalanır. Ancak burada dikkat edilmesi gereken bir nokta var: Büyük ortamlarda bu yöntem ciddi disk kullanımı yaratır. Günde 10.000 mail geçen bir sistemde arşiv klasörü hızla şişer.

sender_bcc ve recipient_bcc ile Daha İnce Kontrol

always_bcc yerine daha seçici bir yaklaşım için tablo tabanlı BCC kuralları kullanabilirsiniz. Bu sayede belirli domain veya gönderenler için arşiv kuralı tanımlarsınız.

# /etc/postfix/main.cf
sender_bcc_maps = hash:/etc/postfix/sender_bcc
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc

Sender BCC tablosu /etc/postfix/sender_bcc:

# Tum @sirket.com adreslerinden gidenleri arsivle
@sirket.com        [email protected]

# Belirli kisiyi arsivle
[email protected]     [email protected]

Recipient BCC tablosu /etc/postfix/recipient_bcc:

# Tum @sirket.com alicilar icin arsiv
@sirket.com        [email protected]

Tabloları derleyin:

postmap /etc/postfix/sender_bcc
postmap /etc/postfix/recipient_bcc
postfix reload

Bu yaklaşım özellikle yalnızca şirket içi trafiği arşivlemek istediğinizde ya da belirli departmanlar için ayrı arşiv kutuları oluşturmak istediğinizde çok işe yarıyor.

Arşiv Mailbox’ını Dovecot ile Yönetme

Arşiv kutusunu Postfix’in mbox formatında bırakmak uzun vadede sorun çıkarır. Dovecot ile Maildir formatında saklarsanız hem performans kazanırsınız hem de arama ve yönetim kolaylaşır.

Önce Dovecot’ta arşiv kullanıcısı için mailbox tanımlayın. /etc/dovecot/conf.d/10-mail.conf dosyasına bakın ve Maildir formatını doğrulayın:

# Arsiv icin ayri bir lokasyon tanimlayabilirsiniz
mail_location = maildir:/var/mail/archive/%u

Postfix’te ise teslimatı Dovecot LMTP üzerinden yapın. Bu sayede aynı kullanıcı veritabanını kullanırsınız:

# /etc/postfix/main.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp

Log Analizi: Pratik Komutlar

Ham loglar başlı başına bir değer taşıyor ancak bunlardan anlam çıkarmak için bazı araçları bilmeniz gerekiyor.

Belirli bir mail adresine giden tüm mailleri bulmak:

grep "to=<[email protected]>" /var/log/mail.log | grep "status=sent"

Bir queue ID’nin tüm yaşam döngüsünü takip etmek:

grep "3F4A21234" /var/log/mail.log

Son 24 saatteki başarısız teslimatları saymak:

grep "status=bounced|status=deferred" /var/log/mail.log | 
  awk '{print $NF}' | sort | uniq -c | sort -rn | head -20

Saatlik mail yoğunluğunu görmek:

grep "status=sent" /var/log/mail.log | 
  awk '{print $1, $2, $3}' | 
  cut -d: -f1 | sort | uniq -c

Bu tür analizler hem kapasite planlaması hem de anormal trafik tespiti için değerli. Bir sabah 03:00’te normalde neredeyse sıfır olan outbound mail trafiğinin patlamasını görmek, bir spam botu veya ihlal edilmiş hesabın işareti olabilir.

pflogsumm ile Otomatik Raporlama

pflogsumm Postfix log özetleyicisi, günlük mail raporları oluşturmak için mükemmel bir araç. Kurulumu basit:

# Debian/Ubuntu
apt install pflogsumm

# RHEL/CentOS
yum install postfix-perl-scripts

Manuel kullanım:

pflogsumm -d yesterday /var/log/mail.log

Bu komutu cron ile otomatikleştirin. /etc/cron.d/mail-report dosyası oluşturun:

# Her sabah 07:00'de dun gunun raporunu gonder
0 7 * * * root /usr/sbin/pflogsumm -d yesterday /var/log/mail.log | 
  mail -s "Mail Sunucusu Gunluk Raporu $(date +%Y-%m-%d)" [email protected]

pflogsumm çıktısı şunları içerir:

  • Gönderilen, alınan, reddedilen mesaj sayıları
  • Teslim hataları ve nedenleri
  • En aktif gönderenler ve alıcılar
  • Mesaj boyutu dağılımı
  • Saatlik trafik grafiği (ASCII)

Günde bir kez bu raporu okuma alışkanlığı edinmek, sisteminizdeki anomalileri erkenden yakalamanızı sağlar.

Logrotate Yapılandırması

Mail logları hızla büyür. Düzgün bir log rotation politikası olmadan /var/log dizini dolabilir. /etc/logrotate.d/postfix dosyasını kontrol edin ve gerekirse düzenleyin:

/var/log/mail.log {
    daily
    rotate 90
    compress
    delaycompress
    missingok
    notifempty
    postrotate
        /usr/lib/postfix/sbin/postfix reload > /dev/null 2>&1 || true
    endscript
}

daily: Her gün rotate et. rotate 90: 90 günlük log sakla. compress: Eski logları gzip ile sıkıştır. delaycompress: Bir önceki gün logu henüz sıkıştırma (aktif erişim olabilir).

90 günlük saklama süresi birçok ülkedeki yasal gereksinimle uyumlu. Bazı sektörlerde (finans, sağlık) bu süre 2-7 yıla çıkabilir. O durumda rotate sayısını artırmak yerine logları harici bir depolama alanına, örneğin bir NFS mount veya S3-uyumlu depolama gibi yerlere taşıyın.

Arşiv Mailbox’unun Periyodik Olarak S3’e Yedeklenmesi

Gerçek dünya senaryosu: Arşiv mailbox’u yerel diskte büyüyor ve uzun vadeli saklama için bulut depolamaya göndermeniz gerekiyor.

Önce rclone veya aws-cli kurun:

apt install awscli  # Debian/Ubuntu

Arşiv dizinini S3’e senkronize eden script /usr/local/bin/mail-archive-sync.sh:

#!/bin/bash

ARCHIVE_DIR="/var/mail/archive"
S3_BUCKET="s3://sirket-mail-arsiv"
LOG_FILE="/var/log/mail-archive-sync.log"
DATE=$(date +%Y-%m-%d)

echo "[$DATE] Arsiv senkronizasyonu basliyor..." >> $LOG_FILE

# 30 gunden eski dosyalari S3'e tasimak icin sync
aws s3 sync $ARCHIVE_DIR $S3_BUCKET/$(hostname)/ 
    --exclude "*.lock" 
    --storage-class STANDARD_IA 
    --no-progress >> $LOG_FILE 2>&1

if [ $? -eq 0 ]; then
    echo "[$DATE] Senkronizasyon basarili." >> $LOG_FILE
    # 60 gunden eski yerel arsivleri temizle (S3'e gitmis olanlari)
    find $ARCHIVE_DIR -name "*.gz" -mtime +60 -delete
else
    echo "[$DATE] HATA: Senkronizasyon basarisiz!" >> $LOG_FILE
    # Mail ile bildir
    echo "Mail arsiv sync basarisiz oldu!" | 
        mail -s "ALARM: Mail Arsiv Sync Hatasi" [email protected]
fi

Çalıştırılabilir yapın ve cron’a ekleyin:

chmod +x /usr/local/bin/mail-archive-sync.sh

# Her gece 02:00'de calistir
echo "0 2 * * * root /usr/local/bin/mail-archive-sync.sh" > /etc/cron.d/mail-archive-sync

Header Checks ile Arşiv Dışında Tutma

Bazen belirli mail tiplerini arşivlemek istemezsiniz. Örneğin otomatik sistem bildirimleri, monitoring alertleri, cron job çıktıları gibi. Bunlar arşivi gereksiz yere şişirir.

/etc/postfix/header_checks dosyası:

# Monitoring alertlerini arsivden hariç tut (BCC'yi sil)
/^X-Monitoring-Alert: true/     IGNORE
/^Subject: [CRON]/            DUNNO
/^X-Mailer: Nagios/             DUNNO

main.cf‘e ekleyin:

header_checks = regexp:/etc/postfix/header_checks

Dikkat: IGNORE aksiyonu sadece o header satırını siler, mesajı değil. BCC mekanizmasını etkilemez doğrudan. Arşivi tamamen atlamak için always_bcc yerine sender_bcc_maps kullanıp belirli gönderenleri hariç tutmak daha temiz bir yöntem.

Elasticsearch ile Log Analizi (ELK Stack)

Kurumsal ortamlarda mail loglarını Elasticsearch’e göndermek ve Kibana ile görselleştirmek popüler bir yaklaşım. Filebeat ile kurulum oldukça hızlı.

/etc/filebeat/inputs.d/postfix.yml dosyası oluşturun:

- type: log
  enabled: true
  paths:
    - /var/log/mail.log
  fields:
    log_type: postfix
    server: mail.sirket.com
  fields_under_root: true
  multiline:
    pattern: '^w{3}s+d{1,2} d{2}:d{2}:d{2}'
    negate: true
    match: after
  processors:
    - dissect:
        tokenizer: "%{timestamp} %{hostname} postfix/%{process}[%{pid}]: %{queue_id}: %{message}"
        field: "message"
        target_prefix: "postfix"

Filebeat ile bu log tipini işlemek için Postfix modülünü de etkinleştirebilirsiniz:

filebeat modules enable postfix
filebeat setup
systemctl restart filebeat

Elasticsearch’te mail logları üzerinde yapabileceğiniz şeyler:

  • Sender domain bazlı mail hacmi analizi
  • Ortalama teslim süresi hesaplama
  • Belirli bir alıcıya gelen mail miktarı eğrisi
  • Bounce oranı trendleri
  • Anormal saat dilimlerinde aktivite tespiti

Yasal Uyumluluk için Notlar

GDPR, KVKK ve sektöre özel düzenlemeler (BDDK, SPK gibi) mail arşivleme konusunda hem zorunluluk hem kısıtlama getiriyor. Bu dengeyi kurmak önemli.

  • Amaç sınırlaması: Arşivlediğiniz mailleri yalnızca belirtilen amaçla kullanın. Arşiv “güvenlik incelemesi” için kurulduysa HR süreçlerinde kullanmayın.
  • Erişim kontrolü: Arşiv mailbox’una erişim yetkisi sınırlı tutulmalı, erişim loglanmalı.
  • Silme mekanizması: KVKK kapsamında kişisel veri silme taleplerine cevap verebilmek için arşivden silme prosedürü hazır olmalı.
  • Şifreleme: Arşiv dizinini LUKS veya benzeri bir yöntemle şifreli tutun, özellikle bulut ortamında.
  • Çalışan bilgilendirmesi: Türk mevzuatına göre çalışanlar mail izleme politikası hakkında bilgilendirilmeli ve onayları alınmalı.

Bu konular teknik değil hukuki meseleler, ancak sysadmin olarak altyapıyı bu gereksinimleri karşılayacak şekilde kurmanız gerekiyor. Şirketin hukuk veya uyum departmanıyla çalışarak arşiv politikasını belgeleyin.

Sorun Giderme: Sık Karşılaşılan Durumlar

BCC çalışmıyor görünüyor: postqueue -p ile kuyrukta takılı mesaj var mı kontrol edin. Arşiv adresi geçersiz veya ulaşılamaz olabilir.

postqueue -p
postcat -vq QUEUE_ID

Log dosyası çok hızlı büyüyor: TLS log seviyesini düşürün, smtp_tls_loglevel = 0 yapın ve gereksiz debug direktiflerini kaldırın.

pflogsumm boş rapor veriyor: Dosya yolu ve tarih formatını kontrol edin. Syslog’un farklı bir dosyaya yazıyor olup olmadığını doğrulayın:

grep "postfix" /etc/rsyslog.conf
grep -r "mail" /etc/rsyslog.d/

Sonuç

Postfix’te arşivleme ve log yönetimi tek bir ayarla çözülecek bir mesele değil. always_bcc ile hızlı bir başlangıç yapabilirsiniz ancak kurumsal ortamda bunu sender_bcc_maps, düzgün bir logrotate politikası, periyodik bulut yedeklemesi ve log analizi araçlarıyla tamamlamanız gerekiyor.

En önemli tavsiye: Arşivleme sisteminizi kurarken onu nasıl sorgulayacağınızı da düşünün. Binlerce maili içeren bir mbox dosyası, içinde arama yapmayı son derece zorlaştırır. Dovecot entegrasyonu veya Elasticsearch gibi arama yapılabilir bir backend, arşivin gerçek değerini ortaya çıkarır. Çünkü hukuk ekibi sizi aradığında “var ama bulamıyorum” cevabı, “hiç arşivlemedim” kadar kötü.

Log tutma alışkanlığı da en az arşivleme kadar önemli. Günlük pflogsumm raporlarını okuma rutini edinin ve anormal durumları normalleşmeden önce yakalayın. Mail sunucunuz sessiz çalışıyorken bile loglar size çok şey anlatıyor.

Yorum yapın