]> git.proxmox.com Git - pmg-docs.git/blame - pmgproxy.adoc
tfa: rework note regarding cluster join and tfa
[pmg-docs.git] / pmgproxy.adoc
CommitLineData
fa49ddc5
DM
1ifdef::manvolnum[]
2pmgproxy(8)
3===========
4:pmg-toplevel:
5
6NAME
7----
8
9pmgproxy - Proxmox Mail Gateway API Proxy Daemon
10
11
12SYNOPSIS
13--------
14
15include::pmgproxy.8-synopsis.adoc[]
16
17DESCRIPTION
18-----------
19endif::manvolnum[]
20
21ifndef::manvolnum[]
22pmgproxy - Proxmox Mail Gateway API Proxy Daemon
23================================================
24endif::manvolnum[]
25
571cbbdf 26This daemon exposes the whole {pmg} API on TCP port 8006, using
fa49ddc5 27HTTPS. It runs as user `www-data` and has very limited permissions.
206ef998 28Operations requiring more permissions are forwarded to the local
fa49ddc5
DM
29`pmgdaemon`.
30
571cbbdf 31Requests targeted at other nodes are automatically forwarded to those
fa49ddc5
DM
32nodes. This means that you can manage your whole cluster by connecting
33to a single {pmg} node.
34
35Alternative HTTPS certificate
36-----------------------------
37
206ef998
SI
38By default, pmgproxy uses the certificate `/etc/pmg/pmg-api.pem` for HTTPS
39connections. This certificate is self signed, and therefore not trusted by
40browsers and operating systems by default. You can simply replace this
cca0f08b
SI
41certificate with your own (include the key inside the '.pem' file) or obtain one
42from an ACME enabled CA (configurable in the GUI).
fa49ddc5 43
e1afb181
SI
44Host based Access Control
45-------------------------
46
cca0f08b 47It is possible to configure ``apache2''-like access control
e1afb181
SI
48lists. Values are read from file `/etc/default/pmgproxy`. For example:
49
50----
51ALLOW_FROM="10.0.0.1-10.0.0.5,192.168.0.0/22"
52DENY_FROM="all"
53POLICY="allow"
54----
55
56IP addresses can be specified using any syntax understood by `Net::IP`. The
cca0f08b
SI
57name `all` is an alias for `0/0` and `::/0` (meaning all IPv4 and IPv6
58addresses).
e1afb181
SI
59
60The default policy is `allow`.
61
62[width="100%",options="header"]
63|===========================================================
64| Match | POLICY=deny | POLICY=allow
65| Match Allow only | allow | allow
66| Match Deny only | deny | deny
67| No match | deny | allow
68| Match Both Allow & Deny | deny | allow
69|===========================================================
70
71
cca0f08b
SI
72Listening IP
73------------
74
75By default the `pmgproxy` daemon listens on the wildcard address and accepts
76connections from both IPv4 and IPv6 clients.
77
78
571cbbdf
DW
79By setting `LISTEN_IP` in `/etc/default/pmgproxy`, you can control which IP
80address the `pmgproxy` daemon binds to. The IP-address needs to be configured on
cca0f08b
SI
81the system.
82
83Setting the `sysctl` `net.ipv6.bindv6only` to the non-default `1` will cause
571cbbdf
DW
84the daemons to only accept connections from IPv6 clients, while usually also
85causing lots of other issues. If you set this configuration, we recommend either
86removing the `sysctl` setting, or setting the `LISTEN_IP` to `0.0.0.0` (which
87will allow only IPv4 clients).
cca0f08b 88
571cbbdf
DW
89`LISTEN_IP` can be used to restrict the socket to an internal
90interface, thus leaving less exposure to the public internet, for example:
cca0f08b
SI
91
92----
93LISTEN_IP="192.0.2.1"
94----
95
96Similarly, you can also set an IPv6 address:
97
98----
99LISTEN_IP="2001:db8:85a3::1"
100----
101
102Note that if you want to specify a link-local IPv6 address, you need to provide
103the interface name itself. For example:
104
105----
106LISTEN_IP="fe80::c463:8cff:feb9:6a4e%vmbr0"
107----
108
109WARNING: The nodes in a cluster need access to `pmgproxy` for communication,
571cbbdf
DW
110possibly across different subnets. It is **not recommended** to set `LISTEN_IP`
111on clustered systems.
cca0f08b
SI
112
113To apply the change you need to either reboot your node or fully restart the
114`pmgproxy` service:
115
116----
117systemctl restart pmgproxy.service
118----
119
120NOTE: Unlike `reload`, a `restart` of the pmgproxy service can interrupt some
571cbbdf
DW
121long-running worker processes, for example, a running console. Therefore, you
122should set a maintenance window to bring this change into effect.
cca0f08b
SI
123
124
e1afb181
SI
125SSL Cipher Suite
126----------------
127
571cbbdf 128You can define the cipher list in `/etc/default/pmgproxy`, for example:
e1afb181
SI
129
130 CIPHERS="ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256"
131
571cbbdf 132The above is the default. See the `ciphers(1)` man page from the `openssl`
e1afb181
SI
133package for a list of all available options.
134
571cbbdf 135The first of these ciphers that is available to both the client and `pmgproxy`
f5a90440
TL
136will be used.
137
571cbbdf 138Additionally, you can allow the client to choose the cipher from the list above,
f5a90440 139by disabling the HONOR_CIPHER_ORDER option in `/etc/default/pmgproxy`:
e1afb181
SI
140
141 HONOR_CIPHER_ORDER=0
142
143
144Diffie-Hellman Parameters
145-------------------------
146
147You can define the used Diffie-Hellman parameters in
148`/etc/default/pmgproxy` by setting `DHPARAMS` to the path of a file
571cbbdf 149containing DH parameters in PEM format, for example:
e1afb181
SI
150
151 DHPARAMS="/path/to/dhparams.pem"
152
153If this option is not set, the built-in `skip2048` parameters will be
154used.
155
156NOTE: DH parameters are only used if a cipher suite utilizing the DH key
157exchange algorithm is negotiated.
158
159COMPRESSION
160-----------
161
162By default `pmgproxy` uses gzip HTTP-level compression for compressible
571cbbdf
DW
163content, if the client supports it. This can be disabled in
164`/etc/default/pmgproxy`
e1afb181
SI
165
166 COMPRESSION=0
167
fa49ddc5
DM
168ifdef::manvolnum[]
169include::pmg-copyright.adoc[]
170endif::manvolnum[]