Annotation of embedaddon/strongswan/conf/strongswan.conf.5.tail.in, revision 1.1
1.1 ! misho 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>