Seçimlik Gecikmeler
Önceki SMTP aktarım gecikmelerinin eklenmesi Sonraki
Seçimlik Gecikmeler
Benim gibi, SMTP aktarım gecikmelerine konu edeceğiniz konaklar için biraz daha seçici davranmak isteyebilirsiniz. Örneğin, bu belgede daha önce açıklandığı gibi, DNS karalistelerinde bulunma durumunda ya da kesin bir redde konu olmayan ama doğrulama da yapılamayan selamlaşmalar sonucunda bu gecikmeleri uygulamaya karar verebilirsiniz.
Seçimlik gecikmelerin uygulayabilmek için acl_rcpt_to ACL'sindeki bazı sınamaları diğer ACL'lere taşımak gerekir. Böylelikle, sorunların işaretlerini gördüğümüz anda gecikmeleri uygulayabilir ve kalleş yazılımların eşzamanlama hataları verme ve başka sorunlarla karşılaşma talihsizliğini arttırmış oluruz.
Özellikle yapacaklarımız:
Bununla birlikte, evvelce açıkladığımız sebeplerle, asıl reddi RCPT TO: komutunu alana dek yapmayacağız. Bunu gerçekleştirmek için önceki ACL'lerdeki deny deyimlerini warn deyimlerine dönüştüreceğiz ve RCPT TO: komutunu alana kadar hata iletilerini ve uyarıları saklamak için Exim'in genel amaçlı ACL değişkenlerini kullanacağız. Şöyle ki:
Kullandığımız değişkenleri bir tablo halinde özetlersek:
Tablo 6.3. ACL bağlantı/ileti değişkenlerinin kullanımı
Değişkenler:$acl_[cm]0 boş$acl_[cm]0 dolu
$acl_[cm]1 boş(Henüz bir karar yok)Postayı kabul ediyoruz
$acl_[cm]1 doluBaşlığa bir uyarı ekliyoruzPostayı reddediyoruz
Bu yaklaşıma bir örnek olarak, selamlaşma ile ilgili iki sınama yapacağız; birinde karşı taraf kendini IP adresi ile tanıtırsa postayı reddedeceğiz, diğerinde ise doğrulanabilir olmayan bir isim belirtirse bir uyarıyı kayda alacağız. Önceden, bu iki sınamayı acl_rcpt_to ACL'sinde yapmıştık, şimdi acl_helo ACL'sine alacağız.
acl_helo:
  # Gecikme uygularken başlangıç olarak kullanmak üzere o anki zaman
  # bilgisini kaydediyoruz.
  warn
    set acl_m2  = $tod_epoch

  # Posta yerel SMTP üzerinden alınmışsa (yani, TCP/IP bağlantısı
  # ile gelmiyorsa), kabul ediyoruz. Bunu boş bir konak alanını
  # sınayarak yapacağız. Ayrıca, postalarını rölelediğimiz
  # konaklardan gelen postaları da kabul edeceğiz.
  #
  accept
    hosts       = : +relay_from_hosts

  # Karşı taraf selamlaşmayı IP adresi ile yaparsa, $acl_c0'a red
  # iletisini, $acl_c1'e ise günlük iletisini kaydedeceğiz. Bunları
  # daha sonra "deny" deyiminde kullanacağız. Bu değişkenlerin varlığı
  # göndericinin oyalanacağını belirtecek.
  #
  warn
    condition   = ${if isip {$sender_helo_name}{true}{false}}
    set acl_c0  = Message was delivered by ratware
    set acl_c1  = remote host used IP address in HELO/EHLO greeting

  # Selamlaşmada doğrulaması başarısız olursa, acl_c1'e bir uyarı iletisi
  # kaydedeceğiz. Bu iletiyi daha sonra ileti başlığına ekleyeceğiz.
  # Bu değişkenin varlığı göndericinin oyalanacağını belirtecek.
  #
  warn
    condition   = ${if !def:acl_c1 {true}{false}}
    !verify     = helo
    set acl_c1  = X-HELO-Warning: Remote host $sender_host_address \
                  ${if def:sender_host_name {($sender_host_name) }}\
                  incorrectly presented itself as $sender_helo_name
    log_message = remote host presented unverifiable HELO/EHLO greeting.

  #
  # ... bu örnek için diğer sınamaları atlıyoruz ...
  #

  # Bağlantıyı kabul ediyoruz ama $acl_c1'de bir ileti varsa, göndericiyi
  # 20 saniye oyalıyoruz.
  accept
    set acl_m2  = ${if def:acl_c1 {${eval:20 + $acl_m2 - $tod_epoch}}{0}}
    delay       = ${if >{$acl_m2}{0}{$acl_m2}{0}}s

Sonra, acl_mail_from ACL'sinde iletileri $acl_c{0,1}'den $acl_m{0,1} değişkenlerine aktaracağız. Ayrıca, $acl_c1 içeriğini ileti başlığına ekleyeceğiz.
acl_mail_from:
  # Gecikme uygularken başlangıç olarak kullanmak üzere o anki zaman
  # bilgisini kaydediyoruz.
  warn
    set acl_m2  = $tod_epoch

  # Posta yerel SMTP üzerinden alınmışsa (yani, TCP/IP bağlantısı
  # ile gelmiyorsa), kabul ediyoruz. Bunu boş bir konak alanını
  # sınayarak yapacağız. Ayrıca, postalarını rölelediğimiz
  # konaklardan gelen postaları da kabul edeceğiz.
  #
  accept
    hosts     = : +relay_from_hosts

  # $acl_c0 ve $acl_c1 değişkenleri bu SMTP aktarımı sırasında yapılmaya
  # çalışılacak her teslimat için kullanılacak red ve/veya uyarı iletilerini
  # içeriyor olacak (böyle bir durum varsa). Bu değişkenlerin içeriklerini
  # $acl_m{0,1} iletiye özel değişkenlere aktaracağız ve $acl_m1'deki uyarıyı
  # ileti başlığına ekleyeceğiz. (Bir red durumunda, $acl_m1 artık bir günlük
  # kaydı içeriyor olacak, ama iletiyi bununla değil başlığındaki kayıtla
  # reddedeceğiz.)
  #
  warn
    set acl_m0  = $acl_c0
    set acl_m1  = $acl_c1
    message     = $acl_c1


  #
  # ... bu örnek için diğer sınamaları atlıyoruz ...
  #

  # Bağlantıyı kabul ediyoruz ama $acl_c1'de bir ileti varsa, göndericiyi
  # 20 saniye oyalıyoruz.
  accept
    set acl_m2  = ${if def:acl_c1 {${eval:20 + $acl_m2 - $tod_epoch}}{0}}
    delay       = ${if >{$acl_m2}{0}{$acl_m2}{0}}s

Kalan değişiklikler için Tamamlanmış ACL'ler bölümüne bakınız.
Önceki Üst Ana Başlık Sonraki
Basit yöntem Başlangıç Grilisteleme Desteğinin Eklenmesi
Bir Linux Kitaplığı Sayfası