Ubuntu’da Email Sunucu Kurulumu

Github’dan medium’a aktarılmıştır. Orijinal versiyonu için github.com.

Bu yazıda, okuduğum makalelerden edindiğim bilgileri Türkçe’ye çevirerek, Ubuntu 14.04 sunucusunda mail sunucusunun nasıl kurulacağını anlatmaya çalışacağım. Yararlandığım makalelerin linkleri:

Email sunucusu için pek çok ayrı uygulamanın kurulup birbiriyle anlaşabilmesi gerekiyor. Bu parçaları tanıyalım:

  • MUA: Mail User Agent: Son kullanıcının maillerini görmek için kullandığı uygulamardır. Thunderbird, Outlook örneklerden birkaçıdır.
  • MTA: Mail Transfer Agent: Emailleri sunucular arası transfer eden esas uygulama MTA’dir. Biz Postfix’i kullanıyor olacağız. Bunu mailleri gönderen, ileten parça olarak görebilirsiniz.
  • MDA: Mail Delivery Agent. Email istemcinizle email sunucunuz arasındaki mailleri senkronize eden uygulama MDA’dir. Mail sunucunuzdan mailleri alıp kullanıcın posta kutusuna kaydeder. Daha sonra MUA POP veya IMAP protokollerini kullanarak emailleri çeker. Burada MDA için Dovecot’ı kullanacağız. Postfix ve Dovecot bu wiki’de bilgilerini kullandığım makalede söylendiğine göre iyi bir ikili oluyor. MTA’nin aksine bu parça mailleri çekmeyi almayı sağlar. 1. Makale

Bu noktada IMAP (Internet Message Access Protocol — İnternet Mesaj Erişim Protokolü) ve POP (Post Office Protocol — Ofis sonrası Protokolü) arasında ne fark var diye sorabilirsiniz: Kısaca söylemek gerekise IMAP daha iyi olan ve tavsiye edilen yöntemdir. Emaillerinizi birden fazla cihazdan kontrol etmek istediğinizde (ev bilgisayarınızdan, ofisten, telefonunuzdan) IMAP’ı kullanmanız gerekir. Bütün cihazlarınıza senkronizasyonu sağlayacaktır. POP3 ise sunucudan aldığı emailleri tek bir bilgisayara senkronize ettikten sonra sunucudan mailleri siler, bu sebeple başka bir istemciden maillerinizi kontrol ettiğinizde maillerinizi bulamayabilirsiniz. Bu sebeple IMAP çok daha kullanışlı bir protokol. POP3'ün avantajı mailleri sildiği için sunucuda yer sorunu yaşatmıyor oluşudur.

İnternet üzerinden email göndermek için kullanılan standard protokol SMTP’dir (Simple Mail Transfer Protocol — Basit Mail Transfer Protokolü).

Mail sunucunuzu kurabilmeniz için bir sunucuya ve domain adresine ihtiyacınız var. Sunucu satın almak için Amazon veya OWH’ı kullanabilirsiniz. Domain için de GoDaddy’i deneyebilirsiniz.

Kullanacağımız sunucu’ya Ubuntu 14.04 yüklü. Ubuntu Postfix ve Dovecot’un yanı sıra ihtiyaç duyacağımız pek çok programı kolaylıkla yükleyebileceğimiz bir işletim sistemi.

İhtiyaç duyacağımız araçlar:

  • Postfix, email gönderip almak için
  • Dovecot kullanıcı dizinine postaları çekmek için
  • SpamAssassin spam maillerden kurtulmak için Ubuntu için

Mail Sunucunuza Statik IP

Mail sunucumuza statik bir ip adresini verebiliriz. Bunu yapmak için öncelikle interfaces dosyasından sunucumuzun ip’sini öğrenelim:

sudo cat /etc/network/interfaces # The loopback network interface auto lo iface lo inet loopback # The primary network interface
auto eth0 iface eth0 inet static
address 25.125.71.19 #ip adresimiz
netmask 255.255.255.0
network 25.125.71.0
broadcast 25.125.71.255
gateway 25.125.71.254

Aşağıdaki komut bize fully qualified domain name (fqdn: tam alan adını, deneme.abc.com örneği için deneme alt alan adı, abc.com da alan adıdır, deneme.abc.com ise fqdn’dir) gösterecek, bunun mail sunucumuzun domain’i olmasını istiyoruz.

hostname --fqdn

Bunu yapabilmek için /etc/hosts dosyasında /etc/network/interfaces dosyasından öğrendiğimiz ip adresimize domain adımızı eşelştirmeliyiz:

sudo nano /etc/hosts 25.125.71.19 abc.com ns11312.ip-25.125.71.ab ns11312 #kullanacağınız domain adı bu listede en başta olmalı, bu durumda abc.com fqdn olacak

Ubuntu Kurulum paketleri

Öncelikle ihtiyaç duyduğumuz paketleri yüklememiz gerekiyor. Dovecot ve Postfix’i yükleyerek başlayalım, bu iki paketi beraber yükleyip birbirleriye bağlantısını yapan bir paket var, aşağıdaki komut bu paketi yükleyecek:

$ sudo apt-get install mail-stack-delivery

Yükleme sırasında Postfix sizi bir ekranla karşılayacaktır, burada Internet site seçeneğini seçmelisiniz, çünkü maillerimizi Postfix aracılığı ile gönderip çekeceğiz. Burada farklı bir seçenekle devam ettiyseniz ve bunu değiştirmek istiyorsanız aşağıdaki komutla ayarları güncelleyebilirsiniz:

sudo dpkg-reconfigure postfix

Şimdi postfix’i yüklemeyle devam edelim (ok tuşlarını kullanarak seçenekler üzerine gelebilirsiniz):

  • Nasıl bir mail konfigürasyonu yapılacağı sorulacak, Internet Site seçeneğini işaretleyin
  • Sistem mail adı soruluyor: Mail sunucunuza vermek istediğiniz ve satın almış olduğunuz domain’i burada kullanabilirsiniz, abc.com gibi.
  • Postmaster ve root maillerinin hangi kullanıcının mail kutusuna düşeceğini soruyor. Sunucunuza login olduğunuz kullanıcı adını veya tanımlı herhangi başka bir kullanıcınızın adını burada kullanabilirsiniz.
  • Sunucunun cevaplayacağı yani başka yere yönlendirmeyeceği domain isimlerini soruyor. Sistem mail adında kullandığınız adı buraya ekleyerek devam edebilirsiniz, │ abc.com, … ekranda kalanları silmenize gerek yok
  • Mailler senkron mu kaydedilsin diye soruyor, hayır diyin, senkron yaparsanız yavaşlıkla karşılaşabilirsiniz.
  • Bu sunucunun mail göndermesi gereken network blocklarını yazın diyor, çıkan sonucu kaydetmeniz yeterli.
  • Maillere verilecek disk miktarı, 0 diyerek limitsiz geçebilirsiniz.
  • Adres uzatmak için hangi karakteri kullanacağınızı soruyor, + ile devam edebilirsiniz. (Bu sembole göre tanımladığınız mail adresinde +’dan önce kullandığınız adrese mail atılacaktır, yani deneme+neyazarsanyaz@abc.com mailleri deneme@abc.com’a gönderilecektir, bu sayede aynı mail kutusuna birden fazla adresle ulaşabilirsiniz )
  • Hangi internet protokolleri kullanılsın diye soracak? all hepsi diyerek geçebilirsiniz.

Postfix’in konfigurasyon dosyası /etc/postfix/main.cf, ve ana dosyası da /etc/postfix/master.cf. Bu iki dosyayı kullanarak postfix ayarları yapılıyor, aklımızda bulunsun.

Dovecot ve Postfix bağlantısı

Biz yukarıda mail-stack-delivery paketini yükleyerek zaten Dovecot ve Postfix bağlantısını yaptık. Ama bu iki uygulamayı ayrı ayrı yüklediğinizde aşağıdaki bölümleri postfix’in konfigürasyon dosyası olan /etc/postfix/main.cf dosyasına yüklemeniz gerekiyor. Postfix parametrelerini bu dosyası elle güncelleyerek veya postconf komutunu kullanarak değiştirebilirsiniz. Komut ile home_mailbox parametresini Maildir yapmak için (mail kutusu formatı default mbox, biz Maildir yapıyoruz):

sudo postconf -e 'home_mailbox = Maildir/' Veya dosyayı açıp da parametreleri değiştirebilirsiniz. home_mailbox = Maildir/ smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_local_domain = smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination smtp_tls_security_level = may smtpd_tls_security_level = may smtp_tls_note_starttls_offer = yes smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes

Yukarıda mail kutusu formatımızı değiştirdik. Bunu yaptığımızda /home/username/Maildir dizini oluşturuldu. SMTP’ye SASL ile doğrulamayla bağlanmayı belirttik (SASL (saslauthd) satırları). tls komutları ile tls parametrelerimizi belirttik. Şimdi TLS şifrelemesi için dijital bir sertifika oluşturacağız. Aşağıdaki komutlar bunu yapacak, server.key adını değiştirebilirsiniz.

touch smtpd.key chmod 600 smtpd.key openssl genrsa 1024 > smtpd.key openssl req -new -key smtpd.key -x509 -days 3650 -out smtpd.crt # has prompts openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650 # has prompts sudo mv smtpd.key /etc/ssl/private/ sudo mv smtpd.crt /etc/ssl/certs/ sudo mv cakey.pem /etc/ssl/private/ sudo mv cacert.pem /etc/ssl/certs/

Dosyamızı oluşturdaktan sonra postfix’e tls için bu sertifikayı kullanmasını belirtmemiz lazım. postconf komutu ile yarattığımız sertifikayı kullandırabiliriz. (server.key ismini kendi verdiğiniz isimle değiştirmeyi unutmayınız)

sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/private/server.key' sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/server.crt'

Şimdi /etc/postfix/master.cf dosyasını açarak aşağıdaki parametrelerin başındaki # işaretini kaldırarak, bu parametreleri aktif hale getirmeliyiz. (# ile belirtilen satırlar etkin değiller)

submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING smtps inet n - n - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING

Dovecot Aşağıdaki komut ile dovecot SASL’i yükleyelim (mail-stack-delivery ile yükleme yaptıysanız bu satıra gerek olmayabilir ama komutu çalıştırmaktan zarar gelmez, yüklenmiş ise zaten yükle uyarısı verilecektir) SASL “Simple Authentication and Security Layer”’in kısaltması. Yani Basit Doğrulama ve Güvenlik Katmanı. RFC 4422 gereksinimlerine göre SASL-uyumlu olunabilmesi için gereki doğrulama mekanizma ve protokollerini içeriyor.

sudo apt-get install dovecot-common

Yükleme sırasında Evet, ve kendi domain adınızı kullanarak mail.domain.com diyebilirsiniz.

/etc/dovecot/conf.d/10-master.conf adlı dosyaya aşağıdaki değişiklikleri eklemelisiniz (# Postfix smtp-auth satırını bulunuz):

# Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix }

/etc/dovecot/conf.d/10-auth.conf dosyasında auth_mechanisms = plain satırını bulup auth_mechanisms = plain login ile değiştirin. Bu işlemleri yaptıktan sonra postfix dovecotu restart etmelisiniz.

sudo service postfix restart sudo service dovecot restart

Şimdi SMTP-AUTH and smtp/pop3 port erişimlerini kontrol edeceğiz, aşağıdaki komutu yazıp alttaki sonucu almalısınız (quit yazıp Enter’a basarak çıkabilirsiniz):

telnet abc.com smtp Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 abc.com ESMTP Postfix (Ubuntu)

Şimdi ehlo abc.com (kendi domain isminizle denemelisiniz) komutunda aşağıdaki sonucu almalısınız.

-------- 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN --------- 250 DSN

Eğer bu sonuçları görüyorsanız Postfix kurulumunuz tamamlanmıştır, tebrikler =)

Dovecot Kurulumu

Aşağıdaki komut ile dovecot ve gereksinimlerini yükleyin.

sudo apt-get install dovecot-imapd dovecot-pop3d

Şimdi mail kutusunu ayarlayacağız: /etc/dovecot/conf.d/10-mail.conf dosyasını açıp mail_location = mbox:~/mail:INBOX=/var/mail/%u satırını bulun. Bu satırı mail_location = maildir:~/Maildir ile değiştirin. Postfixi Maildir mail formatında ayarladığımız için dovefixin ayarlarında değişiklik yapmamız gerekiyor.

/etc/dovecot/conf.d/20-pop3.conf dosyasında pop3_uidl_format = %08Xu%08Xv satırını bulun, bu satır yorumlanmış olmalı # işareti ile, # işaretini kaldırıp pop3_uidl_format’ını aktif hale getirmiş olun.

Şimdi de /etc/dovecot/conf.d/10-ssl.conf dosyasında ssl = yes satırından # işaretini kaldıraradak SSL’i aktif hale getirin.

Şimdi dovecot’u restart ederek güncellemelerinizi aktive edin.

sudo service dovecot restart

telnet mail.abc.com 110 komutu ile pop3 ve imap portlarını kontrol edin. Aşağıdaki sonucu görmelisiniz: telnet mail.abc.com 110

Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Dovecot (Ubuntu) ready.

Bunu 995,993,143 portları için de yapın veya netstat -nl4 komutu ile dinlenen portları kontrol edin. 110 POP3'ün güvenli bağlantı olmadan dinlediği port, 995 güvenli bağlantı. 143 IMAP’in güvenli olmayan bağlantı ile dinlediği port, 993 ise güvenli olanı.

Şimdi birkaç kullanıcı oluşturarak, Thunderbird veya kendi mail istemcinizi kullanarak mail sunucunu kontrol edebilirsiniz:

sudo useradd -m deneme -s /sbin/nologin sudo passwd deneme

Mail grubu oluşturmak için `/etc/alias` dizinini güncellemelisiniz. Bu dosyaya aşağıdaki gibi bir satır ekleyip, `postalias /etc/aliases` komutunu çalıştırdıktan sonra `postfix reload` komutunu çalıştırarak mail grubunuzu deneyebilirsiniz.

grupadi: deneme1@abc.com

Şu anda buradan attığınz mailler Gmail ve çoğu sunucu tarafından spam olarak gözükecektir. Ayrıca kendi sunucunuzda da hiçbir spam filtresi bulunmuyor. Spam filtresi eklemek için bu linkte yazılanları uygulayınız

Mail alabilmek için alan adınızın MX kayıtlarını kendi sunucunuza göre ayarlamanız gerektiğini unutmayın. Ayrıca attığınız maillerin spam filtresine takılmaması için domaininize SPF (Sender Policy Framework (SPF) modern email sunucuları gelen mailin DNS kayıtlarından gelen mailin teyit edilmiş olup olmadığını kontrol ederek gelen maili kabul ediyorlar) kaydını eklemeniz gerekiyor. Bunu yapabilmek için DNS ayarlarınıza TXT aşağıdakine benzer bir txt kaydı girmeniz gerekecek:

abc.com IN TXT "v=spf1 a mx ptr ~all"

SPF ve DKIM Kayıtları

Gmail’de okuduğunuz mailde gmail couldn’t verify that this message was sent by benzeri bir uyarı görüyorsanız SPF (Sender Policy Framework: alan adı sahibinin kendi alan adını kullanarak mail gönderebilecek sunucuları ve ip adreslerini belirttiği kayıtlar) kaydınızı kontrol etmelisiniz. Sağda ok tuşuna basıp çıkan menüden “Show Original”’ı seçip gelen mailin sade formatını görebilirsiniz. Burada aşağıdakine benzer bir kayıt görmeniz SPF kaydınızın olmadığına işarettir.

Received-SPF: neutral (google.com: 11.11.11.121 is neither permitted nor denied by best guess record for domain of deneme@abc.com) client-ip=11.11.11.121;

Aşağıdaki gibi bir sonuç ise SPF kaydınızın olduğunu gösteriyor.

Received-SPF: pass (google.com: domain of deneme@abc.com designates 11.11.11.121 as permitted sender) client-ip=11.11.11.121;

DKIM (DomainKeys Identified Mail: yarattığınız private / public key çiftinden private keyi kullanarak gönderdiğiniz mailleri imzalayorsunuz, public keyinizi de DNS’e kayıt olarak ekliyorsunuz. Bu sayede sizin sunucunuzdan gelen maillerin sizden gelip gelmediği DNS kaydınızdan edinilen public keyiniz kullanılarak kontrol edilebiliyor. Bu sayede Gönderen olarak sizin mail domaininizi kullanan sahte mailleri durdurabiliyorsunuz.) için biraz daha uğraşmamız gerekecek. Öncelikle gerekli paketleri yükleyelim:

sudo apt-get install opendkim opendkim-tools

Yüklemeden sonra /etc/opendkim.conf dosyasına aşağıdaki bölümü ekleyin. Burada deneme.com yerine kendi alan adınızı yazmalısınız. Private key oluştururken kullandığınız metni Selector alanına koymalısınız, burada dkim kullanıldı.

Domain deneme.com KeyFile /etc/postfix/dkim.key Selector dkim SOCKET inet:8891@localhost

Aşağıdaki kaydı /etc/default/opendkim dosyasına ekleyelim:

SOCKET="inet:8891@localhost"

postfix’in DKIMi kullanması için /etc/postfix/main.cf dosyasına aşağıdaki kayıtları ekleyelim

# DKIM # -------------------------------------- milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891

Son olarak /etc/postfix/master.cf dosyasında receive_override_options satırına no_milters parametresini de eklemelisiniz. Bu sayede giden maile birden fazla imza konmasını önlemiş oluyoruz:

-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters

Şimdi giden mailleri imzalayacağımız private keyimizi oluşturabiliriz. Aşağıdaki komutta dkim /etc/opendkim.conf dosyasında Selector alanında kullandığımız kelime, istediğiniz kelimeyle değiştirebilirsiniz sadece /etc/opendkim.conf dosyasında da gerekli değişikliği yapmayı unutmayın. Bu işlem sonucunda dkim.private ve dkim.txt olarak iki dosya oluşacaktır. İlki RSA özel keyiniz, ikincisi DSN kayıtlarınıza ekleyeceğiniz bilgiyi tutan kısım.

opendkim-genkey -t -s dkim -d deneme.com mv dkim.private /etc/postfix/dkim.key

Şidmi postfix ve dkimi tekrar çalıştırıp, yaptığımız değişiklikler sonucu gönderdiğimiz mailleri imzalamaya başlayacağız:

service opendkim start service postfix restart

Sırada DNS kaydı var: Bu işlem DNS’i nasıl yönettiğinize göre farklılık gösterebilir. dkim.txt dosyasında yaratmanız gereken TXT kaydı mevcut. dkim._domainkey kullanmanız gereken alt alan adı, k alanı şifreleme türü, t test için kullanıp kullanmadığınızı belirten bir alan bu kısmı TXT kaydınızdan çıkartmalısınız, p ise public keyiniz. GoDaddy için host adına dkim._domainkey, value alanına da aşağıdaki kısma benzer bir kayıt koymalısınız.

"k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXb5hoPnqfFSX6uH/FosU2E4FUFaKTVOEhO2miotPx9jPvkcoZGdCPY13CJi9ZNt+PxX94u2PpYhozNIE9wFJAxKQjtmQ5v8A5f0HrVuXW3bP4XUq4mY7Wwed1A17akN+qVA3Rj3CHlRHE31WQr9yl3VaZksz52FhDXTipOJtQvwIDAQAB"

Burada güvenlik açısından dikkat etmeniz gereken konu private keyinizi kaybetmemeniz, aksi takdirde bunu ele geçiren kimseler sizin domaininizi kullanarak gönderen adresini sizin alan adınızmış gibi kullanabilirler.

Eğer aynı mail sunucunuzdan birden fazla alan adını yönetiyorsanız, opendkim.conf dosyasında domain keyine * koymalısınız:

Domain * KeyFile /etc/postfix/dkim.key Selector dkim SOCKET inet:8891@localhost

Originally published at github.com.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.