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>