Qmail'de gelen ve giden e-mail'lerin yedeklenmesi

1.Giriş

 Bu makale, coğu şirkette uygulanan şirket çalışanlarının giden ve gelen e-mail'lerinin yedeklenmesi işleminin Qmail ile nasıl yapılabileceği ile ilgilidir. Makale konun tamamen teknik kısmı ile ilgilidir, konun etik kısmı ile ilgili hiç bir fikir belirtilmemiştir.

2.Genel Notlar

Bu dökümanın en güncel haline http://www.enderunix.org/docs/qmail-yedekleme.html adresinden ulaşabilirsiniz.

Aksi belirtilmediği takdirde bu kabil dokümanların hakları kendilerini yazan yazarlarda saklıdır. Bu döküman da, parça parça ya da tamamen herhangi bir şekilde, yazarının izni dahilinde dağıtılabilir. Yazar, bu dökümanı okuyanların ugrayacakları herhangi bir zarardan ötürü sorumluluk kabul etmez.

Sistem kurulurken Qmail(ve kurulumu için gereken diğer programlar), VPopmail ve Procmail kullanılmıştır, sisteme daha sonra yazılan Ender bir program eklenmiştir. VPopmail'i /home/vpopmail Qmail'i de /var/qmail dizinleri altına kurduğunuz varsayılmaktadır. Sistemde "Maildir/" yapısı kullanılmaktadır.

3.Qmail Konfigurasyoun ve Kurulumu

Qmail kaynak kodları arasında bulunan extra.h dosyasında bulunan iki tanımlama aşağıdaki gibi değiştirilir.

QUEUE_EXTRA "Tlog\0"
QUEUE_EXTRALEN 5

burada giden gelen tüm e-maillerin bir kopyası log@domain.com e-mail hesabına gönderilir, virtual domainlerin e-mail'leri de dahildir bu işe. Bu e-mail hesabını "log" yapmak zorunda değilsiniz tabi...Önemli olan bu hesabın ana domainde(control/me dosyasında yazan) olacağının bilinmesidir. Tabi "log" e-mail hesabını açmayı unutmamak da gerekir. Yapılmak istenen diğer optimizasyonlar ve konfigurasyonlardan sonra Qmail'i kurulumu tamamlanır.

4.Yedekleme işleminin uygulanması

Öncelikle sistemin çalışma şeklinden bahsedelim, server'a bir e-mail geldiğinde yada server'dan bir e-mail gönderildiğinde bu e-mail'in aynısı log@domain.com kullanıcısına gönderilir. Biz bu e-mail hesabına gelen e-mail'leri ayrıştırarak ilgili dizinlere taşıyacağız. Ayrıştırma işlemi için procmail yada maildrop yazılımları veya benzer başka yazılımlardan yararlanılabilir, burda procmail kullanılmıştır.

Sistemde e-mail'lerini yedeklemek istedğimiz domain'in domain.com olduğunu farzedelim, domain'e gelen bütün email'ler /home/vpopmail/domains/domain.com/ dizini altında ilgili yerlere konacaktır. Bunlardan log@domain.com'a ise diğer domainlerde dahil olmak üzere bütün gelen ve giden e-mail'lerin bir kopyası gönderilecektir.

Yedekleme işleminde gelen ve giden e-mail'ler ayrı birer iş olacak ve ayrı yöntemler kullanarak e-mail'leri yedekleyeceğiz. Öncelike *n*x sistemimizde belirli bir dizini bu yedekleme işlemler için kullanmak üzere seçelim; /usr/local/mail-yedek/. Bu dizinin user ve group hakları vpopmail ve vchkpw olmalıdır. Dizinin altında neler olacak ? domain.com domain'inin kullanıcıları ve mail-listeleri için açılmış Maildir'lar. Dizinin yapısı şöyle olacak :

/usr/local/mail-yedek/kullanici1/to/Maildir/
/usr/local/mail-yedek/kullanici1/to/Maildir/cur/
/usr/local/mail-yedek/kullanici1/to/Maildir/new/
/usr/local/mail-yedek/kullanici1/to/Maildir/tmp/
/usr/local/mail-yedek/kullanici1/from/Maildir/
/usr/local/mail-yedek/kullanici1/from/Maildir/cur/
/usr/local/mail-yedek/kullanici1/from/Maildir/new/
/usr/local/mail-yedek/kullanici1/from/Maildir/tmp/

bu herhangi bir kullanıcı için olması gereken yapıdır. Burada to dizini altına TO'nun yanısıra CC ve BCC ile gönderilen e-mail'lerde yerleştirilecektir.

/usr/local/mail-yedek/liste1/Maildir/
/usr/local/mail-yedek/liste1/Maildir/cur/
/usr/local/mail-yedek/liste1/Maildir/new/
/usr/local/mail-yedek/liste1/Maildir/tmp/

bu da herhangi bir e-mail listesi için olması gereken yapıdır.

Tekrar hatırlatalım /usr/local/mail-yedek/ ve altındaki herşeyin user ve group hakları vpopmail ve vchkpw olmalıdır. Sisteme her yeni kullanıcı veya liste eklendiğinde buraya kullanıcı isminin aynısından bir dizin ve altına ilgili dizinler açılmalıdır. Bu arada Maildir ve altındaki dizinleri oluşturmayı maildirmake komutu ile yapmanız daha kolay ve sağlıklı olur. Elbette herkes onunla yapıyor kimse tek tek açmıyor... :)

Yedekleme işleminin ikinci ayağı yedeklenecek yeri belirlemek, oluşturmak ve o yerdeki ayarlamaları yapmak idi; yukarıdaki şekilde yaptık(evet önce ikinci ayağı bitirdik!). İlk ayağı ise yukarıda da biraz bahsettiğimiz gibi, /home/vpopmail/domains/domain.com/ dizini altına gelen e-mail'leri ayrıştırılması(parsing) işlemidir. Procmail yazılımını kullanarak bu işi yapacağız. domain.com e-mail hesabı olan kullanıcılar ve e-mail listeleri için procmail'in kullanacağı iki ayrı dosya oluşturacağız; ".procmail-to" ve ".procmail-from". Bu dosyalar adlarından da anlaşılacağı üzere bizim için iki ayrı iş olan gelen ve giden e-mail'leri ayrıştırmak için kullanılacak.

TO için :

/home/vpopmail/domains/domain.com/.procmail-to dosyası içersine

:0c
/usr/local/depo/mail-yedek/$EXT/to/Maildir/

satırını eklememiz yeterlidir. Buradaki $EXT değişkeni aynı dizinde bulunacak olan .qmail-$EXT den gelmektedir. $EXT kullanıcı ismini tutan environment değişkenidir.

Hemen kullanıcılardan birinin gelen e-mail'lerini yedekleyelim; kullanıcı ismi "kullanici1"

/home/vpopmail/domains/domain.com/.qmail-kullanici1 dosyasını oluşturup içersine aşağıdaki satırı eklemek.

| preline /usr/local/bin/procmail -p -m -t /home/vpopmail/domains/deneme.com/.procmailrc-to | su vpopmail ; /home/vpopmail/bin/vdelivermail ''bounce-no-mailbox"

bir e-mail listesi için; "liste1" mesela...

/home/vpopmail/domains/domain.com/.qmail-liste1 dosyasına

/usr/local/mail-yedek/liste1/Maildir/

Hem liste1 hemde kullanici1 hesaplarına gelen e-mail'lerin bir kopyası da ilgili dizinlere yerleştirilecektir.

FROM için :

Fromda ise işler biraz daha farklı, ayrıca e-mail listelerinden şahsi olarak kimsenin mail atama ihtimali çok az olduğundan ve yedekleme ihtiyacı genelde duyulmadığından e-mail liste'leri için from yedeklemesi yapmadık. Bu yüzden aşağıda sadece kullanıcılar için yapılması gerekenler var...

/home/vpopmail/domains/domain.com/.qmail-log dosyası oluşturulur ve içersine

| preline /usr/local/bin/procmail -p -m -t /home/vpopmail/domains/deneme.com/.procmailrc-from

satırı eklenir.

/home/vpopmail/domains/domain.com/.procmail-from dosyası oluşturulur ve içersine her yeni eklenen kullanıcı için

# kullanici1@deneme.com
:0

* ^From:.*kullanici1@deneme.com
/usr/local/mail-yedek/kullanici1/from/Maildir/

satırları eklenir. En sonda mutlaka aşağıdaki satırlar olmalıdır !

#gerisi silinir

:0
/dev/null

Burada bazı noktalar için okuyucuda "?" belirebilir. Aşağıdakiler gibi;

Neden log@deneme.com hesabı sadece from e-mail'lerini ayrıştırmak için kullanılıyor, bütün e-mail ona gitmesine rağmen ve to kısmı için ekstradan bir sürü .qmail-* dosyası oluşturuluyor, oysaki from için bir adet... !?
Bütün uğraşlara ve araştırmalara rağmen (kurtarılamadı rahmetli :P) sonuç alınamış ve bu şekilde bir yöntem geliştirilmiştir. Geliştirildiği vakit döküman güncellenecektir. Problem şudur; bir e-mail BCC'ile gönderildiği zaman e-mail içersine BCC namına herhangi bir header koyulmadığı için bunu procmail yada maildrop ile ayrıştıramıyorsunuz. "Delivered-To:" diye bir header ekleniyor olsada onuda bu programlar sanırım bu versiyonlarında tanımıyorlar.


.qmail-kullanici1 içersinde neden su vpopmail komutu kullanılmış ?
Sistem çalışırken bir permition problemi çıktığı için bunu eklemem gerekmişti. Bu sistem loglarinda ekstradan "su:" kayıtları atacaktır haberiniz olsun... Bunun için gerekirse ek tedbir almanızda fayda var.

Yedekleme işlemi için yapılması gerekenler bu kadar. Tabi siz bu işleri otomatize edecek scriptlerde geliştirebilirsiniz.

5.Yedekleme Sonrası

10-15 civarı kullanıcısı bulunan ve 1 - 3 mb arasında attachment'lı bolca e-mail atılılan bir domain'de /usr/local/mail-yedek/ dizini altına ayda ortalama 500 Mb civarı dosya birikir. Bu e-mail'leri alıp başka bir yerde ihtiva etmelisiniz ve bu dizini de boşaltmalısınız. Bu işlemi, yazdıgım bir programa cron yadımı ile ayda bir yaptırıyorum. Bu porgram her ayın 1'inde saat 00:00 da önce Qmaili durduruyor, daha sonra /var/log/mail_backup/old/ altında bulunan geçen aya ait tgz ve gpg dosyalarını siliyor. /usr/local/mail-yedek/ dizinini bu ayın tgz'si ve sonra gpg'si halinde paketliyor. Bu dosyalar ile ilgili bir bilgi txt'si oluşturuyor içersinde MD5, Create Date vs. gibi bilgiler ekliyor(bunu en son ilgili kişilere e-mail olarak gönderecek). Gpg dosyasını SSH ile başka bir bilgisayara kopyalıyor. /usr/local/mail-yedek/ dizini altındaki tüm dosyaları siliyor, Qmail'i başlatıyor ve gerekli bilgi e-mail'ini ilgli kişilere gönderiyor.Son olarakta oluşan gpg ve tgz dosyalarını /var/log/mail_backup/old/ altına atıyor. Kabaca bu böyle bir sıra izliyor. Bu programı yakında EnderUnix Programlar listesinde göreceksiniz.

5.Püf Noktaları

Maildir yapısı gereği her bir e-mail Maildir/new/ dizini altına tek bir dosya halinde atılacaktır. Bunları gerektiğinde kişinin kendi Maildir'ına örneğin kullanici1@domain.com için /home/vpopmail/domains/domain.com/kullanici1/Maildir/new/ dizinine kopyalayarak eski maillerine yeniden ulaşmasını sağlayabilirsiniz. Gönderdikleri için ise :))), onlarıda benzer yöntemlerle kendi Mail Client'ına almasını sağlayabilirsiniz.

6.Son Sözler

Bu yapı çok kullanıcılı sistemlere'de uygulanabilir, fakat kullanılacak bilgisayarın ekstra işler yapacağı göz ününde bulundurularak seçilmesi gerekmektedir, örneğin Qmail bir e-mail işlemi için iki iş yapmaktadır. Oluşacak gpg dosyasının boyutları kullanıcı sayısı, e-mail kullanımı, attachment'ler vs. ile orantılı olarak artacaktır. Örneğin attchmentl'leri kaldıracak bir script ile bu gpg dosyasının ve Server'ın diskinin kullanımının büyüklüğünü düşürebilirsiniz.

13.09.2003(Son Güncelleme)
19.06.2003
ATILIM BOY
aboy ~ enderunix.org
http://www.EnderUNIX.ORG/
aboy ~ trunix.org
http://www.Trunix.ORG/

Copyright (c) 2003 ATILIM BOY Kaynak gosterilmek şartıyla kullanılabilir.
EnderUNIX Software Development Team Member.