1stunnel(8) stunnel TLS Proxy stunnel(8)
2
3
4
6 stunnel - TLS offloading and load-balancing proxy
7
9 Unix:
10 stunnel [FILE] | -fd N | -help | -version | -sockets | -options
11
12 WIN32:
13 stunnel [ [ -install | -uninstall | -start | -stop |
14 -reload | -reopen | -exit ] [-quiet] [FILE] ] |
15 -help | -version | -sockets | -options
16
18 The stunnel program is designed to work as TLS encryption wrapper
19 between remote clients and local (inetd-startable) or remote servers.
20 The concept is that having non-TLS aware daemons running on your system
21 you can easily set them up to communicate with clients over secure TLS
22 channels.
23
24 stunnel can be used to add TLS functionality to commonly used Inetd
25 daemons like POP-2, POP-3, and IMAP servers, to standalone daemons like
26 NNTP, SMTP and HTTP, and in tunneling PPP over network sockets without
27 changes to the source code.
28
29 This product includes cryptographic software written by Eric Young
30 (eay@cryptsoft.com)
31
33 FILE
34 Use specified configuration file
35
36 -fd N (Unix only)
37 Read the config file from specified file descriptor
38
39 -help
40 Print stunnel help menu
41
42 -version
43 Print stunnel version and compile time defaults
44
45 -sockets
46 Print default socket options
47
48 -options
49 Print supported TLS options
50
51 -install (Windows NT and later only)
52 Install NT Service
53
54 -uninstall (Windows NT and later only)
55 Uninstall NT Service
56
57 -start (Windows NT and later only)
58 Start NT Service
59
60 -stop (Windows NT and later only)
61 Stop NT Service
62
63 -reload (Windows NT and later only)
64 Reload the configuration file of the running NT Service
65
66 -reopen (Windows NT and later only)
67 Reopen the log file of the running NT Service
68
69 -exit (Win32 only)
70 Exit an already started stunnel
71
72 -quiet (Win32 only)
73 Don't display any message boxes
74
76 Each line of the configuration file can be either:
77
78 · An empty line (ignored).
79
80 · A comment starting with ';' (ignored).
81
82 · An 'option_name = option_value' pair.
83
84 · '[service_name]' indicating a start of a service definition.
85
86 An address parameter of an option may be either:
87
88 · A port number.
89
90 · A colon-separated pair of IP address (either IPv4, IPv6, or domain
91 name) and port number.
92
93 · A Unix socket path (Unix only).
94
95 GLOBAL OPTIONS
96 chroot = DIRECTORY (Unix only)
97 directory to chroot stunnel process
98
99 chroot keeps stunnel in a chrooted jail. CApath, CRLpath, pid and
100 exec are located inside the jail and the patches have to be
101 relative to the directory specified with chroot.
102
103 Several functions of the operating system also need their files to
104 be located within the chroot jail, e.g.:
105
106 · Delayed resolver typically needs /etc/nsswitch.conf and
107 /etc/resolv.conf.
108
109 · Local time in log files needs /etc/timezone.
110
111 · Some other functions may need devices, e.g. /dev/zero or
112 /dev/null.
113
114 compression = deflate | zlib
115 select data compression algorithm
116
117 default: no compression
118
119 Deflate is the standard compression method as described in RFC
120 1951.
121
122 debug = [FACILITY.]LEVEL
123 debugging level
124
125 Level is one of the syslog level names or numbers emerg (0), alert
126 (1), crit (2), err (3), warning (4), notice (5), info (6), or debug
127 (7). All logs for the specified level and all levels numerically
128 less than it will be shown. Use debug = debug or debug = 7 for
129 greatest debugging output. The default is notice (5).
130
131 The syslog facility 'authpriv' will be used unless a facility name
132 is supplied. (Facilities are not supported on Win32.)
133
134 Case is ignored for both facilities and levels.
135
136 EGD = EGD_PATH (Unix only)
137 path to Entropy Gathering Daemon socket
138
139 Entropy Gathering Daemon socket to use to feed the OpenSSL random
140 number generator.
141
142 engine = auto | ENGINE_ID
143 select hardware or software cryptographic engine
144
145 default: software-only cryptography
146
147 See Examples section for an engine configuration to use the
148 certificate and the corresponding private key from a cryptographic
149 device.
150
151 engineCtrl = COMMAND[:PARAMETER]
152 control hardware engine
153
154 engineDefault = TASK_LIST
155 set OpenSSL tasks delegated to the current engine
156
157 The parameter specifies a comma-separated list of task to be
158 delegated to the current engine.
159
160 The following tasks may be available, if supported by the engine:
161 ALL, RSA, DSA, ECDH, ECDSA, DH, RAND, CIPHERS, DIGESTS, PKEY,
162 PKEY_CRYPTO, PKEY_ASN1.
163
164 fips = yes | no
165 enable or disable FIPS 140-2 mode.
166
167 This option allows you to disable entering FIPS mode if stunnel was
168 compiled with FIPS 140-2 support.
169
170 default: no (since version 5.00)
171
172 foreground = yes | quiet | no (Unix only)
173 foreground mode
174
175 Stay in foreground (don't fork).
176
177 With the yes parameter it also logs to stderr in addition to the
178 destinations specified with syslog and output.
179
180 default: background in daemon mode
181
182 iconActive = ICON_FILE (GUI only)
183 GUI icon to be displayed when there are established connections
184
185 On Windows platform the parameter should be an .ico file containing
186 a 16x16 pixel image.
187
188 iconError = ICON_FILE (GUI only)
189 GUI icon to be displayed when no valid configuration is loaded
190
191 On Windows platform the parameter should be an .ico file containing
192 a 16x16 pixel image.
193
194 iconIdle = ICON_FILE (GUI only)
195 GUI icon to be displayed when there are no established connections
196
197 On Windows platform the parameter should be an .ico file containing
198 a 16x16 pixel image.
199
200 log = append | overwrite
201 log file handling
202
203 This option allows you to choose whether the log file (specified
204 with the output option) is appended or overwritten when opened or
205 re-opened.
206
207 default: append
208
209 output = FILE
210 append log messages to a file
211
212 /dev/stdout device can be used to send log messages to the standard
213 output (for example to log them with daemontools splogger).
214
215 pid = FILE (Unix only)
216 pid file location
217
218 If the argument is empty, then no pid file will be created.
219
220 pid path is relative to the chroot directory if specified.
221
222 RNDbytes = BYTES
223 bytes to read from random seed files
224
225 RNDfile = FILE
226 path to file with random seed data
227
228 The OpenSSL library will use data from this file first to seed the
229 random number generator.
230
231 RNDoverwrite = yes | no
232 overwrite the random seed files with new random data
233
234 default: yes
235
236 service = SERVICE (Unix only)
237 stunnel service name
238
239 The specified service name is used for syslog and as the inetd mode
240 service name for TCP Wrappers. While this option can technically
241 be specified in the service sections, it is only useful in global
242 options.
243
244 default: stunnel
245
246 syslog = yes | no (Unix only)
247 enable logging via syslog
248
249 default: yes
250
251 taskbar = yes | no (WIN32 only)
252 enable the taskbar icon
253
254 default: yes
255
256 SERVICE-LEVEL OPTIONS
257 Each configuration section begins with a service name in square
258 brackets. The service name is used for libwrap (TCP Wrappers) access
259 control and lets you distinguish stunnel services in your log files.
260
261 Note that if you wish to run stunnel in inetd mode (where it is
262 provided a network socket by a server such as inetd, xinetd, or
263 tcpserver) then you should read the section entitled INETD MODE below.
264
265 accept = [HOST:]PORT
266 accept connections on specified address
267
268 If no host specified, defaults to all IPv4 addresses for the local
269 host.
270
271 To listen on all IPv6 addresses use:
272
273 accept = :::PORT
274
275 CApath = DIRECTORY
276 Certificate Authority directory
277
278 This is the directory in which stunnel will look for certificates
279 when using the verifyChain or verifyPeer options. Note that the
280 certificates in this directory should be named XXXXXXXX.0 where
281 XXXXXXXX is the hash value of the DER encoded subject of the cert.
282
283 The hash algorithm has been changed in OpenSSL 1.0.0. It is
284 required to c_rehash the directory on upgrade from OpenSSL 0.x.x to
285 OpenSSL 1.x.x.
286
287 CApath path is relative to the chroot directory if specified.
288
289 CAfile = CA_FILE
290 Certificate Authority file
291
292 This file contains multiple CA certificates, to be used with the
293 verifyChain and verifyPeer options.
294
295 cert = CERT_FILE
296 certificate chain file name
297
298 The parameter specifies the file containing certificates used by
299 stunnel to authenticate itself against the remote client or server.
300 The file should contain the whole certificate chain starting from
301 the actual server/client certificate, and ending with the self-
302 signed root CA certificate. The file must be either in PEM or P12
303 format.
304
305 A certificate chain is required in server mode, and optional in
306 client mode.
307
308 This parameter is also used as the certificate identifier when a
309 hardware engine is enabled.
310
311 checkEmail = EMAIL
312 email address of the peer certificate subject
313
314 Multiple checkEmail options are allowed in a single service
315 section. Certificates are accepted if no subject checks were
316 specified, or the email address of the peer certificate matches any
317 of the email addresses specified with checkEmail.
318
319 This option requires OpenSSL 1.0.2 or later.
320
321 checkHost = HOST
322 host of the peer certificate subject
323
324 Multiple checkHost options are allowed in a single service section.
325 Certificates are accepted if no subject checks were specified, or
326 the host name of the peer certificate matches any of the hosts
327 specified with checkHost.
328
329 This option requires OpenSSL 1.0.2 or later.
330
331 checkIP = IP
332 IP address of the peer certificate subject
333
334 Multiple checkIP options are allowed in a single service section.
335 Certificates are accepted if no subject checks were specified, or
336 the IP address of the peer certificate matches any of the IP
337 addresses specified with checkIP.
338
339 This option requires OpenSSL 1.0.2 or later.
340
341 ciphers = CIPHER_LIST
342 select permitted TLS ciphers (TLSv1.2 and below)
343
344 This option does not impact TLSv1.3 ciphersuites.
345
346 A colon-delimited list of the ciphers to allow in the TLS
347 connection, for example DES-CBC3-SHA:IDEA-CBC-MD5.
348
349 ciphersuites = CIPHERSUITES_LIST
350 select permitted TLSv1.3 ciphersuites
351
352 A colon-delimited list of TLSv1.3 ciphersuites names in order of
353 preference.
354
355 This option requires OpenSSL 1.1.1 or later.
356
357 default:
358 TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256
359
360 client = yes | no
361 client mode (remote service uses TLS)
362
363 default: no (server mode)
364
365 config = COMMAND[:PARAMETER]
366 OpenSSL configuration command
367
368 The OpenSSL configuration command is executed with the specified
369 parameter. This allows any configuration commands to be invoked
370 from the stunnel configuration file. Supported commands are
371 described on the SSL_CONF_cmd(3ssl) manual page.
372
373 Several config lines can be used to specify multiple configuration
374 commands.
375
376 This option requires OpenSSL 1.0.2 or later.
377
378 connect = [HOST:]PORT
379 connect to a remote address
380
381 If no host is specified, the host defaults to localhost.
382
383 Multiple connect options are allowed in a single service section.
384
385 If host resolves to multiple addresses and/or if multiple connect
386 options are specified, then the remote address is chosen using a
387 round-robin algorithm.
388
389 CRLpath = DIRECTORY
390 Certificate Revocation Lists directory
391
392 This is the directory in which stunnel will look for CRLs when
393 using the verifyChain and verifyPeer options. Note that the CRLs in
394 this directory should be named XXXXXXXX.r0 where XXXXXXXX is the
395 hash value of the CRL.
396
397 The hash algorithm has been changed in OpenSSL 1.0.0. It is
398 required to c_rehash the directory on upgrade from OpenSSL 0.x.x to
399 OpenSSL 1.x.x.
400
401 CRLpath path is relative to the chroot directory if specified.
402
403 CRLfile = CRL_FILE
404 Certificate Revocation Lists file
405
406 This file contains multiple CRLs, used with the verifyChain and
407 verifyPeer options.
408
409 curves = list
410 ECDH curves separated with ':'
411
412 Note: This option is supported for server mode sockets only.
413
414 Only a single curve name is allowed for OpenSSL older than 1.1.0.
415
416 To get a list of supported curves use:
417
418 openssl ecparam -list_curves
419
420 default:
421
422 X25519:P-256:X448:P-521:P-384 (OpenSSL 1.1.1 or later)
423
424 prime256v1 (OpenSSL older than 1.1.1)
425
426 logId = TYPE
427 connection identifier type
428
429 This identifier allows you to distinguish log entries generated for
430 each of the connections.
431
432 Currently supported types:
433
434 sequential
435 The numeric sequential identifier is only unique within a
436 single instance of stunnel, but very compact. It is most
437 useful for manual log analysis.
438
439 unique
440 This alphanumeric identifier is globally unique, but longer
441 than the sequential number. It is most useful for automated
442 log analysis.
443
444 thread
445 The operating system thread identifier is neither unique (even
446 within a single instance of stunnel) nor short. It is most
447 useful for debugging software or configuration issues.
448
449 process
450 The operating system process identifier (PID) may be useful in
451 the inetd mode.
452
453 default: sequential
454
455 debug = LEVEL
456 debugging level
457
458 Level is a one of the syslog level names or numbers emerg (0),
459 alert (1), crit (2), err (3), warning (4), notice (5), info (6), or
460 debug (7). All logs for the specified level and all levels
461 numerically less than it will be shown. Use debug = debug or debug
462 = 7 for greatest debugging output. The default is notice (5).
463
464 delay = yes | no
465 delay DNS lookup for the connect option
466
467 This option is useful for dynamic DNS, or when DNS is not available
468 during stunnel startup (road warrior VPN, dial-up configurations).
469
470 Delayed resolver mode is automatically engaged when stunnel fails
471 to resolve on startup any of the connect targets for a service.
472
473 Delayed resolver inflicts failover = prio.
474
475 default: no
476
477 engineId = ENGINE_ID
478 select engine ID for the service
479
480 engineNum = ENGINE_NUMBER
481 select engine number for the service
482
483 The engines are numbered starting from 1.
484
485 exec = EXECUTABLE_PATH
486 execute a local inetd-type program
487
488 exec path is relative to the chroot directory if specified.
489
490 The following environmental variables are set on Unix platforms:
491 REMOTE_HOST, REMOTE_PORT, SSL_CLIENT_DN, SSL_CLIENT_I_DN.
492
493 execArgs = $0 $1 $2 ...
494 arguments for exec including the program name ($0)
495
496 Quoting is currently not supported. Arguments are separated with
497 an arbitrary amount of whitespace.
498
499 failover = rr | prio
500 Failover strategy for multiple "connect" targets.
501
502 rr round robin - fair load distribution
503
504 prio
505 priority - use the order specified in config file
506
507 default: prio
508
509 ident = USERNAME
510 use IDENT (RFC 1413) username checking
511
512 include = DIRECTORY
513 include all configuration file parts located in DIRECTORY
514
515 The files are included in the ascending alphabetical order of their
516 names. The recommended filename convention is
517
518 for global options:
519
520 00-global.conf
521
522 for local service-level options:
523
524 01-service.conf
525
526 02-service.conf
527
528 key = KEY_FILE
529 private key for the certificate specified with cert option
530
531 A private key is needed to authenticate the certificate owner.
532 Since this file should be kept secret it should only be readable by
533 its owner. On Unix systems you can use the following command:
534
535 chmod 600 keyfile
536
537 This parameter is also used as the private key identifier when a
538 hardware engine is enabled.
539
540 default: the value of the cert option
541
542 libwrap = yes | no
543 Enable or disable the use of /etc/hosts.allow and /etc/hosts.deny.
544
545 default: no (since version 5.00)
546
547 local = HOST
548 By default, the IP address of the outgoing interface is used as the
549 source for remote connections. Use this option to bind a static
550 local IP address instead.
551
552 OCSP = URL
553 select OCSP responder for certificate verification
554
555 OCSPaia = yes | no
556 validate certificates with their AIA OCSP responders
557
558 This option enables stunnel to validate certificates with the list
559 of OCSP responder URLs retrieved from their AIA (Authority
560 Information Access) extension.
561
562 OCSPflag = OCSP_FLAG
563 specify OCSP responder flag
564
565 Several OCSPflag can be used to specify multiple flags.
566
567 currently supported flags: NOCERTS, NOINTERN, NOSIGS, NOCHAIN,
568 NOVERIFY, NOEXPLICIT, NOCASIGN, NODELEGATED, NOCHECKS, TRUSTOTHER,
569 RESPID_KEY, NOTIME
570
571 OCSPnonce = yes | no
572 send and verify the OCSP nonce extension
573
574 This option protects the OCSP protocol against replay attacks. Due
575 to its computational overhead, the nonce extension is usually only
576 supported on internal (e.g. corporate) responders, and not on
577 public OCSP responders.
578
579 options = SSL_OPTIONS
580 OpenSSL library options
581
582 The parameter is the OpenSSL option name as described in the
583 SSL_CTX_set_options(3ssl) manual, but without SSL_OP_ prefix.
584 stunnel -options lists the options found to be allowed in the
585 current combination of stunnel and the OpenSSL library used to
586 build it.
587
588 Several option lines can be used to specify multiple options. An
589 option name can be prepended with a dash ("-") to disable the
590 option.
591
592 For example, for compatibility with the erroneous Eudora TLS
593 implementation, the following option can be used:
594
595 options = DONT_INSERT_EMPTY_FRAGMENTS
596
597 default:
598
599 options = NO_SSLv2
600 options = NO_SSLv3
601
602 Use sslVersionMax or sslVersionMin option instead of disabling
603 specific TLS protocol versions when compiled with OpenSSL 1.1.0 or
604 later.
605
606 protocol = PROTO
607 application protocol to negotiate TLS
608
609 This option enables initial, protocol-specific negotiation of the
610 TLS encryption. The protocol option should not be used with TLS
611 encryption on a separate port.
612
613 Currently supported protocols:
614
615 cifs
616 Proprietary (undocummented) extension of CIFS protocol
617 implemented in Samba. Support for this extension was dropped
618 in Samba 3.0.0.
619
620 connect
621 Based on RFC 2817 - Upgrading to TLS Within HTTP/1.1, section
622 5.2 - Requesting a Tunnel with CONNECT
623
624 This protocol is only supported in client mode.
625
626 imap
627 Based on RFC 2595 - Using TLS with IMAP, POP3 and ACAP
628
629 nntp
630 Based on RFC 4642 - Using Transport Layer Security (TLS) with
631 Network News Transfer Protocol (NNTP)
632
633 This protocol is only supported in client mode.
634
635 pgsql
636 Based on
637 http://www.postgresql.org/docs/8.3/static/protocol-flow.html#AEN73982
638
639 pop3
640 Based on RFC 2449 - POP3 Extension Mechanism
641
642 proxy
643 Passing of the original client IP with HAProxy PROXY protocol
644 version 1
645 https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt
646
647 smtp
648 Based on RFC 2487 - SMTP Service Extension for Secure SMTP over
649 TLS
650
651 socks
652 SOCKS versions 4, 4a, and 5 are supported. The SOCKS protocol
653 itself is encapsulated within TLS encryption layer to protect
654 the final destination address.
655
656 http://www.openssh.com/txt/socks4.protocol
657
658 http://www.openssh.com/txt/socks4a.protocol
659
660 The BIND command of the SOCKS protocol is not supported. The
661 USERID parameter is ignored.
662
663 See Examples section for sample configuration files for VPN
664 based on SOCKS encryption.
665
666 protocolAuthentication = AUTHENTICATION
667 authentication type for the protocol negotiations
668
669 Currently, this option is only supported in the client-side
670 'connect' and 'smtp' protocols.
671
672 Supported authentication types for the 'connect' protocol are
673 'basic' or 'ntlm'. The default 'connect' authentication type is
674 'basic'.
675
676 Supported authentication types for the 'smtp' protocol are 'plain'
677 or 'login'. The default 'smtp' authentication type is 'plain'.
678
679 protocolDomain = DOMAIN
680 domain for the protocol negotiations
681
682 Currently, this option is only supported in the client-side
683 'connect' protocol.
684
685 protocolHost = HOST:PORT
686 destination address for the protocol negotiations
687
688 protocolHost specifies the final TLS server to be connected to by
689 the proxy, and not the proxy server directly connected by stunnel.
690 The proxy server should be specified with the 'connect' option.
691
692 Currently the protocol destination address only applies to the
693 'connect' protocol.
694
695 protocolPassword = PASSWORD
696 password for the protocol negotiations
697
698 Currently, this option is only supported in the client-side
699 'connect' and 'smtp' protocols.
700
701 protocolUsername = USERNAME
702 username for the protocol negotiations
703
704 Currently, this option is only supported in the client-side
705 'connect' and 'smtp' protocols.
706
707 PSKidentity = IDENTITY
708 PSK identity for the PSK client
709
710 PSKidentity can be used on stunnel clients to select the PSK
711 identity used for authentication. This option is ignored in server
712 sections.
713
714 default: the first identity specified in the PSKsecrets file.
715
716 PSKsecrets = FILE
717 file with PSK identities and corresponding keys
718
719 Each line of the file in the following format:
720
721 IDENTITY:KEY
722
723 Hexadecimal keys are automatically converted to binary form. Keys
724 are required to be at least 16 bytes long, which implies at least
725 32 characters for hexadecimal keys. The file should neither be
726 world-readable nor world-writable.
727
728 pty = yes | no (Unix only)
729 allocate a pseudoterminal for 'exec' option
730
731 redirect = [HOST:]PORT
732 redirect TLS client connections on certificate-based authentication
733 failures
734
735 This option only works in server mode. Some protocol negotiations
736 are also incompatible with the redirect option.
737
738 renegotiation = yes | no
739 support TLS renegotiation
740
741 Applications of the TLS renegotiation include some authentication
742 scenarios, or re-keying long lasting connections.
743
744 On the other hand this feature can facilitate a trivial CPU-
745 exhaustion DoS attack:
746
747 http://vincent.bernat.im/en/blog/2011-ssl-dos-mitigation.html
748
749 Please note that disabling TLS renegotiation does not fully
750 mitigate this issue.
751
752 default: yes (if supported by OpenSSL)
753
754 reset = yes | no
755 attempt to use the TCP RST flag to indicate an error
756
757 This option is not supported on some platforms.
758
759 default: yes
760
761 retry = yes | no
762 reconnect a connect+exec section after it was disconnected
763
764 default: no
765
766 requireCert = yes | no
767 require a client certificate for verifyChain or verifyPeer
768
769 With requireCert set to no, the stunnel server accepts client
770 connections that did not present a certificate.
771
772 Both verifyChain = yes and verifyPeer = yes imply requireCert =
773 yes.
774
775 default: no
776
777 setgid = GROUP (Unix only)
778 Unix group id
779
780 As a global option: setgid() to the specified group in daemon mode
781 and clear all other groups.
782
783 As a service-level option: set the group of the Unix socket
784 specified with "accept".
785
786 setuid = USER (Unix only)
787 Unix user id
788
789 As a global option: setuid() to the specified user in daemon mode.
790
791 As a service-level option: set the owner of the Unix socket
792 specified with "accept".
793
794 sessionCacheSize = NUM_ENTRIES
795 session cache size
796
797 sessionCacheSize specifies the maximum number of the internal
798 session cache entries.
799
800 The value of 0 can be used for unlimited size. It is not
801 recommended for production use due to the risk of a memory
802 exhaustion DoS attack.
803
804 sessionCacheTimeout = TIMEOUT
805 session cache timeout
806
807 This is the number of seconds to keep cached TLS sessions.
808
809 sessiond = HOST:PORT
810 address of sessiond TLS cache server
811
812 sni = SERVICE_NAME:SERVER_NAME_PATTERN (server mode)
813 Use the service as a slave service (a name-based virtual server)
814 for Server Name Indication TLS extension (RFC 3546).
815
816 SERVICE_NAME specifies the master service that accepts client
817 connections with the accept option. SERVER_NAME_PATTERN specifies
818 the host name to be redirected. The pattern may start with the '*'
819 character, e.g. '*.example.com'. Multiple slave services are
820 normally specified for a single master service. The sni option can
821 also be specified more than once within a single slave service.
822
823 This service, as well as the master service, may not be configured
824 in client mode.
825
826 The connect option of the slave service is ignored when the
827 protocol option is specified, as protocol connects to the remote
828 host before TLS handshake.
829
830 Libwrap checks (Unix only) are performed twice: with the master
831 service name after TCP connection is accepted, and with the slave
832 service name during the TLS handshake.
833
834 The sni option is only available when compiled with OpenSSL 1.0.0
835 and later.
836
837 sni = SERVER_NAME (client mode)
838 Use the parameter as the value of TLS Server Name Indication (RFC
839 3546) extension.
840
841 Empty SERVER_NAME disables sending the SNI extension.
842
843 The sni option is only available when compiled with OpenSSL 1.0.0
844 and later.
845
846 socket = a|l|r:OPTION=VALUE[:VALUE]
847 Set an option on the accept/local/remote socket
848
849 The values for the linger option are l_onof:l_linger. The values
850 for the time are tv_sec:tv_usec.
851
852 Examples:
853
854 socket = l:SO_LINGER=1:60
855 set one minute timeout for closing local socket
856 socket = r:SO_OOBINLINE=yes
857 place out-of-band data directly into the
858 receive data stream for remote sockets
859 socket = a:SO_REUSEADDR=no
860 disable address reuse (enabled by default)
861 socket = a:SO_BINDTODEVICE=lo
862 only accept connections on loopback interface
863
864 sslVersion = SSL_VERSION
865 select the TLS protocol version
866
867 Supported versions: all, SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2,
868 TLSv1.3
869
870 Availability of specific protocols depends on the linked OpenSSL
871 library. Older versions of OpenSSL do not support TLSv1.1, TLSv1.2
872 and TLSv1.3. Newer versions of OpenSSL do not support SSLv2.
873
874 Obsolete SSLv2 and SSLv3 are currently disabled by default.
875
876 Setting the option
877
878 sslVersion = SSL_VERSION
879
880 is equivalent to options
881
882 sslVersionMax = SSL_VERSION
883 sslVersionMin = SSL_VERSION
884
885 when compiled with OpenSSL 1.1.0 and later.
886
887 sslVersionMax = SSL_VERSION
888 maximum supported protocol versions
889
890 Supported versions: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3
891
892 all enable protocol versions up to the highest version supported by
893 the linked OpenSSL library.
894
895 Availability of specific protocols depends on the linked OpenSSL
896 library.
897
898 The sslVersionMax option is only available when compiled with
899 OpenSSL 1.1.0 and later.
900
901 default: all
902
903 sslVersionMin = SSL_VERSION
904 minimum supported protocol versions
905
906 Supported versions: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3
907
908 all enable protocol versions down to the lowest version supported
909 by the linked OpenSSL library.
910
911 Availability of specific protocols depends on the linked OpenSSL
912 library.
913
914 The sslVersionMin option is only available when compiled with
915 OpenSSL 1.1.0 and later.
916
917 default: TLSv1
918
919 stack = BYTES (except for FORK model)
920 CPU stack size of created threads
921
922 Excessive thread stack size increases virtual memory usage.
923 Insufficient thread stack size may cause application crashes.
924
925 default: 65536 bytes (sufficient for all platforms we tested)
926
927 ticketKeySecret = SECRET
928 hexadecimal symmetric key used for session ticket confidentiality
929 protection
930
931 Session tickets defined in RFC 5077 provide an enhanced session
932 resumption capability, where the server-side caching is not
933 required to maintain per session state.
934
935 Combining ticketKeySecret and ticketMacSecret options allow to
936 resume a negotiated session on other cluster nodes, or to resume
937 resume a negotiated session after server restart.
938
939 The key is required to be either 16 or 32 bytes long, which implies
940 exactly 32 or 64 hexadecimal digits. Colons may optionally be used
941 between two-character hexadecimal bytes.
942
943 This option only works in server mode.
944
945 The ticketKeySecret option is only available when compiled with
946 OpenSSL 1.0.0 and later.
947
948 Disabling NO_TICKET option is required for the ticket support in
949 OpenSSL older than 1.1.1, but note that this option is incompatible
950 with the redirect option.
951
952 ticketMacSecret = SECRET
953 hexadecimal symmetric key used for session ticket integrity
954 protection
955
956 The key is required to be either 16 or 32 bytes long, which implies
957 exactly 32 or 64 hexadecimal digits. Colons may optionally be used
958 between two-character hexadecimal bytes.
959
960 This option only works in server mode.
961
962 The ticketMacSecret option is only available when compiled with
963 OpenSSL 1.0.0 and later.
964
965 TIMEOUTbusy = SECONDS
966 time to wait for expected data
967
968 TIMEOUTclose = SECONDS
969 time to wait for close_notify (set to 0 for buggy MSIE)
970
971 TIMEOUTconnect = SECONDS
972 time to wait to connect to a remote host
973
974 TIMEOUTidle = SECONDS
975 time to keep an idle connection
976
977 transparent = none | source | destination | both (Unix only)
978 enable transparent proxy support on selected platforms
979
980 Supported values:
981
982 none
983 Disable transparent proxy support. This is the default.
984
985 source
986 Re-write the address to appear as if a wrapped daemon is
987 connecting from the TLS client machine instead of the machine
988 running stunnel.
989
990 This option is currently available in:
991
992 Remote mode (connect option) on Linux >=2.6.28
993 This configuration requires stunnel to be executed as root
994 and without the setuid option.
995
996 This configuration requires the following setup for
997 iptables and routing (possibly in /etc/rc.local or
998 equivalent file):
999
1000 iptables -t mangle -N DIVERT
1001 iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
1002 iptables -t mangle -A DIVERT -j MARK --set-mark 1
1003 iptables -t mangle -A DIVERT -j ACCEPT
1004 ip rule add fwmark 1 lookup 100
1005 ip route add local 0.0.0.0/0 dev lo table 100
1006 echo 0 >/proc/sys/net/ipv4/conf/lo/rp_filter
1007
1008 stunnel must also to be executed as root and without the
1009 setuid option.
1010
1011 Remote mode (connect option) on Linux 2.2.x
1012 This configuration requires the kernel to be compiled with
1013 the transparent proxy option. Connected service must be
1014 installed on a separate host. Routing towards the clients
1015 has to go through the stunnel box.
1016
1017 stunnel must also to be executed as root and without the
1018 setuid option.
1019
1020 Remote mode (connect option) on FreeBSD >=8.0
1021 This configuration requires additional firewall and routing
1022 setup. stunnel must also to be executed as root and
1023 without the setuid option.
1024
1025 Local mode (exec option)
1026 This configuration works by pre-loading the libstunnel.so
1027 shared library. _RLD_LIST environment variable is used on
1028 Tru64, and LD_PRELOAD variable on other platforms.
1029
1030 destination
1031 The original destination is used instead of the connect option.
1032
1033 A service section for transparent destination may look like
1034 this:
1035
1036 [transparent]
1037 client = yes
1038 accept = <stunnel_port>
1039 transparent = destination
1040
1041 This configuration requires iptables setup to work, possibly in
1042 /etc/rc.local or equivalent file.
1043
1044 For a connect target installed on the same host:
1045
1046 /sbin/iptables -t nat -I OUTPUT -p tcp --dport <redirected_port> \
1047 -m ! --uid-owner <stunnel_user_id> \
1048 -j DNAT --to-destination <local_ip>:<stunnel_port>
1049
1050 For a connect target installed on a remote host:
1051
1052 /sbin/iptables -I INPUT -i eth0 -p tcp --dport <stunnel_port> -j ACCEPT
1053 /sbin/iptables -t nat -I PREROUTING -p tcp --dport <redirected_port> \
1054 -i eth0 -j DNAT --to-destination <local_ip>:<stunnel_port>
1055
1056 The transparent destination option is currently only supported
1057 on Linux.
1058
1059 both
1060 Use both source and destination transparent proxy.
1061
1062 Two legacy options are also supported for backward compatibility:
1063
1064 yes This option has been renamed to source.
1065
1066 no This option has been renamed to none.
1067
1068 verify = LEVEL
1069 verify the peer certificate
1070
1071 This option is obsolete and should be replaced with the verifyChain
1072 and verifyPeer options.
1073
1074 level 0
1075 Request and ignore the peer certificate.
1076
1077 level 1
1078 Verify the peer certificate if present.
1079
1080 level 2
1081 Verify the peer certificate.
1082
1083 level 3
1084 Verify the peer against a locally installed certificate.
1085
1086 level 4
1087 Ignore the chain and only verify the peer certificate.
1088
1089 default
1090 No verify.
1091
1092 verifyChain = yes | no
1093 verify the peer certificate chain starting from the root CA
1094
1095 For server certificate verification it is essential to also require
1096 a specific certificate with checkHost or checkIP.
1097
1098 The self-signed root CA certificate needs to be stored either in
1099 the file specified with CAfile, or in the directory specified with
1100 CApath.
1101
1102 default: no
1103
1104 verifyPeer = yes | no
1105 verify the peer certificate
1106
1107 The peer certificate needs to be stored either in the file
1108 specified with CAfile, or in the directory specified with CApath.
1109
1110 default: no
1111
1113 stunnel returns zero on success, non-zero on error.
1114
1116 The following signals can be used to control stunnel in Unix
1117 environment:
1118
1119 SIGHUP
1120 Force a reload of the configuration file.
1121
1122 Some global options will not be reloaded:
1123
1124 · chroot
1125
1126 · foreground
1127
1128 · pid
1129
1130 · setgid
1131
1132 · setuid
1133
1134 The use of the 'setuid' option will also prevent stunnel from
1135 binding to privileged (<1024) ports during configuration reloading.
1136
1137 When the 'chroot' option is used, stunnel will look for all its
1138 files (including the configuration file, certificates, the log file
1139 and the pid file) within the chroot jail.
1140
1141 SIGUSR1
1142 Close and reopen the stunnel log file. This function can be used
1143 for log rotation.
1144
1145 SIGUSR2
1146 Log the list of active connections.
1147
1148 SIGTERM, SIGQUIT, SIGINT
1149 Shut stunnel down.
1150
1151 The result of sending any other signals to the server is undefined.
1152
1154 In order to provide TLS encapsulation to your local imapd service, use:
1155
1156 [imapd]
1157 accept = 993
1158 exec = /usr/sbin/imapd
1159 execArgs = imapd
1160
1161 or in remote mode:
1162
1163 [imapd]
1164 accept = 993
1165 connect = 143
1166
1167 In order to let your local e-mail client connect to a TLS-enabled imapd
1168 service on another server, configure the e-mail client to connect to
1169 localhost on port 119 and use:
1170
1171 [imap]
1172 client = yes
1173 accept = 143
1174 connect = servername:993
1175
1176 If you want to provide tunneling to your pppd daemon on port 2020, use
1177 something like:
1178
1179 [vpn]
1180 accept = 2020
1181 exec = /usr/sbin/pppd
1182 execArgs = pppd local
1183 pty = yes
1184
1185 If you want to use stunnel in inetd mode to launch your imapd process,
1186 you'd use this stunnel.conf. Note there must be no [service_name]
1187 section.
1188
1189 exec = /usr/sbin/imapd
1190 execArgs = imapd
1191
1192 To setup SOCKS VPN configure the following client service:
1193
1194 [socks_client]
1195 client = yes
1196 accept = 127.0.0.1:1080
1197 connect = vpn_server:9080
1198 verifyPeer = yes
1199 CAfile = stunnel.pem
1200
1201 The corresponding configuration on the vpn_server host:
1202
1203 [socks_server]
1204 protocol = socks
1205 accept = 9080
1206 cert = stunnel.pem
1207 key = stunnel.key
1208
1209 Now test your configuration on the client machine with:
1210
1211 curl --socks4a localhost http://www.example.com/
1212
1213 An example server mode SNI configuration:
1214
1215 [virtual]
1216 ; master service
1217 accept = 443
1218 cert = default.pem
1219 connect = default.internal.mydomain.com:8080
1220
1221 [sni1]
1222 ; slave service 1
1223 sni = virtual:server1.mydomain.com
1224 cert = server1.pem
1225 connect = server1.internal.mydomain.com:8081
1226
1227 [sni2]
1228 ; slave service 2
1229 sni = virtual:server2.mydomain.com
1230 cert = server2.pem
1231 connect = server2.internal.mydomain.com:8082
1232 verifyPeer = yes
1233 CAfile = server2-allowed-clients.pem
1234
1235 An example of advanced engine configuration allows for authentication
1236 with private keys stored in the Windows certificate store (Windows
1237 only). With the CAPI engine you don't need to manually select the
1238 client key to use. The client key is automatically selected based on
1239 the list of CAs trusted by the server.
1240
1241 engine = capi
1242
1243 [service]
1244 engineId = capi
1245 client = yes
1246 accept = 127.0.0.1:8080
1247 connect = example.com:8443
1248
1249 An example of advanced engine configuration to use the certificate and
1250 the corresponding private key from a pkcs11 engine:
1251
1252 engine = pkcs11
1253 engineCtrl = MODULE_PATH:opensc-pkcs11.so
1254 engineCtrl = PIN:123456
1255
1256 [service]
1257 engineId = pkcs11
1258 client = yes
1259 accept = 127.0.0.1:8080
1260 connect = example.com:843
1261 cert = pkcs11:token=MyToken;object=MyCert
1262 key = pkcs11:token=MyToken;object=MyKey
1263
1264 An example of advanced engine configuration to use the certificate and
1265 the corresponding private key from a SoftHSM token:
1266
1267 engine = pkcs11
1268 engineCtrl = MODULE_PATH:softhsm2.dll
1269 engineCtrl = PIN:12345
1270
1271 [service]
1272 engineId = pkcs11
1273 client = yes
1274 accept = 127.0.0.1:8080
1275 connect = example.com:843
1276 cert = pkcs11:token=MyToken;object=KeyCert
1277
1279 RESTRICTIONS
1280 stunnel cannot be used for the FTP daemon because of the nature of the
1281 FTP protocol which utilizes multiple ports for data transfers. There
1282 are available TLS-enabled versions of FTP and telnet daemons, however.
1283
1284 INETD MODE
1285 The most common use of stunnel is to listen on a network port and
1286 establish communication with either a new port via the connect option,
1287 or a new program via the exec option. However there is a special case
1288 when you wish to have some other program accept incoming connections
1289 and launch stunnel, for example with inetd, xinetd, or tcpserver.
1290
1291 For example, if you have the following line in inetd.conf:
1292
1293 imaps stream tcp nowait root /usr/bin/stunnel stunnel /etc/stunnel/imaps.conf
1294
1295 In these cases, the inetd-style program is responsible for binding a
1296 network socket (imaps above) and handing it to stunnel when a
1297 connection is received. Thus you do not want stunnel to have any
1298 accept option. All the Service Level Options should be placed in the
1299 global options section, and no [service_name] section will be present.
1300 See the EXAMPLES section for example configurations.
1301
1302 CERTIFICATES
1303 Each TLS-enabled daemon needs to present a valid X.509 certificate to
1304 the peer. It also needs a private key to decrypt the incoming data. The
1305 easiest way to obtain a certificate and a key is to generate them with
1306 the free OpenSSL package. You can find more information on certificates
1307 generation on pages listed below.
1308
1309 The .pem file should contain the unencrypted private key and a signed
1310 certificate (not certificate request). So the file should look like
1311 this:
1312
1313 -----BEGIN RSA PRIVATE KEY-----
1314 [encoded key]
1315 -----END RSA PRIVATE KEY-----
1316 -----BEGIN CERTIFICATE-----
1317 [encoded certificate]
1318 -----END CERTIFICATE-----
1319
1320 RANDOMNESS
1321 stunnel needs to seed the PRNG (pseudo-random number generator) in
1322 order for TLS to use good randomness. The following sources are loaded
1323 in order until sufficient random data has been gathered:
1324
1325 · The file specified with the RNDfile flag.
1326
1327 · The file specified by the RANDFILE environment variable, if set.
1328
1329 · The file .rnd in your home directory, if RANDFILE not set.
1330
1331 · The file specified with '--with-random' at compile time.
1332
1333 · The contents of the screen if running on Windows.
1334
1335 · The egd socket specified with the EGD flag.
1336
1337 · The egd socket specified with '--with-egd-sock' at compile time.
1338
1339 · The /dev/urandom device.
1340
1341 Note that on Windows machines that do not have console user interaction
1342 (mouse movements, creating windows, etc.) the screen contents are not
1343 variable enough to be sufficient, and you should provide a random file
1344 for use with the RNDfile flag.
1345
1346 Note that the file specified with the RNDfile flag should contain
1347 random data -- that means it should contain different information each
1348 time stunnel is run. This is handled automatically unless the
1349 RNDoverwrite flag is used. If you wish to update this file manually,
1350 the openssl rand command in recent versions of OpenSSL, would be
1351 useful.
1352
1353 Important note: If /dev/urandom is available, OpenSSL often seeds the
1354 PRNG with it while checking the random state. On systems with
1355 /dev/urandom OpenSSL is likely to use it even though it is listed at
1356 the very bottom of the list above. This is the behaviour of OpenSSL
1357 and not stunnel.
1358
1359 DH PARAMETERS
1360 stunnel 4.40 and later contains hardcoded 2048-bit DH parameters.
1361 Starting with stunnel 5.18, these hardcoded DH parameters are replaced
1362 every 24 hours with autogenerated temporary DH parameters. DH
1363 parameter generation may take several minutes.
1364
1365 Alternatively, it is possible to specify static DH parameters in the
1366 certificate file, which disables generating temporary DH parameters:
1367
1368 openssl dhparam 2048 >> stunnel.pem
1369
1371 @sysconfdir@/stunnel/stunnel.conf
1372 stunnel configuration file
1373
1375 The execArgs option and the Win32 command line do not support quoting.
1376
1378 tcpd(8)
1379 access control facility for internet services
1380
1381 inetd(8)
1382 internet 'super-server'
1383
1384 http://www.stunnel.org/
1385 stunnel homepage
1386
1387 http://www.openssl.org/
1388 OpenSSL project website
1389
1391 Michał Trojnara
1392 <Michal.Trojnara@stunnel.org>
1393
1394
1395
13965.56 2020.04.16 stunnel(8)