Sendmail

Sendmail bir SMTP (Simple Mail Transfer Protocol) sunucudur. Bunun teknik adı MTA (Mail Transport Agent) olarak geçer. SMTP sunucu -sadece- posta gönderimi işi yapabilir.

Biz Son kullanıcılar, MUA (Mail User Agent) yazılımlarıyla eposta sunucusuna göndermek istediğimiz epostayı iletiriz. outlook, elm ve thunderbird gibi yazılımlar MUA grubuna girerler.. eposta alma işi için de -genellikle aynı- MUA kullanırız. Bu iş için kullanılan protokoller ise POP ve daha yeni IMAP'tir.. IMAP'in bir güzelliği istemcinin tüm eposta yerine sadece eposta başlıklarını çekebilmesidir. Böylece kısıtlı bantgenişliği optimum seviyede kullanılmış olur.




eposta gönderimini ve alımını senaryo ile düşünürsek daha kolay anlayabiliriz.

Eposta gönderimi:
epostamız MUA (mesela outlook) tarafından MTA'ya iletilir. Bu MTA, bizim kurumiçi eposta sunucumuzdur. Exchange veya sendmail olabilir. MTA, karşı tarafın MTA'sına ulaşır. Bunu yaparken DNS sunucudan karşı tarafın eposta sunucusunu (MX kaydı) öğrenir. eposta karşı tarafın MTA'sına iletilir. Bu iletme trafiği SMTP protokolü üzeründen gerçekleşir. Gelen eposta MDA (Mail delivery agent) tarafında alıcının posta kutusuna iletilir. MDA'ya örnek olarak procmail verilebilir.

Eposta alımı:
MUA tarafından belirli aralıklarla eposta sunucuya gidilir. Burada MTA kelimesini kullanmıyorum. çünkü bu iletim değil alım işidir. Eposta hesabı içerisindeki epostalar MUA'ya bildirilir. Bu alım sırasında POP veya IMAP protokolleri kullanılır.

Unix ortamında eposta atılması ve sorun giderimi
unix ortamında MUA olarak mail komutunu kullanabiliriz. Komuttan sonra mesajımızı yazarız. En son satıra “.” Koyup Enter’a basıyoruz. Böylece mesajın bittiğini belirtmiş oluyoruz. CC (Carbon Copy) kısmına bilgi amaçlı bu epostanın gönderileceği kişi varsa giriyoruz. Yoksa Enter ile geçiyoruz.

[root@anadolu ~]# mail -s merhaba selcuk.karaca@turktelekom.com.tr
maraba televole
.
Cc:
[root@anadolu ~]#

sendmail sorunlarını gidermek için verbose modda sendmail aracını kullanabiliriz. Böylece MTA'lar arası trafiği de daha iyi görebiliriz. Yani sendmail aynı zamanda bir eposta istemci yazılımı (MUA) gibi davranabiliyor.

[root@anadolu ~]# sendmail -v selcuk.karaca@turktelekom.com.tr
maraba televole from sendmail
.
selcuk.karaca@turktelekom.com.tr... Connecting to [127.0.0.1] via relay...
220 anadolu ESMTP Sendmail 8.13.8/8.13.8; Tue, 20 Jul 2010 14:25:11 +0300
>>> EHLO anadolu.localdomain
250-anadolu Hello localhost.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-DELIVERBY
250 HELP
>>> MAIL From: SIZE=30
250 2.1.0 ... Sender ok
>>> RCPT To:
>>> DATA
250 2.1.5 ... Recipient ok
354 Enter mail, end with "." on a line by itself
>>> .
250 2.0.0 o6KBPBsr009091 Message accepted for delivery
selcuk.karaca@turktelekom.com.tr... Sent (o6KBPBsr009091 Message accepted for delivery)
Closing connection to [127.0.0.1]
>>> QUIT
221 2.0.0 anadolu closing connection
[root@anadolu ~]#

Yukarıdaki çıktıda “>>>” işaretiyle belirtilen satırlar istemci sendmail tarafından gönderilen komutları, başlarında sayı olanlar ise gelen cevapları göstermekte. 250 sayısı gönderilen komutun başarılı olduğunu kodudur.
Görüldüğü gibi MTA’lar arası trafik basit metin modunda olmaktadır. Burada kullanılan temel komutlar:
  • EHLO kendi_sunucu_adımız
  • MAIL From: gönderici adresi
  • RCPT To: alıcı adresi
  • DATA: eposta gövdesi

Bunları 25 nolu porta telnet çekerek biz de yazabiliriz ve eposta gönderebiliriz.
Yukarıdaki verilen diyalog örneği, sendmail uygulaması ve localhost üzerinde çalışan sendmail MTA’sı arasındaki akışı göstermekte. Yani topun o sunucu üzerinde çalışan sendmail’e geçtiğini göstermekten başka bir şey ifade etmiyor.. “Sent” denmiş olsa bile eposta gönderilmemiş olabilir.

Bunu nasıl analayabiliriz ?

Mailq komutuyla epostanın kuyrukta bekleyip beklemediğini görebiliriz. Ayrıca eposta sunucusunun hareketlerin de loglardan görmemiz iyi olabilir. Bu amaçla /var/log/maillog logu incelenebilir. Burada oluşan hatalar ve transfer ile ilgili detayları bulabilirsiniz.

eposta sunucular büyük oranda DNS bilgisine bağımlıdırlar. Eğer DNS sisteminizde sorun varsa eposta göndermenizde sorun yaşamanız olasıdır. Unix sunucuların DNS bilgisi /etc/resolv.conf dosyasından alınır.
Çoğu Linux sunucu internet’e çıkamayabilir veya eposta erişimi firewall üzerinden kısıtlanmış olabilir. Bu durumda sendmail’e “eposta göndermek için kurumun eposta sunucusunu kullan” dememiz gerekir.  Başka bir ifadeyle gelen eposta gönderme isteklerini bu eposta sunucusuna relay et dememiz gerekiyor. Relay etmenin manası, gerçek hedef yerine bu eposta sunucusuna mesajı ilet ve işi ona devret demektir. Bizim durumumuzda tıpkı bir MUA gibi eposta sunucuya mesajı geçir demektir.
 Eposta sunucusu, kendi kullanıcılarından gelen mesajları farklı yerlere iletmesi veya dışarıdan gelen mesajları  kurumiçi kullanıcıların eposta kutularına iletmesi meşru relay olarak bilinir. Eğer kaynak veya hedef adres kendi kullanıcısı değilse bu open relay olarak geçer ki spam epostaların zeminini teşkil eder. Aşağıdaki şekil open relay kavramını göstermekte.
alt
relay için:
  • /etc/mail/sendmail.cf içerisinde DS kelimesinin yanına –bitişik olarak- eposta sunucusu yazılır.
DScompanyEmailServer
  • /etc/hosts dosyası içerisine bu sunucu IP adresi girilir.
10.6.6.6                companyEmailServer
  • Sendmail servisi tekrar başlatılır
Service sendmail restart


Şimdilik bu kadar..

Bilgiyle kalın..

Yorumlar

Bu blogdaki popüler yayınlar

create Virtual Machines in VMware with ansible

Yüksek Hizmet Sürekliliği (High Availability)