]> git.proxmox.com Git - pmg-docs.git/blame - pmgproxy.adoc
pmgproxy: document LISTEN_IP and synchronize with pveproxy
[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
26This daemon exposes the whole {pmg} API on TCP port 8006 using
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
31Requests targeted for other nodes are automatically forwarded to those
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
79By setting `LISTEN_IP` in `/etc/default/pmgproxy` you can control to which IP
80address the `pmgproxy` daemon binds. The IP-address needs to be configured on
81the system.
82
83Setting the `sysctl` `net.ipv6.bindv6only` to the non-default `1` will cause
84the daemons to only accept connection from IPv6 clients, while usually also
85causing lots of other issues. If you set this configuration we recommend to
86either remove the `sysctl` setting, or set the `LISTEN_IP` to `0.0.0.0` (which
87will only allow IPv4 clients).
88
89`LISTEN_IP` can be used to only to restricting the socket to an internal
90interface and thus have less exposure to the public internet, for example:
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,
110possibly on different sub-nets. It is **not recommended** to set `LISTEN_IP` on
111clustered systems.
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
121long-running worker processes, for example a running console.So, please use a
122maintenance window to bring this change in effect.
123
124
e1afb181
SI
125SSL Cipher Suite
126----------------
127
128You can define the cipher list in `/etc/default/pmgproxy`, for example
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
bfdb1534 132Above is the default. See the `ciphers(1)` man page from the `openssl`
e1afb181
SI
133package for a list of all available options.
134
f5a90440
TL
135The first of these ciphers, available to both the client and the `pmgproxy`,
136will be used.
137
138Additionally you can allow the client to choose the cipher from the list above
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
149containing DH parameters in PEM format, for example
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
bfdb1534 163content if the client supports it. This can be disabled in `/etc/default/pmgproxy`
e1afb181
SI
164
165 COMPRESSION=0
166
fa49ddc5
DM
167ifdef::manvolnum[]
168include::pmg-copyright.adoc[]
169endif::manvolnum[]