Mailserver

Mailcow auf Debian 12 installieren – vollständige Anleitung inkl. Härtung

Einleitung

Mailcow ist eine moderne, Docker-basierte Mailserver-Suite, die Postfix, Dovecot, Rspamd, ClamAV und eine Weboberfläche kombiniert.
Diese Anleitung zeigt dir eine saubere, reproduzierbare Installation auf Debian 12 inklusive sinnvoller Basis-Härtung.

Ziel:

  • stabile Installation
  • keine Portkonflikte
  • saubere Docker-Integration
  • minimale, aber effektive Absicherung

Voraussetzungen

Systemanforderungen

  • Debian 12 (frisch installiert)
  • mindestens 6 GB RAM + 1 GB Swap
  • mindestens 20 GB freier Speicher
  • feste öffentliche IP
  • korrekt gesetzter FQDN (z. B. mail.example.de)

DNS-Anforderungen (vorab setzen!)

TypWert
Amail.example.de → SERVER_IP
MXexample.de → mail.example.de
PTRSERVER_IP → mail.example.de
SPFv=spf1 mx a -all
DMARCv=DMARC1; p=reject

1. System vorbereiten

apt update && apt upgrade -y
reboot

2. Hostname korrekt setzen

hostnamectl set-hostname mail.example.de
hostname -f

/etc/hosts anpassen:

127.0.0.1 localhost
127.0.1.1 mail.example.de mail

Validierung:

hostname -f

3. Basispakete installieren

apt install -y git curl jq openssl gawk coreutils grep

4. Ports prüfen (KRITISCH)

ss -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'

Wenn Output vorhanden → Konflikt!

Typische Störer entfernen:

systemctl stop postfix exim4 dovecot apache2 nginx 2>/dev/null || true
systemctl disable postfix exim4 dovecot apache2 nginx 2>/dev/null || true

5. Docker installieren

curl -sSL https://get.docker.com/ | sh
systemctl enable --now docker

Prüfen:

docker --version
docker compose version

6. Mailcow herunterladen

cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

7. Konfiguration generieren

./generate_config.sh

Eingabe:

mail.example.de

8. Konfiguration optimieren (kleine Systeme)

nano mailcow.conf

Empfohlen bei kleinen VPS:

SKIP_CLAMD=y
SKIP_FTS=y

9. Firewall (Docker-kompatibel!)

Warum nicht einfach UFW?

Docker umgeht klassische INPUT-Regeln → daher DOCKER-USER Chain nutzen


Minimal sichere iptables-Regeln

apt install -y iptables-persistent

iptables -N DOCKER-USER 2>/dev/null || true
iptables -F DOCKER-USER

iptables -A DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A DOCKER-USER -i lo -j ACCEPT

for port in 25 465 587 110 995 143 993 4190 80 443; do
  iptables -A DOCKER-USER -p tcp --dport $port -j ACCEPT
done

iptables -A DOCKER-USER -j RETURN

netfilter-persistent save

10. Mailcow starten

docker compose pull
docker compose up -d

Status prüfen:

docker compose ps

Logs prüfen:

docker compose logs --tail=100

11. Zugriff

https://mail.example.de

Nach dem Login:

  • Passwort ändern
  • Admin absichern

12. Post-Installation (WICHTIG)

DKIM aktivieren

Mailcow UI → Domain → DKIM → DNS setzen


2FA aktivieren

Pflicht für Admin-Accounts


Mail testen

  • mail-tester.com
  • Gmail Test
  • Outlook Test

13. Wartung

Update:

cd /opt/mailcow-dockerized
./update.sh

Troubleshooting

Port 25 bereits belegt

ss -tulpn | grep :25

Container starten nicht

docker compose logs

DNS Probleme

dig mx example.de
dig txt example.de