File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / conf / strongswan.conf.5.tail.in
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 09:46:43 2020 UTC (4 years, 3 months ago) by misho
Branches: strongswan, MAIN
CVS tags: v5_9_2p0, v5_8_4p7, HEAD
Strongswan

    1: .SH LOGGER CONFIGURATION
    2: Options in
    3: .BR strongswan.conf (5)
    4: provide a much more flexible way to configure loggers for the IKE daemon charon
    5: than using the
    6: .B charondebug
    7: option in
    8: .BR ipsec.conf (5).
    9: .PP
   10: .BR Note :
   11: If any loggers are specified in strongswan.conf,
   12: .B charondebug
   13: does not have any effect.
   14: .PP
   15: There are currently two types of loggers:
   16: .TP
   17: .B File loggers
   18: Log directly to a file and are defined by specifying an arbitrarily named
   19: subsection in the
   20: .B charon.filelog
   21: section. The full path to the file is configured in the \fIpath\fR setting of
   22: that subsection, however, if it only contains characters permitted in section
   23: names, the setting may also be omitted and the path specified as name of the
   24: subsection. To log to the console the two special filenames
   25: .BR stdout " and " stderr
   26: may be used.
   27: .TP
   28: .B Syslog loggers
   29: Log into a syslog facility and are defined by specifying the facility to log to
   30: as the name of a subsection in the
   31: .B charon.syslog
   32: section. The following facilities are currently supported:
   33: .BR daemon " and " auth .
   34: .PP
   35: Multiple loggers can be defined for each type with different log verbosity for
   36: the different subsystems of the daemon.
   37: 
   38: .SS Subsystems
   39: .TP
   40: .B dmn
   41: Main daemon setup/cleanup/signal handling
   42: .TP
   43: .B mgr
   44: IKE_SA manager, handling synchronization for IKE_SA access
   45: .TP
   46: .B ike
   47: IKE_SA
   48: .TP
   49: .B chd
   50: CHILD_SA
   51: .TP
   52: .B job
   53: Jobs queueing/processing and thread pool management
   54: .TP
   55: .B cfg
   56: Configuration management and plugins
   57: .TP
   58: .B knl
   59: IPsec/Networking kernel interface
   60: .TP
   61: .B net
   62: IKE network communication
   63: .TP
   64: .B asn
   65: Low-level encoding/decoding (ASN.1, X.509 etc.)
   66: .TP
   67: .B enc
   68: Packet encoding/decoding encryption/decryption operations
   69: .TP
   70: .B tls
   71: libtls library messages
   72: .TP
   73: .B esp
   74: libipsec library messages
   75: .TP
   76: .B lib
   77: libstrongswan library messages
   78: .TP
   79: .B tnc
   80: Trusted Network Connect
   81: .TP
   82: .B imc
   83: Integrity Measurement Collector
   84: .TP
   85: .B imv
   86: Integrity Measurement Verifier
   87: .TP
   88: .B pts
   89: Platform Trust Service
   90: .SS Loglevels
   91: .TP
   92: .B -1
   93: Absolutely silent
   94: .TP
   95: .B 0
   96: Very basic auditing logs, (e.g. SA up/SA down)
   97: .TP
   98: .B 1
   99: Generic control flow with errors, a good default to see what's going on
  100: .TP
  101: .B 2
  102: More detailed debugging control flow
  103: .TP
  104: .B 3
  105: Including RAW data dumps in Hex
  106: .TP
  107: .B 4
  108: Also include sensitive material in dumps, e.g. keys
  109: .SS Example
  110: .PP
  111: .EX
  112: 	charon {
  113: 		filelog {
  114: 			charon {
  115: 				path = /var/log/charon.log
  116: 				time_format = %b %e %T
  117: 				append = no
  118: 				default = 1
  119: 			}
  120: 			stderr {
  121: 				ike = 2
  122: 				knl = 3
  123: 				ike_name = yes
  124: 			}
  125: 		}
  126: 		syslog {
  127: 			# enable logging to LOG_DAEMON, use defaults
  128: 			daemon {
  129: 			}
  130: 			# minimalistic IKE auditing logging to LOG_AUTHPRIV
  131: 			auth {
  132: 				default = -1
  133: 				ike = 0
  134: 			}
  135: 		}
  136: 	}
  137: .EE
  138: 
  139: .SH JOB PRIORITY MANAGEMENT
  140: Some operations in the IKEv2 daemon charon are currently implemented
  141: synchronously and blocking. Two examples for such operations are communication
  142: with a RADIUS server via EAP-RADIUS, or fetching CRL/OCSP information during
  143: certificate chain verification. Under high load conditions, the thread pool may
  144: run out of available threads, and some more important jobs, such as liveness
  145: checking, may not get executed in time.
  146: .PP
  147: To prevent thread starvation in such situations job priorities were introduced.
  148: The job processor will reserve some threads for higher priority jobs, these
  149: threads are not available for lower priority, locking jobs.
  150: .SS Implementation
  151: Currently 4 priorities have been defined, and they are used in charon as
  152: follows:
  153: .TP
  154: .B CRITICAL
  155: Priority for long-running dispatcher jobs.
  156: .TP
  157: .B HIGH
  158: INFORMATIONAL exchanges, as used by liveness checking (DPD).
  159: .TP
  160: .B MEDIUM
  161: Everything not HIGH/LOW, including IKE_SA_INIT processing.
  162: .TP
  163: .B LOW
  164: IKE_AUTH message processing. RADIUS and CRL fetching block here
  165: .PP
  166: Although IKE_SA_INIT processing is computationally expensive, it is explicitly
  167: assigned to the MEDIUM class. This allows charon to do the DH exchange while
  168: other threads are blocked in IKE_AUTH. To prevent the daemon from accepting more
  169: IKE_SA_INIT requests than it can handle, use IKE_SA_INIT DROPPING.
  170: .PP
  171: The thread pool processes jobs strictly by priority, meaning it will consume all
  172: higher priority jobs before looking for ones with lower priority. Further, it
  173: reserves threads for certain priorities. A priority class having reserved
  174: .I n
  175: threads will always have
  176: .I n
  177: threads available for this class (either currently processing a job, or waiting
  178: for one).
  179: .SS Configuration
  180: To ensure that there are always enough threads available for higher priority
  181: tasks, threads must be reserved for each priority class.
  182: .TP
  183: .BR charon.processor.priority_threads.critical " [0]"
  184: Threads reserved for CRITICAL priority class jobs
  185: .TP
  186: .BR charon.processor.priority_threads.high " [0]"
  187: Threads reserved for HIGH priority class jobs
  188: .TP
  189: .BR charon.processor.priority_threads.medium " [0]"
  190: Threads reserved for MEDIUM priority class jobs
  191: .TP
  192: .BR charon.processor.priority_threads.low " [0]"
  193: Threads reserved for LOW priority class jobs
  194: .PP
  195: Let's consider the following configuration:
  196: .PP
  197: .EX
  198: 	charon {
  199: 		processor {
  200: 			priority_threads {
  201: 				high = 1
  202: 				medium = 4
  203: 			}
  204: 		}
  205: 	}
  206: .EE
  207: .PP
  208: With this configuration, one thread is reserved for HIGH priority tasks. As
  209: currently only liveness checking and stroke message processing is done with
  210: high priority, one or two threads should be sufficient.
  211: .PP
  212: The MEDIUM class mostly processes non-blocking jobs. Unless your setup is
  213: experiencing many blocks in locks while accessing shared resources, threads for
  214: one or two times the number of CPU cores is fine.
  215: .PP
  216: It is usually not required to reserve threads for CRITICAL jobs. Jobs in this
  217: class rarely return and do not release their thread to the pool.
  218: .PP
  219: The remaining threads are available for LOW priority jobs. Reserving threads
  220: does not make sense (until we have an even lower priority).
  221: .SS Monitoring
  222: To see what the threads are actually doing, invoke
  223: .IR "ipsec statusall" .
  224: Under high load, something like this will show up:
  225: .PP
  226: .EX
  227: 	worker threads: 2 or 32 idle, 5/1/2/22 working,
  228: 		job queue: 0/0/1/149, scheduled: 198
  229: .EE
  230: .PP
  231: From 32 worker threads,
  232: .IP 2
  233: are currently idle.
  234: .IP 5
  235: are running CRITICAL priority jobs (dispatching from sockets, etc.).
  236: .IP 1
  237: is currently handling a HIGH priority job. This is actually the thread currently
  238: providing this information via stroke.
  239: .IP 2
  240: are handling MEDIUM priority jobs, likely IKE_SA_INIT or CREATE_CHILD_SA
  241: messages.
  242: .IP 22
  243: are handling LOW priority jobs, probably waiting for an EAP-RADIUS response
  244: while processing IKE_AUTH messages.
  245: .PP
  246: The job queue load shows how many jobs are queued for each priority, ready for
  247: execution. The single MEDIUM priority job will get executed immediately, as
  248: we have two spare threads reserved for MEDIUM class jobs.
  249: 
  250: .SH IKE_SA_INIT DROPPING
  251: If a responder receives more connection requests per seconds than it can handle,
  252: it does not make sense to accept more IKE_SA_INIT messages. And if they are
  253: queued but can't get processed in time, an answer might be sent after the
  254: client has already given up and restarted its connection setup. This
  255: additionally increases the load on the responder.
  256: .PP
  257: To limit the responder load resulting from new connection attempts, the daemon
  258: can drop IKE_SA_INIT messages just after reception. There are two mechanisms to
  259: decide if this should happen, configured with the following options:
  260: .TP
  261: .BR charon.init_limit_half_open " [0]"
  262: Limit based on the number of half open IKE_SAs. Half open IKE_SAs are SAs in
  263: connecting state, but not yet established.
  264: .TP
  265: .BR charon.init_limit_job_load " [0]"
  266: Limit based on the number of jobs currently queued for processing (sum over all
  267: job priorities).
  268: .PP
  269: The second limit includes load from other jobs, such as rekeying. Choosing a
  270: good value is difficult and depends on the hardware and expected load.
  271: .PP
  272: The first limit is simpler to calculate, but includes the load from new
  273: connections only. If your responder is capable of negotiating 100 tunnels/s, you
  274: might set this limit to 1000. The daemon will then drop new connection attempts
  275: if generating a response would require more than 10 seconds. If you are
  276: allowing for a maximum response time of more than 30 seconds, consider adjusting
  277: the timeout for connecting IKE_SAs
  278: .RB ( charon.half_open_timeout ).
  279: A responder, by default, deletes an IKE_SA if the initiator does not establish
  280: it within 30 seconds. Under high load, a higher value might be required.
  281: 
  282: .SH LOAD TESTS
  283: To do stability testing and performance optimizations, the IKE daemon charon
  284: provides the \fIload-tester\fR plugin. This plugin allows one to setup thousands
  285: of tunnels concurrently against the daemon itself or a remote host.
  286: .PP
  287: .B WARNING:
  288: Never enable the load-testing plugin on productive systems. It provides
  289: preconfigured credentials and allows an attacker to authenticate as any user.
  290: .PP
  291: .SS Configuration details
  292: For public key authentication, the responder uses the
  293: .B \(dqCN=srv, OU=load-test, O=strongSwan\(dq
  294: identity. For the initiator, each connection attempt uses a different identity
  295: in the form
  296: .BR "\(dqCN=c1-r1, OU=load-test, O=strongSwan\(dq" ,
  297: where the first number indicates the client number, the second the
  298: authentication round (if multiple authentication rounds are used).
  299: .PP
  300: For PSK authentication, FQDN identities are used. The server uses
  301: .BR srv.strongswan.org ,
  302: the client uses an identity in the form
  303: .BR c1-r1.strongswan.org .
  304: .PP
  305: For EAP authentication, the client uses a NAI in the form
  306: .BR 100000000010001@strongswan.org .
  307: .PP
  308: To configure multiple authentication rounds, concatenate multiple methods using,
  309: e.g.
  310: .EX
  311: 	initiator_auth = pubkey|psk|eap-md5|eap-aka
  312: .EE
  313: .PP
  314: The responder uses a hardcoded certificate based on a 1024-bit RSA key.
  315: This certificate additionally serves as CA certificate. A peer uses the same
  316: private key, but generates client certificates on demand signed by the CA
  317: certificate. Install the Responder/CA certificate on the remote host to
  318: authenticate all clients.
  319: .PP
  320: To speed up testing, the load tester plugin implements a special Diffie-Hellman
  321: implementation called \fImodpnull\fR. By setting
  322: .EX
  323: 	proposal = aes128-sha1-modpnull
  324: .EE
  325: this wicked fast DH implementation is used. It does not provide any security
  326: at all, but allows one to run tests without DH calculation overhead.
  327: .SS Examples
  328: .PP
  329: In the simplest case, the daemon initiates IKE_SAs against itself using the
  330: loopback interface. This will actually establish double the number of IKE_SAs,
  331: as the daemon is initiator and responder for each IKE_SA at the same time.
  332: Installation of IPsec SAs would fail, as each SA gets installed twice. To
  333: simulate the correct behavior, a fake kernel interface can be enabled which does
  334: not install the IPsec SAs at the kernel level.
  335: .PP
  336: A simple loopback configuration might look like this:
  337: .PP
  338: .EX
  339: 	charon {
  340: 		# create new IKE_SAs for each CHILD_SA to simulate
  341: 		# different clients
  342: 		reuse_ikesa = no
  343: 		# turn off denial of service protection
  344: 		dos_protection = no
  345: 
  346: 		plugins {
  347: 			load-tester {
  348: 				# enable the plugin
  349: 				enable = yes
  350: 				# use 4 threads to initiate connections
  351: 				# simultaneously
  352: 				initiators = 4
  353: 				# each thread initiates 1000 connections
  354: 				iterations = 1000
  355: 				# delay each initiation in each thread by 20ms
  356: 				delay = 20
  357: 				# enable the fake kernel interface to
  358: 				# avoid SA conflicts
  359: 				fake_kernel = yes
  360: 			}
  361: 		}
  362: 	}
  363: .EE
  364: .PP
  365: This will initiate 4000 IKE_SAs within 20 seconds. You may increase the delay
  366: value if your box can not handle that much load, or decrease it to put more
  367: load on it. If the daemon starts retransmitting messages your box probably can
  368: not handle all connection attempts.
  369: .PP
  370: The plugin also allows one to test against a remote host. This might help to
  371: test against a real world configuration. A connection setup to do stress
  372: testing of a gateway might look like this:
  373: .PP
  374: .EX
  375: 	charon {
  376: 		reuse_ikesa = no
  377: 		threads = 32
  378: 
  379: 		plugins {
  380: 			load-tester {
  381: 				enable = yes
  382: 				# 10000 connections, ten in parallel
  383: 				initiators = 10
  384: 				iterations = 1000
  385: 				# use a delay of 100ms, overall time is:
  386: 				# iterations * delay = 100s
  387: 				delay = 100
  388: 				# address of the gateway
  389: 				remote = 1.2.3.4
  390: 				# IKE-proposal to use
  391: 				proposal = aes128-sha1-modp1024
  392: 				# use faster PSK authentication instead
  393: 				# of 1024bit RSA
  394: 				initiator_auth = psk
  395: 				responder_auth = psk
  396: 				# request a virtual IP using configuration
  397: 				# payloads
  398: 				request_virtual_ip = yes
  399: 				# enable CHILD_SA every 60s
  400: 				child_rekey = 60
  401: 			}
  402: 		}
  403: 	}
  404: .EE
  405: 
  406: .SH IKEv2 RETRANSMISSION
  407: Retransmission timeouts in the IKEv2 daemon charon can be configured globally
  408: using the three keys listed below:
  409: .PP
  410: .RS
  411: .nf
  412: .BR charon.retransmit_base " [1.8]"
  413: .BR charon.retransmit_timeout " [4.0]"
  414: .BR charon.retransmit_tries " [5]"
  415: .BR charon.retransmit_jitter " [0]"
  416: .BR charon.retransmit_limit " [0]"
  417: .fi
  418: .RE
  419: .PP
  420: The following algorithm is used to calculate the timeout:
  421: .PP
  422: .EX
  423: 	relative timeout = retransmit_timeout * retransmit_base ^ (n-1)
  424: .EE
  425: .PP
  426: Where
  427: .I n
  428: is the current retransmission count. The calculated timeout can't exceed the
  429: configured retransmit_limit (if any), which is useful if the number of retries
  430: is high.
  431: .PP
  432: If a jitter in percent is configured, the timeout is modified as follows:
  433: .PP
  434: .EX
  435: 	relative timeout -= random(0, retransmit_jitter * relative timeout)
  436: .EE
  437: .PP
  438: Using the default values, packets are retransmitted in:
  439: 
  440: .TS
  441: l r r
  442: ---
  443: lB r r.
  444: Retransmission	Relative Timeout	Absolute Timeout
  445: 1	4s	4s
  446: 2	7s	11s
  447: 3	13s	24s
  448: 4	23s	47s
  449: 5	42s	89s
  450: giving up	76s	165s
  451: .TE
  452: .
  453: .SH VARIABLES
  454: .
  455: The variables used above are configured as follows:
  456: 
  457: .nf
  458: .na
  459: ${piddir}               @piddir@
  460: ${prefix}               @prefix@
  461: ${random_device}        @random_device@
  462: ${urandom_device}       @urandom_device@
  463: .ad
  464: .fi
  465: .
  466: .SH FILES
  467: .
  468: .nf
  469: .na
  470: /etc/strongswan.conf       configuration file
  471: /etc/strongswan.d/         directory containing included config snippets
  472: /etc/strongswan.d/charon/  plugin specific config snippets
  473: .ad
  474: .fi
  475: .
  476: .SH SEE ALSO
  477: \fBipsec.conf\fR(5), \fBipsec.secrets\fR(5), \fBipsec\fR(8), \fBcharon-cmd\fR(8)
  478: 
  479: .SH HISTORY
  480: Written for the
  481: .UR http://www.strongswan.org
  482: strongSwan project
  483: .UE
  484: by Tobias Brunner, Andreas Steffen and Martin Willi.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>