Iredmail ile Mail Sunucusu Kurulumu
Temelde mail işlevleri için postfix ve dovecot kullanacağız, bunları kurmak ve yapılandırmak için iredmail scriptini kullanacağım
Not: iredmail sıfır sunucuya kurulmalı o yüzden sunucuyu kurduktan sonra ilk olarak iredmail kuruyorum, diğer işlevleri daha sonra ekleyeceğiz iredmail ile çakışan servislerin yapılandırmalarını kendimize uygun hale getireceğiz.
Hostname ve hosts dosyası ayarlamaları
mail sunucusunun ana domaini olarak xenonly.com kullanacağım
dahil olan diğer domainler bu domaini kullanarak mail gönderecek
aşağıdaki komut ile hostname'i değiştiriyoruz
sudo hostnamectl set-hostname mail.xenonly.com
/etc/hosts dosyasına şunu ekliyoruz
127.0.0.1 mail.xenonly.com mail localhost
STATIK_IP mail.xenonly.com mail
hostname değiştiği için sistemi yeniden başlatıyoruz
Dns Problemi çözümü
hostname değişmesi ile dns sorunu olabilir, eğer varsa çözümü şu şekilde
önce sorun tanımı yapalım, sistem hostname'i değiştirdik benim sistemim için
eskiden xenonly.com'du mail.xenonly.com yaptık ama aşağıdaki görüleceği üzere dns çözümlemesi hala eski hostname'i işaret ediyor.
$ cat /etc/resolv.conf
# Generated by NetworkManager
search xenonly.com
$ nmcli con show
System eth0 UUID ethernet eth0
komutu ile hangi arayüzle ağa bağlantığımızı görüyoruz, benim senaryomda System eth0
$ nmcli con mod "System eth0" ipv4.dns-search ""
$ nmcli con mod "System eth0" ipv4.ignore-auto-dns no
$ nmcli con mod "System eth0" ipv4.method auto
$ nmcli con up "System eth0"
komutları ile dns çözümlemesini tekrar auto hale getiriyoruz.
Iredmail indirme ve kurulumu
https://www.iredmail.org/download.html adresinden son sürüm indirme bağlantısını alıyoruz. Şuan 1.7.4 son sürüm
$ cd /root
$ wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.7.4.tar.gz
$ tar zxf 1.7.4.tar.gz
$ cd iRedMail-1.7.4/
$ bash iRedMail.sh
komutları ile iredmail script'ini indiriyoruz ve çalıştırıyoruz, gerekli paketlerin kurulumundan sonra kurulum sihirbazı açılıyor.
Yes diyerek devam ediyoruz ve kurulumum dizinini varsayılan seçenek olan /var/vmail şeklinde geçiyoruz.
Web Server -> Nginx
Mail hesapları için DB -> mariadb
Mariadb için parola belirliyoruz
ilk mail domaini -> talhatabak.com olarak belirliyorum burdaki önemli not sunucu hostname'i olmamalı (xenonly.com)
postmaster@talhatabak.com için mail parolası belirliyoruz, bu mail ve parola admin hesabı için
Devamında opsiyonel kurulacak servisleri seçiyoruz.
Web mail için -> Roundcube
Mail Admin panel için -> iRedAdmin
Güvenlik için -> Fail2ban
seçiyorum bunlar zaten default olarak seçili ekstra olarak sistem izleme servisi olan netdata'yı kaldırıyorum.
Kurulum sihirbazı bitiyor ve aşağıdaki şekilde bir çıktı veriyor.
********************** Review your settings *****************************
*************************************************************************
* Storage base directory: /var/vmail
* Mailboxes:
* Daily backup of SQL/LDAP databases:
* Store mail accounts in: MariaDB
* Web server: Nginx
* First mail domain name: talhatabak.com
* Mail domain admin: postmaster@talhatabak.com
* Additional components: Roundcubemail iRedAdmin Fail2ban
y seçeneği ile devam ediyoruz ve kurulum başlıyor. Devamında bize konfigürasyonlarla alakalı gelen sorulara Y diyerek devam ediyoruz
********************************************************************
* URLs of installed web applications:
*
* - Roundcube webmail: https://mail.xenonly.com/mail/
*
* - Web admin panel (iRedAdmin): https://mail.xenonly.com/iredadmin/
*
* You can login to above links with below credential:
*
* - Username: postmaster@talhatabak.com
* - Password: YOURPASSWORD
*
********************************************************************
* Congratulations, mail server setup completed successfully. Please
* read below file for more information:
*
* - /home/xen/iRedMail-1.7.4/iRedMail.tips
*
* And it's sent to your mail account postmaster@talhatabak.com.
*
********************* WARNING **************************************
*
* Please reboot your system to enable all mail services.
*
********************************************************************
şeklinde bir çıktı ile kurulum tamamlanıyor
$ reboot
https://mail.xenonly.com/mail adresine giriş yaparsak bize 3 adet mail geldiğini görüyoruz.
İlk gelen mail kurulum hakkında yapılandırma ayrıntılarını veriyor. Yapıyı anlamak için güzel bir döküman ve iki adet sorun göze çarpıyor.
1- ssl yok hem web adresi hata veriyor hemde mail gönderme ve alma işleminde sorun çıkacak
2- gelen mailde parolamız açık şekilde görünüyor. Kurulum sonunda yukarı eklediğim çıktıda da görünüyordu eğer bu parolayı kullanmaya devam edecekseniz silmek iyi olur
Gelen mailden parolayı kaldıralım
$ cd /var/vmail/vmail1/talhatabak.com/p/o/s/postmaster/Maildir/cur
$ nano details.eml\:2\,S
maillerin tutulduğu dizine gidiyoruz, favori editörümüz ile ilgili maili açıyoruz ve parolamızı arayarak siliyoruz.
Ssl Ayarlama
$ cat /etc/nginx/sites-enabled/00-default.conf | grep well_known
root /opt/www/well_known;
komutu ile görebileceğimiz üzere lets encrypt'in http doğrulama amacıyla gelen well_known istekleri için /opt/www/well_known dizini ayarlanmış. Domainlerimiz için ssl alırken bu dizini kullanacağız.
-> Ayrıca iRedAdmin'in rocky için default nginx yapısını değiştirdiğini gözlemliyoruz, ilerde nginx yapılandırırken bu yapıyı daha ayrıntılı araştıracağız ve kendimize göre değiştireceğiz.
$ sudo certbot certonly --webroot -w /opt/www/well_known -d mail.xenonly.com
certbot'u ilk çalıştırmada mail adresi, sözleşme onaylama ve birkaç onay daha isteyecek ve devamında mail.xenonly.com için başarılı bir şekilde sertifikamızı alıyoruz.
Mail adresimize gelen detay mailinde görülebileceği üzere
SSL cert keys (size: 4096):
iRedMail varsayılan ssl dosyaları /etc/pki/tls konumunda ve postfix, dovecot ssl için bu konumu işaretlemişler. Ayrıca mail.xenonly.com/mail webmail adresi içinde tanımlı bir (geçerli olmayan, self signed) ssl sertifikası var ve o da bu konumu işaret ediyor.
O yüzden her servisin konfigürasyonundaki ssl sertifikası yolunu değiştirmek yerine bu dosyaları sileceğiz ve aynı isimde lets encrypt'den aldığımız dosya yoluna linkleyeceğiz.
$ rm /etc/pki/tls/certs/iRedMail.crt -rf
$ rm /etc/pki/tls/private/iRedMail.key -rf
# sembolik bağlantı oluşturuyoruz
$ ln -sf /etc/letsencrypt/live/mail.xenonly.com/fullchain.pem /etc/pki/tls/certs/iRedMail.crt
$ ln -sf /etc/letsencrypt/live/mail.xenonly.com/privkey.pem /etc/pki/tls/private/iRedMail.key
# ve ilgili servisleri yeniden başlatıyoruz
$ systemctl restart postfix dovecot nginx amavisd
bu işlemlerden sonra mail.xenonly.com/mail adresine girdiğimizde geçerli bir sertifika olduğunu görüyoruz. Bu mail sunucusu içinde geçerli
LE sertifikaları 90 gün süre ile veriliyor, otomatik yenileme için bir cron oluşturalım
$ crontab -e
0 3 * * * certbot renew --quiet --deploy-hook "systemctl reload postfix dovecot nginx amavisd"
Dns ayarlamaları
Dns değişikliği için domain / domainlerimizi aldığımız sağlayıcıya gidiyoruz. Benim senaryomda cloudflare
MX ve PTR kaydı ayarlama
mx kaydı kabaca belirli domaine gelen maillerin hangi sunucuya teslim edileceğini belirten dns kaydı, bu kaydı sunucuya ekleyeceğimiz her domain için yapacağız.
xenonly.com dns kaydını aşağıdaki şekilde düzenliyorum.
|MX|xenonly.com|mail.xenonly.com|
PTR, reverse dns: ip adresinin hangi domaine işaret ettiğini gösterir, VPS sağlayıcınızın yönetim panelinde ayarlayabilirsiniz. rDNS? kaydına sunucumuzun ipv4 adresini ve domaini ve varsa ipv6 adresi ve domaini giriyoruz. ipv6 varsa yüksek ihtimal sunucu maili ipv6'dan atmaya çalışacak ve ptr eşleşmeyince gmail vb sağlayıcılar maili direkt olarak reddedecek
aşağıdaki komutlar ile kontrol edebiliriz.
$ dig +short mail.xenonly.com
IPADRESİ
$ dig +short -x IPv4Adresi
mail.xenonly.com.
$ dig +short -x IPv6Adresi
mail.xenonly.com.
SPF Kaydı
Hangi sunucuların bu domain adına mail göndermeye yetkili olduğunu belirtir.xenonly.com için TXT kaydı:
xenonly.com. IN TXT v=spf1 mx a ip4:Ipv4Adresi ip6:VarsaIpv6Adresi ~all"
DMARC Kaydı
SPF + DKIM uyumsuzsa ne yapılacağını belirtir.
DKIM Kaydı
Postfix/Amavis tarafından imzalanan e-postaların doğruluğunu garanti eder.
Dns kaydına gireceğimiz yapı kabaca şu şekilde
dkim._domainkey.domain.com IN TXT "v=DKIM1; p=<PUBLIC KEY>"
burada sunucuda domain için üretilen public key'i dns kaydına ekleyeceğiz. Yazının sonuna gelmeden şuanki yapımızı kabaca incelersek.
xenonly.com -> ana domain
mail.xenonly.com -> ana mail domaini, sunucu hostname'i olarak bu domaini kullanıyoruz. Mail gönderme ve alma işlevi için bu domaini ve bu domain üzerinden aldığımız ssl'i kullanıyoruz
talhatabak.com -> ilk olarak eklediğimiz mail adresi, bu ve devamındaki herhangi bir domain olabilir. mx kaydı mail.xenonly.com'a yönlenmiş durumda ve iRedAdmin bu domain için mail kaydı açmış durumda (postmaster@talhatabak.com)
DKIM kaydı -> her domain için /var/lib/dkim/ dizininde bulunuyor şuan sadece talhatabak.com var
xenonly.com veya sonradan eklediğimiz herhangi bir domain için eklemek istersek
$ amavisd genrsa /var/lib/dkim/xenonly.com.pem 2048
$ chown amavis:amavis /var/lib/dkim/xenonly.com.pem
$ chmod 0400 /var/lib/dkim/xenonly.com.pem
komutları ile key oluşturuluyor ve izinler ayarlanıyor.
Public key’i al
amavis konfigürasyon dosyasını açalım ve yeni key'imizi ekleyelim
$ nano /etc/amavisd/amavisd.conf
# Add dkim_key here.
dkim_key('talhatabak.com', 'dkim', '/var/lib/dkim/talhatabak.com.pem');
yukarıdaki kısmı bulup yeni satıra domainimizi şu şekilde izliyoruz.
dkim_key('xenonly.com', 'dkim', '/var/lib/dkim/xenonly.com.pem');
aşağıdaki satırı buluyoruz ve devamında bulunan catch-all kısmını kaldırıyoruz veya yorum satırı yapıyoruz.
@dkim_signature_options_bysender_maps
# catch-all (one dkim key for all domains)
'.' => {d => 'talhatabak.com',
a => 'rsa-sha256',
c => 'relaxed/simple',
ttl => 30*24*3600 },
# catch-all (one dkim key for all domains)
# '.' => {d => 'talhatabak.com',
# a => 'rsa-sha256',
# c => 'relaxed/simple',
# ttl => 30*24*3600 },
catch-all'ın hemen üstünde bulunan # Per-domain dkim key bölümüne talhatabak.com ve yeni domainimiz xenonly.com'u belirtilen yapıya göre ekliyoruz.
# Per-domain dkim key
#"domain.com" => { d => "domain.com", a => 'rsa-sha256', ttl => 10*24*3600 },
"talhatabak.com" => { d => "talhatabak.com", a => 'rsa-sha256', ttl => 10*24*3600 },
"xenonly.com" => { d => "xenonly.com", a => 'rsa-sha256', ttl => 10*24*3600 },
servisi yeniden başlatalım
systemctl restart amavisd.service
ve keyleri kontrol edelim
$ amavisd showkeys
; key#1 2048 bits, s=dkim, d=talhatabak.com, /var/lib/dkim/talhatabak.com.pem
dkim._domainkey.talhatabak.com. 3600 TXT (
"v=DKIM1; p="
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlPTSLTzZ7mQUl+gTUR7c"
"bjD8KnYwUJGbKLmVlizfug8Gs0JiHnqXpshoh3IUtnnTofsxscWvf2BniqB8wZWM"
"IHRFAvcitOdDZCQiIM4ECkE16tsRYQVU3lGBWJl9eIkifoL/sU7b92GRddns23QW"
"zhlWZLGx7rR9CP+WrCmN+Y7x2KxyG0+oGxxWM69msDOkLZiYvZ10zqlYGRTJDEP/"
"8l7v5iDMhKaUZE2dD8inR0roAH2sTfAFeqtvCGafF2ZEmbYC/k0kXW6AhIMAGebg"
"vdHoYXbnjOCsiA5F3fQRDtBWZLDNC4rsCp9UEEYXjdynkKTKK5OmK6fEwG5By6kh"
"TQIDAQAB")
; key#2 1024 bits, s=dkim, d=xenonly.com, /var/lib/dkim/xenonly.com.pem
dkim._domainkey.xenonly.com. 3600 TXT (
"v=DKIM1; p="
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAlWvXz8IizqWF1cfP8xoMTBZs"
"z6aXqP732LdNGcKPlwDR41LYei3PFnAA05M8I48AFQbt72XMCUgOfGidTmHukAPV"
"w2Ct1MiW5SxkIj6RW/Q6+TfPlZiRiCW/R5JjYiyduQPMEVK8mVQoC0NWftOFjVGB"
"OJ1YKfrWNbv6ztlnvwIDAQAB")
devamında keyleri domain dns kaydına ekleyeceğiz ve yeni ekleyeceğimiz her domain için bu işlemi tekrarlayacağız, manuel veya script ile.
Dns kaydı aşağıdaki şekilde, burda dikkat edilmesi gereken ayrıntı public key kısmı tek satır olacak şekilde eklenmeli. Örnek olarak xenonly.com için
dkim._domainkey.xenonly.com IN TXT "v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAlWvXz8IizqWF1cfP8xoMTBZsz6aXqP732LdNGcKPlwDR41LYei3PFnAA05M8I48AFQbt72XMCUgOfGidTmHukAPVw2Ct1MiW5SxkIj6RW/Q6+TfPlZiRiCW/R5JjYiyduQPMEVK8mVQoC0NWftOFjVGBOJ1YKfrWNbv6ztlnvwIDAQAB)"
Test edelim
mail.xenonly.com/mail adresine info@xenonly.com kullanıcısı ile giriyoruz ve
https://www.mail-tester.com/ adresinde bize verilen adrese mail atıyoruz ve 10/10 çıktısını görüyoruz. Hayırlı olsun
Iredadmin ile yeni domain ve kullanıcı eklemek
https://mail.xenonly.com/iredadmin adresine giriyoruz ve yönetici hesabı ile giriş yapıyoruz (postmaster@domain.com)
Şuanki web yapısına minik bir not: /mail (roundcube, webmail) ve (iredadmin) yolları herhangi bir domain ile belirlenmiyor nginx default olan bu yollara gelen her isteği bu servislere yönlendiriyor. İlerde Nginx yapılandırırken bu yolları tek domain ile erişilebilir hale getireceğiz.
Add -> domain yolunu izleyerek xenonly.com domainini ekliyoruz.
Add -> User yolunu izleyerek xenonly.com için info adında kullanıcı oluşturuyoruz.
Member discussion