]> git.proxmox.com Git - pmg-docs.git/blame - pmgconfig.adoc
dkim: rephrase signing-domain source docs
[pmg-docs.git] / pmgconfig.adoc
CommitLineData
e62ceaf0
DM
1[[chapter_pmgconfig]]
2ifdef::manvolnum[]
3pmgconfig(1)
4============
5:pmg-toplevel:
6
7NAME
8----
9
10pmgconfig - Proxmox Mail Gateway Configuration Management Toolkit
11
12
13SYNOPSIS
14--------
15
16include::pmgconfig.1-synopsis.adoc[]
17
18
19DESCRIPTION
20-----------
21endif::manvolnum[]
22ifndef::manvolnum[]
66e9c719
DM
23Configuration Management
24========================
e62ceaf0
DM
25:pmg-toplevel:
26endif::manvolnum[]
27
a4f14219
TL
28{pmg} is usually configured using the web-based Graphical User Interface (GUI),
29but it is also possible to directly edit the configuration files, using the
db96e742 30REST API over 'https' or the command-line tool `pmgsh`.
685576c2 31
db96e742 32The command-line tool `pmgconfig` is used to simplify some common configuration
a4f14219
TL
33tasks, such as generating certificates and rewriting service configuration
34files.
685576c2 35
a4f14219
TL
36NOTE: We use a Postgres database to store mail filter rules and statistical
37data. See chapter xref:chapter_pmgdb[Database Management] for more information.
66e9c719
DM
38
39
40Configuration files overview
41----------------------------
42
43`/etc/network/interfaces`::
44
3f18659b 45Network setup. We never modify this file directly. Instead, we write
eb269701
DW
46changes to `/etc/network/interfaces.new`. When you reboot, {pmg} renames
47the file to `/etc/network/interfaces`, thus applying the changes.
66e9c719 48
9bfe27f3
DM
49`/etc/resolv.conf`::
50
fa483193
SI
51DNS search domain and nameserver setup. {pmg} uses the search domain setting
52to create the FQDN and domain name used in the postfix configuration.
9bfe27f3
DM
53
54`/etc/hostname`::
55
eb269701 56The system's hostname. {pmg} uses the hostname to create the FQDN used
fa483193 57in the postfix configuration.
9bfe27f3
DM
58
59`/etc/hosts`::
60
61Static table lookup for hostnames.
62
66e9c719
DM
63`/etc/pmg/pmg.conf`::
64
eb269701
DW
65Stores common administration options, such as the spam and mail proxy
66configuration.
66e9c719
DM
67
68`/etc/pmg/cluster.conf`::
69
70The cluster setup.
71
72`/etc/pmg/domains`::
73
74The list of relay domains.
75
5053eecc
SI
76`/etc/pmg/dkim/domains`::
77
78The list of domains for outbound DKIM signing.
79
66e9c719
DM
80`/etc/pmg/fetchmailrc`::
81
82Fetchmail configuration (POP3 and IMAP setup).
83
84`/etc/pmg/ldap.conf`::
85
86LDAP configuration.
87
88`/etc/pmg/mynetworks`::
89
90List of local (trusted) networks.
91
92`/etc/pmg/subscription`::
93
94Stores your subscription key and status.
95
37b2b051
SI
96`/etc/pmg/tls_policy`::
97
98TLS policy for outbound connections.
99
374bcb5f
CH
100`/etc/pmg/tls_inbound_domains`::
101
102Sender domains for which TLS is enforced on inbound connections.
103
f43c6983 104`/etc/pmg/transport`::
66e9c719
DM
105
106Message delivery transport setup.
107
108`/etc/pmg/user.conf`::
109
110GUI user configuration.
111
797db11d
DM
112`/etc/mail/spamassassin/custom.cf`::
113
114Custom {spamassassin} setup.
115
8b4756e5
SI
116`/etc/mail/spamassassin/pmg-scores.cf`::
117
118Custom {spamassassin} rule scores.
66e9c719
DM
119
120Keys and Certificates
121---------------------
122
123`/etc/pmg/pmg-api.pem`::
124
eb269701 125Key and certificate (combined) used by the HTTPS server (API).
66e9c719
DM
126
127`/etc/pmg/pmg-authkey.key`::
128
eb269701 129Private key used to generate authentication tickets.
66e9c719
DM
130
131`/etc/pmg/pmg-authkey.pub`::
132
eb269701 133Public key used to verify authentication tickets.
66e9c719
DM
134
135`/etc/pmg/pmg-csrf.key`::
136
137Internally used to generate CSRF tokens.
138
139`/etc/pmg/pmg-tls.pem`::
140
141Key and certificate (combined) to encrypt mail traffic (TLS).
142
5053eecc
SI
143`/etc/pmg/dkim/<selector>.private`::
144
145Key for DKIM signing mails with selector '<selector>'.
146
66e9c719 147
69a428d9 148[[pmgconfig_template_engine]]
66e9c719
DM
149Service Configuration Templates
150-------------------------------
151
eb269701 152{pmg} uses various services to implement mail filtering, for example,
9c85cc80 153the {postfix} Mail Transport Agent (MTA), the {clamav} antivirus
eb269701
DW
154engine, and the Apache {spamassassin} project. These services use
155separate configuration files, so we need to rewrite those files when the
9c85cc80
DM
156configuration is changed.
157
eb269701 158We use a template-based approach to generate these files. The {tts} is
9c85cc80
DM
159a well known, fast and flexible template processing system. You can
160find the default templates in `/var/lib/pmg/templates/`. Please do not
eb269701 161modify these directly, otherwise your modifications will be lost on the
9dd45bd7
SI
162next update. Instead, copy the template you wish to change to
163`/etc/pmg/templates/`, then apply your changes there.
9c85cc80 164
eb269701 165Templates can access any configuration settings, and you can use the
9c85cc80
DM
166`pmgconfig dump` command to get a list of all variable names:
167
168----
169# pmgconfig dump
170...
171dns.domain = yourdomain.tld
172dns.hostname = pmg
173ipconfig.int_ip = 192.168.2.127
174pmg.admin.advfilter = 1
175...
176----
177
eb269701
DW
178The same tool is used to force the regeneration of all template-based
179configuration files. You need to run the following after modifying a template,
180or when you directly edit configuration files:
9c85cc80
DM
181
182----
183# pmgconfig sync --restart 1
184----
185
9dd45bd7 186The above command also restarts services if the underlying configuration
9c85cc80
DM
187files are changed. Please note that this is automatically done when
188you change the configuration using the GUI or API.
189
190NOTE: Modified templates from `/etc/pmg/templates/` are automatically
191synced from the master node to all cluster members.
66e9c719 192
7e7126d6
ML
193[[pmgconfig_whitelist_overview]]
194White- and Blacklists
195---------------------
196
eb269701
DW
197{pmg} has multiple white- and blacklists. It differentiates between the
198xref:pmgconfig_mailproxy_options[SMTP Whitelist], the rule-based whitelist
7e7126d6 199and the user whitelist.
eb269701 200In addition to the whitelists, there are two separate blacklists: the rule-based
7e7126d6
ML
201blacklist and the user blacklist.
202
203SMTP Whitelist
204~~~~~~~~~~~~~~
205
61b59f73 206The xref:pmgconfig_mailproxy_whitelist[SMTP Whitelist] is responsible for disabling
eb269701 207greylisting, as well as SPF and DNSBL checks. These are done during the SMTP
7e7126d6
ML
208dialogue.
209
210Rule-based White-/Blacklist
211~~~~~~~~~~~~~~~~~~~~~~~~~~~
212
213The xref:chapter_mailfilter[rule-based white- and blacklists] are predefined
eb269701
DW
214rules. They work by checking the attached 'Who' objects, containing, for
215example, a domain or a mail address for a match. If it matches, the assigned
216action is used, which by default is 'Accept' for the whitelist rule and 'Block'
217for the blacklist rule. In the default setup, the blacklist rule has priority
218over the whitelist rule and spam checks.
7e7126d6
ML
219
220User White-/Blacklist
221~~~~~~~~~~~~~~~~~~~~~
222
223The user white- and blacklist are user specific. Every user can add mail addresses
224to their white- and blacklist. When a user adds a mail address to the whitelist,
225the result of the spam analysis will be discarded for that recipient. This can
eb269701
DW
226help in the mail being accepted, but what happens next still depends on the
227other rules. In the default setup, this results in the mail being accepted for
7e7126d6
ML
228this recipient.
229
eb269701
DW
230For mail addresses on a user's blacklist, the spam score will be increased by
231100. What happens when a high spam score is encountered still depends on the
232rule system. In the default setup, it will be recognized as spam and quarantined
7e7126d6 233(spam score of 3 or higher).
66e9c719 234
4a08dffe 235[[pmgconfig_systemconfig]]
685576c2
DM
236System Configuration
237--------------------
238
239Network and Time
240~~~~~~~~~~~~~~~~
241
242ifndef::manvolnum[]
38d14519 243[thumbnail="screenshot/pmg-gui-network-config.png", big=1]
685576c2
DM
244endif::manvolnum[]
245
eb269701
DW
246As network and time are configured in the installer, these generally do not
247need to be configured again in the GUI.
45de5bf5
DM
248
249The default setup uses a single Ethernet adapter and static IP
250assignment. The configuration is stored at '/etc/network/interfaces',
eb269701 251and the actual network setup is done the standard Debian way, using the
45de5bf5
DM
252package 'ifupdown'.
253
254.Example network setup '/etc/network/interfaces'
255----
256source /etc/network/interfaces.d/*
257
258auto lo
259iface lo inet loopback
260
261auto ens18
262iface ens18 inet static
263 address 192.168.2.127
264 netmask 255.255.240.0
265 gateway 192.168.2.1
266----
267
268.DNS recommendations
269
270Many tests to detect SPAM mails use DNS queries, so it is important to
3f18659b 271have a fast and reliable DNS server. We also query some publicly
45de5bf5
DM
272available DNS Blacklists. Most of them apply rate limits for clients,
273so they simply will not work if you use a public DNS server (because
274they are usually blocked). We recommend to use your own DNS server,
3f18659b 275which needs to be configured in 'recursive' mode.
685576c2
DM
276
277
278Options
279~~~~~~~
280
281ifndef::manvolnum[]
38d14519 282[thumbnail="screenshot/pmg-gui-system-options.png", big=1]
685576c2
DM
283endif::manvolnum[]
284
e09057ab 285
eb269701 286These settings are saved to the 'admin' subsection in `/etc/pmg/pmg.conf`,
e09057ab
DM
287using the following configuration keys:
288
685576c2
DM
289include::pmg.admin-conf-opts.adoc[]
290
c331641e 291
8c889e95
TL
292include::pmg-ssl-certificate.adoc[]
293
c331641e
DM
294Mail Proxy Configuration
295------------------------
296
4a08dffe 297[[pmgconfig_mailproxy_relaying]]
c331641e
DM
298Relaying
299~~~~~~~~
300
c331641e 301ifndef::manvolnum[]
38d14519 302[thumbnail="screenshot/pmg-gui-mailproxy-relaying.png", big=1]
c331641e
DM
303endif::manvolnum[]
304
782f24f4
DC
305These settings are saved to the 'mail' subsection in `/etc/pmg/pmg.conf`. Some of these correspond
306to postfix options in the `main.cf` (see the
307https://www.postfix.org/postconf.5.html[postconf documentation]).
308
309They use the following configuration keys:
e09057ab
DM
310
311include::pmg.mail-relaying-conf-opts.adoc[]
c331641e 312
4a08dffe 313[[pmgconfig_mailproxy_relay_domains]]
c331641e
DM
314Relay Domains
315~~~~~~~~~~~~~
316
c331641e 317ifndef::manvolnum[]
38d14519 318[thumbnail="screenshot/pmg-gui-mailproxy-relaydomains.png", big=1]
c331641e
DM
319endif::manvolnum[]
320
eb269701 321A list of relayed mail domains, that is, what destination domains this
6822b369
DM
322system will relay mail to. The system will reject incoming mails to
323other domains.
c331641e 324
d9c56b22 325
4a08dffe 326[[pmgconfig_mailproxy_ports]]
c331641e
DM
327Ports
328~~~~~
329
c331641e 330ifndef::manvolnum[]
38d14519 331[thumbnail="screenshot/pmg-gui-mailproxy-ports.png", big=1]
c331641e
DM
332endif::manvolnum[]
333
782f24f4
DC
334These settings are saved to the 'mail' subsection in `/etc/pmg/pmg.conf`. Many of these correspond
335to postfix options in the `main.cf` (see the
336https://www.postfix.org/postconf.5.html[postconf documentation]).
337
338They use the following configuration keys:
d9c56b22
DM
339
340include::pmg.mail-ports-conf-opts.adoc[]
341
c331641e 342
4a08dffe 343[[pmgconfig_mailproxy_options]]
c331641e
DM
344Options
345~~~~~~~
346
c331641e 347ifndef::manvolnum[]
38d14519 348[thumbnail="screenshot/pmg-gui-mailproxy-options.png", big=1]
c331641e
DM
349endif::manvolnum[]
350
eb269701 351These settings are saved to the 'mail' subsection in `/etc/pmg/pmg.conf`,
e3d778e0
DM
352using the following configuration keys:
353
354include::pmg.mail-options-conf-opts.adoc[]
c331641e
DM
355
356
89028579
SI
357[[pmgconfig_mailproxy_before_after_queue]]
358Before and After Queue scanning
359~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
360
eb269701 361Email scanning can happen at two different stages of mail-processing:
89028579 362
eb269701 363* Before-queue filtering: During the SMTP session, after the complete message
1824eab9 364 has been received (after the 'DATA' command).
89028579 365
1824eab9
SI
366* After-queue filtering: After initially accepting the mail and putting it on
367 a queue for further processing.
89028579 368
1824eab9
SI
369Before-queue filtering has the advantage that the system can reject a mail (by
370sending a permanent reject code '554'), and leave the task of notifying the
eb269701 371original sender to the other mail server. This is of particular advantage if
1824eab9 372the processed mail is a spam message or contains a virus and has a forged
eb269701 373sender address. Sending out a notification in this situation leads to so-called
89028579 374'backscatter' mail, which might cause your server to get listed as spamming on
3f18659b 375RBLs (Real-time Blackhole List).
89028579 376
1824eab9 377After-queue filtering has the advantage of providing faster delivery of
eb269701
DW
378mails for the sending servers, since queuing emails is much faster than
379analyzing them for spam and viruses.
380
381If a mail is addressed to multiple recipients (for example, when multiple
382addresses are subscribed to the same mailing list), the situation is more
383complicated; your mail server can only reject or accept the mail for all
384recipients, after having received the complete message, while your rule setup
385might accept the mail for part of the recipients and reject it for others. This
386can be due to a complicated rule setup, or if your users use the 'User White-
387and Blacklist' feature.
388
389If the resulting action of the rule system is the same for all recipients, {pmg}
390responds accordingly, if configured for before-queue filtering (sending '554'
89028579 391for a blocked mail and '250' for an accepted or quarantined mail). If some
3f18659b 392mailboxes accept the mail and some reject it, the system has to accept the mail.
89028579
SI
393
394Whether {pmg} notifies the sender that delivery failed for some recipients by
395sending a non-delivery report, depends on the 'ndr_on_block' setting in
eb269701 396'/etc/pmg/pmg.conf'. If enabled, an NDR is sent. Keeping this disabled prevents
89028579 397NDRs being sent to the (possibly forged) sender and thus minimizes the chance
eb269701 398of getting your IP listed on an RBL. However in certain environments, it can be
89028579
SI
399unacceptable not to inform the sender about a rejected mail.
400
eb269701 401The setting has the same effect if after-queue filtering is configured, with
89028579
SI
402the exception that an NDR is always sent out, even if all recipients block the
403mail, since the mail already got accepted before being analyzed.
404
405The details of integrating the mail proxy with {postfix} in both setups are
406explained in {postfix_beforequeue} and {postfix_afterqueue} respectively.
407
89028579 408
d41aa039
SI
409[[pmgconfig_mailproxy_greylisting]]
410Greylisting
411~~~~~~~~~~~
412
413Greylisting is a technique for preventing unwanted messages from reaching the
414resource intensive stages of content analysis (virus detection and spam
eb269701
DW
415detection). By initially replying with a temporary failure code ('450') to
416each new email, {pmg} tells the sending server that it should queue the
417mail and retry delivery at a later point. Since certain kinds of spam get
418sent out by software which has no provisioning for queuing, these mails are
d41aa039
SI
419dropped without reaching {pmg} or your mailbox.
420
421The downside of greylisting is the delay introduced by the initial deferral of
422the email, which usually amounts to less than 30 minutes.
423
424In order to prevent unnecessary delays in delivery from known sources, emails
425coming from a source for a recipient, which have passed greylisting in the
426past are directly passed on: For each email the triple '<sender network,
427sender email, recipient email>' is stored in a list, along with the time when
428delivery was attempted. If an email fits an already existing triple, the
eb269701 429timestamp for that triple is updated, and the email is accepted for further
d41aa039
SI
430processing.
431
eb269701 432As long as a sender and recipient communicate frequently, there is no delay
d41aa039 433introduced by enabling greylisting. A triple is removed after a longer period
eb269701 434of time, if no mail fitting that triple has been seen. The timeouts in {pmg}
d41aa039
SI
435are:
436
437* 2 days for the retry of the first delivery
438
eb269701 439* 36 days for a known triple
d41aa039 440
eb269701 441Mails with an empty envelope sender are always delayed.
d41aa039
SI
442
443Some email service providers send out emails for one domain from multiple
eb269701
DW
444servers. To prevent delays due to an email coming in from two separate IPs of
445the same provider, the triples store a network ('cidr') instead of a single IP.
446For certain large providers, the default network size might be too small. You
d41aa039
SI
447can configure the netmask applied to an IP for the greylist lookup in
448'/etc/pmg/pmg.conf' or in the GUI with the settings 'greylistmask' for IPv4
449and 'greylistmask6' for IPv6 respectively.
450
451
4a08dffe 452[[pmgconfig_mailproxy_transports]]
c331641e
DM
453Transports
454~~~~~~~~~~
455
456ifndef::manvolnum[]
38d14519 457[thumbnail="screenshot/pmg-gui-mailproxy-transports.png", big=1]
c331641e
DM
458endif::manvolnum[]
459
3599cb04 460You can use {pmg} to send emails to different internal email servers. For
eb269701 461example, you can send emails addressed to domain.com to your first email server
3599cb04 462and emails addressed to subdomain.domain.com to a second one.
b335e06b 463
31259590 464You can add the IP addresses, hostname, transport protocol (smtp/lmtp),
3599cb04
TL
465transport ports and mail domains (or just single email addresses) of your
466additional email servers. When transport protocol is set to `lmtp`, the option
eb269701 467'Use MX' is useless and will automatically be set to 'No'.
c331641e
DM
468
469
4a08dffe 470[[pmgconfig_mailproxy_networks]]
c331641e
DM
471Networks
472~~~~~~~~
473
474ifndef::manvolnum[]
38d14519 475[thumbnail="screenshot/pmg-gui-mailproxy-networks.png", big=1]
c331641e
DM
476endif::manvolnum[]
477
3599cb04
TL
478You can add additional internal (trusted) IP networks or hosts. All hosts in
479this list are allowed to relay.
20e879ad 480
eb269701
DW
481NOTE: Hosts in the same subnet as {pmg} can relay by default and don't need to
482be added to this list.
c331641e
DM
483
484
4a08dffe 485[[pmgconfig_mailproxy_tls]]
c331641e
DM
486TLS
487~~~
488
489ifndef::manvolnum[]
38d14519 490[thumbnail="screenshot/pmg-gui-mailproxy-tls.png", big=1]
c331641e
DM
491endif::manvolnum[]
492
3599cb04
TL
493Transport Layer Security (TLS) provides certificate-based authentication and
494encrypted sessions. An encrypted session protects the information that is
495transmitted with SMTP mail. When you activate TLS, {pmg} automatically
496generates a new self signed certificate for you (`/etc/pmg/pmg-tls.pem`).
20e879ad 497
37b2b051 498{pmg} uses opportunistic TLS encryption by default. The SMTP transaction is
20e879ad 499encrypted if the 'STARTTLS' ESMTP feature is supported by the remote
eb269701 500server. Otherwise, messages are sent unencrypted.
91d501f6
SI
501
502You can set a different TLS policy per destination. A destination is either a
eb269701 503remote domain or a next-hop destination, as specified in `/etc/pmg/transport`.
3f18659b 504This can be used if you need to prevent email delivery without
91d501f6
SI
505encryption, or to work around a broken 'STARTTLS' ESMTP implementation. See
506{postfix_tls_readme} for details on the supported policies.
20e879ad 507
374bcb5f
CH
508Additionally, TLS can also be enforced on incoming connections on the external
509port for specific sender domains by creating a TLS inbound domains entry. Mails
510with matching domains must use a encrypted SMTP session, otherwise they are
511rejected. All domains on this list have and entry of
512https://www.postfix.org/postconf.5.html#reject_plaintext_session[`reject_plaintext_session`]
513in a `check_sender_access` table.
514
20e879ad
DM
515Enable TLS logging::
516
eb269701
DW
517To get additional information about SMTP TLS activity, you can enable
518TLS logging. In this case, information about TLS sessions and used
3f18659b 519certificates is logged via syslog.
20e879ad
DM
520
521Add TLS received header::
522
523Set this option to include information about the protocol and cipher
eb269701 524used, as well as the client and issuer CommonName into the "Received:"
20e879ad
DM
525message header.
526
a649b38f
DM
527Those settings are saved to subsection 'mail' in `/etc/pmg/pmg.conf`,
528using the following configuration keys:
529
530include::pmg.mail-tls-conf-opts.adoc[]
531
c331641e 532
20522d96
SI
533[[pmgconfig_mailproxy_dkim]]
534DKIM Signing
535~~~~~~~~~~~~
536
f5fddbff 537ifndef::manvolnum[]
38d14519 538[thumbnail="screenshot/pmg-gui-mailproxy-dkim.png", big=1]
f5fddbff
SI
539endif::manvolnum[]
540
20522d96
SI
541DomainKeys Identified Mail (DKIM) Signatures (see {dkim_rfc}) is a method to
542cryptographically authenticate a mail as originating from a particular domain.
eb269701 543Before sending the mail, a hash over certain header fields and the body is
20522d96
SI
544computed, signed with a private key and added in the `DKIM-Signature` header of
545the mail. The 'selector' (a short identifier chosen by you, used to identify
546which system and private key were used for signing) is also included in the
547`DKIM-Signature` header.
548
eb269701 549The verification is done by the receiver. The public key is fetched
20522d96
SI
550via DNS TXT lookup for `yourselector._domainkey.yourdomain.example` and used
551for verifying the hash. You can publish multiple selectors for your domain,
3f18659b 552each used by a system which sends email from your domain, without the need to
20522d96
SI
553share the private key.
554
555{pmg} verifies DKIM Signatures for inbound mail in the Spam Filter by default.
556
eb269701
DW
557Additionally, it supports conditionally signing outbound mail, if configured.
558It uses one private key and selector per {pmg} deployment (all nodes in a
559cluster use the same key). The key has a minimal size of 1024 bits and
560rsa-sha256 is used as the signing algorithm.
20522d96
SI
561
562The headers included in the signature are taken from the list of
563`Mail::DKIM::Signer`. Additionally `Content-Type` (if present), `From`, `To`,
564`CC`, `Reply-To` and `Subject` get oversigned.
565
566You can either sign all mails received on the internal port using the domain of
3f18659b 567the envelope sender address or create a list of domains, for which emails
20522d96
SI
568should be signed, defaulting to the list of relay domains.
569
570
571Enable DKIM Signing::
572
573Controls whether outbound mail should get DKIM signed.
574
575Selector::
576
577The selector used for signing the mail. The private key used for signing is
3fe91910 578saved under `/etc/pmg/dkim/yourselector.private`. You can display the DNS TXT
20522d96
SI
579record which you need to add to all domains signed by {pmg} by clicking on the
580'View DNS Record' Button.
581
582Sign all Outgoing Mail::
583
584Controls whether all outbound mail should get signed or only mails from domains
eb269701
DW
585listed in `/etc/pmg/dkim/domains`, if it exists and `/etc/pmg/domains`
586otherwise.
20522d96 587
90f38c3d
MS
588Select Signing Domain::
589
590Determines whether to DKIM sign emails using the domain found in the envelope
b53b522b
SI
591from or the from header of the email. The envelope from is also known as
592reverse-path and RFC5321.MailFrom (see {rfc_5321} section 3.3).
593The from header is also known as RFC5322.From (see {rfc_5322} section 3.6.2).
90f38c3d 594+
b53b522b 595The envelope from of certain emails, bounces for example, can be empty. In these
90f38c3d
MS
596cases it is desirable to sign them using the domain found in the from header.
597+
598Additionally, DMARC (see {dmarc_rfc} section 3.1.1) needs the domain found in
599the from header in certain situations.
600
eb269701 601These settings are saved to the 'admin' subsection in `/etc/pmg/pmg.conf`,
20522d96
SI
602using the following configuration keys:
603
604include::pmg.admin-dkim-conf-opts.adoc[]
605
606
61b59f73 607[[pmgconfig_mailproxy_whitelist]]
c331641e
DM
608Whitelist
609~~~~~~~~~
610
611ifndef::manvolnum[]
38d14519 612[thumbnail="screenshot/pmg-gui-mailproxy-whitelist.png", big=1]
c331641e
DM
613endif::manvolnum[]
614
3f18659b 615All SMTP checks are disabled for those entries (e.g. Greylisting,
74ec1f38
ML
616SPF, DNSBL, ...)
617
eb269701 618DNSBL checks are done by `postscreen`, which works on IP addresses and networks.
74ec1f38 619This means it can only make use of the `IP Address` and `IP Network` entries.
6822b369 620
eb269701 621NOTE: If you use a backup MX server (for example, your ISP offers this service
6822b369 622for you) you should always add those servers here.
c331641e 623
74ec1f38
ML
624NOTE: To disable DNSBL checks entirely, remove any `DNSBL Sites` entries in
625xref:pmgconfig_mailproxy_options[Mail Proxy Options].
c331641e 626
4a08dffe 627[[pmgconfig_spamdetector]]
c331641e
DM
628Spam Detector Configuration
629---------------------------
630
2d672352
DM
631Options
632~~~~~~~
633
74bfe8ba 634ifndef::manvolnum[]
38d14519 635[thumbnail="screenshot/pmg-gui-spam-options.png", big=1]
74bfe8ba
DM
636endif::manvolnum[]
637
3371c521
DM
638{pmg} uses a wide variety of local and network tests to identify spam
639signatures. This makes it harder for spammers to identify one aspect
640which they can craft their messages to work around the spam filter.
641
eb269701 642Every single email will be analyzed and have a spam score
3371c521
DM
643assigned. The system attempts to optimize the efficiency of the rules
644that are run in terms of minimizing the number of false positives and
645false negatives.
646
647include::pmg.spam-conf-opts.adoc[]
648
649
4a08dffe 650[[pmgconfig_spamdetector_quarantine]]
2d672352
DM
651Quarantine
652~~~~~~~~~~
3371c521 653
74bfe8ba 654ifndef::manvolnum[]
38d14519 655[thumbnail="screenshot/pmg-gui-spamquar-options.png", big=1]
74bfe8ba
DM
656endif::manvolnum[]
657
3f18659b
OB
658{pmg} analyses all incoming email messages and decides for each
659email if it is ham or spam (or virus). Good emails are delivered to
660the inbox and spam messages are moved into the spam quarantine.
3371c521
DM
661
662The system can be configured to send daily reports to inform users
eb269701 663about personal spam messages received in the last day. The report is
3371c521
DM
664only sent if there are new messages in the quarantine.
665
ee34edb0 666Some options are only available in the config file `/etc/pmg/pmg.conf`,
3f18659b 667and not in the web interface.
ee34edb0 668
3371c521 669include::pmg.spamquar-conf-opts.adoc[]
c331641e
DM
670
671
36b169e6
SI
672[[pmgconfig_spamdetector_customscores]]
673Customization of Rulescores
674~~~~~~~~~~~~~~~~~~~~~~~~~~~
675
f5fddbff 676ifndef::manvolnum[]
38d14519 677[thumbnail="screenshot/pmg-gui-spam-custom-scores.png", big=1]
f5fddbff
SI
678endif::manvolnum[]
679
36b169e6
SI
680While the default scoring of {spamassassin}'s ruleset provides very good
681detection rates, sometimes your particular environment can benefit from
682slightly adjusting the score of a particular rule. Two examples:
683
684* Your system receives spam mails which are scored at 4.9 and you have
685 a rule which puts all mails above 5 in the quarantine. The one thing the
686 spam mails have in common is that they all hit 'URIBL_BLACK'. By increasing
687 the score of this rule by 0.2 points the spam mails would all be quarantined
688 instead of being sent to your users
689
690* Your system tags many legitimate mails from a partner organization as spam,
691 because the organization has a policy that each mail has to start with
692 'Dear madam or sir' (generating 1.9 points through the rule
eb269701 693 'DEAR_SOMETHING'). By setting the score of this rule to 0, you can disable
36b169e6
SI
694 it completely.
695
3f18659b 696The system logs all the rules which a particular mail hits. Analyzing the logs can
36b169e6
SI
697lead to finding such a pattern in your environment.
698
699You can adjust the score of a rule by creating a new 'Custom Rule Score' entry
e1f6d6d0 700in the GUI and entering a {spamassassin} rule as the name.
36b169e6 701
eb269701 702NOTE: In general, it is strongly recommended not to make large changes to the
36b169e6
SI
703default scores.
704
705
4a08dffe 706[[pmgconfig_clamav]]
c331641e
DM
707Virus Detector Configuration
708----------------------------
709
4a08dffe 710[[pmgconfig_clamav_options]]
2d672352
DM
711Options
712~~~~~~~
713
e7c18c7c 714ifndef::manvolnum[]
38d14519 715[thumbnail="screenshot/pmg-gui-virus-options.png", big=1]
e7c18c7c
DM
716endif::manvolnum[]
717
0bfbbf88 718All mails are automatically passed to the included virus detector
3f18659b 719({clamav}). The default settings are considered safe, so it is usually
0bfbbf88
DM
720not required to change them.
721
722{clamav} related settings are saved to subsection 'clamav' in `/etc/pmg/pmg.conf`,
723using the following configuration keys:
724
725include::pmg.clamav-conf-opts.adoc[]
726
e7c18c7c 727ifndef::manvolnum[]
38d14519 728[thumbnail="screenshot/pmg-gui-clamav-database.png", big=1]
e7c18c7c
DM
729endif::manvolnum[]
730
3f18659b
OB
731Please note that the virus signature database is automatically
732updated. You can see the database status in the GUI, and also
eb269701 733trigger manual updates from there.
e7c18c7c 734
0bfbbf88 735
4a08dffe 736[[pmgconfig_clamav_quarantine]]
2d672352
DM
737Quarantine
738~~~~~~~~~~
0bfbbf88 739
e7c18c7c 740ifndef::manvolnum[]
38d14519 741[thumbnail="screenshot/pmg-gui-virusquar-options.png", big=1]
e7c18c7c
DM
742endif::manvolnum[]
743
eb269701
DW
744Identified virus mails are automatically moved to the virus
745quarantine. The administrator can view these mails from the GUI, and
746choose to deliver them, in case of false positives. {pmg} does not notify
0bfbbf88
DM
747individual users about received virus mails.
748
749Virus quarantine related settings are saved to subsection 'virusquar'
750in `/etc/pmg/pmg.conf`, using the following configuration keys:
751
752include::pmg.virusquar-conf-opts.adoc[]
c331641e
DM
753
754
7eff8815
DM
755Custom SpamAssassin configuration
756---------------------------------
757
833e1edc
SI
758This is only for advanced users. {spamassassin}'s rules and their associated
759scores get updated regularly and are trained on a huge corpus, which gets
eb269701 760classified by experts. In most cases, adding a rule for matching a particular
833e1edc
SI
761keyword is the wrong approach, leading to many false positives. Usually bad
762detection rates are better addressed by properly setting up DNS than by adding
763a custom rule - watch out for matches to 'URIBL_BLOCKED' in the logs or
764spam-headers - see the {spamassassin_dnsbl}.
765
eb269701
DW
766To add or change the Proxmox {spamassassin} configuration, log in to the
767console via SSH and change to the `/etc/mail/spamassassin/` directory. In this
d2f49775 768directory there are several files (`init.pre`, `local.cf`, ...) - do not change
69a428d9
SI
769them, as `init.pre`, `v310.pre`, `v320.pre`, `local.cf` will be overwritten by
770the xref:pmgconfig_template_engine[template engine], while the others can
771get updated by any {spamassassin} package upgrade.
833e1edc 772
e1f6d6d0
DW
773To add your custom configuration, you have to create a new file named
774`custom.cf` (in `/etc/mail/spamassassin/`), then add your configuration there.
775Make sure to use the correct {spamassassin_rule_syntax} and test it with:
7eff8815
DM
776
777----
778# spamassassin -D --lint
779----
780
781If you run a cluster, the `custom.cf` file is synchronized from the
d2f49775 782master node to all cluster members automatically.
7eff8815 783
eb269701 784To adjust the score assigned to a particular rule, you
36b169e6
SI
785can also use the xref:pmgconfig_spamdetector_customscores[Custom Rule Score]
786settings in the GUI.
787
7eff8815 788
ed7970d8
SI
789[[pmgconfig_custom_check]]
790Custom Check Interface
791----------------------
792
3f18659b 793For use-cases which are not handled by the {pmg} Virus Detector and
ed7970d8
SI
794{spamassassin} configuration, advanced users can create a custom check
795executable which, if enabled will be called before the Virus Detector and before
3f18659b 796passing an email through the Rule System. The custom check API is kept as
ed7970d8 797simple as possible, while still providing a great deal of control over the
3f18659b 798treatment of an email. Its input is passed via two CLI arguments:
ed7970d8
SI
799
800* the 'api-version' (currently `v1`) - for potential future change of the
801 invocation
802
3f18659b 803* the 'queue-file-name' - a filename, which contains the complete email as
ed7970d8
SI
804 rfc822/eml file
805
eb269701 806The expected output needs to be printed to STDOUT and consists of two lines:
ed7970d8
SI
807
808* the 'api-version' (currently 'v1') - see above
809
810* one of the following 3 results:
eb269701 811** 'OK' - email is OK
3f18659b
OB
812** 'VIRUS: <virusdescription>' - email is treated as if it contained a virus
813 (the virus description is logged and added to the email's headers)
ed7970d8 814** 'SCORE: <number>' - <number> is added (negative numbers are also possible)
3f18659b 815 to the email's spamscore
ed7970d8 816
eb269701 817The check is run with a 5 minute timeout - if this is exceeded, the check
3f18659b 818executable is killed and the email is treated as OK.
ed7970d8
SI
819
820All output written to STDERR by the check is written with priority 'err' to the
821journal/mail.log.
822
eb269701
DW
823Below is a simple sample script following the API (and yielding a random result)
824for reference:
ed7970d8
SI
825
826----
827#!/bin/sh
828
829echo "called with $*" 1>&2
830
831if [ "$#" -ne 2 ]; then
832 echo "usage: $0 APIVERSION QUEUEFILENAME" 1>&2
833 exit 1
834fi
835
836apiver="$1"
837shift
838
839if [ "$apiver" != "v1" ]; then
840 echo "wrong APIVERSION: $apiver" 1>&2
841 exit 2
842fi
843
844queue_file="$1"
845
846echo "v1"
847
848choice=$(shuf -i 0-3 -n1)
849
850case "$choice" in
851 0)
852 echo OK
853 ;;
854 1)
855 echo SCORE: 4
856 ;;
857 2)
858 echo VIRUS: Random Virus
859 ;;
860 3) #timeout-test
861 for i in $(seq 1 7); do
862 echo "custom checking mail: $queue_file - minute $i" 1>&2
863 sleep 60
864 done
865 ;;
866esac
867
868exit 0
869----
870
871The custom check needs to be enabled in the admin section of `/etc/pmg/pmg.conf`
872
873----
874section: admin
875 custom_check 1
876----
877
878The location of the custom check executable can also be set there with the key
879`custom_check_path` and defaults to `/usr/local/bin/pmg-custom-check`.
880
881
c331641e
DM
882User Management
883---------------
884
05336835
DC
885User management in {pmg} consists of three types of users/accounts:
886
887
4a08dffe 888[[pmgconfig_localuser]]
05336835
DC
889Local Users
890~~~~~~~~~~~
891
38d14519 892[thumbnail="screenshot/pmg-gui-local-user-config.png", big=1]
f02d2b90 893
4885bff7
TL
894Local users can manage and audit {pmg}. They can login on the management web
895interface.
05336835 896
a8ac4ab3 897There are four roles:
05336835 898
4885bff7
TL
899Administrator::
900
eb269701 901Is allowed to manage settings of {pmg}, excluding some tasks like network
4885bff7
TL
902configuration and upgrading.
903
904Quarantine manager::
05336835 905
05336835
DC
906Is allowed to manage quarantines, blacklists and whitelists, but not other
907settings. Has no right to view any other data.
908
4885bff7
TL
909Auditor::
910
05336835
DC
911With this role, the user is only allowed to view data and configuration, but
912not to edit it.
913
a8ac4ab3
TL
914Helpdesk::
915
916Combines permissions of the 'Auditor' and the 'Quarantine Manager' role.
917
eb269701 918In addition, there is always the 'root' user, which is used to perform special
4885bff7
TL
919system administrator tasks, such as upgrading a host or changing the network
920configuration.
05336835 921
eb269701
DW
922NOTE: Only PAM users are able to log in via the web interface and ssh, while the
923users created through the web interface are not. Those users are created for
924{pmg} administration only.
05336835
DC
925
926Local user related settings are saved in `/etc/pmg/user.conf`.
927
eb269701 928For details on the fields, see xref:pmg_user_configuration_file[user.conf]
05336835 929
4a08dffe 930[[pmgconfig_ldap]]
05336835
DC
931LDAP/Active Directory
932~~~~~~~~~~~~~~~~~~~~~
933
38d14519 934[thumbnail="screenshot/pmg-gui-ldap-user-config.png", big=1]
f02d2b90 935
fc11986a
DW
936With {pmg}, users can use LDAP and Active directory as authentication methods to
937access their individual xref:pmgadministration_spam_quarantine[Spam Quarantine].
938Additionally, if users have extra email aliases defined in the LDAP directory,
939they will have a single spam quarantine for all of these.
940
941NOTE: Authentication via LDAP must first be enabled using the `Authentication
942mode` (`authmode`) parameter in the
943xref:pmgconfig_spamdetector_quarantine[Spam Detector's Quarantine configuration settings].
944
05336835 945You can specify multiple LDAP/Active Directory profiles, so that you can
fc11986a 946create rules matching particular users and groups.
05336835
DC
947
948Creating a profile requires (at least) the following:
949
fc11986a
DW
950* `Profile Name`: The name assigned to the LDAP profile.
951* `Protocol`: LDAP, LDAPS, or LDAP+STARTTLS (LDAP+STARTTLS is recommended).
952* `Server`: The domain name/IP address of the LDAP server. A fallback can also
953 be configured using the second field.
954* `User name`: The Bind DN for authentication on the LDAP server.
955 This is required if your server does not support anonymous binds.
956* `Password`: Password for the Bind DN user.
957* `Base DN`: The directory which users are searched under.
05336835
DC
958
959All other fields should work with the defaults for most setups, but can be
960used to customize the queries.
961
fc11986a 962The settings are saved to `/etc/pmg/ldap.conf`. Details about the options
05336835
DC
963can be found here: xref:pmg_ldap_configuration_file[ldap.conf]
964
965Bind user
966^^^^^^^^^
967
968It is highly recommended that the user which you use for connecting to the
eb269701 969LDAP server only has permission to query the server. For LDAP servers
05336835 970(for example OpenLDAP or FreeIPA), the username has to be of a format like
eb269701
DW
971'uid=username,cn=users,cn=accounts,dc=domain', where the specific fields
972depend on your setup. For Active Directory servers, the format should be
fc11986a 973'username@domain' or 'domain\username'.
05336835
DC
974
975Sync
976^^^^
977
eb269701
DW
978{pmg} synchronizes the relevant user and group information periodically, so that
979the information is quickly available, even when the LDAP/AD server is
980temporarily inaccessible.
05336835 981
3f18659b 982After a successful sync, the groups and users should be visible on the web
eb269701 983interface. Following this, you can create rules targeting LDAP users and groups.
c331641e
DM
984
985
4a08dffe 986[[pmgconfig_fetchmail]]
8538d9a2 987Fetchmail
05336835
DC
988~~~~~~~~~
989
38d14519 990[thumbnail="screenshot/pmg-gui-fetchmail-config.png", big=1]
f02d2b90 991
eb269701 992Fetchmail is a utility for polling and forwarding emails. You can define
3f18659b 993email accounts, which will then be fetched and forwarded to the email
05336835
DC
994address you defined.
995
996You have to add an entry for each account/target combination you want to
eb269701 997fetch and forward. These will then be regularly polled and forwarded,
05336835
DC
998according to your configuration.
999
eb269701 1000The API and web interface offer the following configuration options:
8538d9a2
DM
1001
1002include::fetchmail.conf.5-opts.adoc[]
1003
a4f14219
TL
1004[[user_tfa_auth]]
1005Two-Factor Authentication
1006-------------------------
1007
1008Users of the admin interface can configure two-factor authentication to
1009increase protection of their accounts.
1010
1a4f8407
TL
1011NOTE: Joining a cluster with two-factor authentication enabled for the `root`
1012user is not supported. Remove the second factor when joining the cluster.
f8dc6aec 1013
a4f14219
TL
1014Available Second Factors
1015~~~~~~~~~~~~~~~~~~~~~~~~
1016
1017You can set up multiple second factors, in order to avoid a situation in which
1018losing your smartphone or security key locks you out of your account
1019permanently.
1020
c4f5ee14 1021The following two-factor authentication methods are available:
a4f14219
TL
1022
1023* User configured TOTP
1024 (https://en.wikipedia.org/wiki/Time-based_One-Time_Password[Time-based One-Time Password]).
1025 A short code derived from a shared secret and the current time, it changes
1026 every 30 seconds.
1027* WebAuthn (https://en.wikipedia.org/wiki/WebAuthn[Web Authentication]).
1028 A general standard for authentication. It is implemented by various security
1029 devices, like hardware keys or trusted platform modules (TPM) from a computer
1030 or smart phone.
1031* Single use Recovery Keys. A list of keys which should either be
1032 printed out and locked in a secure place or saved digitally in an electronic
1033 vault. Each key can be used only once. These are perfect for ensuring that
1034 you are not locked out, even if all of your other second factors are lost or
1035 corrupt.
1036
1037Configuration of Two-Factor
1038~~~~~~~~~~~~~~~~~~~~~~~~~~~
1039
1040Users can choose to enable 'TOTP' or 'WebAuthn' as a second factor on login,
c4f5ee14 1041via the 'TFA' button in the user list.
a4f14219
TL
1042
1043Users can always add and use one time 'Recovery Keys'.
1044
1045//[thumbnail="screenshot/gui-datacenter-two-factor.png"]//TODO
1046
1047[[user_tfa_setup_totp]]
1048=== TOTP
1049
1050//[thumbnail="screenshot/pve-gui-tfa-add-totp.png"]//TODO
1051
1052There is no server setup required. Simply install a TOTP app on your
1053smartphone (for example, https://github.com/andOTP/andOTP#downloads[andOTP])
1054and use the Proxmox Backup Server web-interface to add a TOTP factor.
1055
1056After opening the 'TOTP' window, the user is presented with a dialog to set up
1057'TOTP' authentication. The 'Secret' field contains the key, which can be
1058randomly generated via the 'Randomize' button. An optional 'Issuer Name' can be
1059added to provide information to the 'TOTP' app about what the key belongs to.
1060Most 'TOTP' apps will show the issuer name together with the corresponding
1061'OTP' values. The username is also included in the QR code for the 'TOTP' app.
1062
1063After generating a key, a QR code will be displayed, which can be used with most
1064OTP apps such as FreeOTP. The user then needs to verify the current user
1065password (unless logged in as 'root'), as well as the ability to correctly use
1066the 'TOTP' key, by typing the current 'OTP' value into the 'Verification Code'
1067field and pressing the 'Apply' button.
1068
1069
1070[[user_tfa_setup_webauthn]]
1071=== WebAuthn
1072
1073For WebAuthn to work, you need to have two things:
1074
1075* A trusted HTTPS certificate (for example, by using
c4f5ee14 1076 xref:sysadmin_certs_get_trusted_acme_cert[Let's Encrypt]).
a4f14219
TL
1077 While it probably works with an untrusted certificate, some browsers may
1078 warn or refuse WebAuthn operations if it is not trusted.
1079* Setup the WebAuthn configuration (see *User Management -> Two Factor ->
1080 WebAuthn* in the {pmg} web interface). This can be
1081 auto-filled in most setups.
1082
1083Once you have fulfilled both of these requirements, you can add a WebAuthn
1084configuration in the *Two Factor* panel under *Datacenter -> Permissions -> Two
1085Factor*.
1086
1087[[user_tfa_setup_recovery_keys]]
1088=== Recovery Keys
1089
1090//[thumbnail="screenshot/pve-gui-tfa-add-recovery-keys.png"]//TODO
1091
1092Recovery key codes do not need any preparation; you can simply create a
1093set of recovery keys in the *Two Factor* panel under *Datacenter -> Permissions
1094-> Two Factor*.
1095
1096NOTE: There can only be one set of single-use recovery keys per user at any
1097time.
1098
1099WebAuthn Configuration
1100~~~~~~~~~~~~~~~~~~~~~~
1101
1102//[thumbnail="screenshot/gui-datacenter-webauthn-edit.png"]//TODO
1103
1104To allow users to use 'WebAuthn' authentication, it is necessaary to use a valid
1105domain with a valid SSL certificate, otherwise some browsers may warn or refuse
1106to authenticate altogether.
1107
1108NOTE: Changing the 'WebAuthn' configuration may render all existing 'WebAuthn'
1109registrations unusable!
1110
1111You can configure WebAuthn directly in the 'Two Factor' panel, there's an
1112auto-fill button that will set the correct values for most setups.
8538d9a2 1113
e62ceaf0
DM
1114ifdef::manvolnum[]
1115include::pmg-copyright.adoc[]
1116endif::manvolnum[]