]> git.proxmox.com Git - pmg-docs.git/blame_incremental - pmgconfig.adoc
installation: rephrase section "Other Repository Sources"
[pmg-docs.git] / pmgconfig.adoc
... / ...
CommitLineData
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[]
23Configuration Management
24========================
25:pmg-toplevel:
26endif::manvolnum[]
27
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
30REST API over 'https' or the command-line tool `pmgsh`.
31
32The command-line tool `pmgconfig` is used to simplify some common configuration
33tasks, such as generating certificates and rewriting service configuration
34files.
35
36NOTE: We use a Postgres database to store mail filter rules and statistical
37data. See chapter xref:chapter_pmgdb[Database Management] for more information.
38
39
40Configuration files overview
41----------------------------
42
43`/etc/network/interfaces`::
44
45Network setup. We never modify this file directly. Instead, we write
46changes to `/etc/network/interfaces.new`. When you reboot, {pmg} renames
47the file to `/etc/network/interfaces`, thus applying the changes.
48
49`/etc/resolv.conf`::
50
51DNS search domain and nameserver setup. {pmg} uses the search domain setting
52to create the FQDN and domain name used in the postfix configuration.
53
54`/etc/hostname`::
55
56The system's hostname. {pmg} uses the hostname to create the FQDN used
57in the postfix configuration.
58
59`/etc/hosts`::
60
61Static table lookup for hostnames.
62
63`/etc/pmg/pmg.conf`::
64
65Stores common administration options, such as the spam and mail proxy
66configuration.
67
68`/etc/pmg/cluster.conf`::
69
70The cluster setup.
71
72`/etc/pmg/domains`::
73
74The list of relay domains.
75
76`/etc/pmg/dkim/domains`::
77
78The list of domains for outbound DKIM signing.
79
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
96`/etc/pmg/tls_policy`::
97
98TLS policy for outbound connections.
99
100`/etc/pmg/tls_inbound_domains`::
101
102Sender domains for which TLS is enforced on inbound connections.
103
104`/etc/pmg/transports`::
105
106Message delivery transport setup.
107
108`/etc/pmg/user.conf`::
109
110GUI user configuration.
111
112`/etc/mail/spamassassin/custom.cf`::
113
114Custom {spamassassin} setup.
115
116`/etc/mail/spamassassin/pmg-scores.cf`::
117
118Custom {spamassassin} rule scores.
119
120Keys and Certificates
121---------------------
122
123`/etc/pmg/pmg-api.pem`::
124
125Key and certificate (combined) used by the HTTPS server (API).
126
127`/etc/pmg/pmg-authkey.key`::
128
129Private key used to generate authentication tickets.
130
131`/etc/pmg/pmg-authkey.pub`::
132
133Public key used to verify authentication tickets.
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
143`/etc/pmg/dkim/<selector>.private`::
144
145Key for DKIM signing mails with selector '<selector>'.
146
147
148[[pmgconfig_template_engine]]
149Service Configuration Templates
150-------------------------------
151
152{pmg} uses various services to implement mail filtering, for example,
153the {postfix} Mail Transport Agent (MTA), the {clamav} antivirus
154engine, and the Apache {spamassassin} project. These services use
155separate configuration files, so we need to rewrite those files when the
156configuration is changed.
157
158We use a template-based approach to generate these files. The {tts} is
159a well known, fast and flexible template processing system. You can
160find the default templates in `/var/lib/pmg/templates/`. Please do not
161modify these directly, otherwise your modifications will be lost on the
162next update. Instead, copy the template you wish to change to
163`/etc/pmg/templates/`, then apply your changes there.
164
165Templates can access any configuration settings, and you can use the
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
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:
181
182----
183# pmgconfig sync --restart 1
184----
185
186The above command also restarts services if the underlying configuration
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.
192
193[[pmgconfig_whitelist_overview]]
194White- and Blacklists
195---------------------
196
197{pmg} has multiple white- and blacklists. It differentiates between the
198xref:pmgconfig_mailproxy_options[SMTP Whitelist], the rule-based whitelist
199and the user whitelist.
200In addition to the whitelists, there are two separate blacklists: the rule-based
201blacklist and the user blacklist.
202
203SMTP Whitelist
204~~~~~~~~~~~~~~
205
206The xref:pmgconfig_mailproxy_whitelist[SMTP Whitelist] is responsible for disabling
207greylisting, as well as SPF and DNSBL checks. These are done during the SMTP
208dialogue.
209
210Rule-based White-/Blacklist
211~~~~~~~~~~~~~~~~~~~~~~~~~~~
212
213The xref:chapter_mailfilter[rule-based white- and blacklists] are predefined
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.
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
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
228this recipient.
229
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
233(spam score of 3 or higher).
234
235[[pmgconfig_systemconfig]]
236System Configuration
237--------------------
238
239Network and Time
240~~~~~~~~~~~~~~~~
241
242ifndef::manvolnum[]
243[thumbnail="pmg-gui-network-config.png", big=1]
244endif::manvolnum[]
245
246As network and time are configured in the installer, these generally do not
247need to be configured again in the GUI.
248
249The default setup uses a single Ethernet adapter and static IP
250assignment. The configuration is stored at '/etc/network/interfaces',
251and the actual network setup is done the standard Debian way, using the
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
271have a fast and reliable DNS server. We also query some publicly
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,
275which needs to be configured in 'recursive' mode.
276
277
278Options
279~~~~~~~
280
281ifndef::manvolnum[]
282[thumbnail="pmg-gui-system-options.png", big=1]
283endif::manvolnum[]
284
285
286These settings are saved to the 'admin' subsection in `/etc/pmg/pmg.conf`,
287using the following configuration keys:
288
289include::pmg.admin-conf-opts.adoc[]
290
291
292include::pmg-ssl-certificate.adoc[]
293
294Mail Proxy Configuration
295------------------------
296
297[[pmgconfig_mailproxy_relaying]]
298Relaying
299~~~~~~~~
300
301ifndef::manvolnum[]
302[thumbnail="pmg-gui-mailproxy-relaying.png", big=1]
303endif::manvolnum[]
304
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:
310
311include::pmg.mail-relaying-conf-opts.adoc[]
312
313[[pmgconfig_mailproxy_relay_domains]]
314Relay Domains
315~~~~~~~~~~~~~
316
317ifndef::manvolnum[]
318[thumbnail="pmg-gui-mailproxy-relaydomains.png", big=1]
319endif::manvolnum[]
320
321A list of relayed mail domains, that is, what destination domains this
322system will relay mail to. The system will reject incoming mails to
323other domains.
324
325
326[[pmgconfig_mailproxy_ports]]
327Ports
328~~~~~
329
330ifndef::manvolnum[]
331[thumbnail="pmg-gui-mailproxy-ports.png", big=1]
332endif::manvolnum[]
333
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:
339
340include::pmg.mail-ports-conf-opts.adoc[]
341
342
343[[pmgconfig_mailproxy_options]]
344Options
345~~~~~~~
346
347ifndef::manvolnum[]
348[thumbnail="pmg-gui-mailproxy-options.png", big=1]
349endif::manvolnum[]
350
351These settings are saved to the 'mail' subsection in `/etc/pmg/pmg.conf`,
352using the following configuration keys:
353
354include::pmg.mail-options-conf-opts.adoc[]
355
356
357[[pmgconfig_mailproxy_before_after_queue]]
358Before and After Queue scanning
359~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
360
361Email scanning can happen at two different stages of mail-processing:
362
363* Before-queue filtering: During the SMTP session, after the complete message
364 has been received (after the 'DATA' command).
365
366* After-queue filtering: After initially accepting the mail and putting it on
367 a queue for further processing.
368
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
371original sender to the other mail server. This is of particular advantage if
372the processed mail is a spam message or contains a virus and has a forged
373sender address. Sending out a notification in this situation leads to so-called
374'backscatter' mail, which might cause your server to get listed as spamming on
375RBLs (Real-time Blackhole List).
376
377After-queue filtering has the advantage of providing faster delivery of
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'
391for a blocked mail and '250' for an accepted or quarantined mail). If some
392mailboxes accept the mail and some reject it, the system has to accept the mail.
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
396'/etc/pmg/pmg.conf'. If enabled, an NDR is sent. Keeping this disabled prevents
397NDRs being sent to the (possibly forged) sender and thus minimizes the chance
398of getting your IP listed on an RBL. However in certain environments, it can be
399unacceptable not to inform the sender about a rejected mail.
400
401The setting has the same effect if after-queue filtering is configured, with
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
408
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
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
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
429timestamp for that triple is updated, and the email is accepted for further
430processing.
431
432As long as a sender and recipient communicate frequently, there is no delay
433introduced by enabling greylisting. A triple is removed after a longer period
434of time, if no mail fitting that triple has been seen. The timeouts in {pmg}
435are:
436
437* 2 days for the retry of the first delivery
438
439* 36 days for a known triple
440
441Mails with an empty envelope sender are always delayed.
442
443Some email service providers send out emails for one domain from multiple
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
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
452[[pmgconfig_mailproxy_transports]]
453Transports
454~~~~~~~~~~
455
456ifndef::manvolnum[]
457[thumbnail="pmg-gui-mailproxy-transports.png", big=1]
458endif::manvolnum[]
459
460You can use {pmg} to send emails to different internal email servers. For
461example, you can send emails addressed to domain.com to your first email server
462and emails addressed to subdomain.domain.com to a second one.
463
464You can add the IP addresses, hostname, transport protocol (smtp/lmtp),
465transport ports and mail domains (or just single email addresses) of your
466additional email servers. When transport protocol is set to `lmtp`, the option
467'Use MX' is useless and will automatically be set to 'No'.
468
469
470[[pmgconfig_mailproxy_networks]]
471Networks
472~~~~~~~~
473
474ifndef::manvolnum[]
475[thumbnail="pmg-gui-mailproxy-networks.png", big=1]
476endif::manvolnum[]
477
478You can add additional internal (trusted) IP networks or hosts. All hosts in
479this list are allowed to relay.
480
481NOTE: Hosts in the same subnet as {pmg} can relay by default and don't need to
482be added to this list.
483
484
485[[pmgconfig_mailproxy_tls]]
486TLS
487~~~
488
489ifndef::manvolnum[]
490[thumbnail="pmg-gui-mailproxy-tls.png", big=1]
491endif::manvolnum[]
492
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`).
497
498{pmg} uses opportunistic TLS encryption by default. The SMTP transaction is
499encrypted if the 'STARTTLS' ESMTP feature is supported by the remote
500server. Otherwise, messages are sent unencrypted.
501
502You can set a different TLS policy per destination. A destination is either a
503remote domain or a next-hop destination, as specified in `/etc/pmg/transport`.
504This can be used if you need to prevent email delivery without
505encryption, or to work around a broken 'STARTTLS' ESMTP implementation. See
506{postfix_tls_readme} for details on the supported policies.
507
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
515Enable TLS logging::
516
517To get additional information about SMTP TLS activity, you can enable
518TLS logging. In this case, information about TLS sessions and used
519certificates is logged via syslog.
520
521Add TLS received header::
522
523Set this option to include information about the protocol and cipher
524used, as well as the client and issuer CommonName into the "Received:"
525message header.
526
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
532
533[[pmgconfig_mailproxy_dkim]]
534DKIM Signing
535~~~~~~~~~~~~
536
537ifndef::manvolnum[]
538[thumbnail="pmg-gui-mailproxy-dkim.png", big=1]
539endif::manvolnum[]
540
541DomainKeys Identified Mail (DKIM) Signatures (see {dkim_rfc}) is a method to
542cryptographically authenticate a mail as originating from a particular domain.
543Before sending the mail, a hash over certain header fields and the body is
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
549The verification is done by the receiver. The public key is fetched
550via DNS TXT lookup for `yourselector._domainkey.yourdomain.example` and used
551for verifying the hash. You can publish multiple selectors for your domain,
552each used by a system which sends email from your domain, without the need to
553share the private key.
554
555{pmg} verifies DKIM Signatures for inbound mail in the Spam Filter by default.
556
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.
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
567the envelope sender address or create a list of domains, for which emails
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
578saved under `/etc/pmg/dkim/yourselector.private`. You can display the DNS TXT
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
585listed in `/etc/pmg/dkim/domains`, if it exists and `/etc/pmg/domains`
586otherwise.
587
588These settings are saved to the 'admin' subsection in `/etc/pmg/pmg.conf`,
589using the following configuration keys:
590
591include::pmg.admin-dkim-conf-opts.adoc[]
592
593
594[[pmgconfig_mailproxy_whitelist]]
595Whitelist
596~~~~~~~~~
597
598ifndef::manvolnum[]
599[thumbnail="pmg-gui-mailproxy-whitelist.png", big=1]
600endif::manvolnum[]
601
602All SMTP checks are disabled for those entries (e.g. Greylisting,
603SPF, DNSBL, ...)
604
605DNSBL checks are done by `postscreen`, which works on IP addresses and networks.
606This means it can only make use of the `IP Address` and `IP Network` entries.
607
608NOTE: If you use a backup MX server (for example, your ISP offers this service
609for you) you should always add those servers here.
610
611NOTE: To disable DNSBL checks entirely, remove any `DNSBL Sites` entries in
612xref:pmgconfig_mailproxy_options[Mail Proxy Options].
613
614[[pmgconfig_spamdetector]]
615Spam Detector Configuration
616---------------------------
617
618Options
619~~~~~~~
620
621ifndef::manvolnum[]
622[thumbnail="pmg-gui-spam-options.png", big=1]
623endif::manvolnum[]
624
625{pmg} uses a wide variety of local and network tests to identify spam
626signatures. This makes it harder for spammers to identify one aspect
627which they can craft their messages to work around the spam filter.
628
629Every single email will be analyzed and have a spam score
630assigned. The system attempts to optimize the efficiency of the rules
631that are run in terms of minimizing the number of false positives and
632false negatives.
633
634include::pmg.spam-conf-opts.adoc[]
635
636
637[[pmgconfig_spamdetector_quarantine]]
638Quarantine
639~~~~~~~~~~
640
641ifndef::manvolnum[]
642[thumbnail="pmg-gui-spamquar-options.png", big=1]
643endif::manvolnum[]
644
645{pmg} analyses all incoming email messages and decides for each
646email if it is ham or spam (or virus). Good emails are delivered to
647the inbox and spam messages are moved into the spam quarantine.
648
649The system can be configured to send daily reports to inform users
650about personal spam messages received in the last day. The report is
651only sent if there are new messages in the quarantine.
652
653Some options are only available in the config file `/etc/pmg/pmg.conf`,
654and not in the web interface.
655
656include::pmg.spamquar-conf-opts.adoc[]
657
658
659[[pmgconfig_spamdetector_customscores]]
660Customization of Rulescores
661~~~~~~~~~~~~~~~~~~~~~~~~~~~
662
663ifndef::manvolnum[]
664[thumbnail="pmg-gui-spam-custom-scores.png", big=1]
665endif::manvolnum[]
666
667While the default scoring of {spamassassin}'s ruleset provides very good
668detection rates, sometimes your particular environment can benefit from
669slightly adjusting the score of a particular rule. Two examples:
670
671* Your system receives spam mails which are scored at 4.9 and you have
672 a rule which puts all mails above 5 in the quarantine. The one thing the
673 spam mails have in common is that they all hit 'URIBL_BLACK'. By increasing
674 the score of this rule by 0.2 points the spam mails would all be quarantined
675 instead of being sent to your users
676
677* Your system tags many legitimate mails from a partner organization as spam,
678 because the organization has a policy that each mail has to start with
679 'Dear madam or sir' (generating 1.9 points through the rule
680 'DEAR_SOMETHING'). By setting the score of this rule to 0, you can disable
681 it completely.
682
683The system logs all the rules which a particular mail hits. Analyzing the logs can
684lead to finding such a pattern in your environment.
685
686You can adjust the score of a rule by creating a new 'Custom Rule Score' entry
687in the GUI and entering a {spamassassin} rule as the name.
688
689NOTE: In general, it is strongly recommended not to make large changes to the
690default scores.
691
692
693[[pmgconfig_clamav]]
694Virus Detector Configuration
695----------------------------
696
697[[pmgconfig_clamav_options]]
698Options
699~~~~~~~
700
701ifndef::manvolnum[]
702[thumbnail="pmg-gui-virus-options.png", big=1]
703endif::manvolnum[]
704
705All mails are automatically passed to the included virus detector
706({clamav}). The default settings are considered safe, so it is usually
707not required to change them.
708
709{clamav} related settings are saved to subsection 'clamav' in `/etc/pmg/pmg.conf`,
710using the following configuration keys:
711
712include::pmg.clamav-conf-opts.adoc[]
713
714ifndef::manvolnum[]
715[thumbnail="pmg-gui-clamav-database.png", big=1]
716endif::manvolnum[]
717
718Please note that the virus signature database is automatically
719updated. You can see the database status in the GUI, and also
720trigger manual updates from there.
721
722
723[[pmgconfig_clamav_quarantine]]
724Quarantine
725~~~~~~~~~~
726
727ifndef::manvolnum[]
728[thumbnail="pmg-gui-virusquar-options.png", big=1]
729endif::manvolnum[]
730
731Identified virus mails are automatically moved to the virus
732quarantine. The administrator can view these mails from the GUI, and
733choose to deliver them, in case of false positives. {pmg} does not notify
734individual users about received virus mails.
735
736Virus quarantine related settings are saved to subsection 'virusquar'
737in `/etc/pmg/pmg.conf`, using the following configuration keys:
738
739include::pmg.virusquar-conf-opts.adoc[]
740
741
742Custom SpamAssassin configuration
743---------------------------------
744
745This is only for advanced users. {spamassassin}'s rules and their associated
746scores get updated regularly and are trained on a huge corpus, which gets
747classified by experts. In most cases, adding a rule for matching a particular
748keyword is the wrong approach, leading to many false positives. Usually bad
749detection rates are better addressed by properly setting up DNS than by adding
750a custom rule - watch out for matches to 'URIBL_BLOCKED' in the logs or
751spam-headers - see the {spamassassin_dnsbl}.
752
753To add or change the Proxmox {spamassassin} configuration, log in to the
754console via SSH and change to the `/etc/mail/spamassassin/` directory. In this
755directory there are several files (`init.pre`, `local.cf`, ...) - do not change
756them, as `init.pre`, `v310.pre`, `v320.pre`, `local.cf` will be overwritten by
757the xref:pmgconfig_template_engine[template engine], while the others can
758get updated by any {spamassassin} package upgrade.
759
760To add your custom configuration, you have to create a new file named
761`custom.cf` (in `/etc/mail/spamassassin/`), then add your configuration there.
762Make sure to use the correct {spamassassin_rule_syntax} and test it with:
763
764----
765# spamassassin -D --lint
766----
767
768If you run a cluster, the `custom.cf` file is synchronized from the
769master node to all cluster members automatically.
770
771To adjust the score assigned to a particular rule, you
772can also use the xref:pmgconfig_spamdetector_customscores[Custom Rule Score]
773settings in the GUI.
774
775
776[[pmgconfig_custom_check]]
777Custom Check Interface
778----------------------
779
780For use-cases which are not handled by the {pmg} Virus Detector and
781{spamassassin} configuration, advanced users can create a custom check
782executable which, if enabled will be called before the Virus Detector and before
783passing an email through the Rule System. The custom check API is kept as
784simple as possible, while still providing a great deal of control over the
785treatment of an email. Its input is passed via two CLI arguments:
786
787* the 'api-version' (currently `v1`) - for potential future change of the
788 invocation
789
790* the 'queue-file-name' - a filename, which contains the complete email as
791 rfc822/eml file
792
793The expected output needs to be printed to STDOUT and consists of two lines:
794
795* the 'api-version' (currently 'v1') - see above
796
797* one of the following 3 results:
798** 'OK' - email is OK
799** 'VIRUS: <virusdescription>' - email is treated as if it contained a virus
800 (the virus description is logged and added to the email's headers)
801** 'SCORE: <number>' - <number> is added (negative numbers are also possible)
802 to the email's spamscore
803
804The check is run with a 5 minute timeout - if this is exceeded, the check
805executable is killed and the email is treated as OK.
806
807All output written to STDERR by the check is written with priority 'err' to the
808journal/mail.log.
809
810Below is a simple sample script following the API (and yielding a random result)
811for reference:
812
813----
814#!/bin/sh
815
816echo "called with $*" 1>&2
817
818if [ "$#" -ne 2 ]; then
819 echo "usage: $0 APIVERSION QUEUEFILENAME" 1>&2
820 exit 1
821fi
822
823apiver="$1"
824shift
825
826if [ "$apiver" != "v1" ]; then
827 echo "wrong APIVERSION: $apiver" 1>&2
828 exit 2
829fi
830
831queue_file="$1"
832
833echo "v1"
834
835choice=$(shuf -i 0-3 -n1)
836
837case "$choice" in
838 0)
839 echo OK
840 ;;
841 1)
842 echo SCORE: 4
843 ;;
844 2)
845 echo VIRUS: Random Virus
846 ;;
847 3) #timeout-test
848 for i in $(seq 1 7); do
849 echo "custom checking mail: $queue_file - minute $i" 1>&2
850 sleep 60
851 done
852 ;;
853esac
854
855exit 0
856----
857
858The custom check needs to be enabled in the admin section of `/etc/pmg/pmg.conf`
859
860----
861section: admin
862 custom_check 1
863----
864
865The location of the custom check executable can also be set there with the key
866`custom_check_path` and defaults to `/usr/local/bin/pmg-custom-check`.
867
868
869User Management
870---------------
871
872User management in {pmg} consists of three types of users/accounts:
873
874
875[[pmgconfig_localuser]]
876Local Users
877~~~~~~~~~~~
878
879[thumbnail="pmg-gui-local-user-config.png", big=1]
880
881Local users can manage and audit {pmg}. They can login on the management web
882interface.
883
884There are four roles:
885
886Administrator::
887
888Is allowed to manage settings of {pmg}, excluding some tasks like network
889configuration and upgrading.
890
891Quarantine manager::
892
893Is allowed to manage quarantines, blacklists and whitelists, but not other
894settings. Has no right to view any other data.
895
896Auditor::
897
898With this role, the user is only allowed to view data and configuration, but
899not to edit it.
900
901Helpdesk::
902
903Combines permissions of the 'Auditor' and the 'Quarantine Manager' role.
904
905In addition, there is always the 'root' user, which is used to perform special
906system administrator tasks, such as upgrading a host or changing the network
907configuration.
908
909NOTE: Only PAM users are able to log in via the web interface and ssh, while the
910users created through the web interface are not. Those users are created for
911{pmg} administration only.
912
913Local user related settings are saved in `/etc/pmg/user.conf`.
914
915For details on the fields, see xref:pmg_user_configuration_file[user.conf]
916
917[[pmgconfig_ldap]]
918LDAP/Active Directory
919~~~~~~~~~~~~~~~~~~~~~
920
921[thumbnail="pmg-gui-ldap-user-config.png", big=1]
922
923With {pmg}, users can use LDAP and Active directory as authentication methods to
924access their individual xref:pmgadministration_spam_quarantine[Spam Quarantine].
925Additionally, if users have extra email aliases defined in the LDAP directory,
926they will have a single spam quarantine for all of these.
927
928NOTE: Authentication via LDAP must first be enabled using the `Authentication
929mode` (`authmode`) parameter in the
930xref:pmgconfig_spamdetector_quarantine[Spam Detector's Quarantine configuration settings].
931
932You can specify multiple LDAP/Active Directory profiles, so that you can
933create rules matching particular users and groups.
934
935Creating a profile requires (at least) the following:
936
937* `Profile Name`: The name assigned to the LDAP profile.
938* `Protocol`: LDAP, LDAPS, or LDAP+STARTTLS (LDAP+STARTTLS is recommended).
939* `Server`: The domain name/IP address of the LDAP server. A fallback can also
940 be configured using the second field.
941* `User name`: The Bind DN for authentication on the LDAP server.
942 This is required if your server does not support anonymous binds.
943* `Password`: Password for the Bind DN user.
944* `Base DN`: The directory which users are searched under.
945
946All other fields should work with the defaults for most setups, but can be
947used to customize the queries.
948
949The settings are saved to `/etc/pmg/ldap.conf`. Details about the options
950can be found here: xref:pmg_ldap_configuration_file[ldap.conf]
951
952Bind user
953^^^^^^^^^
954
955It is highly recommended that the user which you use for connecting to the
956LDAP server only has permission to query the server. For LDAP servers
957(for example OpenLDAP or FreeIPA), the username has to be of a format like
958'uid=username,cn=users,cn=accounts,dc=domain', where the specific fields
959depend on your setup. For Active Directory servers, the format should be
960'username@domain' or 'domain\username'.
961
962Sync
963^^^^
964
965{pmg} synchronizes the relevant user and group information periodically, so that
966the information is quickly available, even when the LDAP/AD server is
967temporarily inaccessible.
968
969After a successful sync, the groups and users should be visible on the web
970interface. Following this, you can create rules targeting LDAP users and groups.
971
972
973[[pmgconfig_fetchmail]]
974Fetchmail
975~~~~~~~~~
976
977[thumbnail="pmg-gui-fetchmail-config.png", big=1]
978
979Fetchmail is a utility for polling and forwarding emails. You can define
980email accounts, which will then be fetched and forwarded to the email
981address you defined.
982
983You have to add an entry for each account/target combination you want to
984fetch and forward. These will then be regularly polled and forwarded,
985according to your configuration.
986
987The API and web interface offer the following configuration options:
988
989include::fetchmail.conf.5-opts.adoc[]
990
991[[user_tfa_auth]]
992Two-Factor Authentication
993-------------------------
994
995Users of the admin interface can configure two-factor authentication to
996increase protection of their accounts.
997
998NOTE: Joining a cluster with two-factor authentication enabled for the `root`
999user is not supported. Remove the second factor when joining the cluster.
1000
1001Available Second Factors
1002~~~~~~~~~~~~~~~~~~~~~~~~
1003
1004You can set up multiple second factors, in order to avoid a situation in which
1005losing your smartphone or security key locks you out of your account
1006permanently.
1007
1008The following two-factor authentication methods are available:
1009
1010* User configured TOTP
1011 (https://en.wikipedia.org/wiki/Time-based_One-Time_Password[Time-based One-Time Password]).
1012 A short code derived from a shared secret and the current time, it changes
1013 every 30 seconds.
1014* WebAuthn (https://en.wikipedia.org/wiki/WebAuthn[Web Authentication]).
1015 A general standard for authentication. It is implemented by various security
1016 devices, like hardware keys or trusted platform modules (TPM) from a computer
1017 or smart phone.
1018* Single use Recovery Keys. A list of keys which should either be
1019 printed out and locked in a secure place or saved digitally in an electronic
1020 vault. Each key can be used only once. These are perfect for ensuring that
1021 you are not locked out, even if all of your other second factors are lost or
1022 corrupt.
1023
1024Configuration of Two-Factor
1025~~~~~~~~~~~~~~~~~~~~~~~~~~~
1026
1027Users can choose to enable 'TOTP' or 'WebAuthn' as a second factor on login,
1028via the 'TFA' button in the user list.
1029
1030Users can always add and use one time 'Recovery Keys'.
1031
1032//[thumbnail="screenshot/gui-datacenter-two-factor.png"]//TODO
1033
1034[[user_tfa_setup_totp]]
1035=== TOTP
1036
1037//[thumbnail="screenshot/pve-gui-tfa-add-totp.png"]//TODO
1038
1039There is no server setup required. Simply install a TOTP app on your
1040smartphone (for example, https://github.com/andOTP/andOTP#downloads[andOTP])
1041and use the Proxmox Backup Server web-interface to add a TOTP factor.
1042
1043After opening the 'TOTP' window, the user is presented with a dialog to set up
1044'TOTP' authentication. The 'Secret' field contains the key, which can be
1045randomly generated via the 'Randomize' button. An optional 'Issuer Name' can be
1046added to provide information to the 'TOTP' app about what the key belongs to.
1047Most 'TOTP' apps will show the issuer name together with the corresponding
1048'OTP' values. The username is also included in the QR code for the 'TOTP' app.
1049
1050After generating a key, a QR code will be displayed, which can be used with most
1051OTP apps such as FreeOTP. The user then needs to verify the current user
1052password (unless logged in as 'root'), as well as the ability to correctly use
1053the 'TOTP' key, by typing the current 'OTP' value into the 'Verification Code'
1054field and pressing the 'Apply' button.
1055
1056
1057[[user_tfa_setup_webauthn]]
1058=== WebAuthn
1059
1060For WebAuthn to work, you need to have two things:
1061
1062* A trusted HTTPS certificate (for example, by using
1063 xref:sysadmin_certs_get_trusted_acme_cert[Let's Encrypt]).
1064 While it probably works with an untrusted certificate, some browsers may
1065 warn or refuse WebAuthn operations if it is not trusted.
1066* Setup the WebAuthn configuration (see *User Management -> Two Factor ->
1067 WebAuthn* in the {pmg} web interface). This can be
1068 auto-filled in most setups.
1069
1070Once you have fulfilled both of these requirements, you can add a WebAuthn
1071configuration in the *Two Factor* panel under *Datacenter -> Permissions -> Two
1072Factor*.
1073
1074[[user_tfa_setup_recovery_keys]]
1075=== Recovery Keys
1076
1077//[thumbnail="screenshot/pve-gui-tfa-add-recovery-keys.png"]//TODO
1078
1079Recovery key codes do not need any preparation; you can simply create a
1080set of recovery keys in the *Two Factor* panel under *Datacenter -> Permissions
1081-> Two Factor*.
1082
1083NOTE: There can only be one set of single-use recovery keys per user at any
1084time.
1085
1086WebAuthn Configuration
1087~~~~~~~~~~~~~~~~~~~~~~
1088
1089//[thumbnail="screenshot/gui-datacenter-webauthn-edit.png"]//TODO
1090
1091To allow users to use 'WebAuthn' authentication, it is necessaary to use a valid
1092domain with a valid SSL certificate, otherwise some browsers may warn or refuse
1093to authenticate altogether.
1094
1095NOTE: Changing the 'WebAuthn' configuration may render all existing 'WebAuthn'
1096registrations unusable!
1097
1098You can configure WebAuthn directly in the 'Two Factor' panel, there's an
1099auto-fill button that will set the correct values for most setups.
1100
1101ifdef::manvolnum[]
1102include::pmg-copyright.adoc[]
1103endif::manvolnum[]