Mailu: Güçlü ve Esnek Bir Mail Sunucusu Çözümü
- Murat Akpınar
- Docker , Open source
- 27 Temmuz 2024
İçindekiler
Kendi mail sunucunuzu kurmak teknik olarak bir öğleden sonralık iştir; mailinizin karşı tarafın gelen kutusuna düşmesi ise ayrı bir iştir. Postfix, Dovecot, antispam, antivirüs, webmail ve TLS sertifikasını tek tek kurup birbirine bağlamak yerine Mailu bunların hepsini birbiriyle konuşan Docker konteynerleri hâlinde verir.
Bu yazıda Mailu’nun ne sunduğunu, kurulum öncesi sunucuda ve DNS’te hazır olması gerekenleri ve setup.mailu.io sihirbazındaki her alanın ne işe yaradığını adım adım göreceğiz.
Mailu’nun Özellikleri
- Açık Kaynaklı: Tamamen açık kaynaklı bir projedir.
- Docker Tabanlı: Docker kapsayıcıları kullanarak kolayca kurulabilir ve yönetilebilir. Fakat burada önemli olan şey docker compose v2 olmalı.
- Güvenlik: Spam ve virüs filtreleme, SSL/TLS desteği gibi gelişmiş güvenlik özellikleri sunar.
- Esneklik: Farklı konfigürasyon ve kullanıcı ihtiyaçlarına göre özelleştirilebilir.
Mailu Kurulumu İçin Gereksinimler
Mailu’yu kurmak için aşağıdaki gereksinimlere sahip olmanız gerekmektedir: resmî gereksinim listesi
-
Bir Alan Adı: Mailu’yu kullanmak için bir alan adına ihtiyacınız var.
-
DNS Kayıtları: Alan adınız için gerekli DNS kayıtlarını yapılandırmalısınız. Bunların hangileri olduğu ve neden pazarlık konusu olmadığı yazının sonunda.
-
Docker ve Docker Compose: Mailu, Docker kapsayıcıları ile çalışır, bu yüzden Docker ve Docker Compose v2 yüklü olmalıdır.
-
Sunucu: Mailu’yu barındıracak bir sunucuya ihtiyacınız var.
-
Hostname: Sunucunun hostname’ini mail sunucusunun genel adına ayarlayın ve
/etc/hostsdosyasında da çözülür hâle getirin. Postfix bu adı karşı sunucuyaHELO/EHLOsırasında bildirir; adın gerçek olmaması tek başına spam puanı yazdırır.sudo hostnamectl set-hostname mail.muratakpinar.com.tr
Sürüm kontrolü
Kuruluma başlamadan önce Docker ve Compose sürümlerini doğrulayın — Mailu’nun ürettiği docker-compose.yml, Compose v1 ile çalışmaz:
$ docker version
Client: Docker Engine - Community
Version: 20.10.22
API version: 1.41
Go version: go1.18.9
Git commit: 3a2c30b
Built: Thu Dec 15 22:27:03 2022
OS/Arch: linux/arm64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.22
API version: 1.41 (minimum version 1.12)
Go version: go1.18.9
Git commit: 42c8b31
Built: Thu Dec 15 22:25:25 2022
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.14
GitCommit: 9ba4b250366a5ddde94bb7c9d1def331423aa323
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
$ docker compose version
Docker Compose version v2.14.1
Mailu Kurulum Adımları
Adım 1: Başlangıç Konfigürasyonu
Kuruluma başlamadan önce bazı değişkenlerin ayarlanması gerekmektedir. Mailu’nun konfigürasyon kendi sitesinden yaparak bilgileri doldurun: setup.mailu.io
- Mailu Storage Path: Bu alan, Mailu’nun verilerini depolayacağı dizini belirtir. Docker volume path’i girilmelidir, örneğin:
/mailu. - Main Mail Domain and Server Display Name: Ana mail domaini ve sunucu adı bu alana girilmelidir. Örneğin,
muratakpinar.com.tr - Postmaster Local Part: Bu alan, postmaster e-posta adresinin yerel kısmını belirtir. Genellikle
adminolarak kullanılır. - Choose how you wish to handle security TLS certificates: TLS sertifikalarını nasıl yönetmek istediğinizi seçin.
letsencryptgibi bir seçenek belirleyebilirsiniz. - Authentication rate limit per IP for failed login attempts on unique non-existing accounts: Belirli bir IP adresinden yapılan başarısız giriş denemeleri için saatlik limit. Örneğin,
5 / hour. - Authentication rate limit per user: Kullanıcı başına günlük giriş deneme limiti. Örneğin,
50 / day. - Outgoing message rate limit (per user): Kullanıcı başına günlük gönderilebilecek mesaj limiti. Örneğin,
200 / day. - Opt-in for anonymized statistics: Anonimleştirilmiş istatistiklere katılmak isteyip istemediğinizi belirleyin.
- Website name: Web sitesinin adını girin. Örneğin,
Murat Akpınar. - Linked Website URL: Bağlantılı web sitesinin URL’sini girin. Örneğin, ``.
- Enable the admin UI: Yönetim arayüzünü etkinleştirin. Bu seçenek, Mailu’nun yönetim araçlarına erişim sağlar.
- Enable the API: API’yi etkinleştirin. Mailu’nun yapılandırmasını değiştirmek için RESTful API’yi kullanabilirsiniz. API’yi etkinleştirdiğinizde size bir TOKEN üretip verecektir.
Adım 2: Özellikleri Seçin
Mailu, bir yönetici arayüzü, web e-posta istemcileri, antispam, antivirüs gibi birden fazla temel özellik ile birlikte gelir. Bu bölümde, tercihlerinize göre servisleri etkinleştirebilirsiniz:
- Enable Web email client: Web e-posta istemcisini etkinleştirin. Bu seçenek, kullanıcıların web üzerinden posta kutularına erişmelerini sağlar.
none,roundcubeveyasnappymailseçeneklerinden birini belirleyebilirsiniz. (Eski sürümlerde bu listede geçen RainLoop‘un yerini SnappyMail aldı; RainLoop geliştirilmeyi bıraktığı için yeni kurulumlarda seçilmemelidir.) - Enable the antivirus service: Antivirüs hizmetini etkinleştirir. ClamAV kullanarak büyük ölçekli virüs yayılma kampanyalarına karşı koruma sağlar. Bu hizmeti etkinleştirmek için en az 1GB bellek gereklidir.
- Enable the webdav service: Webdav hizmetini etkinleştirir. Kullanıcıların HTTP üzerinden takvim ve rehber gibi bilgileri depolamalarını sağlar.
- Enable fetchmail: Fetchmail’i etkinleştirir. Kullanıcıların harici bir mail sunucusundan IMAP/POP3 ile posta çekip gelen kutularına yerleştirmelerini sağlar.
- Enable oletools: Oletools’u etkinleştirir. E-posta eklerindeki belgeleri kötü amaçlı makrolara karşı tarar. Tam teşekküllü bir antivirüs programına göre daha düşük bellek kullanır.
- Enable Tika: Tika’yı etkinleştirir. E-posta ekleri içinde arama yapma işlevini sağlar. Tika, e-posta eklerindeki belgeleri tarar, işler (OCR, anahtar kelime çıkarımı) ve verimli bir şekilde aranabilir hale getirir. Bu işlem önemli miktarda kaynak (RAM, CPU ve depolama) gerektirir.
Adım 3: Mailu’yu Dünyaya Açın
Mail sunucusunun e-posta alabilmesi, gönderebilmesi ve kullanıcıların posta kutularına erişebilmesi için dünyaya açılması gerekmektedir. Mailu, bu işlemi çeşitli yollarla yapabilir:
- IPv4 listen address: Sunucunun dinleyeceği IP adresi. Sunucu doğrudan internete bakıyorsa buraya genel (public) IP adresini yazın; NAT arkasındaysa sunucunun kendi arayüzündeki adresi yazılır ve 25/465/587/993 portları dışarıdan bu makineye yönlendirilir. Örneğin,
192.168.1.50. - Subnet of the docker network: Docker ağının alt ağını belirtin. Bu ağ, sisteminizin bağlı olduğu herhangi bir ağ ile çakışmamalıdır. Genellikle format
*.*.*.0/24şeklindedir. Örneğin,192.168.203.0/24. - Enable IPv6: IPv6’yı etkinleştirin. Bu, Mailu’nun DNSSEC doğrulamasını yapmasına, DNS kök sorgularını ve önbelleklemesini gerçekleştirmesine olanak tanır.
- Enable an internal DNS resolver (unbound): Dahili bir DNS çözümleyiciyi etkinleştirin. Bu seçenek, antispam hizmetinin genel veya ISS DNS sunucuları tarafından engellenmemesine yardımcı olur.
- Public hostnames: Sunucunun barındıracağı genel ana bilgisayar adlarını girin. Bu alan adları, e-posta alan adlarının MX kayıtlarında belirtilmelidir. Ana bilgisayar adları virgülle ayrılmalıdır.
mail.muratakpinar.com.tr
Adım 4: Dosyaları İndirin ve Ayağa Kaldırın
Sihirbaz, verdiğiniz cevaplara göre size özel bir bağlantı üretir ve iki dosya sunar: docker-compose.yml ile mailu.env. İkisini de depolama dizinine indirip servisleri başlatırsınız:
sudo mkdir -p /mailu && cd /mailu
# <ID> kısmı sihirbazın ürettiği bağlantıdan gelir
wget https://setup.mailu.io/2024.06/file/<ID>/docker-compose.yml
wget https://setup.mailu.io/2024.06/file/<ID>/mailu.env
docker compose -p mailu up -d
İlk yönetici hesabı elle oluşturulur; sihirbaz bunu yapmaz:
docker compose -p mailu exec admin flask mailu admin admin muratakpinar.com.tr 'PAROLA'
Komutun bu biçimi Mailu 2024.06 içindir; farklı bir sürüm kuruyorsanız o sürümün kurulum sayfasını açıp doğrulayın.
Kurulumdan Sonra: Teslim Edilebilirlik
Konteynerlerin ayağa kalkması mail sunucusunun çalıştığı anlamına gelir; maillerinizin karşı tarafa ulaştığı anlamına gelmez. Bu ikisinin arasındaki fark DNS’te ve sağlayıcınızın port politikasında saklıdır.
- 25 numaralı port giden yönde açık mı? Çoğu ev interneti ve birçok bulut sağlayıcısı (AWS, Azure, Oracle Cloud, DigitalOcean) giden 25/tcp trafiğini varsayılan olarak keser. Kesikse Mailu hiçbir şey gönderemez ve kusur sunucuda değildir. Kurmadan önce sağlayıcıdan açtırın ya da bir smarthost planlayın.
- PTR (reverse DNS) kaydı. IP adresinizin geriye doğru
mail.alanadi.comçözmesi gerekir ve bu kaydı yalnızca IP’nin sahibi (sağlayıcınız) girebilir. Gmail ve Outlook, PTR’si olmayan sunucudan gelen postayı büyük ölçüde reddeder. - MX, SPF, DKIM, DMARC. Alan adınızın MX kaydı sunucunuzu göstermeli; SPF hangi IP’nin sizin adınıza gönderebileceğini, DKIM imzanın doğrulanacağı anahtarı, DMARC ise uyuşmazlıkta ne yapılacağını söyler. Mailu bu kayıtların metnini yönetim arayüzünde hazır olarak üretir (
Mail domains → alan adınız → DNS); oradan kopyalayıp DNS sağlayıcınıza girmeniz gerekir. - TLS sertifikası.
letsencryptseçtiyseniz Mailu sertifikayı kendisi alır ve yeniler, ama bunun için 80 ve 443 portlarının dışarıdan erişilebilir olması şarttır.
Sonuç
- Mailu’nun kolaylaştırdığı şey kurulum, teslim edilebilirlik değil. Konteynerler beş dakikada ayağa kalkar; PTR, SPF, DKIM ve DMARC tamamlanmadan gönderdiğiniz mailler spam klasöründe kalır.
- Kurulumdan önce iki şeyi doğrulayın: giden 25/tcp portunuz açık mı ve IP’nizin PTR kaydını girebiliyor musunuz? İkisi de sizin elinizde değilse kendi sunucunuzu kurmak yerine bir mail sağlayıcısı kullanmak daha doğrudur.
- Sürüm etiketine sadık kalın. Mailu’nun kurulum sihirbazı ve
docker-compose.yml‘si sürüme özeldir (2024.06); farklı sürümlerin dosyalarını karıştırmak çalışmayan bir kurulum üretir.
Kurduktan sonra sunucunuzun dışarıdan nasıl göründüğünü mail-tester.com veya MXToolbox gibi bir servisle test edin — eksik kalan DNS kaydını size satır satır söyler.