Eine Schritt-für-Schritt-Anleitung, wie du auf deinem lokalen Homeserver (Debian 12) mit Mailcow einen Mailserver betreibst, obwohl keine Ports direkt weitergeleitet sind, und diesen über einen günstigen VPS (Debian 12) per FRP und WireGuard öffentlich erreichbar machst.
Hinweis: Passe IP-Adressen, Domains und Passwörter an deine Umgebung an.
Voraussetzungen
- Lokaler Mailserver
- VPS: öffentliche IPv4-Adresse
- Domain: z. B.
example.com - Root- oder sudo-Zugriff auf beide Server
1. Mailcow auf dem Homeserver installieren
- Docker & Compose installieren
sudo apt update
sudo apt install -y \
ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg \
| sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
- Mailcow herunterladen & konfigurieren
cd /opt
sudo git clone https://github.com/mailcow/mailcow-dockerized.git mailcow
cd mailcow
sudo ./generate_config.sh
MAILCOW_HOSTNAME=mail.example.comHTTP_PORT=80,HTTPS_PORT=443(falls noch frei)- DB-Passwort, Timezone etc.
- Mailcow starten
sudo docker-compose pull
sudo docker-compose up -d
2. FRP-Server auf dem VPS einrichten 🔒
- FRP herunterladen
wget https://github.com/fatedier/frp/releases/download/v0.63.0/frp_0.63.0_linux_amd64.tar.gz
tar xzf frp_0.63.0_linux_amd64.tar.gz
sudo mv frp_0.63.0_linux_amd64/frps /usr/local/bin/
sudo mkdir -p /etc/frp
sudo touch /etc/frp/frps.toml
rm frp_0.63.0_linux_amd64.tar.gz
sudo rm -r frp_0.63.0_linux_amd64
- Token generieren
export FRP_TOKEN=$(openssl rand -hex 16) && echo $FRP_TOKEN
/etc/frp/frps.tomlbearbeiten
bindPort = 7000
auth.method = "token"
auth.token = "<FRP TOKEN>"
- Systemd-Service
/etc/systemd/system/frps.service
[Unit]
Description=FRP Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
Restart=always
[Install]
WantedBy=multi-user.target
- aktivieren & starten
sudo systemctl daemon-reload
sudo systemctl start frps
sudo systemctl enable --now frps
3. FRP-Client auf dem Homeserver installieren
- FRP herunterladen & installieren
wget https://github.com/fatedier/frp/releases/download/v0.63.0/frp_0.63.0_linux_amd64.tar.gz
tar xzf frp_0.63.0_linux_amd64.tar.gz
sudo mv frp_0.63.0_linux_amd64/frpc /usr/local/bin/
sudo mkdir -p /etc/frp
sudo touch /etc/frp/frpc.toml
rm frp_0.63.0_linux_amd64.tar.gz
sudo rm -r frp_0.63.0_linux_amd64
/etc/frp/frpc.tomlbearbeiten
serverAddr = "<VPS PUBLIC IP>"
serverPort = 7000
auth.method = "token"
auth.token = "<VPS FRP TOKEN>"
[[proxies]]
name = "smtp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 25
remotePort = 25
[[proxies]]
name = "smtps"
type = "tcp"
localIP = "127.0.0.1"
localPort = 465
remotePort = 465
[[proxies]]
name = "submission"
type = "tcp"
localIP = "127.0.0.1"
localPort = 587
remotePort = 587
[[proxies]]
name = "imap_ssl"
type = "tcp"
localIP = "127.0.0.1"
localPort = 993
remotePort = 993
[[proxies]]
name = "pop3_ssl"
type = "tcp"
localIP = "127.0.0.1"
localPort = 995
remotePort = 995
Optional auch HTTP und HTTPS tunneln (nicht empfohlen)
[[proxies]]
name = "http"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 80
[[proxies]]
name = "https"
type = "tcp"
localIP = "127.0.0.1"
localPort = 443
remotePort = 443
- Systemd-Service
/etc/systemd/system/frpc.service
[Unit]
Description=FRP Client
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml
Restart=always
[Install]
WantedBy=multi-user.target
- aktivieren & starten
sudo systemctl daemon-reload
sudo systemctl start frpc
sudo systemctl enable --now frpc
4. WireGuard-Tunnel einrichten
Beide Server erhalten eine private VPN-Verbindung im Beispiel-Netz 10.252.1.0/24.
- Schlüssel generieren
wg genkey | tee privatekey | wg pubkey > publickey
- VPS
/etc/wireguard/wg0.conf
[Interface]
Address = 10.252.1.1/24
PrivateKey = <VPS_PRIVATE_KEY>
ListenPort = 51820
[Peer]
PublicKey = <HOME_PUBLIC_KEY>
AllowedIPs = 10.252.1.0/24
- Homeserver
/etc/wireguard/wg0.conf
[Interface]
Address = 10.252.1.2/24
PrivateKey = <HOME_PRIVATE_KEY>
ListenPort = 51820
[Peer]
PublicKey = <VPS_PUBLIC_KEY>
Endpoint = <VPS_PUBLIC_IP>:51820
AllowedIPs = 10.252.1.0/24
PersistentKeepalive = 25
- aktivieren & starten (Auf beiden Servern ausführen)
sudo systemctl enable --now wg-quick@wg0
5. DNS-Einträge konfigurieren
Füge bei deinem DNS-Provider folgende Records hinzu (Beispiel mail.example.com → 203.0.113.10):
| Typ | Host/Alias | Wert |
|---|---|---|
| A | 203.0.113.10 | |
| MX | @ | 10 mail.example.com. |
| TXT | @ | v=spf1 ip4:203.0.113.10 mx ~all |
| TXT | mail._domainkey | <Mailcow-DKIM-Public-Key> |
| CNAME | autodiscover | |
| CNAME | autoconfig | |
| TXT | _dmarc | v=DMARC1; p=quarantine; rua=mailto:postmaster@example.com |
6. Postfix-Relay auf dem VPS
- Postfix installieren
sudo apt install -y postfix
# Site Type: Internet Site
# System mail name: mail.example.com
/etc/postfix/main.cfanpassen
inet_interfaces = all
myhostname = mail.example.com
mynetworks = 127.0.0.0/8, 10.252.1.0/24
relay_domains = $mydestination
/etc/postfix/master.cfanpassen und Port auf 2525 ändern
smtp inet n - y - - smtpdÄndern zu
2525 inet n - y - - smtpd
- neu laden
sudo systemctl restart postfix
7. Mailcow als Relay konfigurieren
-
Im Mailcow-Admin-Interface unter System → Configuration → Routing
- Outgoing Relay Host:
10.252.1.1(VPS WireGuard-IP) - Port:
2525 - Keine Authentifizierung (Whitelist per WireGuard-Netz)

- Outgoing Relay Host:
-
Im Mailcow-Admin-Interface unter Email → Configuration → Deiner Domain
Senderabhängige Transport Maps:
10.252.1.1:2525(VPS Wireguard-IP mit 2525 Port)
-
Im Mailcow-Admin-Interface Postfix neu starten

Alternativ:
cd /opt/mailcow
sudo docker-compose restart postfix-mailcow
8. Wartung & Tipps
- Updates:
cd /opt/mailcow && git pull && docker-compose pull && docker-compose up -d - Monitoring: Dashboard von FRP unter
http://<VPS_IP>:7500einrichten (optional)