INSTALL AND CONFIGURE MAILCOW – BEST SELF HOSTED MAIL SERVER

INSTALL AND CONFIGURE MAILCOW – BEST SELF HOSTED MAIL SERVER

Though there are several mailing solution for self hosted mail server, but installation and configuration can be headache some times. MailCow is fully feature loaded mailing script based on Dovecot, Postfix, SoGo and other open source software. It’s not easy to install, but also provides a modern web user interface for user and server administration.

MailCow is open source project which means you don’t have to spend a penny from your pocket for the software. To learn more about MailCow you can read their official documentation.

Requirement for MailCow Server

I will using Contabo for demonstration as they do not ban port 25. I have prepared list of VPS provider which gives you open port 25.

  • Recommended OS: Ubuntu 20.04

Initial DNS Setup

First of all you need to create few DNS records in order to start. They are as follows

TypeHostValue
AmailYour IP address
CNAMEautodiscovermail.yourdomain.com
CNAMEautoconfigmail.yourdomain.com
MX@mail.yourdomain.com 10

Installation of MailCow

Before, you can actually install mailcow, you need to install docker and docker compose needed by mailcow.

Installation of Docker

I already have discussed installation of Docker on Ubuntu. All, you need is to follow that article to install docker and docker-compose, which is will also help you understand docker.

Install MailCow

First of all set the hostname

1root@mail:~# hostnamectl set-hostname mail.yourdomain.com

Then install git , just in case it’s not installed. Then change working directory to opt directory and pull MailCow files from github.

123root@mail:~# apt install git -yroot@mail:~# cd /optroot@mail:/opt# git clone https://github.com/mailcow/mailcow-dockerized

Now again change working directory.

1root@mail:/opt# cd mailcow-dockerized

Finally execute the bin file and answer the question

123456789101112root@mail:/opt/mailcow-dockerized# ./generate_config.sh Press enter to confirm the detected value '[value]' where applicable or enter a custom value.Mail server hostname (FQDN) - this is not your mail domain, but your mail servers hostname: mail.ingu.pwTimezone [Etc/UTC]:Generating snake-oil certificate...Generating a RSA private key...................................................................++++...............................................................................................................................................................................................++++writing new private key to 'data/assets/ssl-example/key.pem'-----Copying snake-oil certificate...

You can also make changes in configuration of you like

1root@mail:/opt/mailcow-dockerized# nano mailcow.conf

Next, pull MailCow docker image

12345678910111213141516171819202122root@mail:/opt/mailcow-dockerized# docker-compose pull Pulling unbound-mailcow   ... donePulling mysql-mailcow     ... donePulling redis-mailcow     ... donePulling clamd-mailcow     ... donePulling php-fpm-mailcow   ... donePulling sogo-mailcow      ... donePulling dovecot-mailcow   ... donePulling rspamd-mailcow    ... donePulling postfix-mailcow   ... donePulling memcached-mailcow ... donePulling nginx-mailcow     ... donePulling acme-mailcow      ... donePulling netfilter-mailcow ... donePulling watchdog-mailcow  ... donePulling dockerapi-mailcow ... donePulling solr-mailcow      ... donePulling olefy-mailcow     ... donePulling ejabberd-mailcow  ... donePulling ofelia-mailcow    ... donePulling ipv6nat-mailcow   ... done

Finally, run the compose.

123456789101112131415161718192021222324252627282930313233343536root@mail:/opt/mailcow-dockerized# docker-compose up -d Creating network "mailcowdockerized_mailcow-network" with driver "bridge"Creating volume "mailcowdockerized_vmail-vol-1" with default driverCreating volume "mailcowdockerized_vmail-index-vol-1" with default driverCreating volume "mailcowdockerized_mysql-vol-1" with default driverCreating volume "mailcowdockerized_mysql-socket-vol-1" with default driverCreating volume "mailcowdockerized_redis-vol-1" with default driverCreating volume "mailcowdockerized_rspamd-vol-1" with default driverCreating volume "mailcowdockerized_solr-vol-1" with default driverCreating volume "mailcowdockerized_postfix-vol-1" with default driverCreating volume "mailcowdockerized_crypt-vol-1" with default driverCreating volume "mailcowdockerized_sogo-web-vol-1" with default driverCreating volume "mailcowdockerized_sogo-userdata-backup-vol-1" with default driverCreating volume "mailcowdockerized_xmpp-vol-1" with default driverCreating volume "mailcowdockerized_xmpp-upload-vol-1" with default driverCreating mailcowdockerized_sogo-mailcow_1      ... doneCreating mailcowdockerized_olefy-mailcow_1     ... doneCreating mailcowdockerized_memcached-mailcow_1 ... doneCreating mailcowdockerized_clamd-mailcow_1     ... doneCreating mailcowdockerized_unbound-mailcow_1   ... doneCreating mailcowdockerized_watchdog-mailcow_1  ... doneCreating mailcowdockerized_dockerapi-mailcow_1 ... doneCreating mailcowdockerized_solr-mailcow_1      ... doneCreating mailcowdockerized_ejabberd-mailcow_1  ... doneCreating mailcowdockerized_redis-mailcow_1     ... doneCreating mailcowdockerized_mysql-mailcow_1     ... doneCreating mailcowdockerized_php-fpm-mailcow_1   ... doneCreating mailcowdockerized_postfix-mailcow_1   ... doneCreating mailcowdockerized_dovecot-mailcow_1   ... doneCreating mailcowdockerized_nginx-mailcow_1     ... doneCreating mailcowdockerized_ofelia-mailcow_1    ... doneCreating mailcowdockerized_netfilter-mailcow_1 ... doneCreating mailcowdockerized_rspamd-mailcow_1    ... doneCreating mailcowdockerized_acme-mailcow_1      ... doneCreating mailcowdockerized_ipv6nat-mailcow_1   ... done

You might have to open port if firewall is running on your server. Run the following commands

1root@mail:~# sudo ufw allow 25,80,443,110,143,465,587,993,995/tcp

Now go to browser and open https://mail.yourdomain.com with the default credentials admin + password moohoo.

mailcow-admin-login-window

Inside admin dashboard make sure to change the password.

mailcow-admin-dashboard

To add domain and user go to configuration in the top menu

mailcow-add-domain-mail-window

To access mailbox go to https://mail.yourdomain.com/sogo and enter username and password.

mailcow-webmail-login

Next screen will be something like this.

mailcow-webmail-dashboard

Final DNS Configuration

You also need to setup DKIM, DMARC and SPF record to finish the installation.

TypeHostValue
TXT@“v=spf1 mx a -all”
TXT_dmarc“v=DMARC1; p=reject; rua=mailto:mailauth-reports@example.org”
TXTdkim._domainkey“v=DKIM1; k=rsa; t=s; s=email; p=…”

To get the DKIM go to configuration>>domain>>edit as follows

add-dkim-mailcow

At the bottom of next page, you should find DKIM key. Copy it and paste it in DKIM TXT record.

dkim-key-mailcow-location

Conclusion

Installation of MailCow mail server is simple and with proper guidance any one can install it. In this tutorial, I have demonstrated all the steps and commands required to install MailCow.MAY 12, 2021/2 COMMENTS/BY DHIRAJ RAHULTAGS:INSTALL DOCKER UBUNTUINSTALL MAILCOWMAILCOW

Share this entry

2REPLIES

  1. ErosErossays:Hello,
    First congratulation for your tutorial.
    I have installed a mail server (mailcow app) on ubuntu and I am confused about reverse dns (PTR record). I’ll tell you the facts:
    We will take king-kong.com as an example
    Main domain name -> king-kong.com
    subdomain: mail.king-kong.com
    mailcow app -> sogo -> domain: trace.king-kong.com
    So users use xxxx@trace.king-kong.com as their email address.
    Namecheap.com setup:
    A Record: mail
    CNAME Record: mail.king-kong.com
    TXT Record: … p = reject; rua = mailto: mailauth-reports@king-kong.comWhat I would like to know is what domain name I should use for the PTR record? mail.king-kong.com or trace.king-kong.comReply

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Name *

Email *

Website