1. Project Overview & Quickstart (mailcow/mailcow-dockerized)
File: README.md
mailcow: dockerized - 🐮 + 🐋 = 💕
Want to support mailcow?
Please consider a support contract with Servercow to support further development. We support you while you support us. :)
You can also get a SAL which is a one-time payment with no liabilities or returning fees.
Or just spread the word: moo.
Many thanks to our GitHub Sponsors ❤️
A big thank you to everyone supporting us on GitHub Sponsors—your contributions mean the world to us! Special thanks to the following amazing supporters:
100$/Month Sponsors
50$/Month Sponsors
Info, documentation and support
Please see the official documentation for installation and support instructions. 🐄
🐛 If you found a critical security issue, please mail us to info at servercow.de.
Cowmunity
Telegram mailcow Off-Topic channel
Telegram desktop clients are available for multiple platforms. You can search the groups history for keywords.
Misc
Important: mailcow makes use of various open-source software. Please assure you agree with their license before using mailcow.
Any part of mailcow itself is released under GNU General Public License, Version 3.
mailcow is a registered word mark of The Infrastructure Company GmbH, Parkstr. 42, 47877 Willich, Germany.
The project is managed and maintained by The Infrastructure Company GmbH.
Originated from @andryyy (André)
File: data/hooks/README.md
Place executable scripts in each directory to run a hook at the end of a docker-entrypoint.sh script.
Only images with a docker-entrypoint are covered.
2. Official Technical Reference & Guides (mailcow/mailcow-dockerized-docs)
File: README.md
mailcow-docs | [](https://github.com/mailcow/mailcow-dockerized-docs/actions/workflows/pages/pages-build-deployment)
The official mailcow docs based on mkdocs-material
Introduction:
The mailcow documentation has been redesigned from scratch based on the original (legacy-1.0 branch).
Advantages compared to the legacy version:
- Full translation support (English and German are officially supported by Servercow/tinc).
- New folder structure for better overview/ordering of sub-pages.
- Switches for Command Syntax (Docker Compose especially)
Contributions:
About contributions:
The documentation lives (just like the actual mailcow project) from community contributions.
Of course, we will also make our contributions to the documentation, but especially the new translation support naturally brings some scope for multiple community supported languages.
To contribute new pages/translations simply clone the repository and then work with your cloned repository.
Once you are done with your work start a pull request, if approved this will then be implemented into the actual documentation.
Use the Compose Switch in a new/edited Page:
If you plan to contribute to our docs please make sure to always specify both docker compose syntaxes! This can be done by using a "switch". Example:
=== "docker compose (Plugin)"
``` bash
docker compose exec rspamd-mailcow bash
```
=== "docker-compose (Standalone)"
``` bash
docker-compose exec rspamd-mailcow bash
```Simply change the content of these two cases according to your desired needs.
Translations
About Translations:
So you want to provide a new translation for the documentation? Great, thanks for that <3
There are a few things to keep in mind, which are essential for a smooth process:
Add the new Language to the Language selector:
As a start for possible translations, the language must first be added to the language selection. To add it, edit the mkdocs.yml file and add the language in the "translations" section (under the already existing languages):
[...]
- i18n: # <--- Translation plugin
default_language: en
languages:
en: English
de: Deutsch
[...] <--- Add the languages here.
[...]The new language will now appear in the language selector once the mkdocs are rebuilt (see Testing).
The i18n plugin for mkdocs (see here is used for our documentation, so the standard notations of the plugin apply (see here) i.e. each language of a page will be a separate .md file which is composed of the filename.languagecode.md.
The filenames must remain the same for the other languages, only the country code in front of the .md extension is set to the desired language.
If a page does NOT exist in a language, the English version of the page will be used by default, because English is set as default_language in mkdocs.yml.
Images can also be "translated"! These are distinguished (similar to the pages) by the country codes.
Translate the menu:
The menu is NOT translated by default and must be translated by hand, this is also done in the mkdocs.yml:
[...]
- i18n: # <--- Translation plugin
default_language: en
languages:
en: English
de: Deutsch
nav_translations:
#### Begin of german translation
de: #<--- Language code here
'Information & Support': 'Informationen & Support'
### Prerequisites Section
'Prerequisites': 'Voraussetzungen'
'Prepare your system': 'Systemvoraussetzungen'
'DNS setup': 'DNS Einstellungen'
[...]The preceding English variant MUST be kept, otherwise the translation will not work.
Folder structure:
docs <-- Root Folder
├── assets
│ └── images <-- Folder where the images are located (sorted by main chapter)
│ ├─ topic1
| │ ├── image.en.png
| │ ├── image.de.png
| │ ├── image.XX.png
| ├─ topic2
| │ ├── image.en.png
| │ ├── image.de.png
| │ ├── image.XX.png
| ├─ topicX
| ├── image.en.png
| ├── image.de.png
| ├── image.XX.png
|
├── topic1 <-- Folder where the documentation sites are located (sorted by main chapter)
│ ├── file.en.md
| ├── file.de.md
│ ├── file.XX.md
|
├── topic2
│ ├── subtopic1 <-- Some Chapters are divided into multiple subtopics
| | ├── file.en.md
| | ├── file.de.md
| | ├── file.XX.md
│ ├── subtopicX
| ├── file.en.md
| ├── file.de.md
| ├── file.XX.md
|
├── topicX
│ ├── file.en.md
| ├── file.de.md
│ ├── file.XX.mdTesting
To build and test it locally, you need the Material theme for MkDocs, MkDocs itself and Pygments. To install these with pip and get it up and running, fire up your terminal and enter
git clone https://github.com/mailcow/mailcow-dockerized-docs.git
pip install -r requirements.txt
mkdocs serveThe Placeholder values get replaced by the JavaScript in the file docs/assets/javascript/client.js.
If you want to test how the documentation looks like with the placeholder values filled in, you can set the values via url parameters.
For Example:
http://127.0.0.1:8000/client/client-manual/#host=mail.test.org&[email protected]&name=mail&ui=mail.example.org&port=443Misc
mailcow is a registered word mark of The Infrastructure Company GmbH, Parkstr. 42, 47877 Willich, Germany.
The project is managed and maintained by The Infrastructure Company GmbH.
Originated from @andryyy (André)
File: docs/getstarted/install.de.md
Installation von mailcow
Voraussetzungen
Systempakete
Die folgenden Linux-Pakete sind für die Nutzung von mailcow erforderlich und müssen je nach Ihrer Distribution gegebenenfalls nachinstalliert werden:
- git
- openssl
- curl
- awk
- sha1sum
- grep
- cut
- jq (neu ab 2025-09)
Docker und Docker Compose
Für die Installation benötigen Sie:
- Docker: Version
>= 24.0.0 - Docker Compose: Version
>= 2.0
Anleitungen zur Installation finden Sie hier:
Schnellinstallation
Systempakete
Debian/Ubuntu:
apt update
apt install -y git openssl curl gawk coreutils grep jqRHEL-basierte Systeme (z.B. Rocky Linux 9):
dnf install -y git openssl curl gawk coreutils grep jqAlpine Linux (bspw. 3.22):
apk add --no-cache --upgrade sed findutils bash git openssl curl gawk coreutils grep jq!!! info "Hinweis"
Alle Programme, die nicht explizit im Installationsprozess aufgeführt sind, sind bereits als Unterprogramme in coreutils enthalten.
Docker
!!! danger "Wichtig"
Verwenden Sie die neueste verfügbare Docker-Engine und nicht die Version aus den Paketquellen Ihrer Linux-Distribution.
Debian/Ubuntu:
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now dockerRHEL-basierte Systeme (z. B. Rocky Linux 9):
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now dockerAlpine Linux (bspw. 3.22):
apk --no-cache --upgrade add docker
rc-update add docker default
rc-service docker start!!! info "Hinweis"
Das get.docker.com-Skript funktioniert auf RHEL und Alpine Linux Systemen nicht zuverlässig oder gar nicht. Verwenden Sie stattdessen die manuelle Methode.
Docker Compose
!!! danger "Achtung"
mailcow benötigt Docker Compose in Version >= 2.0.
Installation über Paketmanager (Plugin)
!!! info "Hinweis"
Diese Methode setzt voraus, dass das Docker-Repository eingebunden wurde (siehe Docker).
Debian/Ubuntu:
apt update
apt install docker-compose-pluginRHEL-basierte Systeme:
dnf update
dnf install docker-compose-pluginAlpine Linux (bspw. 3.22):
apk add --no-cache --upgrade docker-cli-compose!!! danger "Achtung"
Bei der Plugin-Variante lautet der Befehl docker compose (ohne Bindestrich).
Installation als Standalone-Version
LATEST=$(curl -Ls -w %{url_effective} -o /dev/null https://github.com/docker/compose/releases/latest) && \
LATEST=${LATEST##*/} && \
curl -L https://github.com/docker/compose/releases/download/$LATEST/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose!!! danger "Achtung"
Bei der Standalone-Version lautet der Befehl docker-compose (mit Bindestrich).
SELinux-Konfiguration (optional)
Auf SELinux-aktivierten Systemen (z. B. CentOS 7):
Prüfen Sie, ob das Paket
container-selinuxinstalliert ist:bashrpm -qa | grep container-selinuxAktivieren Sie die SELinux-Unterstützung in Docker:
Bearbeiten Sie
/etc/docker/daemon.jsonund fügen Sie"selinux-enabled": truehinzu:json{ "selinux-enabled": true }Starten Sie den Docker-Daemon neu.
Weitere Informationen finden Sie in der container-selinux-Readme.
Installation von mailcow
Klonen Sie das Repository:
bashsu umask 0022 cd /opt git clone https://github.com/mailcow/mailcow-dockerized cd mailcow-dockerizedGenerieren Sie die Konfigurationsdatei:
bash./generate_config.shPassen Sie die Konfiguration bei Bedarf an:
bashnano mailcow.conf
Starten von mailcow
Laden Sie die Images herunter und starten Sie die Container:
=== "Docker Compose (Plugin)"
```bash
docker compose pull
docker compose up -d
```=== "Docker Compose (Standalone)"
```bash
docker-compose pull
docker-compose up -d
```Geschafft!
Sie können nun unter https://${MAILCOW_HOSTNAME}/admin mit den Standard-Zugangsdaten admin und dem Passwort moohoo zugreifen.
Problembehandlung
MTU ungleich 1500 (z. B. OpenStack)
Passen Sie die Netzwerkeinstellungen in docker-compose.yml an:
networks:
mailcow-network:
driver_opts:
com.docker.network.driver.mtu: 1450Kein IPv6 auf dem Hostsystem
Deaktivieren Sie IPv6 für das mailcow-Netzwerk, falls Ihr Hostsystem kein IPv6 unterstützt. Weitere Informationen finden Sie hier.
Wichtige Hinweise
- Datenpersistenz: Ihre Daten werden in Docker-Volumes gespeichert und bleiben erhalten, auch wenn Sie Container neu erstellen oder löschen.
- Reverse Proxy: Wenn Sie keinen Reverse Proxy verwenden, sollten Sie HTTP auf HTTPS umleiten.
File: docs/getstarted/install.en.md
Installation of mailcow
Prerequisites
System Packages
The following Linux packages are required for using mailcow and may need to be installed depending on your distribution:
- git
- openssl
- curl
- awk
- sha1sum
- grep
- cut
- jq (new as of 2025-09)
Docker and Docker Compose
For the installation, you will need:
- Docker: Version
>= 24.0.0 - Docker Compose: Version
>= 2.0
Installation guides can be found here:
Quick Installation
System Packages
Debian/Ubuntu:
apt update
apt install -y git openssl curl gawk coreutils grep jqRHEL-based systems (e.g., Rocky Linux 9):
dnf install -y git openssl curl gawk coreutils grep jqAlpine Linux (e.g., 3.22):
apk add --no-cache --upgrade sed findutils bash git openssl curl gawk coreutils grep jq!!! info "Note"
All programs not explicitly listed in the installation process are already included as subprograms in coreutils.
Docker
!!! danger "Important"
Use the latest available Docker Engine and not the version from your Linux distribution's package sources.
Debian/Ubuntu:
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now dockerRHEL-based systems (e.g., Rocky Linux 9):
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now dockerAlpine Linux (e.g., 3.22):
apk --no-cache --upgrade add docker
rc-update add docker default
rc-service docker start!!! info "Note"
The get.docker.com script does not work reliably or at all on RHEL and Alpine Linux systems. Use the manual method instead.
Docker Compose
!!! danger "Warning"
mailcow requires Docker Compose version >= 2.0.
Installation via Package Manager (Plugin)
!!! info "Note"
This method requires that the Docker repository has been added (see Docker).
Debian/Ubuntu:
apt update
apt install docker-compose-pluginRHEL-based systems:
dnf update
dnf install docker-compose-pluginAlpine Linux (e.g., 3.22):
apk add --no-cache --upgrade docker-cli-compose!!! danger "Warning"
For the plugin version, the command is docker compose (without a hyphen).
Installation as a Standalone Version
LATEST=$(curl -Ls -w %{url_effective} -o /dev/null https://github.com/docker/compose/releases/latest) && \
LATEST=${LATEST##*/} && \
curl -L https://github.com/docker/compose/releases/download/$LATEST/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose!!! danger "Warning"
For the standalone version, the command is docker-compose (with a hyphen).
SELinux Configuration (Optional)
On SELinux-enabled systems (e.g., CentOS 7):
Check if the
container-selinuxpackage is installed:bashrpm -qa | grep container-selinuxEnable SELinux support in Docker:
Edit
/etc/docker/daemon.jsonand add"selinux-enabled": true:json{ "selinux-enabled": true }Restart the Docker daemon.
For more information, see the container-selinux Readme.
Installing mailcow
Clone the repository:
bashsu umask 0022 cd /opt git clone https://github.com/mailcow/mailcow-dockerized cd mailcow-dockerizedGenerate the configuration file:
bash./generate_config.shAdjust the configuration if necessary:
bashnano mailcow.conf
Starting mailcow
Download the images and start the containers:
=== "Docker Compose (Plugin)"
```bash
docker compose pull
docker compose up -d
```=== "Docker Compose (Standalone)"
```bash
docker-compose pull
docker-compose up -d
```Done!
You can now access https://${MAILCOW_HOSTNAME}/admin using the default credentials admin and the password moohoo.
Troubleshooting
MTU not equal to 1500 (e.g., OpenStack)
Adjust the network settings in docker-compose.yml:
networks:
mailcow-network:
driver_opts:
com.docker.network.driver.mtu: 1450No IPv6 on the Host System
Disable IPv6 for the mailcow network if your host system does not support IPv6. More information can be found here.
Important Notes
- Data Persistence: Your data is stored in Docker volumes and remains intact even if you recreate or delete containers.
- Reverse Proxy: If you are not using a reverse proxy, you should redirect HTTP to HTTPS.
File: docs/getstarted/prerequisite-dns.de.md
Nachstehend finden Sie eine Liste von empfohlenen DNS-Einträgen. Einige sind für einen Mailserver obligatorisch (A, MX), andere werden empfohlen, um eine gute Reputation aufzubauen (TXT/SPF) oder für die automatische Konfiguration von Mailclients verwendet (SRV).
Referenzen
- Ein guter Artikel, der alle relevanten Themen abdeckt:
"3 DNS Records Every Email Marketer Must Know" - Ein weiterer guter Artikel, aber mit Zimbra als Beispielplattform:
"Best Practices on Email Protection: SPF, DKIM and DMARC" - Eine ausführliche Diskussion über SPF, DKIM und DMARC:
"Wie Sie Spam beseitigen und Ihren Namen mit DMARC schützen" - Ein ausführlicher Leitfaden zum Verständnis von DMARC:
"Entmystifizierung von DMARC: Ein Leitfaden zur Verhinderung von E-Mail-Spoofing"
Reverse DNS Ihrer IP-Adresse
Stellen Sie sicher, dass der PTR-Eintrag Ihrer IP-Adresse mit dem FQDN Ihres mailcow-Hosts übereinstimmt: ${MAILCOW_HOSTNAME} [^1]. Dieser Eintrag wird normalerweise bei dem Provider gesetzt, von dem Sie die IP-Adresse (Server) gemietet haben.
Bitte beachten Sie, dies sowohl für Ihre IPv4 als auch Ihre IPv6 Adressen (falls verwendet) sicherzustellen!
Die minimale DNS-Konfiguration
Dieses Beispiel zeigt Ihnen eine Reihe von Einträgen für eine von mailcow verwaltete Domain. Jede Domain, die zu mailcow hinzugefügt wird, benötigt mindestens diesen Satz an Einträgen, um korrekt zu funktionieren.
# Name Typ Wert
mail IN A 1.2.3.4
autodiscover IN CNAME mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
autoconfig IN CNAME mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
@ IN MX 10 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})Hinweis: Der mail DNS-Eintrag, der die Subdomain an die angegebene IP-Adresse bindet, muss nur für die Domain gesetzt werden, auf der mailcow läuft und die für den Zugriff auf das Webinterface verwendet wird. Für jede andere von mailcow verwaltete Domain leitet der MX-Eintrag den Datenverkehr entsprechend weiter.
DKIM, SPF und DMARC
Im folgenden Beispiel für eine DNS-Zonendatei wird ein einfacher SPF TXT-Eintrag verwendet, um nur DIESEM Server (dem MX) zu erlauben, E-Mails für Ihre Domäne zu senden. Jeder andere Server ist nicht zugelassen, kann es aber tun ("~all"). Weitere Informationen finden Sie im SPF-Projekt.
# Name Typ Wert
@ IN TXT "v=spf1 mx a -all"Es wird dringend empfohlen, einen DKIM TXT-Eintrag in Ihrer mailcow UI zu erstellen und den entsprechenden TXT-Eintrag in Ihren DNS-Einträgen zu setzen. Bitte lesen Sie OpenDKIM für weitere Informationen.
# Name Typ Wert
dkim._domainkey IN TXT "v=DKIM1; k=rsa; t=s; s=email; p=..."Der letzte Schritt, um sich selbst und andere zu schützen, ist die Implementierung eines DMARC TXT-Datensatzes, zum Beispiel mit Hilfe des DMARC-Assistenten (check).
# Name Typ Wert
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"Die erweiterte DNS-Konfiguration
SRV-Einträge geben den/die Server für ein bestimmtes Protokoll in Ihrer Domäne an. Wenn Sie einen Dienst explizit als nicht bereitgestellt ankündigen wollen, geben Sie "." als Zieladresse an (statt "mail.example.org."). Bitte beachten Sie RFC 2782.
# Name Typ Priorität Gewicht Port Wert
_autodiscover._tcp IN SRV 0 1 443 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_caldavs._tcp IN SRV 0 1 443 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_caldavs._tcp IN TXT "path=/SOGo/dav/"
_carddavs._tcp IN SRV 0 1 443 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_carddavs._tcp IN TXT "path=/SOGo/dav/"
_imap._tcp IN SRV 0 1 143 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_imaps._tcp IN SRV 0 1 993 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_pop3._tcp IN SRV 0 1 110 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_pop3s._tcp IN SRV 0 1 995 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_sieve._tcp IN SRV 0 1 4190 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_smtps._tcp IN SRV 0 1 465 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_submission._tcp IN SRV 0 1 587 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_submissions._tcp IN SRV 0 1 465 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})Testen
Hier finden Sie einige Tools, mit denen Sie Ihre DNS-Konfiguration überprüfen können:
- MX Toolbox (DNS, SMTP, RBL)
- port25.com (DKIM, SPF)
- Mail-Tester (DKIM, DMARC, SPF)
- DMARC-Analysator (DMARC, SPF)
- MultiRBL.valli.org (DNSBL, RBL, FCrDNS)
Verschiedenes
Optionale DMARC-Statistiken
Wenn Sie an Statistiken interessiert sind, können Sie sich zusätzlich bei einem der vielen unten aufgeführten DMARC-Statistikdienste anmelden - oder Ihre eigene Statistik selbst hosten.
!!! tip "Tipp"
Es ist zu bedenken, dass wenn Sie DMARC-Statistik-Berichte an Ihren mailcow-Server anfordern und Ihr mailcow-Server nicht korrekt für den Empfang dieser Berichte konfiguriert ist, Sie möglicherweise keine genauen und vollständigen Ergebnisse erhalten. Bitte erwägen Sie die Verwendung einer alternativen E-Mail-Domain für den Empfang von DMARC-Berichten.
Es ist erwähnenswert, dass die folgenden Vorschläge keine umfassende Liste aller verfügbaren Dienste und Tools sind, sondern nur eine kleine Auswahl der vielen Möglichkeiten.
- Postmaster Tool
- parsedmarc (selbst gehostet)
- Fraudmarc
- Postmark
- Dmarcian
!!! tip "Tipp"
Diese Dienste stellen Ihnen möglicherweise einen TXT-Eintrag zur Verfügung, den Sie in Ihre DNS-Einträge einfügen müssen, so wie es der Anbieter vorschreibt. Bitte stellen Sie sicher, dass Sie die Dokumentation des Anbieters des von Ihnen gewählten Dienstes lesen, da dieser Prozess variieren kann.
E-Mail-Test für SPF, DKIM und DMARC:
Um eine rudimentäre E-Mail-Authentifizierungsprüfung durchzuführen, senden Sie eine E-Mail an check-auth at verifier.port25.com und warten Sie auf eine Antwort. Sie werden einen Bericht ähnlich dem folgenden finden:
==========================================================
Zusammenfassung der Ergebnisse
==========================================================
SPF-Prüfung: bestanden
"iprev"-Prüfung: bestanden
DKIM-Prüfung: bestanden
DKIM-Prüfung: bestanden
SpamAssassin-Prüfung: ham
==========================================================
Einzelheiten:
==========================================================
....Der vollständige Bericht enthält weitere technische Details.
Fully Qualified Domain Name (FQDN)
[^1]: Ein Fully Qualified Domain Name (FQDN) ist der vollständige (absolute) Domänenname für einen bestimmten Computer oder Host im Internet. Der FQDN besteht aus mindestens drei Teilen, die durch einen Punkt getrennt sind: dem Hostnamen, dem Domänennamen und der Top Level Domain (kurz TLD). Im Beispiel mx.mailcow.email wäre der Hostname mx, der Domainname mailcow und die TLD email.
File: docs/getstarted/prerequisite-dns.en.md
Below you can find a list of recommended DNS records. While some are mandatory for a mail server (A, MX), others are recommended to build a good reputation score (TXT/SPF) or used for auto-configuration of mail clients (SRV).
References
- A good article covering all relevant topics:
"3 DNS Records Every Email Marketer Must Know" - Another great one, but Zimbra as an example platform:
"Best Practices on Email Protection: SPF, DKIM and DMARC" - An in-depth discussion of SPF, DKIM and DMARC:
"How to eliminate spam and protect your name with DMARC" - A thorough guide on understanding DMARC:
"Demystifying DMARC: A guide to preventing email spoofing"
Reverse DNS of your IP address
Make sure that the PTR record of your IP address matches the FQDN of your mailcow host: ${MAILCOW_HOSTNAME} [^1]. This record is usually set at the provider you leased the IP address (server) from.
Please make sure that you create the record for IPv4 and IPv6 address (if you are using IPv6)!
The minimal DNS configuration
This example shows you a set of records for one domain managed by mailcow. Each domain that is added to mailcow needs at least this set of records to function correctly.
# Name Type Value
mail IN A 1.2.3.4
autodiscover IN CNAME mail.example.org. (your ${MAILCOW_HOSTNAME})
autoconfig IN CNAME mail.example.org. (your ${MAILCOW_HOSTNAME})
@ IN MX 10 mail.example.org. (your ${MAILCOW_HOSTNAME})Note: The mail DNS record which binds the subdomain to the given ip address must only be set for the domain on which mailcow is running and that is used to access the web interface. For every other mailcow managed domain, the MX record will route the traffic.
DKIM, SPF and DMARC
In the example DNS zone file snippet below, a simple SPF TXT record is used to only allow THIS server (the MX) to send mail for your domain. Every other server is disallowed but able to ("~all"). Please refer to SPF Project for further reading.
# Name Type Value
@ IN TXT "v=spf1 mx a -all"It is highly recommended to create a DKIM TXT record in your mailcow UI and set the corresponding TXT record in your DNS records. Please refer to OpenDKIM for further reading.
# Name Type Value
dkim._domainkey IN TXT "v=DKIM1; k=rsa; t=s; s=email; p=..."The last step in protecting yourself and others is the implementation of a DMARC TXT record, for example by using the DMARC Assistant (check).
# Name Type Value
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"The advanced DNS configuration
SRV records specify the server(s) for a specific protocol on your domain. If you want to explicitly announce a service as not provided, give "." as the target address (instead of "mail.example.org."). Please refer to RFC 2782.
# Name Type Priority Weight Port Value
_autodiscover._tcp IN SRV 0 1 443 mail.example.org. (your ${MAILCOW_HOSTNAME})
_caldavs._tcp IN SRV 0 1 443 mail.example.org. (your ${MAILCOW_HOSTNAME})
_caldavs._tcp IN TXT "path=/SOGo/dav/"
_carddavs._tcp IN SRV 0 1 443 mail.example.org. (your ${MAILCOW_HOSTNAME})
_carddavs._tcp IN TXT "path=/SOGo/dav/"
_imap._tcp IN SRV 0 1 143 mail.example.org. (your ${MAILCOW_HOSTNAME})
_imaps._tcp IN SRV 0 1 993 mail.example.org. (your ${MAILCOW_HOSTNAME})
_pop3._tcp IN SRV 0 1 110 mail.example.org. (your ${MAILCOW_HOSTNAME})
_pop3s._tcp IN SRV 0 1 995 mail.example.org. (your ${MAILCOW_HOSTNAME})
_sieve._tcp IN SRV 0 1 4190 mail.example.org. (your ${MAILCOW_HOSTNAME})
_smtps._tcp IN SRV 0 1 465 mail.example.org. (your ${MAILCOW_HOSTNAME})
_submission._tcp IN SRV 0 1 587 mail.example.org. (your ${MAILCOW_HOSTNAME})
_submissions._tcp IN SRV 0 1 465 mail.example.org. (your ${MAILCOW_HOSTNAME})Testing
Here are some tools you can use to verify your DNS configuration:
- MX Toolbox (DNS, SMTP, RBL)
- port25.com (DKIM, SPF)
- Mail-tester (DKIM, DMARC, SPF)
- DMARC Analyzer (DMARC, SPF)
- MultiRBL.valli.org (DNSBL, RBL, FCrDNS)
Misc
Optional DMARC Statistics
If you are interested in statistics, you can additionally register with some of the many below DMARC statistic services - or self-host your own.
!!! tip
It is worth considering that if you request DMARC statistic reports to your mailcow server and your mailcow server is not configured correctly to receive these reports, you may not get accurate and complete results. Please consider using an alternative email domain for receiving DMARC reports.
It is worth mentioning, that the following suggestions are not a comprehensive list of all services and tools available, but only a small few of the many choices.
- Postmaster Tool
- parsedmarc (self-hosted)
- Fraudmarc
- Postmark
- Dmarcian
!!! tip
These services may provide you with a TXT record you need to insert into your DNS records as the provider specifies. Please ensure you read the provider's documentation from the service you choose as this process may vary.
Email test for SPF, DKIM and DMARC:
To run a rudimentary email authentication check, send a mail to check-auth at verifier.port25.com and wait for a reply. You will find a report similar to the following:
==========================================================
Summary of Results
==========================================================
SPF check: pass
"iprev" check: pass
DKIM check: pass
DKIM check: pass
SpamAssassin check: ham
==========================================================
Details:
==========================================================
....The full report will contain more technical details.
Fully Qualified Domain Name (FQDN)
[^1]: A Fully Qualified Domain Name (FQDN) is the complete (absolute) domain name for a specific computer or host, on the Internet. The FQDN consists of at least three parts divided by a dot: the hostname, the domain name, and the Top Level Domain (TLD for short). In the example of mx.mailcow.email the hostname would be mx, the domain name mailcow and the TLD email.
File: docs/getstarted/prerequisite-system.de.md
Bevor Sie mailcow: dockerized ausführen, sollten Sie einige Voraussetzungen überprüfen:
!!! warning "Achtung"
Versuchen Sie nicht, mailcow auf einem Synology/QNAP-Gerät (jedes NAS), OpenVZ, LXC oder anderen Container-Plattformen zu installieren. KVM, ESX, Hyper-V und andere vollständige Virtualisierungsplattformen werden unterstützt.
!!! info
- mailcow: dockerized erfordert, dass einige Ports für eingehende Verbindungen offen sind, also stellen Sie sicher, dass Ihre Firewall diese nicht blockiert.
- Stellen Sie sicher, dass keine andere Anwendung die Konfiguration von mailcow stört, wie z.B. ein anderer Maildienst
- Ein korrektes DNS-Setup ist entscheidend für jedes gute Mailserver-Setup, also stellen Sie bitte sicher, dass Sie zumindest die basics abgedeckt haben, bevor Sie beginnen!
- Stellen Sie sicher, dass Ihr System ein korrektes Datum und eine korrekte Zeiteinstellung hat. Dies ist entscheidend für verschiedene Komponenten wie die Zwei-Faktor-TOTP-Authentifizierung.
Minimale Systemressourcen
Bitte stellen Sie sicher, dass Ihr System mindestens über die folgenden Ressourcen verfügt, um problemlos zu laufen:
| Ressource | Minimale Anforderung |
|---|---|
| CPU | 1 GHz |
| RAM | Minimum 6 GiB + 1 GiB Swap (Standardkonfiguration) |
| Festplatte | 20 GiB (ohne Emails) |
| Architektur | x86_64, ARM64 |
!!! failure "Nicht unterstützte Plattformen"
OpenVZ, Virtuozzo und LXC
Arbeitsspeicher
ClamAV und die FTS-Engine (Flatcurve) können viel RAM nutzen, lassen sich aber über die Parameter SKIP_CLAMD=y und SKIP_FTS=y in der mailcow.conf deaktivieren.
mailcow ist eine umfassende Groupware mit zahlreichen Features wie Webserver, Webmailer, ActiveSync, Antivirus, Antispam, Indexierung, Dokumentenscanner, Datenbank und Cache, weshalb es mehr Ressourcen benötigt als ein einfacher MTA.
Ein einzelner SOGo-Worker kann ~350 MiB RAM belegen, bevor er geleert wird. Je mehr ActiveSync-Verbindungen Sie verwenden möchten, desto mehr RAM wird benötigt. In der Standardkonfiguration werden 20 SOGo-Worker erzeugt.
Beispiele für die RAM Planung
Ein Unternehmen mit 15 Smartphones (EAS aktiviert) und etwa 50 gleichzeitigen IMAP-Verbindungen sollte 16 GiB RAM einplanen.
6 GiB RAM + 1 GiB Swap sind für die meisten privaten Installationen ausreichend, während 8 GiB RAM für ~5 bis 10 Benutzer empfohlen werden.
Im Rahmen unseres Supports können wir Ihnen bei der korrekten Planung Ihres Setups helfen.
Unterstützte Betriebssysteme
!!! danger "Wichtig"
mailcow nutzt Docker als Grundlage. Aufgrund verschiedener technischer Unterschiede zwischen den einzelnen Systemen werden nicht alle Plattformen unterstützt, auf denen Docker theoretisch lauffähig ist.
Die folgende Tabelle enthält alle von uns offiziell unterstützten und getesteten Betriebssysteme (Stand August 2025):
| Betriebssystem | Kompatibilität |
|---|---|
| Alpine 3.19 und älter | ⚠️ |
| Debian 11 - 13[^1] | ✅ |
| Ubuntu 22.04 (oder neuer) | ✅ |
| Alma Linux 8, 9 | ✅ |
| Rocky Linux 9 | ✅ |
!!! info "Legende"
✅ = Funktioniert out of the box anhand der Anleitung.
⚠️ = Erfordert einige manuelle Anpassungen, sonst aber nutzbar.
❌ = Generell NICHT Kompatibel.
❔ = Ausstehend.
!!! danger "Achtung"
Andere (nicht genannte Betriebssysteme) können auch funktionieren, sind jedoch nicht offiziell getestet worden und erhalten KEINEN Support, weder Community noch Bezahlt!
**BENUTZUNG AUF EIGENE GEFAHR!!**Firewall & Ports
Bitte überprüfen Sie, ob alle Standard-Ports von mailcow offen sind und nicht von anderen Anwendungen genutzt werden:
ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
# oder:
netstat -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'!!! danger "Vorsicht"
Es gibt einige Probleme mit dem Betrieb von mailcow auf einem Firewalld/ufw aktivierten System.
Sie sollten es deaktivieren (wenn möglich) und stattdessen Ihren Regelsatz in die DOCKER-USER-Kette verschieben, die nicht durch einen Neustart des Docker-Dienstes gelöscht wird.
Siehe diese (blog.donnex.net) oder diese (unrouted.io) Anleitung für Informationen darüber, wie man iptables-persistent mit der DOCKER-USER Kette benutzt.
Da mailcow im Docker-Modus läuft, haben INPUT-Regeln keinen Effekt auf die Beschränkung des Zugriffs auf mailcow.
Verwenden Sie stattdessen die FORWARD-Kette.
Wenn dieser Befehl irgendwelche Ergebnisse liefert, entfernen oder stoppen Sie bitte die Anwendung, die auf diesem Port läuft. Sie können mailcows Ports auch über die Konfigurationsdatei mailcow.conf anpassen.
Eingehende Ports
Wenn Sie eine Firewall vor mailcow haben, stellen Sie bitte sicher, dass diese Ports für eingehende Verbindungen offen sind:
| Dienst | Protokoll | Port | Container | Variable |
|---|---|---|---|---|
| Postfix SMTP | TCP | 25 | postfix-mailcow | ${SMTP_PORT} |
| Postfix SMTPS | TCP | 465 | postfix-mailcow | ${SMTPS_PORT} |
| Postfix Submission | TCP | 587 | postfix-mailcow | ${SUBMISSION_PORT} |
| Dovecot IMAP | TCP | 143 | dovecot-mailcow | ${IMAP_PORT} |
| Dovecot IMAPS | TCP | 993 | dovecot-mailcow | ${IMAPS_PORT} |
| Dovecot POP3 | TCP | 110 | dovecot-mailcow | ${POP_PORT} |
| Dovecot POP3S | TCP | 995 | dovecot-mailcow | ${POPS_PORT} |
| Dovecot ManageSieve | TCP | 4190 | dovecot-mailcow | ${SIEVE_PORT} |
| HTTP(S) | TCP | 80/443 | nginx-mailcow | ${HTTP_PORT} / ${HTTPS_PORT} |
Um einen Dienst an eine IP-Adresse zu binden, können Sie die IP-Adresse wie folgt voranstellen: SMTP_PORT=1.2.3.4:25
Wichtig: Sie können keine IP:PORT-Bindungen in HTTP_PORT und HTTPS_PORT verwenden. Bitte verwenden Sie stattdessen HTTP_PORT=1234 und HTTP_BIND=1.2.3.4.
Ausgehende Ports/Hosts
Für die Nutzung von mailcow werden einige ausgehende Verbindungen benötigt. Stellen Sie sicher, dass mailcow mit folgenden Hosts oder auf folgenden Ports nach außen kommunizieren kann:
| Dienst | Protokoll | Port | Ziel | Grund |
|---|---|---|---|---|
| Clamd | TCP | 873 | rsync.sanesecurity.net | Download ClamAV Signaturen (Prebundled in mailcow) |
| Dovecot | TCP | 443 | spamassassin.heinlein-support.de | Herunterladen von Spamassasin Regeln, die Rspamd verarbeitet, Download erfolgt über Dovecot |
| mailcow Prozesse | TCP | 80/443 | github.com | Download von mailcow Updates (Code Basiert) |
| mailcow Prozesse | TCP | 443 | hub.docker.com | Download von Docker Images (direkt von Docker Hub) |
| mailcow Prozesse | TCP | 443 | asn-check.mailcow.email | API Abfrage auf Prüfung BAD ASN (für Spamhaus Free Blocklists) |
| mailcow Prozesse | TCP | 80 | ip4.mailcow.email & ip6.mailcow.email | Ermittelung der eigenen öffentlichen IP Adresse zur Anzeige in UI (optional) |
| Postfix | TCP | 25, 465 | Beliebig / Any | Ausgehende Verbindung MTA |
| Rspamd | TCP | 80 | fuzzy.mailcow.email | Download von Bad Subject Regex Maps (Trainiert von Servercow) |
| Rspamd | TCP | 443 | bazaar.abuse.ch | Download von Mailware MD5 Prüfsummen zur Erkennung von Rspamd |
| Rspamd | TCP | 443 | urlhaus.abuse.ch | Download von Malware Downloads Links zur Erkennung in Rspamd |
| Rspamd | UDP | 11445 | fuzzy.mailcow.email | Anbindung an Globalen mailcow Fuzzy (Trainiert von Servercow + Community) |
| Rspamd | UDP | 11335 | fuzzy1.rspamd.com & fuzzy2.rspamd.com | Anbindung an Globalen Rspamd Fuzzy (Trainiert vom Rspamd Team) |
| Unbound | TCP & UDP | 53 | Beliebig / Any | DNS Auflösung für mailcow Stack (Zur Validierung von DNSSEC und Abruf von Spamlistinformationen) |
| Unbound | ICMP (Ping) | 1.1.1.1, 8.8.8.8, 9.9.9.9 | Simpler Internet Konnektivitätscheck |
Wichtig für Hetzner Firewalls
Ich zitiere https://github.com/chermsen über https://github.com/mailcow/mailcow-dockerized/issues/497#issuecomment-469847380 (DANKE!):
Für alle, die mit der Hetzner-Firewall zu kämpfen haben:
Port 53 ist in diesem Fall für die Firewall-Konfiguration unwichtig. Laut Dokumentation verwendet unbound den Portbereich 1024-65535 für ausgehende Anfragen.
Da es sich bei der Hetzner Robot Firewall um eine statische Firewall handelt (jedes eingehende Paket wird isoliert geprüft) - müssen die folgenden Regeln angewendet werden:
Für TCP
SRC-IP: ---
DST-IP: ---
SRC-Port: ---
DST-Port: 1024-65535
Protokoll: tcp
TCP-Flags: ack
Aktion: AkzeptierenFür UDP
SRC-IP: ---
DST-IP: ---
SRC-Port: ---
DST-Port: 1024-65535
Protokoll: udp
Aktion: AkzeptierenWenn man einen restriktiveren Portbereich anwenden will, muss man zuerst die Konfiguration von unbound ändern (nach der Installation):
{mailcow-dockerized}/data/conf/unbound/unbound.conf:
outgoing-port-avoid: 0-32767Nun können die Firewall-Regeln wie folgt angepasst werden:
[...]
DST Port: 32768-65535
[...]Datum und Uhrzeit
Um sicherzustellen, dass Sie das richtige Datum und die richtige Zeit auf Ihrem System eingestellt haben, überprüfen Sie bitte die Ausgabe von timedatectl status:
$ timedatectl status
Lokale Zeit: Sat 2017-05-06 02:12:33 CEST
Weltzeit: Sa 2017-05-06 00:12:33 UTC
RTC-Zeit: Sa 2017-05-06 00:12:32
Zeitzone: Europa/Berlin (MESZ, +0200)
NTP aktiviert: ja
NTP synchronisiert: ja
RTC in lokaler TZ: nein
Sommerzeit aktiv: ja
Letzte DST-Änderung: Sommerzeit begann am
Sonne 2017-03-26 01:59:59 MEZ
So 2017-03-26 03:00:00 MESZ
Nächste Sommerzeitänderung: Die Sommerzeit endet (die Uhr springt eine Stunde rückwärts) am
Sun 2017-10-29 02:59:59 MESZ
Sun 2017-10-29 02:00:00 MEZDie Zeilen NTP aktiviert: ja und NTP synchronisiert: ja zeigen an, ob Sie NTP aktiviert haben und ob es synchronisiert ist.
Um NTP zu aktivieren, müssen Sie den Befehl timedatectl set-ntp true ausführen. Sie müssen auch Ihre /etc/systemd/timesyncd.conf bearbeiten:
# vim /etc/systemd/timesyncd.conf
[Zeit]
NTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.orgHetzner Cloud (und wahrscheinlich andere)
Prüfen Sie /etc/network/interfaces.d/50-cloud-init.cfg und ändern Sie die IPv6-Schnittstelle von eth0:0 auf eth0:
# Falsch:
auto eth0:0
iface eth0:0 inet6 static
# Richtig:
auto eth0
iface eth0 inet6 staticStarten Sie die Schnittstelle neu, um die Einstellungen zu übernehmen.
Sie können außerdem die cloud-init Netzwerkänderungen deaktivieren.
MTU
Besonders relevant für OpenStack-Benutzer: Überprüfen Sie Ihre MTU und setzen Sie sie entsprechend in docker-compose.yml. Siehe Problebehandlungen in unseren Installationsanleitungen.
[^1]: Bei einem Upgrade von Debian 12 (Bookworm) auf Debian 13 (Trixie) kann ein Dienst namens EXIM installiert werden, welcher Port 25 auf dem Host blockiert. Eine entfernung des Dienstes ist vor der nutzung von mailcow daher ratsam.
File: docs/getstarted/prerequisite-system.en.md
Before you run mailcow: dockerized, there are a few requirements that you should check:
!!! warning
Do not try to install mailcow on a Synology/QNAP device (any NAS), OpenVZ, LXC or other container platforms. KVM, ESX, Hyper-V and other full virtualization platforms are supported.
!!! info
- mailcow: dockerized requires some ports to be open for incoming connections, so make sure that your firewall is not blocking these.
- Make sure that no other application is interfering with mailcow's configuration, such as another mail service
- A correct DNS setup is crucial to every good mailserver setup, so please make sure you got at least the basics covered before you begin!
- Make sure that your system has a correct date and time setup. This is crucial for various components like two factor TOTP authentication.
Minimum System Resources
Please make sure that your system has at least the following resources:
| Resource | Minimal Requirement |
|---|---|
| CPU | 1 GHz |
| RAM | Minimum 6 GiB + 1 GiB swap (default config) |
| Disk | 20 GiB (without emails) |
| Architecture | x86_64, ARM64 |
!!! failure "Not supported"
OpenVZ, Virtuozzo and LXC
ClamAV and Flatcurve (FTS Engine) can be greedy with RAM. You may disable them in mailcow.conf by settings SKIP_CLAMD=y and SKIP_FTS=y.
!!! info
We are aware that a pure MTA can run on 128 MiB RAM. mailcow is a full-grown and ready-to-use groupware with many extras making life easier. mailcow comes with a webserver, webmailer, ActiveSync (MS), antivirus, antispam, indexing, document scanner (Oletools), SQL (MariaDB), Cache (Redis), MDA, MTA, various web services etc.
A single SOGo worker can acquire ~350 MiB RAM before it gets purged. The more ActiveSync connections you plan to use, the more RAM you will need. A default configuration spawns 20 workers.
RAM usage examples
A company with 15 phones (EAS enabled) and about 50 concurrent IMAP connections should plan 16 GiB RAM.
6 GiB RAM + 1 GiB swap are fine for most private installations while 8 GiB RAM are recommended for ~5 to 10 users.
We can help to correctly plan your setup as part of our support.
Supported OS
!!! danger "Important"
mailcow is using Docker as a base component, due to some technical differences across multiple platforms we do not support all, even if they can run Docker.
The following table contains all operating systems officially supported and tested by us (as of August 2025):
| OS | Compatibility |
|---|---|
| Alpine since 3.19 | ⚠️ |
| Debian 11 - 13[^1] | ✅ |
| Ubuntu 22.04 (or newer) | ✅ |
| Alma Linux 8, 9 | ✅ |
| Rocky Linux 9 | ✅ |
!!! info "Legend"
✅ = Works out of the box using the instructions.
⚠️ = Requires some manual adjustments otherwise usable.
❌ = In general NOT Compatible.
❔ = Pending.
!!! warning
Note: All other operating systems (not mentioned) may also work, but have not been officially tested.
Firewall & Ports
Please check if any of mailcow's standard ports are open and not in use by other applications:
ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
# or:
netstat -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'!!! danger
There are several problems with running mailcow on a firewalld/ufw enabled system.
You should disable it (if possible) and move your ruleset to the DOCKER-USER chain, which is not cleared by a Docker service restart, instead.
See this (blog.donnex.net) or this (unrouted.io) guide for information about how to use iptables-persistent with the DOCKER-USER chain.
As mailcow runs dockerized, INPUT rules have no effect on restricting access to mailcow.
Use the FORWARD chain instead.
If this command returns any results please remove or stop the application running on that port. You may also adjust mailcows ports via the mailcow.conf configuration file.
Incoming Ports
If you have a firewall in front of mailcow, please ensure that these ports are open for incoming connections:
| Service | Protocol | Port | Container | Variable |
|---|---|---|---|---|
| Postfix SMTP | TCP | 25 | postfix-mailcow | ${SMTP_PORT} |
| Postfix SMTPS | TCP | 465 | postfix-mailcow | ${SMTPS_PORT} |
| Postfix Submission | TCP | 587 | postfix-mailcow | ${SUBMISSION_PORT} |
| Dovecot IMAP | TCP | 143 | dovecot-mailcow | ${IMAP_PORT} |
| Dovecot IMAPS | TCP | 993 | dovecot-mailcow | ${IMAPS_PORT} |
| Dovecot POP3 | TCP | 110 | dovecot-mailcow | ${POP_PORT} |
| Dovecot POP3S | TCP | 995 | dovecot-mailcow | ${POPS_PORT} |
| Dovecot ManageSieve | TCP | 4190 | dovecot-mailcow | ${SIEVE_PORT} |
| HTTP(S) | TCP | 80/443 | nginx-mailcow | ${HTTP_PORT} / ${HTTPS_PORT} |
To bind a service to an IP address, you can prefix the IP address as follows: SMTP_PORT=1.2.3.4:25
Important: You cannot use IP:PORT bindings for HTTP_PORT and HTTPS_PORT. Please use HTTP_PORT=1234 and HTTP_BIND=1.2.3.4 instead.
Outgoing Ports/Hosts
Some outgoing connections are required to use mailcow. Ensure that mailcow can communicate with the following hosts or ports:
| Service | Protocol | Port | Target | Reason |
|---|---|---|---|---|
| Clamd | TCP | 873 | rsync.sanesecurity.net | Download ClamAV signatures (prebundled in mailcow) |
| Dovecot | TCP | 443 | spamassassin.heinlein-support.de | Download Spamassassin rules processed by Rspamd, downloaded via Dovecot |
| mailcow Processes | TCP | 80/443 | github.com | Download mailcow updates (code-based) |
| mailcow Processes | TCP | 443 | hub.docker.com | Download Docker images (directly from Docker Hub) |
| mailcow Processes | TCP | 443 | asn-check.mailcow.email | API request for BAD ASN checks (for Spamhaus Free Blocklists) |
| mailcow Processes | TCP | 80 | ip4.mailcow.email & ip6.mailcow.email | Retrieve public IP address for display in UI (optional) |
| Postfix | TCP | 25, 465 | Any | Outgoing connection for MTA |
| Rspamd | TCP | 80 | fuzzy.mailcow.email | Download bad subject regex maps (trained by Servercow) |
| Rspamd | TCP | 443 | bazaar.abuse.ch | Download malware MD5 checksums for detection by Rspamd |
| Rspamd | TCP | 443 | urlhaus.abuse.ch | Download malware download links for detection in Rspamd |
| Rspamd | UDP | 11445 | fuzzy.mailcow.email | Connection to global mailcow fuzzy (trained by Servercow + community) |
| Rspamd | UDP | 11335 | fuzzy1.rspamd.com & fuzzy2.rspamd.com | Connection to global Rspamd fuzzy (trained by the Rspamd team) |
| Unbound | TCP & UDP | 53 | Any | DNS resolution for the mailcow stack (for DNSSEC validation and retrieval of spam list info) |
| Unbound | ICMP (Ping) | 1.1.1.1, 8.8.8.8, 9.9.9.9 | Basic internet connectivity check |
Important for Hetzner firewalls
Quoting https://github.com/chermsen via https://github.com/mailcow/mailcow-dockerized/issues/497#issuecomment-469847380 (THANK YOU!):
For all who are struggling with the Hetzner firewall:
Port 53 unimportant for the firewall configuration in this case. According to the documentation unbound uses the port range 1024-65535 for outgoing requests.
Since the Hetzner Robot Firewall is a static firewall (each incoming packet is checked isolated) - the following rules must be applied:
For TCP
SRC-IP: ---
DST IP: ---
SRC Port: ---
DST Port: 1024-65535
Protocol: tcp
TCP flags: ack
Action: AcceptFor UDP
SRC-IP: ---
DST IP: ---
SRC Port: ---
DST Port: 1024-65535
Protocol: udp
Action: AcceptIf you want to apply a more restrictive port range you have to change the config of unbound first (after installation):
{mailcow-dockerized}/data/conf/unbound/unbound.conf:
outgoing-port-avoid: 0-32767Now the firewall rules can be adjusted as follows:
[...]
DST Port: 32768-65535
[...]Date and Time
To ensure that you have the correct date and time setup on your system, please check the output of timedatectl status:
$ timedatectl status
Local time: Sat 2017-05-06 02:12:33 CEST
Universal time: Sat 2017-05-06 00:12:33 UTC
RTC time: Sat 2017-05-06 00:12:32
Time zone: Europe/Berlin (CEST, +0200)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2017-03-26 01:59:59 CET
Sun 2017-03-26 03:00:00 CEST
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2017-10-29 02:59:59 CEST
Sun 2017-10-29 02:00:00 CETThe lines NTP enabled: yes and NTP synchronized: yes indicate whether you have NTP enabled and if it's synchronized.
To enable NTP you need to run the command timedatectl set-ntp true. You also need to edit your /etc/systemd/timesyncd.conf:
# vim /etc/systemd/timesyncd.conf
[Time]
NTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.orgHetzner Cloud (and probably others)
Check /etc/network/interfaces.d/50-cloud-init.cfg and change the IPv6 interface from eth0:0 to eth0:
# Wrong:
auto eth0:0
iface eth0:0 inet6 static
# Right:
auto eth0
iface eth0 inet6 staticReboot or restart the interface.
You may want to disable cloud-init network changes.
MTU
Especially relevant for OpenStack users: Check your MTU and set it accordingly in docker-compose.yml. See Troubleshooting in our Installation guide.
[^1]: During an upgrade from Debian 12 (Bookworm) to Debian 13 (Trixie), a service called EXIM may be installed, which blocks port 25 on the host. Therefore, it is advisable to remove this service before using mailcow.
File: docs/client/client.de.md
mailcow unterstützt eine Vielzahl von E-Mail-Clients, sowohl auf Desktop-Computern als auch auf Smartphones.
Im Folgenden finden Sie eine Reihe von Konfigurationsanleitungen, die erklären, wie Sie Ihr mailcow-Konto konfigurieren können.
Tipp
Wenn Sie auf diese Seite zugreifen, indem Sie sich bei Ihrem mailcow-Server anmelden und auf den Link "Konfigurationsanleitungen für E-Mail-Clients und Smartphones anzeigen" klicken, werden alle Anleitungen mit Ihrer E-Mail-Adresse und Ihrem Servernamen personalisiert.
Erfolgreich
Da Sie diese Seite aufgerufen haben, nachdem Sie sich in Ihren mailcow-Server eingeloggt haben, wurden alle Anleitungen mit Ihrer E-Mail-Adresse und Ihrem Servernamen personalisiert.
- Android
- Apple iOS / macOS
- eM Client
- KDE Kontact / KMail
- Microsoft Outlook
- Mozilla Thunderbird
- Manual configuration
File: docs/client/client.en.md
mailcow supports a variety of email clients, both on desktop computers and on smartphones.
Below, you can find a number of configuration guides that explain how to configure your mailcow account.
Tip
If you access this page by logging into your mailcow server and clicking the "Show configuration guides for email clients and smartphones" link, all of the guides will be personalized with your email address and server name.
Success
Since you accessed this page after logging into your mailcow server, all of the guides have been personalized with your email address and server name.
- Android
- Apple iOS / macOS
- eM Client
- KDE Kontact / KMail
- Microsoft Outlook
- Mozilla Thunderbird
- Manual configuration
File: docs/client/client-android.de.md
- Öffnen Sie die App Email.
- Wenn dies Ihr erstes E-Mail-Konto ist, tippen Sie auf Konto hinzufügen; wenn nicht, tippen Sie auf Mehr und Einstellungen und dann Konto hinzufügen.
- Wählen Sie Microsoft Exchange ActiveSync.
- Geben Sie Ihre E-Mail Adresse (``) und Ihr Passwort ein.
- Tippen Sie auf Anmelden.