ISAKMPD(8) | System Manager's Manual | ISAKMPD(8) |
isakmpd
—
ISAKMP/Oakley a.k.a. IKE key management daemon
isakmpd |
[-4 ] [-6 ]
[-c config-file]
[-a ] [-d ]
[-D class=level]
[-f fifo]
[-i pid-file]
[-n ]
[-p listen-port]
[-P local-port]
[-K ] [-L ]
[-l packetlog-file]
[-r seed]
[-R report-file]
[-v ] |
The isakmpd
daemon establishes security
associations for encrypted and/or authenticated network traffic. At this
moment, and probably forever, this means ipsec(4)
traffic.
The way isakmpd
goes about its work is by
maintaining an internal configuration as well as a policy database which
describes what kinds of SAs to negotiate, and by listening for different
events that trigger these negotiations. The events that control
isakmpd
consist of negotiation initiations from a
remote party, user input via a FIFO or by signals, upcalls from the kernel
via a PF_KEY
socket, and lastly by scheduled events
triggered by timers running out.
Most uses of isakmpd
will be to implement
so called "virtual private networks" or VPNs for short. The
vpn(8) manual page describes how to set up
isakmpd
for a simple VPN. For other uses, some more
knowledge of IKE as a protocol is required. One source of information are
the RFCs mentioned below.
On startup isakmpd
forks into two
processes for privilege separation. The unprivileged child jails itself with
chroot(8) to /var/empty. The
privileged process communicates with the child, reads configuration files
and PKI information and binds to privileged ports on its behalf. See
CAVEATS section below.
The options are as follows:
-4
|
-6
AF_INET
and/or AF_INET6
) isakmpd
will use. The default is to use both IPv4 and IPv6.-a
isakmpd
does not set up flows
automatically. This is useful when flows are configured with
ipsecadm(4) or by other programs like
bgpd(8). Thus isakmpd
only takes
care of the SA establishment.-c
config-file-c
option specifies an alternate
configuration file instead of
/etc/isakmpd/isakmpd.conf. As this file may
contain sensitive information, it must be readable only by the user
running the daemon. isakmpd
will reread the
configuration file when sent a SIGHUP
signal.-d
-d
option is used to make the daemon run in
the foreground, logging to stderr.-D
class=levelValid values for class are as follows:
Currently used values for level are 0 to 99.
-f
fifo-f
option specifies the FIFO (a.k.a. named
pipe) where the daemon listens for user requests. If the path given is a
dash (‘-’), isakmpd
will listen to
stdin instead.-i
pid-file-i
option.-n
-n
option is given, the kernel will not
take part in the negotiations. This is a non-destructive mode, so to
speak, in that it won't alter any SAs in the IPsec stack.-p
listen-port-p
option specifies the listen port the daemon
will bind to.-P
local-port-P
will be what the daemon binds its local end to
when acting as initiator.-K
isakmpd
does not read
the policy configuration file and no keynote(4) policy
check is accomplished. This option can be used when policies for flows and
SA establishment are arranged by other programs like
ipsecadm(8) or bgpd(8).-L
isakmpd
will capture to file an unencrypted copy
of the negotiation packets it is sending and receiving. This file can
later be read by tcpdump(8) and other utilities using
pcap(3).-l
packetlog-file-L
above, but capture to a specified
file.-r
seed-R
report-fileisakmpd
a
SIGUSR1
, it will report its internal state to a
report file, normally /var/run/isakmpd.report, but
this can be changed by feeding the file name as an argument to the
-R
flag.-v
isakmpd
is
silent and outputs only messages when a warning or an error occurs. With
verbose logging isakmpd
reports successful
completion of phase 1 (Main and Aggressive) and phase 2 (Quick) exchanges
(Information and Transaction exchanges do not generate any additional
status information).In order to use public key based authentication, there has to be
an infrastructure managing the key signing. Either there is an already
existing PKI isakmpd
should take part in, or there
will be a need to set one up. In the former case, what is needed to be done
varies depending on the actual Certificate Authority used, and is therefore
not covered here, other than mentioning that openssl(1)
needs to be used to create a certificate signing request that the CA
understands. The latter case, however, is described here:
# openssl genrsa -out /etc/ssl/private/ca.key 1024 # openssl req -new -key /etc/ssl/private/ca.key \ -out /etc/ssl/private/ca.csr
You are then asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name (DN). There are quite a few fields but you can leave some blank. For some fields there will be a default value; if you enter ‘.’, the field will be left blank.
# openssl x509 -req -days 365 -in /etc/ssl/private/ca.csr \ -signkey /etc/ssl/private/ca.key \ -extfile /etc/ssl/x509v3.cnf -extensions x509v3_CA \ -out /etc/ssl/ca.crt
# openssl genrsa -out /etc/isakmpd/private/local.key 1024 # openssl req -new -key /etc/isakmpd/private/local.key \ -out /etc/isakmpd/private/10.0.0.1.csr
Now take these certificate signing requests to your CA and
process them like below. You have to add a subjectAltName extension
field to the certificate in order to make it usable by
isakmpd
. There are two possible ways to add the
extensions to the certificate. Either you have to run
certpatch(8) or you have to make use of an OpenSSL
configuration file, for example
/etc/ssl/x509v3.cnf. Replace 10.0.0.1 with the
IP-address which isakmpd
will use as the
certificate identity.
To use certpatch(8), do the following
# openssl x509 -req -days 365 -in 10.0.0.1.csr -CA /etc/ssl/ca.crt \ -CAkey /etc/ssl/private/ca.key -CAcreateserial \ -out 10.0.0.1.crt # certpatch -i 10.0.0.1 -k /etc/ssl/private/ca.key \ 10.0.0.1.crt 10.0.0.1.crt
Otherwise do
# setenv CERTIP 10.0.0.1 # openssl x509 -req -days 365 -in 10.0.0.1.csr -CA /etc/ssl/ca.crt \ -CAkey /etc/ssl/private/ca.key -CAcreateserial \ -extfile /etc/ssl/x509v3.cnf -extensions x509v3_IPAddr \ -out 10.0.0.1.crt
For a FQDN certificate, do
# setenv CERTFQDN somehost.somedomain # openssl x509 -req -days 365 -in somehost.somedomain.csr \ -CA /etc/ssl/ca.crt -CAkey /etc/ssl/private/ca.key \ -CAcreateserial \ -extfile /etc/ssl/x509v3.cnf -extensions x509v3_FQDN \ -out somehost.somedomain.crt
or with certpatch(8)
# certpatch -t fqdn -i somehost.somedomain \ -k /etc/ssl/private/ca.key \ somehost.somedomain.crt somehost.somedomain.crt
(This assumes the previous steps were used to create a request for somehost.somedomain instead of 10.0.0.1)
Put the certificate (the file ending in .crt) in /etc/isakmpd/certs/ on your local system. Also carry over the CA cert /etc/ssl/ca.crt and put it in /etc/isakmpd/ca/.
To revoke certificates, create a Certificate Revocation List (CRL) file and install it in the /etc/isakmpd/crls/ directory. See openssl(1) and the ‘crl’ subcommand for more info.
It is also possible to store trusted public keys to make them
directly usable by isakmpd
. The keys should be saved
in PEM format (see openssl(1)) and named and stored after
this easy formula:
When isakmpd
starts, it creates a FIFO
(named pipe) where it listens for user requests. All commands start with a
single letter, followed by command-specific options. Available commands
are:
c <name>
C set
[section]:tag=value
C set
[section]:tag=value force
C add
[section]:tag=value
C rm
[section]:tag
C rms
[section]
isakmpd
configuration
atomically. ‘set’ sets a configuration value consisting of a
section, tag and value triplet. ‘set’ will fail if the
configuration already contains a section with the named tag; use the
‘force’ option to change this behaviour. ‘add’
appends a configuration value to the named configuration list tag.
‘rm’ removes a tag in a section. ‘rms’ removes
an entire section.
NOTE: Sending isakmpd a SIGHUP or an "R" through the FIFO will void any updates done to the configuration.
C get
[section]:tag
d <cookies> <msgid>
D <class> <level>
D A <level>
D T
p on[=<path>]
p off
isakmpd
should capture the
packets to.
Q
SIGTERM
signal.
r
isakmpd
internal state to a file. See
-R
option. Same as when sent a
SIGUSR1
signal.
R
isakmpd
, as when sent a
SIGHUP
signal.
S
t
<name>
T
isakmpd
.isakmpd.conf
.isakmpd.conf
.isakmpd
.SIGUSR1
is
received.isakmpd
and
keynote policy configuration files.openssl(1), getnameinfo(3), pcap(3), ipsec(4), isakmpd.conf(5), isakmpd.policy(5), ssl(8), tcpdump(8), vpn(8)
The ISAKMP/Oakley key management protocol is described in the RFCs RFC 2407, RFC 2408 and RFC 2409. This implementation was done 1998 by Niklas Hallqvist and Niels Provos, sponsored by Ericsson Radio Systems.
When storing a trusted public key for an IPv6 identity, the
most
efficient form of address representation, i.e "::" instead
of ":0:0:0:", must be used or the matching will fail.
isakmpd
uses the output from
getnameinfo(3) for the address-to-name translation. The
privileged process only allows binding to the default port 500 or
unprivileged ports (>1024). It is not possible to change the interfaces
isakmpd
listens on without a restart.
The -P
flag does not do what we document,
rather it does nothing.
August 7, 2002 | Debian |