]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - sbin/setkey/setkey.8
MFC r368207,368607:
[FreeBSD/stable/10.git] / sbin / setkey / setkey.8
1 .\"     $KAME: setkey.8,v 1.89 2003/09/07 22:17:41 itojun Exp $
2 .\"
3 .\" Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
4 .\" All rights reserved.
5 .\"
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
8 .\" are met:
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\"    notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\"    notice, this list of conditions and the following disclaimer in the
13 .\"    documentation and/or other materials provided with the distribution.
14 .\" 3. Neither the name of the project nor the names of its contributors
15 .\"    may be used to endorse or promote products derived from this software
16 .\"    without specific prior written permission.
17 .\"
18 .\" THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
19 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
22 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 .\" SUCH DAMAGE.
29 .\"
30 .\" $FreeBSD$
31 .\"
32 .Dd October 3, 2016
33 .Dt SETKEY 8
34 .Os
35 .\"
36 .Sh NAME
37 .Nm setkey
38 .Nd "manually manipulate the IPsec SA/SP database"
39 .\"
40 .Sh SYNOPSIS
41 .Nm
42 .Op Fl v
43 .Fl c
44 .Nm
45 .Op Fl v
46 .Fl f Ar filename
47 .Nm
48 .Op Fl aPlv
49 .Fl D
50 .Nm
51 .Op Fl Pv
52 .Fl F
53 .Nm
54 .Op Fl h
55 .Fl x
56 .\"
57 .Sh DESCRIPTION
58 The
59 .Nm
60 utility adds, updates, dumps, or flushes
61 Security Association Database (SAD) entries
62 as well as Security Policy Database (SPD) entries in the kernel.
63 .Pp
64 The
65 .Nm
66 utility takes a series of operations from the standard input
67 (if invoked with
68 .Fl c )
69 or the file named
70 .Ar filename
71 (if invoked with
72 .Fl f Ar filename ) .
73 .Bl -tag -width indent
74 .It Fl D
75 Dump the SAD entries.
76 If with
77 .Fl P ,
78 the SPD entries are dumped.
79 .It Fl F
80 Flush the SAD entries.
81 If with
82 .Fl P ,
83 the SPD entries are flushed.
84 .It Fl a
85 The
86 .Nm
87 utility
88 usually does not display dead SAD entries with
89 .Fl D .
90 If with
91 .Fl a ,
92 the dead SAD entries will be displayed as well.
93 A dead SAD entry means that
94 it has been expired but remains in the system
95 because it is referenced by some SPD entries.
96 .It Fl h
97 Add hexadecimal dump on
98 .Fl x
99 mode.
100 .It Fl l
101 Loop forever with short output on
102 .Fl D .
103 .It Fl v
104 Be verbose.
105 The program will dump messages exchanged on
106 .Dv PF_KEY
107 socket, including messages sent from other processes to the kernel.
108 .It Fl x
109 Loop forever and dump all the messages transmitted to
110 .Dv PF_KEY
111 socket.
112 .Fl xx
113 makes each timestamp unformatted.
114 .El
115 .Ss Configuration syntax
116 With
117 .Fl c
118 or
119 .Fl f
120 on the command line,
121 .Nm
122 accepts the following configuration syntax.
123 Lines starting with hash signs
124 .Pq Ql #
125 are treated as comment lines.
126 .Bl -tag -width indent
127 .It Xo
128 .Li add
129 .Op Fl 46n
130 .Ar src Ar dst Ar protocol Ar spi
131 .Op Ar extensions
132 .Ar algorithm ...
133 .Li \&;
134 .Xc
135 Add an SAD entry.
136 .Li add
137 can fail with multiple reasons,
138 including when the key length does not match the specified algorithm.
139 .\"
140 .It Xo
141 .Li get
142 .Op Fl 46n
143 .Ar src Ar dst Ar protocol Ar spi
144 .Li \&;
145 .Xc
146 Show an SAD entry.
147 .\"
148 .It Xo
149 .Li delete
150 .Op Fl 46n
151 .Ar src Ar dst Ar protocol Ar spi
152 .Li \&;
153 .Xc
154 Remove an SAD entry.
155 .\"
156 .It Xo
157 .Li deleteall
158 .Op Fl 46n
159 .Ar src Ar dst Ar protocol
160 .Li \&;
161 .Xc
162 Remove all SAD entries that match the specification.
163 .\"
164 .It Xo
165 .Li flush
166 .Op Ar protocol
167 .Li \&;
168 .Xc
169 Clear all SAD entries matched by the options.
170 .Fl F
171 on the command line achieves the same functionality.
172 .\"
173 .It Xo
174 .Li dump
175 .Op Ar protocol
176 .Li \&;
177 .Xc
178 Dumps all SAD entries matched by the options.
179 .Fl D
180 on the command line achieves the same functionality.
181 .\"
182 .It Xo
183 .Li spdadd
184 .Op Fl 46n
185 .Ar src_range Ar dst_range Ar upperspec Ar policy
186 .Li \&;
187 .Xc
188 Add an SPD entry.
189 .\"
190 .It Xo
191 .Li spddelete
192 .Op Fl 46n
193 .Ar src_range Ar dst_range Ar upperspec Fl P Ar direction
194 .Li \&;
195 .Xc
196 Delete an SPD entry.
197 .\"
198 .It Xo
199 .Li spdflush
200 .Li \&;
201 .Xc
202 Clear all SPD entries.
203 .Fl FP
204 on the command line achieves the same functionality.
205 .\"
206 .It Xo
207 .Li spddump
208 .Li \&;
209 .Xc
210 Dumps all SPD entries.
211 .Fl DP
212 on the command line achieves the same functionality.
213 .El
214 .\"
215 .Pp
216 Meta-arguments are as follows:
217 .Pp
218 .Bl -tag -compact -width indent
219 .It Ar src
220 .It Ar dst
221 Source/destination of the secure communication is specified as
222 IPv4/v6 address.
223 The
224 .Nm
225 utility
226 can resolve a FQDN into numeric addresses.
227 If the FQDN resolves into multiple addresses,
228 .Nm
229 will install multiple SAD/SPD entries into the kernel
230 by trying all possible combinations.
231 .Fl 4 ,
232 .Fl 6
233 and
234 .Fl n
235 restricts the address resolution of FQDN in certain ways.
236 .Fl 4
237 and
238 .Fl 6
239 restrict results into IPv4/v6 addresses only, respectively.
240 .Fl n
241 avoids FQDN resolution and requires addresses to be numeric addresses.
242 .\"
243 .Pp
244 .It Ar protocol
245 .Ar protocol
246 is one of following:
247 .Bl -tag -width Fl -compact
248 .It Li esp
249 ESP based on rfc2406
250 .It Li esp-old
251 ESP based on rfc1827
252 .It Li ah
253 AH based on rfc2402
254 .It Li ah-old
255 AH based on rfc1826
256 .It Li ipcomp
257 IPComp
258 .It Li tcp
259 TCP-MD5 based on rfc2385
260 .El
261 .\"
262 .Pp
263 .It Ar spi
264 Security Parameter Index
265 (SPI)
266 for the SAD and the SPD.
267 .Ar spi
268 must be a decimal number, or a hexadecimal number with
269 .Ql 0x
270 prefix.
271 SPI values between 0 and 255 are reserved for future use by IANA
272 and they cannot be used.
273 TCP-MD5 associations must use 0x1000 and therefore only have per-host
274 granularity at this time.
275 .\"
276 .Pp
277 .It Ar extensions
278 take some of the following:
279 .Bl -tag -width Fl -compact
280 .\"
281 .It Fl m Ar mode
282 Specify a security protocol mode for use.
283 .Ar mode
284 is one of following:
285 .Li transport , tunnel
286 or
287 .Li any .
288 The default value is
289 .Li any .
290 .\"
291 .It Fl r Ar size
292 Specify window size of bytes for replay prevention.
293 .Ar size
294 must be decimal number in 32-bit word.
295 If
296 .Ar size
297 is zero or not specified, replay check does not take place.
298 .\"
299 .It Fl u Ar id
300 Specify the identifier of the policy entry in SPD.
301 See
302 .Ar policy .
303 .\"
304 .It Fl f Ar pad_option
305 defines the content of the ESP padding.
306 .Ar pad_option
307 is one of following:
308 .Bl -tag -width random-pad -compact
309 .It Li zero-pad
310 All of the padding are zero.
311 .It Li random-pad
312 A series of randomized values are set.
313 .It Li seq-pad
314 A series of sequential increasing numbers started from 1 are set.
315 .El
316 .\"
317 .It Fl f Li nocyclic-seq
318 Do not allow cyclic sequence number.
319 .\"
320 .It Fl lh Ar time
321 .It Fl ls Ar time
322 Specify hard/soft life time duration of the SA.
323 .El
324 .\"
325 .Pp
326 .It Ar algorithm
327 .Bl -tag -width Fl -compact
328 .It Fl E Ar ealgo Ar key
329 Specify an encryption algorithm
330 .Ar ealgo
331 for ESP.
332 .It Xo
333 .Fl E Ar ealgo Ar key
334 .Fl A Ar aalgo Ar key
335 .Xc
336 Specify a encryption algorithm
337 .Ar ealgo ,
338 as well as a payload authentication algorithm
339 .Ar aalgo ,
340 for ESP.
341 .It Fl A Ar aalgo Ar key
342 Specify an authentication algorithm for AH.
343 .It Fl C Ar calgo Op Fl R
344 Specify a compression algorithm for IPComp.
345 If
346 .Fl R
347 is specified, the
348 .Ar spi
349 field value will be used as the IPComp CPI
350 (compression parameter index)
351 on wire as is.
352 If
353 .Fl R
354 is not specified,
355 the kernel will use well-known CPI on wire, and
356 .Ar spi
357 field will be used only as an index for kernel internal usage.
358 .El
359 .Pp
360 .Ar key
361 must be double-quoted character string, or a series of hexadecimal digits
362 preceded by
363 .Ql 0x .
364 .Pp
365 Possible values for
366 .Ar ealgo ,
367 .Ar aalgo
368 and
369 .Ar calgo
370 are specified in separate section.
371 .\"
372 .Pp
373 .It Ar src_range
374 .It Ar dst_range
375 These are selections of the secure communication specified as
376 IPv4/v6 address or IPv4/v6 address range, and it may accompany
377 TCP/UDP port specification.
378 This takes the following form:
379 .Bd -unfilled
380 .Ar address
381 .Ar address/prefixlen
382 .Ar address[port]
383 .Ar address/prefixlen[port]
384 .Ed
385 .Pp
386 .Ar prefixlen
387 and
388 .Ar port
389 must be a decimal number.
390 The square brackets around
391 .Ar port
392 are necessary and are not manpage metacharacters.
393 For FQDN resolution, the rules applicable to
394 .Ar src
395 and
396 .Ar dst
397 apply here as well.
398 .\"
399 .Pp
400 .It Ar upperspec
401 The upper layer protocol to be used.
402 You can use one of the words in
403 .Pa /etc/protocols
404 as
405 .Ar upperspec ,
406 as well as
407 .Li icmp6 ,
408 .Li ip4 ,
409 or
410 .Li any .
411 The word
412 .Li any
413 stands for
414 .Dq any protocol .
415 The protocol number may also be used to specify the
416 .Ar upperspec .
417 A type and code related to ICMPv6 may also be specified as an
418 .Ar upperspec .
419 The type is specified first, followed by a comma and then the relevant
420 code.
421 The specification must be placed after
422 .Li icmp6 .
423 The kernel considers a zero to be a wildcard but
424 cannot distinguish between a wildcard and an ICMPv6
425 type which is zero.
426 The following example shows a policy where IPSec is not required for
427 inbound Neighbor Solicitations:
428 .Pp
429 .Dl "spdadd ::/0 ::/0 icmp6 135,0 -P in none;"
430 .Pp
431 NOTE:
432 .Ar upperspec
433 does not work in the forwarding case at this moment,
434 as it requires extra reassembly at forwarding node,
435 which is not implemented at this moment.
436 Although there are many protocols in
437 .Pa /etc/protocols ,
438 protocols other than TCP, UDP and ICMP may not be suitable to use with IPsec.
439 .\"
440 .Pp
441 .It Ar policy
442 .Ar policy
443 is expressed in one of the following three formats:
444 .Pp
445 .Bl -tag -width 2n -compact
446 .It Fl P Ar direction Li discard
447 .It Fl P Ar direction Li none
448 .It Xo Fl P Ar direction Li ipsec
449 .Ar protocol/mode/src-dst/level Op ...
450 .Xc
451 .El
452 .Pp
453 The direction of a policy must be specified as
454 one of:
455 .Li out ,
456 .Li in ,
457 .Li discard ,
458 .Li none ,
459 or
460 .Li ipsec .
461 The
462 .Li discard
463 direction
464 means that packets matching the supplied indices will be discarded
465 while
466 .Li none
467 means that IPsec operations will not take place on the packet and
468 .Li ipsec
469 means that IPsec operation will take place onto the packet.
470 The
471 .Ar protocol/mode/src-dst/level
472 statement gives the rule for how to process the packet.
473 The
474 .Ar protocol
475 is specified as
476 .Li ah ,
477 .Li esp
478 or
479 .Li ipcomp .
480 The
481 .Ar mode
482 is either
483 .Li transport
484 or
485 .Li tunnel .
486 If
487 .Ar mode
488 is
489 .Li tunnel ,
490 you must specify the end-point addresses of the SA as
491 .Ar src
492 and
493 .Ar dst
494 with a dash,
495 .Sq - ,
496 between the addresses.
497 If
498 .Ar mode
499 is
500 .Li transport ,
501 both
502 .Ar src
503 and
504 .Ar dst
505 can be omitted.
506 The
507 .Ar level
508 is one of the following:
509 .Li default , use , require
510 or
511 .Li unique .
512 If the SA is not available in every level, the kernel will request
513 the SA from the key exchange daemon.
514 A value of
515 .Li default
516 tells the kernel to use the system wide default protocol
517 e.g.,\& the one from the
518 .Li esp_trans_deflev
519 sysctl variable, when the kernel processes the packet.
520 A value of
521 .Li use
522 means that the kernel will use an SA if it is available,
523 otherwise the kernel will pass the packet as it would normally.
524 A value of
525 .Li require
526 means that an SA is required whenever the kernel sends a packet matched
527 that matches the policy.
528 The
529 .Li unique
530 level is the same as
531 .Li require
532 but, in addition, it allows the policy to bind with the unique out-bound SA.
533 For example, if you specify the policy level
534 .Li unique ,
535 .Xr racoon 8
536 will configure the SA for the policy.
537 If you configure the SA by manual keying for that policy,
538 you can put the decimal number as the policy identifier after
539 .Li unique
540 separated by colon
541 .Ql :\&
542 as in the following example:
543 .Li unique:number .
544 In order to bind this policy to the SA,
545 .Li number
546 must be between 1 and 32767,
547 which corresponds to
548 .Ar extensions Fl u
549 of manual SA configuration.
550 .Pp
551 When you want to use an SA bundle, you can define multiple rules.
552 For
553 example, if an IP header was followed by an AH header followed by an
554 ESP header followed by an upper layer protocol header, the rule would
555 be:
556 .Pp
557 .Dl esp/transport//require ah/transport//require ;
558 .Pp
559 The rule order is very important.
560 .Pp
561 Note that
562 .Dq Li discard
563 and
564 .Dq Li none
565 are not in the syntax described in
566 .Xr ipsec_set_policy 3 .
567 There are small, but important, differences in the syntax.
568 See
569 .Xr ipsec_set_policy 3
570 for details.
571 .El
572 .\"
573 .Sh ALGORITHMS
574 The following list shows the supported algorithms.
575 The
576 .Sy protocol
577 and
578 .Sy algorithm
579 are almost completely orthogonal.
580 The following list of authentication algorithms can be used as
581 .Ar aalgo
582 in the
583 .Fl A Ar aalgo
584 of the
585 .Ar protocol
586 parameter:
587 .Bd -literal -offset indent
588 algorithm       keylen (bits)   comment
589 hmac-md5        128             ah: rfc2403
590                 128             ah-old: rfc2085
591 hmac-sha1       160             ah: rfc2404
592                 160             ah-old: 128bit ICV (no document)
593 keyed-md5       128             ah: 96bit ICV (no document)
594                 128             ah-old: rfc1828
595 keyed-sha1      160             ah: 96bit ICV (no document)
596                 160             ah-old: 128bit ICV (no document)
597 null            0 to 2048       for debugging
598 hmac-sha2-256   256             ah: 96bit ICV
599                                 (draft-ietf-ipsec-ciph-sha-256-00)
600                 256             ah-old: 128bit ICV (no document)
601 hmac-sha2-384   384             ah: 96bit ICV (no document)
602                 384             ah-old: 128bit ICV (no document)
603 hmac-sha2-512   512             ah: 96bit ICV (no document)
604                 512             ah-old: 128bit ICV (no document)
605 hmac-ripemd160  160             ah: 96bit ICV (RFC2857)
606                                 ah-old: 128bit ICV (no document)
607 aes-xcbc-mac    128             ah: 96bit ICV (RFC3566)
608                 128             ah-old: 128bit ICV (no document)
609 tcp-md5         8 to 640        tcp: rfc2385
610 .Ed
611 .Pp
612 The following is the list of encryption algorithms that can be used as the
613 .Ar ealgo
614 in the
615 .Fl E Ar ealgo
616 of the
617 .Ar protocol
618 parameter:
619 .Bd -literal -offset indent
620 algorithm       keylen (bits)   comment
621 des-cbc         64              esp-old: rfc1829, esp: rfc2405
622 3des-cbc        192             rfc2451
623 null            0 to 2048       rfc2410
624 blowfish-cbc    40 to 448       rfc2451
625 cast128-cbc     40 to 128       rfc2451
626 des-deriv       64              ipsec-ciph-des-derived-01
627 3des-deriv      192             no document
628 rijndael-cbc    128/192/256     rfc3602
629 aes-ctr         160/224/288     draft-ietf-ipsec-ciph-aes-ctr-03
630 camellia-cbc    128/192/256     rfc4312
631 .Ed
632 .Pp
633 Note that the first 128/192/256 bits of a key for
634 .Li aes-ctr
635 will be used as AES key, and remaining 32 bits will be used as nonce.
636 .Pp
637 The following are the list of compression algorithms that can be used
638 as the
639 .Ar calgo
640 in the
641 .Fl C Ar calgo
642 of the
643 .Ar protocol
644 parameter:
645 .Bd -literal -offset indent
646 algorithm       comment
647 deflate         rfc2394
648 .Ed
649 .\"
650 .Sh EXIT STATUS
651 .Ex -std
652 .\"
653 .Sh EXAMPLES
654 Add an ESP SA between two IPv6 addresses using the
655 des-cbc encryption algorithm.
656 .Bd -literal -offset indent
657 add 3ffe:501:4819::1 3ffe:501:481d::1 esp 123457
658         -E des-cbc 0x3ffe05014819ffff ;
659 .Pp
660 .Ed
661 .\"
662 Add an authentication SA between two FQDN specified hosts:
663 .Bd -literal -offset indent
664 add -6 myhost.example.com yourhost.example.com ah 123456
665         -A hmac-sha1 "AH SA configuration!" ;
666 .Pp
667 .Ed
668 Use both ESP and AH between two numerically specified hosts:
669 .Bd -literal -offset indent
670 add 10.0.11.41 10.0.11.33 esp 0x10001
671         -E des-cbc 0x3ffe05014819ffff
672         -A hmac-md5 "authentication!!" ;
673 .Pp
674 .Ed
675 Get the SA information associated with first example above:
676 .Bd -literal -offset indent
677 get 3ffe:501:4819::1 3ffe:501:481d::1 ah 123456 ;
678 .Pp
679 .Ed
680 Flush all entries from the database:
681 .Bd -literal -offset indent
682 flush ;
683 .Pp
684 .Ed
685 Dump the ESP entries from the database:
686 .Bd -literal -offset indent
687 dump esp ;
688 .Pp
689 .Ed
690 Add a security policy between two networks that uses ESP in tunnel mode:
691 .Bd -literal -offset indent
692 spdadd 10.0.11.41/32[21] 10.0.11.33/32[any] any
693         -P out ipsec esp/tunnel/192.168.0.1-192.168.1.2/require ;
694 .Pp
695 .Ed
696 Use TCP MD5 between two numerically specified hosts:
697 .Bd -literal -offset indent
698 add 10.1.10.34 10.1.10.36 tcp 0x1000 -A tcp-md5 "TCP-MD5 BGP secret" ;
699 .Ed
700 .\"
701 .Sh SEE ALSO
702 .Xr ipsec_set_policy 3 ,
703 .Xr racoon 8 ,
704 .Xr sysctl 8
705 .Rs
706 .%T "Changed manual key configuration for IPsec"
707 .%U http://www.kame.net/newsletter/19991007/
708 .%D "October 1999"
709 .Re
710 .\"
711 .Sh HISTORY
712 The
713 .Nm
714 utility first appeared in WIDE Hydrangea IPv6 protocol stack kit.
715 The utility was completely re-designed in June 1998.
716 It first appeared in
717 .Fx 4.0 .
718 .\"
719 .Sh BUGS
720 The
721 .Nm
722 utility
723 should report and handle syntax errors better.
724 .Pp
725 For IPsec gateway configuration,
726 .Ar src_range
727 and
728 .Ar dst_range
729 with TCP/UDP port number do not work, as the gateway does not reassemble
730 packets
731 (cannot inspect upper-layer headers).