1OCSERV(8)                   System Manager's Manual                  OCSERV(8)
2
3
4

NAME

6       ocserv - OpenConnect VPN server
7

SYNOPSIS

9       ocserv options -c [config]
10
11       Openconnect  VPN  server  (ocserv)  is a VPN server compatible with the
12       openconnect VPN client. It follows the AnyConnect VPN protocol which is
13       used by several CISCO routers.
14

DESCRIPTION

16       This a standalone server that reads a configuration file (see below for
17       more details), and waits for client connections. Log messages are redi‐
18       rected to daemon facility.
19
20       The server maintains two connections/channels with the client. The main
21       VPN channel is established over TCP, HTTP and TLS. This is the  control
22       channel  as  well as the backup data channel. After its establishment a
23       UDP channel using DTLS is initiated which serves as the main data chan‐
24       nel.  If  the UDP channel fails to establish or is temporarily unavail‐
25       able the backup channel over TCP/TLS is being used.
26
27       This server supports multiple authentication methods, including PAM and
28       certificate authentication. Authenticated users are assigned an unpriv‐
29       ileged worker process and obtain a networking (tun) device  and  an  IP
30       from a configurable pool of addresses.
31
32       Once  authenticated,  the server provides the client with an IP address
33       and a list of routes that it may access. In order to  allow  high-speed
34       transfers the server does not process or filter packets. It is expected
35       that the server has or will set up  any  required  routes  or  firewall
36       rules.
37
38       It  is possible to separate users into groups, which are either present
39       on their certificate, or presented on login for  the  user  to  choose.
40       That  way  a user may take advantage of the different settings that may
41       apply per group. See the comments on the configuration  file  for  more
42       information.
43
44       It  is  also possible to run hostname-based virtual servers which could
45       support different authentication methods. When multiple virtual servers
46       are  present  clients  are  distinguished by the advertised server name
47       over TLS (SNI). Clients which do not support or sent SNI, are  directed
48       to the default server.
49

OPTIONS

51       -f, --foreground:
52              Do not fork server into background.
53
54       -d, --debug=num:
55              Enable  verbose  network  debugging information. num must be be‐
56              tween zero and 9999.
57
58       -c, --config=FILE:
59              Specify the configuration file for the server.
60
61       -t, --test-config:
62              Test the provided configuration file and exit. A successful exit
63              error code indicates a valid configuration.
64
65       -p, --pid-file=FILE:
66              Specify a PID file for the server.
67
68       -h, --help:
69              Display usage information and exit.
70
71       -v, --version:
72              Output version of program and exit.
73

AUTHENTICATION

75       Users can be authenticated in multiple ways, which are explained in the
76       following paragraphs. Connected users can be managed  using  the  occtl
77       tool.
78
79   Password authentication
80       If  your  system  supports Pluggable Authentication Modules (PAM), then
81       ocserv will take advantage of it to password  authenticate  its  users.
82       Otherwise  a  plain  password file similar to the UNIX password file is
83       also supported. In that case the 'ocpasswd' tool can be  used  for  its
84       management.  Note  that password authentication can be used in conjunc‐
85       tion with certificate authentication.
86
87   GSSAPI authentication
88       ocserv will take advantage of  the  MIT  Kerberos  project  GSSAPI  li‐
89       braries,  and  allow  authentication  using any method GSSAPI supports.
90       That is, mainly, Kerberos authentication. That is often more useful  to
91       be combined with PAM or other password authentication methods so that a
92       fallback mechanism can be used when GSSAPI fails (e.g., when  the  user
93       doesn't  already  have a Kerberos ticket). The GSSAPI authentication is
94       implemented using SPNEGO over HTTP (RFC4559).
95
96   Public key (certificate) authentication
97       Public key authentication allows the user to be  authenticated  by  the
98       possession of the private key that corresponds to a known to the server
99       public key. That allows the usage of common smart cards  for  user  au‐
100       thentication.
101
102       In ocserv, a certificate authority (CA) is used to sign the client cer‐
103       tificates. That certificate authority can be local, used  only  by  the
104       server  to  sign  its  user's known public keys which are then given to
105       users in a form of certificates. That authority need also provide a CRL
106       to allow the server to reject the revoked clients (see ca-cert, crl).
107
108       In  certificate  authentication  each client presents a certificate and
109       signs data provided by the server, as part of  TLS  authentication,  to
110       prove  his possession of the corresponding private key. The certificate
111       need also contain user identifying information, for example,  the  user
112       ID  of  the  client must be embedded in the certificate's Distinguished
113       Name (DN), i.e., in the Common Name, or UID fields. For the  server  to
114       read the name, the cert-user-oid configuration option must be set.
115
116       The  following  examples demonstrate how to use certtool from GnuTLS to
117       generate such CA.
118
119   Generating the CA
120       ```  $  certtool  --generate-privkey  --outfile  ca-key.pem  $  cat   <
121       _EOF_ca.tmpl cn = "VPN CA" organization = "Big Corp" serial = 1 expira‐
122       tion_days = -1 ca signing_key cert_signing_key crl_signing_key EOF
123
124       $ certtool --generate-self-signed --load-privkey  ca-key.pem  \  --tem‐
125       plate ca.tmpl --outfile ca-cert.pem ```
126
127   Generating a local server certificate
128       The  following  example  generates the server key and certificate pair.
129       The key generated is an RSA one, but different types  can  be  used  by
130       specifying the 'ecdsa' or 'dsa' options to certtool.
131
132       ```  $  certtool  --generate-privkey  --outfile  server-key.pem $ cat <
133       _EOF_server.tmpl  cn  =  "VPN  server"  dns_name  =   "www.example.com"
134       dns_name  =  "vpn1.example.com"  #ip_address = "1.2.3.4" organization =
135       "MyCompany" expiration_days = -1 signing_key  encryption_key  #only  if
136       the generated key is an RSA one tls_www_server EOF
137
138       $   certtool  --generate-certificate  --load-privkey  server-key.pem  \
139       --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem \ --tem‐
140       plate server.tmpl --outfile server-cert.pem ```
141
142       From  this  point  the  clients need ca-cert.pem to be able to securely
143       connect to the server.
144
145       Note that it is a better practice to use two  separate  RSA  keys,  one
146       with the signing_key option and another with the encryption_key.
147
148   Generating an external CA-signed server certificate
149       $  certtool  --generate-privkey --outfile server-key.pem $ cat << _EOF_
150       >server.tmpl cn = "My server" dns_name = "www.example.com" organization
151       =  "MyCompany" expiration_days = -1 signing_key encryption_key #only if
152       the generated key is an RSA one tls_www_server _EOF_ $ certtool  --gen‐
153       erate-request  --load-privkey  server-key.pem  \ --template server.tmpl
154       --outfile server-cert.csr
155
156       At this point you need to provide the server-cert.csr to your  CA,  and
157       they will send you the server certificate.
158
159   Generating the client certificates
160       Note  that it is recommended to leave detailed personal information out
161       of the certificate as it is sent in clear  during  TLS  authentication.
162       The  following  process generates a certificate and converts it to PKCS
163       #12 that is protected by a PIN and most clients are able to import (the
164       3DES  cipher is used in the example because it is supported by far more
165       devices than AES).
166
167       ``` $  certtool  --generate-privkey  --outfile  user-key.pem  $  cat  <
168       _EOF_user.tmpl  cn = "user" unit = "admins" expiration_days = 365 sign‐
169       ing_key   tls_www_client   EOF   $   certtool    --generate-certificate
170       --load-privkey   user-key.pem   \   --load-ca-certificate   ca-cert.pem
171       --load-ca-privkey   ca-key.pem   \   --template   user.tmpl   --outfile
172       user-cert.pem
173
174       $   certtool   --to-p12  --load-privkey  user-key.pem  \  --pkcs-cipher
175       3des-pkcs12 \ --load-certificate  user-cert.pem  \  --outfile  user.p12
176       --outder ```
177
178   Revoking a client certificate
179       To  revoke  the  previous client certificate, i.e., preventing the user
180       from accessing the VPN resources prior to its  certificate  expiration,
181       use:
182
183       $  cat  << _EOF_ >crl.tmpl crl_next_update = 365 crl_number = 1 _EOF_ $
184       cat   user-cert.pem    >>revoked.pem    $    certtool    --generate-crl
185       --load-ca-privkey   ca-key.pem   \   --load-ca-certificate  ca-cert.pem
186       --load-certificate revoked.pem \ --template crl.tmpl --outfile crl.pem
187
188       After that you may want to notify ocserv of the new CRL  by  using  the
189       HUP signal, or wait for it to reload it.
190
191       When  there are no revoked certificates an empty revocation list should
192       be generated as follows.
193
194       $ certtool --generate-crl --load-ca-privkey ca-key.pem \ --load-ca-cer‐
195       tificate ca-cert.pem \ --template crl.tmpl --outfile crl.pem
196

IMPLEMENTATION NOTES

198       Note  that  while this server utilizes privilege separation and all au‐
199       thentication occurs on the security module, this does not apply for TLS
200       client  certificate authentication. That is due to TLS protocol limita‐
201       tion.
202

NETWORKING CONSIDERATIONS

204       In certain setups, where a firewall may  be  blocking  ICMP  responses,
205       setting  the  MSS  of  TCP connections to MTU will eliminate the "black
206       hole"   connection   issues.   See   http://lartc.org/howto/lartc.cook
207       book.mtu-mss.html for instructions to enable it on a Linux system.
208

FILES

210   ocserv's configuration file format
211       By default, if no other file is specified, ocserv looks for its config‐
212       uration file at /etc/ocserv/ocserv.conf. An example configuration  file
213       follows.
214
215       ```  ###  The  following  directives do not change with server reload.#
216       used for the user to login, add multiple auth directives. The values  #
217       in  the  'auth' directive are AND composed (if multiple all must # suc‐
218       ceed). # Available options: certificate, plain, pam, radius, gssapi.  #
219       Note  that  authentication methods utilizing passwords cannot be # com‐
220       bined (e.g., the plain, pam or radius methods).#  This  indicates  that
221       all  connecting  users  must  present a certificate. # The username and
222       user group will be then extracted from  it  (see  #  cert-user-oid  and
223       cert-group-oid).  The certificate to be accepted # it must be signed by
224       the CA certificate as specified in 'ca-cert'  and  #  it  must  not  be
225       listed   in   the   CRL,   as  specified  by  the  'crl'  option.  #  #
226       pam[gid-min=1000]: # This enabled PAM authentication of the  user.  The
227       gid-min  option  is used # by auto-select-group option, in order to se‐
228       lect the minimum  valid  group  ID.  #  #  plain[passwd=/etc/ocserv/oc‐
229       passwd,otp=/etc/ocserv/users.otp]  # The plain option requires specify‐
230       ing a password file which contains # entries of the following format. #
231       "username:groupname1,groupname2:encoded-password"  #  One entry must be
232       listed per line, and 'ocpasswd' should be used # to  generate  password
233       entries.  The  'otp' suboption allows one to specify # an oath password
234       file to be used for one time passwords; the format of # the file is de‐
235       scribed  in https://github.com/archiecobbs/mod-authn-otp/wiki/UsersFile
236       #     #     radius[config=/etc/radiusclient/radiusclient.conf,groupcon‐
237       fig=true,nas-identifier=name]:  # The radius option requires specifying
238       freeradius-client configuration # file. If the  groupconfig  option  is
239       set,  then config-per-user/group will be overridden, # and all configu‐
240       ration will be read from radius. That  also  includes  the  #  Acct-In‐
241       terim-Interval,  and  Session-Timeout  values.  #  # See doc/README-ra‐
242       dius.md for the supported radius  configuration  atributes.  #  #  gss‐
243       api[keytab=/etc/key.tab,require-local-user-map=true,tgt-fresh‐
244       ness-time=900] # The gssapi option allows  one  to  use  authentication
245       methods supported by GSSAPI, # such as Kerberos tickets with ocserv. It
246       should be best used as an alternative # to PAM (i.e., have pam in  auth
247       and  gssapi  in enable-auth), to allow users with # tickets and without
248       tickets to login. The default value  for  require-local-user-map  #  is
249       true. The 'tgt-freshness-time' if set, it would require the TGT tickets
250       presented # to have been issued within the provided number of  seconds.
251       That  option is used to # restrict logins even if the KDC provides long
252       time    TGT    tickets.#auth    =    "pam[gid-min=1000]"    #auth     =
253       "plain[passwd=./sample.passwd,otp=./sample.otp]"         auth         =
254       "plain[passwd=./sample.passwd]" #auth  =  "certificate"  #auth  =  "ra‐
255       dius[config=/etc/radiusclient/radiusclient.conf,groupconfig=true]"# for
256       authentication. That is, if set, any of the methods enabled #  will  be
257       sufficient  to  login,  irrespective of the main 'auth' entries. # When
258       multiple options are present, they are OR composed (any of them #  suc‐
259       ceeding  allows  login).  #enable-auth  =  "certificate" #enable-auth =
260       "gssapi"   #enable-auth    =    "gssapi[keytab=/etc/key.tab,require-lo‐
261       cal-user-map=true,tgt-freshness-time=900]"#  radius:  can  be  combined
262       with any authentication method, it  provides  #  radius  accounting  to
263       available  users (see also stats-report-time). # # pam: can be combined
264       with any authentication method, it provides # a validation of the  con‐
265       necting  user's  name using PAM. It is # superfluous to use this method
266       when authentication is already # PAM. # # Only  one  accounting  method
267       can   be   specified.   #acct   =  "radius[config=/etc/radiusclient/ra‐
268       diusclient.conf]"# hostname. #listen-host = [IP|HOSTNAME]# hostname. if
269       not  set,  listen-host  will  be used #udp-listen-host = [IP|HOSTNAME]#
270       should set that to true to ask the client to resolve again on #  recon‐
271       nects.  #listen-host-is-dyndns  =  true# listen-netns = "foo"tcp-port =
272       443 udp-port = 443# unprivileged user (e.g.,  'ocserv')  and  no  other
273       services should run as this # user. run-as-user = nobody run-as-group =
274       daemon# if you use more than a  single  servers.  #occtl-socket-file  =
275       /var/run/occtl.socket# It must be accessible within the chroot environ‐
276       ment (if any), so it is best # specified relatively to the  chroot  di‐
277       rectory. socket-file = /var/run/ocserv-socket#chroot-dir = /var/lib/oc‐
278       serv# The key may be a file, or any URL supported by  GnuTLS  (e.g.,  #
279       tpmkey:uuid=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx;storage=user      #      or
280       pkcs11:object=my-vpn-key;object-type=private) # # The server-cert  file
281       may  contain  a  single certificate, or # a sorted certificate chain. #
282       There may be multiple server-cert and server-key directives, # but each
283       key  should  correspond to the preceding certificate. # The certificate
284       files will be reloaded when changed allowing for in-place # certificate
285       renewal  (they are checked and reloaded periodically; # a SIGHUP signal
286       to   main   server   will   force   reload).#server-key   =    /etc/oc‐
287       serv/server-key.pem    server-cert   =   ../tests/certs/server-cert.pem
288       server-key = ../tests/certs/server-key.pem# versions of GnuTLS for sup‐
289       porting DHE ciphersuites. # Can be generated using: # certtool --gener‐
290       ate-dh-params  --outfile  /etc/ocserv/dh.pem  #dh-params   =   /etc/oc‐
291       serv/dh.pem# in files. The srk-pin-file is applicable to TPM keys only,
292       and  is  the  #  storage  root  key.  #pin-file  =  /etc/ocserv/pin.txt
293       #srk-pin-file  = /etc/ocserv/srkpin.txt# Only needed if the file is en‐
294       crypted or a PKCS #11 object.  This  #  is  an  alternative  method  to
295       pin-file.   #key-pin   =   1234#  This  is  an  alternative  method  to
296       srk-pin-file. #srk-pin = 1234# client  certificates  (public  keys)  if
297       certificate  authentication  #  is  set.  #ca-cert = /etc/ocserv/ca.pem
298       ca-cert = ../tests/certs/ca.pem
299
300   All configuration options below this line are reloaded on a SIGHUP.
301       ### The options above, will remain unchanged. Note  however,  that  the
302       ###  server-cert,  server-key,  dh-params  and  ca-cert options will be
303       reloaded ### if the provided file changes, on server reload.  That  al‐
304       lows  certificate  ###  rotation, but requires the server key to remain
305       the same for seamless ### operation.  If  the  server  key  changes  on
306       reload,  there  may  be  connection  ###  failures during the reloading
307       time.# system calls allowed to a worker process,  in  order  to  reduce
308       damage  from  a  #  bug in the worker process. It is available on Linux
309       systems at a performance cost. # The performance  cost  is  roughly  2%
310       overhead  at  transfer time (tested on a Linux 3.17.8). # Note however,
311       that process isolation is restricted to the specific  libc  versions  #
312       the  isolation was tested at. If you get random failures on worker pro‐
313       cesses, try # disabling that option and report the failures you,  along
314       with  system  and  debugging  #  information at: https://gitlab.com/oc
315       serv/ocserv/issues isolate-workers =  true#banner  =  "Welcome"#pre-lo‐
316       gin-banner  =  "Welcome"#  that  case the maximum value is ~8k clients.
317       #max-clients = 1024 max-clients = 16# multiple times). Unset or set  to
318       zero for unlimited. max-same-clients = 2# which supports the proxy pro‐
319       tocol, set this to obtain the correct #  client  addresses.  The  proxy
320       protocol  would  then  be expected in # the TCP or UNIX socket (not the
321       UDP one). Although both v1 # and v2 versions of proxy protocol are sup‐
322       ported,  the  v2  version  #  is recommended as it is more efficient in
323       parsing. #listen-proxy-proto = true# (X is the provided value), as  the
324       secmod  backlog grows. This # makes the server more resilient (and pre‐
325       vents connection failures) on # multiple concurrent connections. Set to
326       zero  for no limit. rate-limit-ms = 100# worker process will report its
327       usage statistics (number of # bytes transferred etc).  This  is  useful
328       when accounting like # radius is in use. #stats-report-time = 360# pro‐
329       cesses will be reset. These are the statistics shown by  cmd  #  'occtl
330       show  stats'.  For  daily: 86400, weekly: 604800 # This is unrelated to
331       stats-report-time. server-stats-reset-time = 604800keepalive  =  32400#
332       Note  that  when  the  client  is behind a NAT this value # needs to be
333       short enough to prevent the NAT disassociating # his UDP  session  from
334       the  port  number. Otherwise the client # could have his UDP connection
335       stalled, for several minutes. dpd =  90#  be  higher  to  prevent  such
336       clients being awaken too # often by the DPD messages, and save battery.
337       # The mobile clients are distinguished from  the  header  #  'X-AnyCon‐
338       nect-Identifier-Platform'.  mobile-dpd = 1800# many seconds, attempt to
339       send future traffic over the TCP # connection instead, in an attempt to
340       wake up the client # in the case that there is a NAT and the UDP trans‐
341       lation # was deleted. If this is unset, do not attempt to  use  this  #
342       recovery   mechanism.  switch-to-tcp-timeout  =  25try-mtu-discovery  =
343       false#  higher  than  your   load-balancer   health   probe   interval.
344       #server-drain-ms  =  15000# service you may provide a fresh OCSP status
345       response within # the TLS handshake. That will prevent the client  from
346       connecting  #  independently  on the OCSP server. # You can update this
347       response periodically using:  #  ocsptool  --ask  --load-cert=your_cert
348       --load-issuer=your_ca  --outfile  response # Make sure that you replace
349       the  following  file  in  an  atomic  way.  #ocsp-response  =  /etc/oc‐
350       serv/ocsp.der# certificate. The object identifier should be part of the
351       certificate's  DN  #  Useful  OIDs  are:  #  CN  =   2.5.4.3,   UID   =
352       0.9.2342.19200300.100.1.1,      SAN(rfc822name)     cert-user-oid     =
353       0.9.2342.19200300.100.1.1# client certificate.  The  object  identifier
354       should  be  part  of  the certificate's # DN. If the user may belong to
355       multiple groups, then use multiple such fields # in  the  certificate's
356       DN.   Useful   OIDs   are:   #  OU  (organizational  unit)  =  2.5.4.11
357       #cert-group-oid = 2.5.4.11# See the manual to  generate  an  empty  CRL
358       initially.  The CRL will be reloaded # periodically when ocserv detects
359       a change in the file. To force a reload use # SIGHUP. #crl  =  /etc/oc‐
360       serv/crl.pem#compression  = true# That is to allow low-latency for VoIP
361       packets. The default size # is 256 bytes. Modify it if the clients typ‐
362       ically  use  compression  # as well of VoIP with codecs that exceed the
363       default value. #no-compress-limit = 256# as there  are  no  openconnect
364       (and possibly anyconnect clients) using # that protocol. The string be‐
365       low does not enforce perfect forward # secrecy, in order to be compati‐
366       ble with legacy clients. # # Note that the most performant ciphersuites
367       are the moment are the ones # involving AES-GCM. These are very fast in
368       x86  and  x86-64  hardware,  and # in addition require no padding, thus
369       taking full advantage of the MTU. # For that to be taken advantage  of,
370       the  openconnect client must be # used, and the server must be compiled
371       against GnuTLS 3.2.7 or later. #  Use  "gnutls-cli  --benchmark-tls-ci‐
372       phers",  to see the performance # difference with AES_128_CBC_SHA1 (the
373       default for anyconnect clients) # in your system.
374
375       tls-priorities            =            "NORMAL:%SERVER_PRECEDENCE:%COM‐
376       PAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1"#     http://gnutls.org/man
377       ual/html_node/Priority-Strings.html # E.g., the string  below  enforces
378       perfect  forward secrecy (PFS) # on the main channel. #tls-priorities =
379       "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128"# ci‐
380       pher  as  the  primary TLS channel. This cannot be combined with # lis‐
381       ten-clear-file since the ciphersuite information is not available #  in
382       that  configuration.  Note  also,  that  this  option  implies  that  #
383       dtls-legacy option is false; this option cannot be enforced  #  in  the
384       legacy/compat  protocol. #match-tls-dtls-ciphers = true# to authentica‐
385       tion auth-timeout = 240# before being disconnected. Unset  to  disable.
386       #idle-timeout  = 1200# Unset to disable. When set a client will be dis‐
387       connected after being # continuously connected for this amount of time,
388       and  its cookies will # be invalidated (i.e., re-authentication will be
389       required). #session-timeout =  86400#  traffic)  before  being  discon‐
390       nected. Unset to disable. #mobile-idle-timeout = 2400# a failed authen‐
391       tication attempt. min-reauth-time = 300# that get  a  score  over  that
392       configured  number are banned for # min-reauth-time seconds. By default
393       a wrong password attempt is 10 points, # a KKDCP POST is 1 point, and a
394       connection  is  1  point. Note that # due to difference processes being
395       involved the count of points # will not be real-time precise. # # Score
396       banning  cannot  be  reliably used when receiving proxied connections #
397       locally from an HTTP server (i.e., when listen-clear-file is used). # #
398       Set   to   zero   to   disable.   max-ban-score  =  80ban-reset-time  =
399       1200#ban-points-wrong-password  =   10   #ban-points-connection   =   1
400       #ban-points-kkdcp  =  1# Once a client is authenticated he's provided a
401       cookie with # which he can reconnect. That cookie will  be  invalidated
402       if  not  #  used  within this timeout value. This cookie remains valid,
403       during # the user's connected time, and after user disconnection  it  #
404       remains  active  for this amount of time. That setting should allow a #
405       reasonable amount of  time  for  roaming  between  different  networks.
406       cookie-timeout = 300# valid even after a user manually disconnects, and
407       until they # expire. This may improve roaming with some broken clients.
408       #persistent-cookies  = true# restricted to a single IP address and can‐
409       not be re-used # from a different IP. deny-roaming = false# ocserv will
410       ask  the client to refresh keys periodically once # this amount of sec‐
411       onds is elapsed. Set to zero to disable (note # that, some clients fail
412       if  rekey  is  disabled).  rekey-time  =  172800#  Valid  options: ssl,
413       new-tunnel # ssl: Will perform an efficient rehandshake on the  channel
414       allowing  #  a seamless connection during rekey. # new-tunnel: Will in‐
415       struct the client to discard and re-establish the channel. #  Use  this
416       option  only  if  the connecting clients have issues with the ssl # op‐
417       tion. rekey-method = ssl# The following parameters are  passed  on  the
418       environment. # REASON, VHOST, USERNAME, GROUPNAME, DEVICE, IP_REAL (the
419       real IP of the client),  #  REMOTE_HOSTNAME  (the  remotely  advertised
420       hostname),  IP_REAL_LOCAL  #  (the  local  interface IP the client con‐
421       nected), IP_LOCAL # (the local IP in the P-t-P  connection),  IP_REMOTE
422       (the  VPN  IP  of  the client), # IPV6_LOCAL (the IPv6 local address if
423       there are both IPv4 and IPv6 # assigned), IPV6_REMOTE (the IPv6  remote
424       address),  IPV6_PREFIX,  and  # ID (a unique numeric ID); REASON may be
425       "connect" or "disconnect". # In addition the  following  variables  OC‐
426       SERV_ROUTES  (the  applied routes for this # client), OCSERV_NO_ROUTES,
427       OCSERV_DNS (the DNS servers for this client), # will  contain  a  space
428       separated list of routes or DNS servers. A version # of these variables
429       with the 4 or 6 suffix will contain only the IPv4 or # IPv6 values. The
430       connect  script  must return zero as exit code, or the # client connec‐
431       tion will be refused.# STATS_BYTES_OUT, STATS_DURATION that  contain  a
432       64-bit counter of the bytes # output from the tun device, and the dura‐
433       tion of the session in seconds.#disconnect-script =  /usr/bin/myscript#
434       available.  It  will  contain REASON with "host-update" value and the #
435       variable REMOTE_HOSTNAME in addition to the connect variables.#  Regis‐
436       ter  the  connected clients to utmp. This will allow viewing # the con‐
437       nected clients using the command 'who'. #use-utmp = true# or via a unix
438       socket).  use-occtl  = truepid-file = /var/run/ocserv.pid# All messages
439       at the configure level and lower will be displayed. # Supported  levels
440       (default  0) # 0 default (Same as basic) # 1 basic # 2 info # 3 debug #
441       4 http # 8 sensitive # 9 TLS log-level = 1# be sent. That is  a  number
442       from  0 to 6 with 0 being the lowest # priority. Alternatively this can
443       be used to set the IP Type- # Of-Service, by setting it to a  hexadeci‐
444       mal  number (e.g., 0x20). # This can be set per user/group or globally.
445       #net-priority = 3# specific and can be set per user/group or  globally.
446       #cgroup  = "cpuset,cpu:test"#device = vpns# same for the same user when
447       possible. predictable-ips = true# openconnect clients) can be  provided
448       in a space separated list. default-domain = example.com #default-domain
449       = "example.com one.example.com"# are given via Radius, or via  the  ex‐
450       plicit-ip?  per-user  config  option then # these network values should
451       contain a network with at least a single # address that will remain un‐
452       der  the full control of ocserv (that is # to be able to assign the lo‐
453       cal part of the tun device address). # Note that,  you  could  use  ad‐
454       dresses  from a subnet of your LAN network if you # enable proxy arp in
455       the     LAN      interface      http://ocserv.gitlab.io/www/recipes-oc
456       serv-pseudo-bridge.html;  #  in  that  case  it  is  recommended to set
457       ping-leases  to  true.  ipv4-network  =  192.168.1.0   ipv4-netmask   =
458       255.255.255.0#ipv4-network      =     192.168.1.0/24#ipv6-network     =
459       fda9:4efe:7e3b:03ea::/48# generally recommended to provide clients with
460       a  /64  network  in # IPv6, but any subnet may be specified. To provide
461       clients only # with a single IP use the prefix 128. #ipv6-subnet-prefix
462       =  128  #ipv6-subnet-prefix  =  64#  when a default route is set. #tun‐
463       nel-all-dns =  true#  multiple  servers.  #  dns  =  fc00::4be0  dns  =
464       192.168.1.2#nbns  =  192.168.1.3#  multiple lines for multiple domains.
465       #split-dns = example.com# it is not in use  by  another  (unrelated  to
466       this  server)  host.  #  Only set to true, if there can be occupied ad‐
467       dresses in the # IP range for leases. ping-leases = false# connections.
468       Unset  to use the default MTU of the TUN device. # Note that the MTU is
469       negotiated using the value set and the # value sent by the peer. #mtu =
470       1420#  setting  here  is  global,  but  can also be set per user or per
471       group. #rx-data-per-sec = 40000 #tx-data-per-sec =  40000#  the  output
472       buffer. The default is low to improve latency. # Setting it higher will
473       improve throughput. #output-buffer = 10# client to  forward  routes  to
474       the server, you may use the # config-per-user/group or even connect and
475       disconnect scripts. # # To set the server as the  default  gateway  for
476       the  client  just  # comment out all routes from the server, or use the
477       special keyword # 'default'.
478
479       route = 10.10.10.0/255.255.255.0 route = 192.168.0.0/255.255.0.0 #route
480       = fef4:db8:1000:1001::/64 #route = default# the server.
481
482       no-route  =  192.168.5.0/255.255.255.0#  in Linux systems with iptables
483       software.# the user to its allowed routes and prevent him from  access‐
484       ing  # any other routes. In case of defaultroute, the no-routes are re‐
485       stricted. # All the routes applied by  ocserv  can  be  reverted  using
486       /usr/bin/ocserv-fw # --removeall. This option can be set globally or in
487       the per-user configuration.  #restrict-user-to-routes  =  true#  script
488       /usr/bin/ocserv-fw will be called to restrict the user to # access spe‐
489       cific ports in the network. This option can be set globally # or in the
490       per-user  configuration.  #restrict-user-to-ports = "tcp(443), tcp(80),
491       udp(443), sctp(99), tcp(583), icmp(),  icmpv6()"#restrict-user-to-ports
492       = "!(tcp(443), tcp(80))"# connecting clients except for the ones offer‐
493       ing them. This option # only makes sense  if  config-per-user  is  set.
494       #expose-iroutes  = true# A client may belong in multiple groups, and in
495       certain use-cases # it is needed to  switch  between  them.  For  these
496       cases the client can # select prior to authentication. Add multiple en‐
497       tries  for  multiple  groups.  #  The  group  may  be  followed  by   a
498       user-friendly  name in brackets. #select-group = group1 #select-group =
499       group2[My special group]# to its default group. #default-select-group =
500       DEFAULT# ocserv to scan all available groups and include the full list.
501       #auto-select-group = true# per group. Each file name on these  directo‐
502       ries  must match the username # or the groupname. # The options allowed
503       in the configuration files are dns, nbns, # ipv?-network, ipv4-netmask,
504       rx/tx-data-per-sec,  iroute,  route,  no-route,  #  explicit-ipv4,  ex‐
505       plicit-ipv6, net-priority, deny-roaming, no-udp, # keepalive, dpd,  mo‐
506       bile-dpd,  max-same-clients, tunnel-all-dns, # restrict-user-to-routes,
507       cgroup, stats-report-time, #  mtu,  idle-timeout,  mobile-idle-timeout,
508       restrict-user-to-ports,  # split-dns and session-timeout. # # Note that
509       the 'iroute' option allows one to add routes on the server # based on a
510       user  or  group. The syntax depends on the input accepted # by the com‐
511       mands route-add-cmd and route-del-cmd (see below). The no-udp  #  is  a
512       boolean  option (e.g., no-udp = true), and will prevent a UDP session #
513       for that specific user or group. The hostname option will set a # host‐
514       name  to  override  any  proposed  by  the user. Note also, that, any #
515       routes, no-routes, DNS or  NBNS  servers  present  will  overwrite  the
516       global ones.#config-per-group = /etc/ocserv/config-per-group/# matches,
517       then  utilize  the  following  configuration.  #default-user-config   =
518       /etc/ocserv/defaults/user.conf  #default-group-config = /etc/ocserv/de‐
519       faults/group.conf# route/mask, %{RI} with the route in CIDR format, and
520       %{D}  with  the  (tun)  device. # # The following example is from linux
521       systems. %{R} should be something # like 192.168.2.0/255.255.255.0  and
522       %{RI}  192.168.2.0/24  (the  argument  of  iroute).#route-del-cmd = "ip
523       route delete %{R} dev %{D}"# and '%{G}', if present will be replaced by
524       the   username   and   group  name.  #proxy-url  =  http://example.com/
525       #proxy-url = http://example.com/%{U}/# post  using  MS-KKDCP,  and  the
526       message  will  be  forwarded  to  the  provided # KDC server. That is a
527       translation URL between HTTP and Kerberos. #  In  MIT  kerberos  you'll
528       need  to  add in realms: # EXAMPLE.COM = { # kdc = https://ocserv.exam
529       ple.com/KdcProxy # http_anchors = FILE:/etc/ocserv-ca.pem # } # In some
530       distributions  the krb5-k5tls plugin of kinit is required. # # The fol‐
531       lowing option is available in ocserv, when compiled  with  GSSAPI  sup‐
532       port.#kkdcp  =  "/KdcProxy  KERBEROS.REALM  udp@127.0.0.1:88"  #kkdcp =
533       "/KdcProxy KERBEROS.REALM tcp@127.0.0.1:88" #kkdcp  =  "/KdcProxy  KER‐
534       BEROS.REALM  tcp@[::1]:88"#  to  the  client.  A minimal file can be: #
535       <?xml version="1.0" encoding="UTF-8"?> #  # # Other fields may be  used
536       by  some  of the CISCO clients. # This file must be accessible from in‐
537       side the worker's chroot. # Note that: # (1) enabling  this  option  is
538       not  recommended  as it will allow the # worker processes to open arbi‐
539       trary files (when isolate-workers is # set to true). # (2) This  option
540       cannot be set per-user or per-group; only the global # version is being
541       sent to client. #user-profile = profile.xml# compatibility.#  will  not
542       require clients to present their certificate on every TLS # connection.
543       It must be set to true to support legacy CISCO clients #  and  opencon‐
544       nect  clients  < 7.08. When set to true, it implies dtls-legacy = true.
545       cisco-client-compat = true# The DTLS-PSK negotiation was introduced  in
546       ocserv  0.11.5  to deprecate # the pre-draft-DTLS negotiation inherited
547       from AnyConnect. It allows the # DTLS channel to negotiate its  ciphers
548       and  the  DTLS protocol version. #dtls-psk = false# but that may change
549       in the future). # The legacy DTLS uses a pre-draft version of the  DTLS
550       protocol  and  was  #  from AnyConnect protocol. It has several limita‐
551       tions, that are addressed # by the dtls-psk protocol supported by open‐
552       connect  7.08+. dtls-legacy = true# If the server has not configured an
553       IPv6 or IPv4 address pool, enabling this option  #  will  instruct  the
554       client  to bypass the server for that IP protocol. The option is # cur‐
555       rently only understood by Anyconnect clients. client-bypass-protocol  =
556       false#  authentication  and  prior  to  VPN  tunnel  establishment. You
557       shouldn't # need to use this option normally; if you do and  you  think
558       that  # this may help others, please send your settings and reason to #
559       the openconnect mailing list. The special keywords '%{U}' # and '%{G}',
560       if  present  will  be  replaced  by  the username and group name. #cus‐
561       tom-header = "X-My-Header: hi there"# by this server.
562
563       [vhost:www.example.com] auth = "certificate"
564
565       ca-cert = ../tests/certs/ca.pem# the virtual host name.
566
567       server-cert  =  ../tests/certs/server-cert-secp521r1.pem  server-key  =
568       ../tests/certs/server-key-secp521r1.pem
569
570       ipv4-network = 192.168.2.0 ipv4-netmask = 255.255.255.0
571
572       cert-user-oid = 0.9.2342.19200300.100.1.1 ```
573

SEE ALSO

575       occtl(8), ocpasswd(8), openconnect(8)
576
578       Copyright  (C) 2013-2018 Nikos Mavrogiannopoulos and others, all rights
579       reserved. This program is released under the terms of the  GNU  General
580       Public License, version 2.
581

AUTHORS

583       Written by Nikos Mavrogiannopoulos. Many people have contributed to it.
584
585
586
587                                   May 2021                          OCSERV(8)
Impressum