diff options
Diffstat (limited to 'static/openbsd/man4/ipsec.4')
| -rw-r--r-- | static/openbsd/man4/ipsec.4 | 430 |
1 files changed, 430 insertions, 0 deletions
diff --git a/static/openbsd/man4/ipsec.4 b/static/openbsd/man4/ipsec.4 new file mode 100644 index 00000000..f758e52d --- /dev/null +++ b/static/openbsd/man4/ipsec.4 @@ -0,0 +1,430 @@ +.\" $OpenBSD: ipsec.4,v 1.89 2022/12/23 07:16:55 jmc Exp $ +.\" +.\" Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de> +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by Niels Provos. +.\" 4. The name of the author may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" Manual page, using -mandoc macros +.\" +.Dd $Mdocdate: December 23 2022 $ +.Dt IPSEC 4 +.Os +.Sh NAME +.Nm ipsec +.Nd IP Security Protocol +.Sh DESCRIPTION +IPsec is a pair of protocols, +Encapsulating Security Payload (ESP) +and Authentication Header (AH), +which provide security services for IP datagrams. +.Pp +Both protocols may be enabled or disabled using the following +.Xr sysctl 2 +variables in +.Pa /etc/sysctl.conf . +By default, both protocols are enabled: +.Pp +.Bl -tag -width "net.inet.esp.enableXX" -offset indent -compact +.It net.inet.esp.enable +Enable the ESP IPsec protocol +.It net.inet.ah.enable +Enable the AH IPsec protocol +.El +.Pp +There are four main security properties provided by IPsec: +.Bl -inset -offset indent +.It Confidentiality +\- Ensure it is hard for anyone but the +receiver to understand what data has been communicated. +For example, ensuring the secrecy of passwords when logging +into a remote machine over the Internet. +.It Integrity +\- Guarantee that the data does not get changed +in transit. +If you are on a line carrying invoicing data, you +probably want to know that the amounts and account numbers +are correct and have not been modified by a third party. +.It Authenticity +\- Sign your data so that others can see that it +is really you that sent it. +It is clearly nice to know that documents are not forged. +.It Replay protection +\- We need ways to ensure a datagram is processed only once, regardless +of how many times it is received. +That is, it should not be possible for an attacker +to record a transaction (such as a bank account withdrawal), and then +by replaying it verbatim cause the peer to think a new message +(withdrawal request) had been received. +WARNING: as per the standard's specification, replay protection is not +performed when using manual-keyed IPsec (e.g. when using +.Xr ipsecctl 8 ) . +.El +.Ss IPsec Protocols +IPsec provides these services using two new protocols: +Authentication Header (AH), and +Encapsulating Security Payload (ESP). +.Pp +ESP can provide the properties authentication, integrity, replay protection, +and confidentiality of the data +(it secures everything in the packet that follows the IP header). +Replay protection requires authentication and +integrity (these two always go together). +Confidentiality (encryption) can be used with or without +authentication/integrity. +Similarly, one could use authentication/integrity with or without +confidentiality. +.Pp +AH provides authentication, integrity, and replay protection +(but not confidentiality). +The main difference between the authentication features of +AH and ESP is that AH also authenticates portions of the IP +header of the packet +(such as the source/destination addresses). +ESP authenticates only the packet payload. +.\".Pp +.\"A third protocol is available which is highly relevant to IPsec: IPComp. +.\"IPComp is a protocol used to reduce the size of IP datagrams +.\"(i.e. it provides compression). +.\"See +.\".Xr ipcomp 4 +.\"for further information. +.Ss Authentication Header (AH) +AH works by computing a value that depends on all of the payload +data, some of the IP header data, and a certain secret value +(the authentication key). +This value is then sent with the rest of each packet. +The receiver performs the same computation, and if the value matches, +it knows no one tampered with the data (integrity), the address information +(authenticity) or a sequence number (replay protection). +It knows this because the secret authentication key makes sure no +active attacker (man-in-the-middle) can recompute the correct value after +altering the packet. +The algorithms used to compute these values are called hash algorithms and are +parameters in the SA, just like the authentication key. +.Ss Encapsulating Security Payload (ESP) +ESP optionally does almost everything that AH does +except that it does not protect the outer IP +header but furthermore it encrypts the payload data with an encryption +algorithm using a secret encryption key. +Only the ones knowing this key can decrypt the data, thus providing +confidentiality. +Both the algorithm and the encryption key are parameters of the SA. +.Ss Security Associations (SAs) +These protocols require certain parameters for each connection, describing +exactly how the desired protection will be achieved. +These parameters are collected in an entity called a security association, +or SA for short. +Typical SA parameters include encryption algorithm, hash algorithm, +encryption key, and authentication key, to name a few. +When two peers have established matching SAs +(one at each end), +packets protected with one end's SA may be verified and/or decrypted +using the information in the other end's SA. +The only issue remaining is to ensure that both ends have matching SAs. +This may be done manually, or automatically using a key management daemon. +.Pp +Further information on manual SA establishment is described in +.Xr ipsec.conf 5 . +Information on automated key management for IKEv1 can be found in +.Xr isakmpd 8 +and for IKEv2 in +.Xr iked.conf 5 . +.Ss Security Parameter Indexes (SPIs) +In order to identify an SA, we need to have a unique name for it. +This name is a triplet, consisting of the destination address, security +parameter index (aka SPI) and the security protocol (ESP or AH). +Since the destination address is part of the name, an SA is necessarily a +unidirectional construct. +For a bidirectional communication channel, two SAs are required, one +outgoing and one incoming, where the destination address is our local +IP address. +The SPI is just a number that helps us make the name unique; +it can be arbitrarily chosen in the range 0x100 \- 0xffffffff. +The security protocol number should be 50 for ESP and 51 for AH, +as these are the protocol numbers assigned by IANA. +.Ss Modes of Operation +IPsec can operate in two modes, either tunnel or transport mode. +In transport mode the ordinary IP +header is used to deliver the packets to their endpoint; +in tunnel mode the ordinary IP +header just tells us the address of a security gateway +which knows how to verify/decrypt the payload and forward the +packet to a destination given by another IP +header contained in the protected payload. +Tunnel mode can be used for establishing virtual private networks (VPNs), +where parts of the networks can be spread out over an +unsafe public network, but security gateways at each subnet are responsible +for encrypting and decrypting the data passing over the public net. +An SA will contain information specifying +whether it is a tunnel or transport mode SA, +and for tunnels it will contain values to fill in into the outer IP header. +.Ss Lifetimes +The SA also holds a couple of other parameters, especially useful for +automatic keying, called lifetimes, which puts a limit on how much we can +use an SA for protecting our data. +These limits can be in wall-clock time or in volume of our data. +.Ss IPsec Examples +To better illustrate how IPsec works, consider a typical TCP packet: +.Pp +.Dl [IP header] [TCP header] [data...] +.Pp +If we apply ESP in transport mode to the above packet, we will get: +.Pp +.Dl [IP header] [ESP header] [TCP header] [data...] +.Pp +Everything after the ESP +header is protected by whatever services of ESP we are using +(authentication/integrity, replay protection, confidentiality). +This means the IP header itself is not protected. +.Pp +If we apply ESP in tunnel mode to the original packet, we would get: +.Pp +.Dl [IP header] [ESP header] [IP header] [TCP header] [data...] +.Pp +Again, everything after the ESP header is cryptographically protected. +Notice the insertion of an IP header between the ESP and TCP header. +This mode of operation allows us to hide who the true +source and destination addresses of a packet are +(since the protected and the unprotected IP +headers don't have to be exactly the same). +A typical application of this is in Virtual Private Networks (or VPNs), +where two firewalls use IPsec +to secure the traffic of all the hosts behind them. +For example: +.Bd -literal -offset indent +Net A <----> Firewall 1 <--- Internet ---> Firewall 2 <----> Net B +.Ed +.Pp +Firewall 1 and Firewall 2 can protect all communications between Net A +and Net B by using IPsec in tunnel mode, as illustrated above. +.Pp +This implementation makes use of a virtual interface, +.Nm enc0 , +which can be used in packet filters to specify those packets that have +been or will be processed by IPsec. +.Pp +NAT can also be applied to +.Nm enc# +interfaces, but special care should be taken because of the interactions +between NAT and the IPsec flow matching, especially on the packet output path. +Inside the TCP/IP stack, packets go through the following stages: +.Bd -literal -offset indent +UL/R -> [X] -> PF/NAT(enc0) -> IPsec -> PF/NAT(IF) -> IF +UL/R <-------- PF/NAT(enc0) <- IPsec <- PF/NAT(IF) <- IF +.Ed +.Pp +With IF being the real interface and UL/R the Upper Layer or Routing code. +The [X] +stage on the output path represents the point where the packet +is matched against the IPsec flow database (SPD) to determine if and how +the packet has to be IPsec-processed. +If, at this point, it is determined that the packet should be IPsec-processed, +it is processed by the PF/NAT code. +Unless PF drops the packet, it will then be IPsec-processed, even if the +packet has been modified by NAT. +.Pp +Security Associations can be set up manually with +.Xr ipsecctl 8 +or automatically with the +.Xr isakmpd 8 +or +.Xr iked 8 +key management daemons. +.Ss Additional Variables +A number of +.Xr sysctl 8 +variables are relevant to +.Nm . +These are generally +.Va net.inet.ah.* , +.Va net.inet.esp.* , +.Va net.inet.ip.forwarding , +.Va net.inet6.ip6.forwarding , +and +.Va net.inet.ip.ipsec-* . +Full explanations can be found in +.Xr sysctl 2 , +and variables can be set using the +.Xr sysctl 8 +interface. +.Pp +A number of kernel options are also relevant to +.Nm . +See +.Xr options 4 +for further information. +.Ss API Details +The following IP-level +.Xr setsockopt 2 +and +.Xr getsockopt 2 +options are specific to +.Nm ipsec . +A socket can specify security levels for three different categories: +.Bl -tag -width IP_ESP_NETWORK_LEVEL -offset 2n +.It IP_AUTH_LEVEL +Specifies the use of authentication for packets sent or received by the +socket. +.It IP_ESP_TRANS_LEVEL +Specifies the use of encryption in transport mode for packets sent or +received by the socket. +.It IP_ESP_NETWORK_LEVEL +Specifies the use of encryption in tunnel mode. +.El +.Pp +For each of the categories there are five possible levels which +specify the security policy to use in that category: +.Bl -tag -width IPSEC_LEVEL_REQUIRE -offset 2n +.It IPSEC_LEVEL_BYPASS +Bypass the default system security policy. +This option can only be used by privileged processes. +This level is necessary for the key management daemon, +.Xr isakmpd 8 . +.It IPSEC_LEVEL_AVAIL +If a Security Association is available, it will be used for sending packets +by that socket. +.It IPSEC_LEVEL_USE +Use IP Security for sending packets but still accept packets which are not +secured. +.It IPSEC_LEVEL_REQUIRE +Use IP Security for sending packets and also require IP Security for +received data. +.It IPSEC_LEVEL_UNIQUE +The outbound Security Association will only be used by this socket. +.El +.Pp +When a new socket is created, it is assigned the default system security +level in each category. +These levels can be queried with +.Xr getsockopt 2 . +Only a privileged process can lower the security level with a +.Xr setsockopt 2 +call. +.Pp +For example, a server process might want to accept only authenticated +connections to prevent session hijacking. +It would issue the following +.Xr setsockopt 2 +call: +.Bd -literal -offset 4n +int level = IPSEC_LEVEL_REQUIRE; +error = setsockopt(s, IPPROTO_IP, IP_AUTH_LEVEL, &level, sizeof(int)); +.Ed +.Pp +The system does guarantee that it will succeed at establishing the +required security associations. +In any case a properly configured key management daemon is required which +listens to messages from the kernel. +.Pp +A list of all security associations in the kernel tables can be +obtained using the +.Xr ipsecctl 8 +command. +.Sh DIAGNOSTICS +A socket operation may fail with one of the following errors returned: +.Bl -tag -width [EINVAL] +.It Bq Er EACCES +An attempt was made to lower the security level below the system default +by a non-privileged process. +.It Bq Er EINVAL +The length of option field did not match or an unknown security level +was given. +.El +.Pp +.Xr netstat 1 +can be used to obtain some statistics about AH or ESP usage: +.Bd -literal -offset indent +$ netstat -s -p ah +$ netstat -s -p esp +.Ed +.Pp +The +.Xr ipsecctl 8 +command can be used to display information about IPsec flows. +.Pp +.Xr vmstat 8 +displays information about memory use by IPsec with the +.Fl m +flag (look for +.Dq tdb +and +.Dq xform +allocations). +.Sh SEE ALSO +.Xr enc 4 , +.\".Xr ipcomp 4 , +.Xr options 4 , +.Xr ipsec.conf 5 , +.Xr iked 8 , +.Xr ipsecctl 8 , +.Xr isakmpd 8 , +.Xr sysctl 8 +.Sh HISTORY +IPsec was originally designed to provide security services +for Internet Protocol IPv6. +It has since been engineered to provide those services for +the original Internet Protocol, IPv4. +.Pp +The IPsec protocol design process was started in 1992 by +John Ioannidis, Phil Karn, and William Allen Simpson. +In 1995, the former wrote an implementation for +.Bsx . +Angelos D. Keromytis ported it to +.Ox +and +.Nx . +The latest transforms and new features were +implemented by Angelos D. Keromytis and Niels Provos. +.Sh AUTHORS +.An -nosplit +The authors of the IPsec code proper are +.An John Ioannidis , +.An Angelos D. Keromytis , +and +.An Niels Provos . +.Pp +.An Niklas Hallqvist +and +.An Niels Provos +are the authors of +.Xr isakmpd 8 . +.Pp +.An Eric Young Ap s +libdeslite was used in this implementation for the DES algorithm. +.Pp +.An Steve Reid Ap s +SHA-1 code was also used. +.Pp +The +.Xr setsockopt 2 Ns / Ns Xr getsockopt 2 +interface follows somewhat loosely the +draft-mcdonald-simple-ipsec-api +(since expired). +.Sh BUGS +There's a lot more to be said on this subject. +This is just a beginning. +At the moment the socket options are not fully implemented. |
