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