Mailcow: Self Hosted Eposta Çözümü

04.06.2019

Gmail alternatifi arayışım, Mailcow‘u keşfetmem ile son buldu. Tamamı açık kaynak kodlu parçalardan oluşan bu bundle, bir eposta servisinde aradığım -ve bulamadığım- tüm özelliklere sahip.

  • Virüs taraması – ClamAV
  • Metin arama (full text search) – Solr
  • Spam filtresi – Rspamd
  • Sistem güvenliği sağlayıcısı – Netfilter
  • Otomatik SSL sertifikası üretimi – LetsEncrypt – ACME-Client
  • Epostaların şifrelenerek saklanması – Mail Crypt
  • Webmail, takvim ve kişi listesi – SoGo
  • 2 adımlı doğrulama (TFA – Two Factor Authentication)
  • IMAP, POP3 ve SMTP desteği
  • Tek kullanımlık eposta adresleri (disposable emails)
  • Ve daha fazlası…

Anti virüs ve metin arama özelliklerini kullanmak istiyorsanız, sunucunuzun 2.5 GB’dan daha fazla ram’e sahip olması gerekiyor. Ben, Vultr‘ın 20$’lık makinesini tercih ettim.

Mailcow Kurulumu

Gelelim kuruluma. Sunucunuzu sadece Mailcow için kullanacaksanız, kurulum çok basit. Fakat aynı anda başka siteler barındırmak için de kullanacaksanız Nginx gibi bir reverse proxy‘ye ihtiyacınız var. Ben her iki kurulumu da Ubuntu 18.04 için anlatacağım. Kurulum adımları diğer işletim sistemlerinde farklılık gösterecektir.

Ön Hazırlıklar

Bu aşamada her iki kurulumda da kullanılacak ortak yazılımları yükleyeceğiz.

1- Docker kurulumu

Aşağıdaki komutları tek tek girerek Docker Community Edition‘ı 🡥 kuruyoruz.

$ sudo apt-get update
$ sudo apt-get install \
 apt-transport-https \
 ca-certificates \
 curl \
 gnupg-agent \
 software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
 "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
 $(lsb_release -cs) \
	stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

Kurulumu tamamladıktan sonra Docker’ın, sunucu yeniden başladığında otomatik olarak çalışabilmesi için şu komutları 1 kez giriyoruz:

$ sudo systemctl enable docker
$ sudo systemctl start docker

2- Docker Compose Kurulumu

Docker Compose’u kurmak için çalıştırmanız gereken komutlar çok daha az:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

3- Mailcow’un Sunucuya İndirilmesi

Mailcow’u Git reposundan 🡥 klonlayarak kurmamız gerekiyor. Ubuntu 18.04’te Git yüklü olarak geliyor (en azından server edition’da). Eğer kullandığınız işletim sisteminde Git yüklü değil ise yüklemelisiniz.

$ umask # Bu komutun çıktısının 0022 olması gerekiyor.
$ cd /opt
$ git clone https://github.com/mailcow/mailcow-dockerized

4- DNS Ayarları

Mailcow’u kullanabilmek için 1 adet domaine ihtiyacınız var. Bu domaine ait bir subdomaini eposta sunucusu olarak kullanacağız. Yani dagli.net değil, mx.dagli.net ya da mail.dagli.net olmalı. Seçtiğiniz subdomaini, sunucu IP adresinize yönlendiren bir A kaydı oluşturmalısınız.

Kurulumu tamamladıktan sonra, IMAP ve SMTP portlarının güvenliği için bir çok TLSA kaydı oluşturmanız gerekecek. Eğer mevcut DNS sunucunuz TLSA kaydı oluşturmanıza izin vermiyor ise, Cloudflare’in 🡥 ücretsiz DNS hizmetini kullanabilirsiniz. Ben eposta sunucusu olarak kullandığım domainin DNS sunucusunu, Vultr’dan Cloudflare’e çevirmek zorunda kalmıştım.

Bu noktaya kadar sorunsuz olarak geldiyseniz, ön hazırlıkları tamamlamışsınız demektir.

Standalone Mailcow Kurulumu

Sunucunuzda sadece Mailcow’u kullanacaksanız, kurulum işlemlerinin bitmesine 2-3 dk kaldı.

$ cd /opt/mailcow-dockerized
$ ./generate_config.sh

Son komut, ayar dosyasını oluşturacak olan küçük bir sihirbaz. İlk önce eposta sunucusunun, sunucu adını (hostname) soracak. Buraya 4. ön hazırlık maddesinde seçmiş olduğunuz subdomaini yazacaksınız. İkinci soru ise, eposta sunucusunun zaman dilimi. Türkiye için Europe/Istanbul yazabilirsiniz.

Ayar dosyasını da oluşturduktan sonra, aşağıdaki iki komutu çalıştırarak, Mailcow kurulumunu tamamlayacaksınız.

$ docker-compose pull
$ docker-compose up -d

Mailcow Reverse Proxy Kurulumu

Eğer sunucunuzda Mailcow dışında herhangi bir site barındıracaksanız bir adet reverse proxy’ye ihtiyacınız var. Çünkü Mailcow yönetim paneli, standart HTTP(S) portları olan 80 ve 443’ü kullanıyor. Ön hazırlığı tamamladıktan sonra, benim tercihim olan Nginx’i kuruyoruz.

$ sudo apt-get install nginx

Standalone kurulumdada anlattığım “ayar dosyası oluşturma” kısmını burada da yapacağız. Ayar dosyasını oluşturduktan sonra, favori editörünüz ile bu dosyası açmanız gerekiyor.

$ cd /opt/mailcow-dockerized
$ nano mailcow.conf

mailcow.conf dosyasında HTTP_PORT= kısmını bulup, aşağıdaki gibi düzenlemelisiniz.

HTTP_PORT=3080
HTTP_BIND=127.0.0.1
HTTPS_PORT=3043
HTTPS_BIND=127.0.0.1

Artık Mailcow’un kurulumunu tamamlayıp çalıştırabiliriz:

$ docker-compose pull
$ docker-compose up -d

Sırada Nginx konfigürasyonu var. /etc/nginx/sites-available klasörünün içine mailcow.conf 🡥 dosyası oluşturuyoruz.

# Kullandığım Mailcow Nginx konfigürasyon dosyasını indir
$ curl https://pastebin.com/raw/xt2zquxv > /etc/nginx/sites-available/mailcow.conf

# İndirilen konfigürasyon dosyasını, sites-enabled'a linkle
$ ln -s /etc/nginx/sites-available/mailcow.conf /etc/nginx/sites-enabled/000-mailcow.conf

# site-enabled'daki "default" linkini sil
$ rm /etc/nginx/sites-enabled/default

Bu dosyayı açıp __EPOSTA_SUNUCU_ADI__ yazan yerleri, 4. ön hazırlık maddesinde seçmiş olduğunuz subdomain ile değiştirmelisiniz.

Nginx’i yeniden başlattıktan sonra Mailcow ve Nginx reverse proxy kurulumu tamamlanmış oluyor.

$ sudo systemctl restart nginx

Kurulum Sonrası Ayarları

Eposta sunucu adresi olarak seçtiğiniz subdomaini tarayıcınızla açıp Mailcow yönetim paneline ulaşabilirsiniz. Ön tanımlı yönetici bilgileri:

Kullanıcı adı: admin
Kullanıcı şifresi: moohoo

Mailcow Kontrol Paneli – Giriş Ekranı

Giriş yaptıktan sonra yönetici bilgilerini değiştirmeniz gerekiyor. Ardından üst menüden Configuration > Mail Setup’a tıklayıp, domain yönetim paneline ulaşacaksınız. Eposta adresiniz olarak kullanmak istediğiniz tüm domainleri buradan eklemelisiniz.

Domainleri ekledikten sonra, üst menüden Configuration > Configuration & Details’e tıklayıp açılan sayfadan Configuration sekmesine tıklamalısınız. İlk bölüm olan “ARC/DKIM keys” kısmında, biraz aşağıda “Select domains with missing keys” linki var. Ona tıkladığınız zaman eklemiş olduğunuz ve ARC/DKIM key bilgisi olmayan domainleri seçecek. Ardından “Key Length” seçeneğinden istediğinizi seçip “Add” butonuna tıklayacaksınız.

Mailcow ARC/DKIM key ekleme kısmı

Şimdi tekrar Configuration > Mail Setup sayfasına gelerek, eklediğiniz alan adları listesini göreceksiniz. Bu listede en sağdaki DNS butonuna basarsanız, Mailcow mevcut DNS kayıtlarınız ile tanımlamanız gereken DNS kayıtlarının karşılaştırmalı listesini gösterecek. Bu listedeki kayıtları tek tek oluşturmalısınız.

Mailcow DNS ayarları yardımcısı

Artık ister Mailcow’un Webmail’i üzerinden ister favori mail client’ınız ile IMAP & SMTP üzerinden kendi barındırdığınız eposta hizmetinizi kullanabilirsiniz. Ben masaüstünde Thunderbird, Android telefonumda ise K-9 Mail uygulamalarını tercih ettim. Her iki yazılım da açık kaynak kodlu :)