Docker: Setup Self-hosted Mail Server
Posted on
Mail server ini ribet, konfigurasinya banyak, cakupannya luas, mulai dari MTA, MDA, etc, etc. Ribet pokoknya. Untuk meringkas semua itu, saya memutuskan untuk memakai docker karena beruntung sudah ada yang membuat docker imagenya.
Persiapan direktori dan konfigurasi
Siapkan direkori untuk mail server
mkdir -p /opt/dockermail/settings
mkdir -p /opt/dockermail/mail
Buatlah config.json untuk mail server
nano /opt/dockermail/settings/config.json
Contoh dari config.json, silakan sesuikan domain.tld dengan yg dimiliki.
{
"settings": {
"myhostname": "hostname.domain.tld"
},
"domains": {
"domain.tld" :
[
{
"email": "[email protected]",
"password": "{PLAIN}tahiayam"
},
{
"email": "[email protected]",
"password": "{PLAIN}tahiayam",
"aliases": ["[email protected]", "[email protected]", "[email protected]"]
},
{
"email": "[email protected]",
"password": "{PLAIN}tahiayam"
},
{
"email": "[email protected]",
"password": "{PLAIN}tahiayam"
},
{
"email": "[email protected]",
"password": "{PLAIN}tahiayam"
},
{
"email": "[email protected]",
"password": "{PLAIN}tahiayam"
}
]
}
}
Buatlah docker-compose.yml
nano /opt/dockermail/settings/docker-compose.yml
Berikut ini isi dari docker-compose.yml
core:
image: adaline/dockermail-core
ports:
- "25:25"
- "143:143"
- "587:587"
volumes:
- /opt/dockermail/settings:/mail_settings
- /opt/dockermail/mail:/vmail
links:
- opendkim
- amavis
opendkim:
image: adaline/dockermail-opendkim
volumes:
- /opt/dockermail/settings:/mail_settings
amavis:
image: adaline/dockermail-amavis
volumes:
- /opt/dockermail/settings:/mail_settings
Persiapan DNS
Kita generate dkim dulu,
cd /opt/dockermail/settings
wget https://raw.githubusercontent.com/adaline/dockermail/master/opendkim/generate_key.sh
bash generate_key.sh domain.tld
Catat outputnya!, akan kita pakai ketika setting dns.
Kemudia login ke manajemen domain dan buat record berikut ini:
record | Name | Value |
---|---|---|
A | hostname.domain.tld | ip vps |
MX | domain.tld | ip vps |
TXT | _dmarc | v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; sp=none; ri=86400 |
TXT | default._domainkey | hasil generate dkim (generate_key.sh) |
TXT | domain.tld | v=spf1 a mx ip4:100.162.14.8 ~all |
{:.table-striped} |
Keterangan tambahan:
- SPF saya dapat dari mail-tester.com
- DMARC saya dapat dari hasil mengikuti wizard di dmarc guide
- DKIM saya dapat dari generate-key.sh
Start instance docker
docker-compose -f /opt/dockermail/settings/docker-compose.yml up -d
didalam folder /opt/dockermail/settings/ akan muncul ssl cert dan key:
- ssl-cert-snakeoil.key
- ssl-cert-snakeoil.pem
silakan direplace pakai sertifikat lets encrypt, saya buat dengan cara certbot --nginx
kemudian memilih domain domain.tld
Untuk enkripsi password: docker ps
, cari nama container email kita, selanjutnya:
docker exec -it nama-kontainer doveadm pw -s SHA512-CRYPT
Enter new password: password yg mau dipakai
Retype new password: konfirmasi password yg mau dipakai
{SHA512-CRYPT}random-string-hasil-enkripsi
Setelah password yang diperlukan dibuat, silakan update password masing-masing akun yang ada di config.json
nano /opt/dockermail/settings/config.json
Contohnya begini:
{
"settings": {
"myhostname": "vps.domain.tld"
},
"domains": {
"domain.tld" :
[
{
"email": "[email protected]",
"password": "{SHA512-CRYPT}random-string-hasil-enkripsi"
},
{
"email": "[email protected]",
"password": "{SHA512-CRYPT}random-string-hasil-enkripsi",
"aliases": ["[email protected]", "[email protected]", "[email protected]"]
},
{
"email": "[email protected]",
"password": "{SHA512-CRYPT}random-string-hasil-enkripsi"
},
{
"email": "[email protected]",
"password": "{SHA512-CRYPT}random-string-hasil-enkripsi"
},
{
"email": "[email protected]",
"password": "{SHA512-CRYPT}random-string-hasil-enkripsi"
},
{
"email": "[email protected]",
"password": "{SHA512-CRYPT}random-string-hasil-enkripsi"
}
]
}
}
Kemudian restart docker instance
docker-compose -f /opt/dockermail/settings/docker-compose.yml restart
Kemudian kita tes email server kita, saya memanfaatkan mail-tester nampak seperti gambar pembuka artikel ini. Dari sana apa yang kurang bisa kita sesuaikan.