2. Postfix Kurulumu
Postfix kurulumu hiç korktuğunuz gibi değil, gayet kolay bir şekilde olacak merak etmeyin. Öncelikle bir kaç tane dosyaya ihtiyacımız var, bunlarla postfix’i MySQL ile konuşturacağız. Dosyaları tek tek yaratmakla uğraşmak istemiyorsanız, yukarıda verdiğim adreste hepsini bulabilirsiniz, tüm virtual map dosyalarını /etc/postfix/maps/ dizini içine koymalı, veya başka yere koyacaksanız main.cf içerisinde gerekli değişiklikleri yapmalısınız.
# mysql-virtual_access.cf user = root password = zagorTenay dbname = mailAdmin query = SELECT Durum FROM Access WHERE Adres='%s' AND Status='1' -- Virtual Access hosts = 127.0.0.1
# mysql-virtual_bcc.cf user = root password = zagorTenay dbname = mailAdmin query = SELECT Destination FROM BCC WHERE Original='%s' AND Status='1' -- Virtual BCC hosts = 127.0.0.1
# mysql-virtual_domains.cf user = root password = zagorTenay dbname = mailAdmin query = SELECT Name FROM Domains WHERE Name='%s' AND Status='1' -- Virtual Domains hosts = 127.0.0.1
# mysql-virtual_email2email.cf user = root password = zagorTenay dbname = mailAdmin query = SELECT Username FROM Users WHERE Username='%s' AND Status='1' -- Virtual E2E hosts = 127.0.0.1
# mysql-virtual_alias.cf user = root password = zagorTenay dbname = mailAdmin query = SELECT Destination FROM Alias WHERE Original='%s' AND Status='1' -- Virtual Alias hosts = 127.0.0.1
# mysql-virtual_users.cf user = root password = zagorTenay dbname = mailAdmin query = SELECT CONCAT(SUBSTRING_INDEX(Username,'@',-1),'/',SUBSTRING_INDEX(Username,'@',1),'/') FROM Users WHERE Username='%s' AND Status='1' -- Virtual Users hosts = 127.0.0.1
# mysql-virtual_mailbox_limit_maps.cf user = root password = zagorTenay dbname = mailAdmin query = SELECT Quota FROM Users WHERE Username='%s' AND Status='1' -- Virtual Quota hosts = 127.0.0.1
# mysql-virtual_transport.cf user = root password = zagorTenay dbname = mailAdmin query = SELECT Destination FROM Transport WHERE Original='%s' and Status='1' -- Virtual Transport hosts = 127.0.0.1
Query satırlarının sonunda — ve query’nin ne yaptığı yazıyor, bunları silmenize gerek yok çünkü MySQL — gördü mü gerisini okumuyor. Böylece Deneme kısmında göreceğimiz üzere loglarımızda hangi queryler nasıl çalışıyor izleyebileceğiz ve herhangi bir müdahale gerekirse hemen uygulayabileceğiz. MySQL ayar dosyalarının içerisindeki şifreyi ve veritabanını çok kolay bir şekilde değiştirebilirsiniz;
for i in mysql-virtual_*; do sed 's/root/yeni_DB_Kullanicisi/' $i > $i.tmp; mv $i.tmp $i; done for i in mysql-virtual_*; do sed 's/zagorTenay/yeni_DB_Sifresi/' $i > $i.tmp; mv $i.tmp $i; done for i in mysql-virtual_*; do sed 's/mailAdmin/yeni_DB_Adi/' $i > $i.tmp; mv $i.tmp $i; done
mysql-virtual_access.cf dosyasına gelince, bu dosya kimin mail gönderip kimin gönderemeyeceğini tutan bir tablo, bunu kullanarak çok sık SPAM yapanları sistemden uzak tutuyoruz. Orada ‘550 No soup for you, next!‘ diye default olarak gelen bir satır var, bu satırı başındaki 550’yi sabit tutarak başka bir şeyle veya 550’yi de silerek direkt REJECT yazarak değiştirebilirsiniz. Tabi bu dosya aslında aynı zamanda bir beyaz liste, eğer gerekiyorsa REJECT veya 550 … yerine OK yazarak domain veya kullanıcıdan gelen maillerin asla SPAM statüsüne düşmemesini de sağlayabilirsiniz.
Bizim kurduğumuz sistem sadece tek bir kullanıcı ile çalışacak, o yüzden kendi kullanıcımızı kendimiz yaratacağız. Yalnız burada dikkat edilmesi gereken nokta kullanıcının ev dizininin (home directory) nerede olacağı. Her yaptığım kurulumda /home klasörünü ayrı bir bölüme alıyorum, böylece güncelleme ve yapılacak değişikliklerden en az derecede etkileniyor, en önemlisi de yedek alması da kolay oluyor. Kullanıcımıza normal kullanıcı numaralarından farklı bir grup ve kullanıcı id’si vereceğiz, 5000 uygun bir rakam.
groupadd vmail --gid 5000 useradd --gid 5000 --uid 5000 -s /bin/false -d /home/vmail vmail mkdir /home/vmail chown 5000:5000 /home/vmail
Sunucumuzun bir de ismi olmalı ki başka bir mail sunucusuna bağlandığımızda kendimizi tanıtabilelim.
echo buraya.bir.domain.yaz > /etc/mailname
Şimdi postfix’in main.cf ayarlarını yapalım;
# bu bizim karşı tarafa göndereceğimiz sunucu ismimiz myhostname = buraya.bir.domain.yaz.com # burası hangi domainler için mail alacağımız, # ama aslında bunu mysql ile halledeceğiz. mydestination = buraya.bir.domain.yaz.com, localhost, localhost.localdomain # hangi networkler güvenebileceğimiz networkler mynetworks = 127.0.0.0/8 192.168.1.0/24 # tüm ağ bağlantılarını dinleyeceğiz inet_interfaces = all # sistem genelindeki yönlendirmeler, temel sunucu işlemleri için gerekli # ancak içerisinde bir değişiklik yapmak şart değil alias_maps = hash:/etc/aliases # mbox yerine Maildir formatını kullanacağız. home_mailbox = Maildir/ # burada SASL ayarlarını yapacağız ve SASL arayüzü olarak # Cyrus yerine Dovecot'u kullanacağız smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth-client smtpd_sasl_security_options = noanonymous smtpd_sasl_authenticated_header = yes smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = yes # karşı taraf bize mutlaka kim olduğunu söylemeli smtpd_helo_required = yes # virtual tanımlamalar, burası MySQL ile göz göze geldiğimiz yer virtual_alias_domains = virtual_alias_maps = proxy:mysql:/etc/postfix/maps/alias.cf, mysql:/etc/postfix/maps/email2email.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/maps/domain.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/maps/user.cf virtual_mailbox_base = /home/vmail virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/maps/mailboxLimit.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = 'The user you are trying to reach is over quota.' virtual_overquota_bounce = no transport_maps = proxy:mysql:/etc/postfix/maps/transport.cf # ah burası en sevdiğim yer, burada hangi kullanıcının maillerini # hangi kullanıcıya çaktırmadan yönlendirebileceğimizi tanımlıyoruz. # standart sunucular için şart değil, ama özellikle şirket içinde kullanım # için gerekli olabiliyor, dikkat edilmesi gereken nokta sender_bcc_maps ile # sadece gelen değil, giden epostaları da kopyalıyor. sender_bcc_maps = proxy:mysql:/etc/postfix/maps/bcc.cf recipient_bcc_maps = proxy:mysql:/etc/postfix/maps/bcc.cf # burada tanımladığımız dosyaları bir ön okuma yapıyoruz ki # daha sonra her seferinde dosyaları aramayalım. proxy_read_maps = $alias_maps $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $virtual_accesslist $virtual_mailbox_limit_maps $transport_maps $sender_bcc_maps $recipient_bcc_maps $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $mynetworks # burada hangi kullanıcıların hangi şartlarla izinli olduğunu anlatıyoruz # eğer postgrey kullanmayacaksanız en alttaki check_policy_service satırının # başına # koyun. aman dikkat, #'den önce mutlaka bir boşluk olmalı, yoksa mailler # asla size ulaşmaz, en güzeli silin siz, #'yle falan uğraşmayın. smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_invalid_hostname, reject_unauth_pipelining, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_non_fqdn_recipient, reject_unknown_recipient_domain, check_sender_access mysql:/etc/postfix/maps/access.cf, reject_rbl_client cbl.abuseat.org, reject_rbl_client bl.spamcop.net, reject_rbl_client sbl.spamhaus.org, reject_rhsbl_sender blackhole.securitysage.com, reject_rhsbl_client blackhole.securitysage.com, check_policy_service inet:127.0.0.1:10023, permit
Şimdilik yapacağımız Postfix ayarları bu kadar. Postfix’le alakalı olarak, tek yapmamız gereken ayar postgrey ayarları. Postgrey postfix’e müthiş yardımcı olan bir program, tek yaptığı mail geldiği zaman önce geçici sebeplerden dolayı kapalıyız mesajı göndermek. Düzgün yapılandırılmış bir mail sistemi gitmeyen mailleri tekrar denemek zorundadır, postgrey ise tekrar gönderilene kadar mailleri tutar. Tekrar gönderildiğinde ise eğer gerekli zaman dolmuşsa maili son kullanıcıya iletilmek üzere kabul eder. Bekleme süresi 300 saniye, yani 5 dakikadır. Daha az veya daha fazla beklemesini sağlamak için /etc/default/postgrey ayar dosyasını kurcalamanız yeterli olacaktır. Neden güzel olduğuna gelince SPAM yapan programlar genelde mail sunucusu mantığı ile değil, doğrudan mail sunucusuna talep yollamak üzere ayarlandığı için tekrar deneme ihtiyacı duymazlar, bu yüzden SPAM’in önünü kesmek için müthiş etkilidir.
Postfix’in SSL sertifikaları ile donatılması da mümkün, ancak bununla ilgili şu anda bir şey yazmadım. Kaynakça’da belirttiğim siteleri ziyaret ederek bu konuda da bilgi alabilirsiniz.
Son olarak /etc/aliases adında bir dosya olup olmadığını kontrol edin, eğer bu dosya yoksa
echo postmaster: root > /etc/aliases
ile yaratıp,
newaliases
komutu ile postfix’in okuyabileceği hale getirebilirsiniz. Tüm değişiklikleri yaptıktan sonra kısaca şöyle çalıştırabiliriz;
/etc/init.d/postfix restart