Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SETKEY(8)		    System Manager's Manual		     SETKEY(8)

NAME
       setkey -- manually manipulate the IPsec SA/SP database

SYNOPSIS
       setkey [-v] -c
       setkey [-v] -f filename
       setkey [-aPlv] -D
       setkey [-Pv] -F
       setkey [-h] -x

DESCRIPTION
       The  setkey  utility adds, updates, dumps, or flushes Security Associa-
       tion Database (SAD) entries as well as Security Policy  Database	 (SPD)
       entries in the kernel.

       The setkey utility takes	a series of operations from the	standard input
       (if  invoked  with  -c)	or the file named filename (if invoked with -f
       filename).

       -D      Dump the	SAD entries.  If with -P, the SPD entries are dumped.

       -F      Flush the SAD  entries.	 If  with  -P,	the  SPD  entries  are
	       flushed.

       -a      The  setkey  utility  usually does not display dead SAD entries
	       with -D.	 If with -a, the dead SAD entries will be displayed as
	       well.  A	dead SAD entry means that it has been expired but  re-
	       mains  in  the  system because it is referenced by some SPD en-
	       tries.

       -h      Add hexadecimal dump on -x mode.

       -l      Loop forever with short output on -D.

       -v      Be verbose.  The	program	will dump messages exchanged on	PF_KEY
	       socket, including messages sent from  other  processes  to  the
	       kernel.

       -x      Loop  forever  and  dump	all the	messages transmitted to	PF_KEY
	       socket.	-xx makes each timestamp unformatted.

   Configuration syntax
       With -c or -f on	the command line, setkey accepts the following config-
       uration syntax.	Lines starting with hash signs (`#')  are  treated  as
       comment lines.

       add [-46n] src dst protocol spi [extensions] algorithm ... ;
	       Add  an SAD entry.  add can fail	with multiple reasons, includ-
	       ing when	the key	length does not	match the specified algorithm.

       get [-46n] src dst protocol spi ;
	       Show an SAD entry.

       delete [-46n] src dst protocol spi ;
	       Remove an SAD entry.

       deleteall [-46n]	src dst	protocol ;
	       Remove all SAD entries that match the specification.

       flush [protocol]	;
	       Clear all SAD entries matched by	the options.  -F on  the  com-
	       mand line achieves the same functionality.

       dump [protocol] ;
	       Dumps  all  SAD entries matched by the options.	-D on the com-
	       mand line achieves the same functionality.

       spdadd [-46n] src_range dst_range upperspec policy ;
	       Add an SPD entry.

       spddelete [-46n]	src_range dst_range upperspec -P direction ;
	       Delete an SPD entry.

       spdflush	;
	       Clear all SPD entries.  -FP on the command  line	 achieves  the
	       same functionality.

       spddump ;
	       Dumps  all  SPD	entries.  -DP on the command line achieves the
	       same functionality.

       Meta-arguments are as follows:

       src
       dst     Source/destination of the secure	communication is specified  as
	       IPv4/v6	address.   The	setkey utility can resolve a FQDN into
	       numeric addresses.  If the  FQDN	 resolves  into	 multiple  ad-
	       dresses,	 setkey	will install multiple SAD/SPD entries into the
	       kernel by trying	all possible combinations.  -4,	-6 and -n  re-
	       stricts the address resolution of FQDN in certain ways.	-4 and
	       -6  restrict results into IPv4/v6 addresses only, respectively.
	       -n avoids FQDN resolution and requires addresses	to be  numeric
	       addresses.

       protocol
	       protocol	is one of following:
	       esp	   ESP based on	rfc2406
	       esp-old	   ESP based on	rfc1827
	       ah	   AH based on rfc2402
	       ah-old	   AH based on rfc1826
	       ipcomp	   IPComp
	       tcp	   TCP-MD5 based on rfc2385

       spi     Security	 Parameter  Index  (SPI) for the SAD and the SPD.  spi
	       must be a decimal number, or a  hexadecimal  number  with  `0x'
	       prefix.	 SPI  values between 0 and 255 are reserved for	future
	       use by IANA and they cannot be used.  TCP-MD5 associations must
	       use 0x1000 and therefore	only have per-host granularity at this
	       time.

       extensions
	       take some of the	following:
	       -m mode	   Specify a security protocol mode for	use.  mode  is
			   one	of  following:	transport, tunnel or any.  The
			   default value is any.
	       -r size	   Specify window size of bytes	for replay prevention.
			   size	must be	decimal	number	in  32-bit  word.   If
			   size	 is  zero  or not specified, replay check does
			   not take place.
	       -u id	   Specify the identifier of the policy	entry in  SPD.
			   See policy.
	       -f pad_option
			   defines the content of the ESP padding.  pad_option
			   is one of following:
			   zero-pad    All of the padding are zero.
			   random-pad  A series	of randomized values are set.
			   seq-pad     A  series of sequential increasing num-
				       bers started from 1 are set.
	       -f nocyclic-seq
			   Do not allow	cyclic sequence	number.
	       -lh time
	       -ls time	   Specify hard/soft life time duration	of the SA.

       algorithm
	       -E ealgo	key
			   Specify an encryption algorithm ealgo for ESP.
	       -E ealgo	key -A aalgo key
			   Specify a encryption	algorithm ealgo, as well as  a
			   payload authentication algorithm aalgo, for ESP.
	       -A aalgo	key
			   Specify an authentication algorithm for AH.
	       -C calgo	[-R]
			   Specify  a compression algorithm for	IPComp.	 If -R
			   is specified, the spi field value will be  used  as
			   the	IPComp	CPI  (compression  parameter index) on
			   wire	as is.	If -R is  not  specified,  the	kernel
			   will	use well-known CPI on wire, and	spi field will
			   be used only	as an index for	kernel internal	usage.

	       key  must  be  double-quoted  character	string,	or a series of
	       hexadecimal digits preceded by `0x'.

	       Possible	values for ealgo, aalgo	and  calgo  are	 specified  in
	       separate	section.

       src_range
       dst_range
	       These  are  selections of the secure communication specified as
	       IPv4/v6 address or IPv4/v6 address range, and it	may  accompany
	       TCP/UDP port specification.  This takes the following form:

	       address
	       address/prefixlen
	       address[port]
	       address/prefixlen[port]

	       prefixlen and port must be a decimal number.  The square	brack-
	       ets  around  port are necessary and are not manpage metacharac-
	       ters.  For FQDN resolution, the rules applicable	to src and dst
	       apply here as well.

       upperspec
	       The upper layer protocol	to be used.  You can use  one  of  the
	       words in	/etc/protocols as upperspec, as	well as	icmp6, ip4, or
	       any.   The  word	 any  stands for "any protocol".  The protocol
	       number may also be used to specify the upperspec.  A  type  and
	       code  related  to ICMPv6	may also be specified as an upperspec.
	       The type	is specified first, followed by	a comma	and  then  the
	       relevant	 code.	 The specification must	be placed after	icmp6.
	       The kernel considers a zero to be a wildcard but	cannot distin-
	       guish between a wildcard	and an ICMPv6 type which is zero.  The
	       following example shows a policy	where IPSec  is	 not  required
	       for inbound Neighbor Solicitations:

		     spdadd ::/0 ::/0 icmp6 135,0 -P in	none;

	       NOTE:  upperspec	 does  not work	in the forwarding case at this
	       moment, as it requires extra  reassembly	 at  forwarding	 node,
	       which  is  not  implemented at this moment.  Although there are
	       many protocols in /etc/protocols, protocols other than TCP, UDP
	       and ICMP	may not	be suitable to use with	IPsec.

       policy  policy is expressed in one of the following three formats:

	       -P direction discard
	       -P direction none
	       -P direction ipsec protocol/mode/src-dst/level [...]

	       The direction of	a policy must be specified as one of: out, in,
	       discard,	none, or ipsec.	  The  discard	direction  means  that
	       packets	matching  the supplied indices will be discarded while
	       none means that IPsec operations	will not  take	place  on  the
	       packet  and  ipsec  means  that IPsec operation will take place
	       onto the	 packet.   The	protocol/mode/src-dst/level  statement
	       gives  the rule for how to process the packet.  The protocol is
	       specified as ah,	esp or ipcomp.	The mode is  either  transport
	       or  tunnel.   If	mode is	tunnel,	you must specify the end-point
	       addresses of the	SA as src and dst with a  dash,	 `-',  between
	       the  addresses.	 If mode is transport, both src	and dst	can be
	       omitted.	 The level is one  of  the  following:	default,  use,
	       require	or unique.  If the SA is not available in every	level,
	       the kernel will request the SA from the key exchange daemon.  A
	       value of	default	tells the kernel to use	the  system  wide  de-
	       fault  protocol	e.g., the one from the esp_trans_deflev	sysctl
	       variable, when the kernel processes the packet.	A value	of use
	       means that the kernel will use an SA if it is available,	other-
	       wise the	kernel will pass the packet as it would	 normally.   A
	       value of	require	means that an SA is required whenever the ker-
	       nel sends a packet matched that matches the policy.  The	unique
	       level  is  the  same as require but, in addition, it allows the
	       policy to bind with the unique out-bound	SA.  For  example,  if
	       you  specify  the policy	level unique, racoon(8)	will configure
	       the SA for the policy.  If you configure	the SA by manual  key-
	       ing for that policy, you	can put	the decimal number as the pol-
	       icy  identifier	after  unique separated	by colon `:' as	in the
	       following example: unique:number.  In order to bind this	policy
	       to the SA, number must be between 1  and	 32767,	 which	corre-
	       sponds to extensions -u of manual SA configuration.

	       When  you  want	to  use	 an SA bundle, you can define multiple
	       rules.  For example, if an IP header  was  followed  by	an  AH
	       header  followed	 by  an	 ESP header followed by	an upper layer
	       protocol	header,	the rule would be:

		     esp/transport//require ah/transport//require;

	       The rule	order is very important.

	       Note that "discard" and "none" are not in the syntax  described
	       in  ipsec_set_policy(3).	  There	are small, but important, dif-
	       ferences	in the syntax.	See ipsec_set_policy(3)	for details.

ALGORITHMS
       The following list shows	the supported algorithms.   The	 protocol  and
       algorithm  are almost completely	orthogonal.  The following list	of au-
       thentication algorithms can be used as aalgo in the  -A	aalgo  of  the
       protocol	parameter:

	     algorithm	     keylen (bits)   comment
	     hmac-md5	     128	     ah: rfc2403
			     128	     ah-old: rfc2085
	     hmac-sha1	     160	     ah: rfc2404
			     160	     ah-old: 128bit ICV	(no document)
	     keyed-md5	     128	     ah: 96bit ICV (no document)
			     128	     ah-old: rfc1828
	     keyed-sha1	     160	     ah: 96bit ICV (no document)
			     160	     ah-old: 128bit ICV	(no document)
	     null	     0 to 2048	     for debugging
	     hmac-sha2-256   256	     ah: 96bit ICV
					     (draft-ietf-ipsec-ciph-sha-256-00)
			     256	     ah-old: 128bit ICV	(no document)
	     hmac-sha2-384   384	     ah: 96bit ICV (no document)
			     384	     ah-old: 128bit ICV	(no document)
	     hmac-sha2-512   512	     ah: 96bit ICV (no document)
			     512	     ah-old: 128bit ICV	(no document)
	     hmac-ripemd160  160	     ah: 96bit ICV (RFC2857)
					     ah-old: 128bit ICV	(no document)
	     aes-xcbc-mac    128	     ah: 96bit ICV (RFC3566)
			     128	     ah-old: 128bit ICV	(no document)
	     tcp-md5	     8 to 640	     tcp: rfc2385

       The  following is the list of encryption	algorithms that	can be used as
       the ealgo in the	-E ealgo of the	protocol parameter:

	     algorithm	     keylen (bits)   comment
	     des-cbc	     64		     esp-old: rfc1829, esp: rfc2405
	     3des-cbc	     192	     rfc2451
	     null	     0 to 2048	     rfc2410
	     blowfish-cbc    40	to 448	     rfc2451
	     cast128-cbc     40	to 128	     rfc2451
	     des-deriv	     64		     ipsec-ciph-des-derived-01
	     3des-deriv	     192	     no	document
	     rijndael-cbc    128/192/256     rfc3602
	     aes-ctr	     160/224/288     draft-ietf-ipsec-ciph-aes-ctr-03
	     camellia-cbc    128/192/256     rfc4312

       Note that the first 128/192/256 bits of a key for aes-ctr will be  used
       as AES key, and remaining 32 bits will be used as nonce.

       The  following  are the list of compression algorithms that can be used
       as the calgo in the -C calgo of the protocol parameter:

	     algorithm	     comment
	     deflate	     rfc2394

EXIT STATUS
       The setkey utility exits	0 on success, and >0 if	an error occurs.

EXAMPLES
       Add an ESP SA between two IPv6 addresses	using the  des-cbc  encryption
       algorithm.

	     add 3ffe:501:4819::1 3ffe:501:481d::1 esp 123457
		     -E	des-cbc	0x3ffe05014819ffff ;

       Add an authentication SA	between	two FQDN specified hosts:

	     add -6 myhost.example.com yourhost.example.com ah 123456
		     -A	hmac-sha1 "AH SA configuration!" ;

       Use both	ESP and	AH between two numerically specified hosts:

	     add 10.0.11.41 10.0.11.33 esp 0x10001
		     -E	des-cbc	0x3ffe05014819ffff
		     -A	hmac-md5 "authentication!!" ;

       Get the SA information associated with first example above:

	     get 3ffe:501:4819::1 3ffe:501:481d::1 ah 123456 ;

       Flush all entries from the database:

	     flush ;

       Dump the	ESP entries from the database:

	     dump esp ;

       Add  a  security	 policy	 between  two networks that uses ESP in	tunnel
       mode:

	     spdadd 10.0.11.41/32[21] 10.0.11.33/32[any] any
		     -P	out ipsec esp/tunnel/192.168.0.1-192.168.1.2/require ;

       Use TCP MD5 between two numerically specified hosts:

	     add 10.1.10.34 10.1.10.36 tcp 0x1000 -A tcp-md5 "TCP-MD5 BGP secret" ;

SEE ALSO
       ipsec_set_policy(3), racoon(8), sysctl(8)

       Changed	    manual	key	  configuration	      for	IPsec,
       http://www.kame.net/newsletter/19991007/, October 1999.

HISTORY
       The setkey utility first	appeared in WIDE Hydrangea IPv6	protocol stack
       kit.  The utility was completely	re-designed in June 1998.

BUGS
       The setkey utility should report	and handle syntax errors better.

       For  IPsec  gateway configuration, src_range and	dst_range with TCP/UDP
       port number do not work,	as the gateway	does  not  reassemble  packets
       (cannot inspect upper-layer headers).

FreeBSD	10.1			 July 25, 2014			     SETKEY(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=setkey&sektion=8&manpath=FreeBSD+10.1-RELEASE+and+Ports>

home | help