Maddy: Difference between revisions

From NixOS Wiki
imported>Onny
Add section about configuring dns records
imported>Onny
mNo edit summary
Line 35: Line 35:
<syntaxhighlight lang="console">
<syntaxhighlight lang="console">
# dig MX example.org
# dig MX example.org
[...]
;; ANSWER SECTION:
;; ANSWER SECTION:
example.org. 3364 IN MX 0 mx1.example.org.
example.org. 3364 IN MX 0 mx1.example.org.
# dig A mx1.example.org
# dig A mx1.example.org
[...]
;; ANSWER SECTION:
;; ANSWER SECTION:
mx1.example.org. 3392 IN A 8.8.8.8
mx1.example.org. 3392 IN A 8.8.8.8
# dig AAAA mx1.example.org
# dig AAAA mx1.example.org
[...]
;; ANSWER SECTION:
;; ANSWER SECTION:
mx1.example.org. 3364 IN AAAA 2001:db8:85a3:8d3:1319:8a2e:370:7348
mx1.example.org. 3364 IN AAAA 2001:db8:85a3:8d3:1319:8a2e:370:7348

Revision as of 18:47, 2 August 2022

Maddy is a composable, modern mail server written in Go. It includes everything required to manage users, inboxes, send and receive mails while supporting all important secure protocols and standards.

Installation

Note: Following example describes the usage of an experimental module which is still being reviewed as an open PR and might not be ready for production.

The following example enables the Maddy mail server listening on mail delivery SMTP/Submission ports (25, 587) and IMAP/IMAPS ports (143/993) for mail clients to connect to. The server is configured to send and receive mails for the primary domain example.org.

/etc/nixos/configuration.nix
services.maddy = {
  enable = true;
  openFirewall = true;
  primaryDomain = "example.org";
  tls = {
    certPath = /var/lib/acme/example.org/example.org.crt;
    keyPath = /var/lib/acme/example.org/example.org.key;
  };
  imap = {
    port = 143;
    tlsEnable = true;
    tlsPort = 993;
  };
};
services.rspamd.enable = true;

TLS certificates can be obtained by using services like certbot or the acme service. Please reference their documentation on how to configure it to acquire the certificates.

Configuration

MX DNS records

Ensure that the domain you're going to use has MX DNS records probably configured. They should point to the correct public IP addresses of your server running Maddy.

# dig MX example.org
;; ANSWER SECTION:
example.org. 3364 IN	MX	0 mx1.example.org.
# dig A mx1.example.org
;; ANSWER SECTION:
mx1.example.org.	3392 IN	A	8.8.8.8
# dig AAAA mx1.example.org
;; ANSWER SECTION:
mx1.example.org.	3364 IN	AAAA	2001:db8:85a3:8d3:1319:8a2e:370:7348

Consult your domain provider on how to configure these records.

Managing users and inboxes

Creating credentials and inboxes for a specific account. The first command creates the user postmaster@example.org and will prompt for a password.

# maddyctl creds create postmaster@example.org
# maddyctl imap-acct create postmaster@example.org