IPSEC(4P)                         Protocols                        IPSEC(4P)
NAME
       ipsec - Internet Protocol Security Architecture
DESCRIPTION
       The 
IP Security Architecture (IPsec) provides protection for 
IP       datagrams. The protection can include confidentiality, strong
       integrity of the data, partial sequence integrity  (replay
       protection), and data authentication.  
IPsec is performed inside the       
IP processing, and it can be applied with or without the knowledge of
       an Internet application.
       IPsec applies to both IPv4 and IPv6. See 
ip(4P) and 
ip6(4P).
   Protection Mechanisms
       IPsec provides two mechanisms for protecting data. The Authentication
       Header (
AH) provides strong integrity, replay protection, and data
       authentication. 
AH protects as much of the 
IP datagram as it can.  
AH       cannot protect fields that change nondeterministically between sender
       and receiver.
       The Encapsulating Security Payload (
ESP) provides confidentiality
       over what it encapsulates, as well as the services that 
AH provides,
       but only over that which it encapsulates. 
ESP's authentication
       services are optional, which allow 
ESP and 
AH to be used together on
       the same datagram without redundancy.
       Authentication and encryption algorithms are used for IPsec.
       Authentication algorithms produce an integrity checksum value or
       "digest"based on the data and a key. Encryption algorithms operate on
       data in units of a "block size".
   NAT Traversal
       IPsec's ESP can also encapsulate itself in UDP if IKE (see       
in.iked(8)) discovers a Network Address Translator (NAT) between two
       communicating endpoints.
       A UDP socket can be specified as a NAT-Traversal endpoint. See       
udp(4P) for details.
   Security Associations
       AH and 
ESP use Security Associations (
SA). SA's are entities that
       specify security properties from one host to another. Two
       communicating machines require two 
SAs (at a minimum) to communicate
       securely. However, communicating machines that use multicast can
       share the same multicast 
SA. 
SAs are managed through the 
pf_key(4P)       interface. For IPv4, automatic 
SA management is available through the
       Internet Key Exchange (IKE), as implemented by 
in.iked(8). A command-
       line front-end is available by means of 
ipseckey(8). An IPsec 
SA is
       identified by a tuple of <
AH or 
ESP, destination 
IP address, and       
SPI>. The Security Parameters Index (
SPI) is an arbitrary 32-bit
       value that is transmitted on the wire with an 
AH or 
ESP packet. See       
ipsecah(4P) or 
ipsecesp(4P)  for an explanation about where the 
SPI       falls in a protected packet.
   Protection Policy and Enforcement Mechanisms
       Mechanism and policy are separate. The policy for applying IPsec is
       enforced on a system-wide or per-socket level. Configuring system-
       wide policy and per-tunnel policy (see Transport Mode and Tunnel Mode
       sections) is done via the 
ipsecconf(8) command. Configuring per-
       socket policy is discussed later in this section.
       System-wide IPsec policy is applied to incoming and outgoing
       datagrams. Some additional rules can be applied to outgoing datagrams
       because of the additional data known by the system. Inbound datagrams
       can be accepted or dropped. The decision to drop or accept an inbound
       datagram is based on several criteria which sometimes overlap or
       conflict. Conflict resolution is resolved by which rule is parsed
       first, with one exception: if a policy entry states that traffic
       should bypass all other policy, it is automatically be accepted.
       Outbound datagrams are sent with or without protection. Protection
       may (or may not) indicate specific algorithms. If policy normally
       would protect a datagram, it can be bypassed either by an exception
       in system-wide policy or by requesting a bypass in per-socket policy.
       Intra-machine traffic policies are enforced, but actual security
       mechanisms are not applied. Instead, the outbound policy on an intra-
       machine packet translates into an inbound packet with those
       mechanisms applied.
       IPsec policy is enforced in the 
ip(4P) driver. Several 
ndd tunables
       for 
/dev/ip affect policy enforcement, including:       
icmp_accept_clear_messages                                     If equal to 1 (the default), allow
                                     certain cleartext icmp messages to
                                     bypass policy. For ICMP echo requests
                                     ("ping"messages), protect the response
                                     like the request. If zero, treat icmp
                                     messages like other IP traffic.       
igmp_accept_clear_messages                                     If 1, allow inbound cleartext IGMP
                                     messages to bypass IPsec policy.       
pim_accept_clear_messages                                     If 1, allow inbound cleartext PIM
                                     messages to bypass IPsec policy.       
ipsec_policy_log_interval                                     IPsec logs policy failures and errors
                                     to 
/var/adm/messages. To prevent syslog
                                     from being overloaded, the IPsec kernel
                                     modules limit the rate at which errors
                                     can be logged. You can query/set
                                     ipsec_policy_log_interval using 
ndd(8).
                                     The value is in milliseconds. Only one
                                     message can be logged per interval.
   Transport Mode and Tunnel Mode
       If IPsec is used on a tunnel, Tunnel Mode IPsec can be used to
       protect distinct flows within a tunnel or to cause packets that do
       not match per-tunnel policy to drop. System-wide policy is always
       Transport Mode.  A tunnel can use Transport Mode IPsec or Tunnel Mode
       IPsec.   
Per-Socket Policy       The 
IP_SEC_OPT or 
IPV6_SEC_OPT socket option is used to set per-
       socket IPsec policy.  The structure used for an 
IP_SEC_OPT request
       is:
         typedef struct ipsec_req {
             uint_t      ipsr_ah_req;           /* AH request */
             uint_t      ipsr_esp_req;          /* ESP request */
             uint_t      ipsr_self_encap_req;   /* Self-Encap request */
             uint8_t     ipsr_auth_alg;         /* Auth algs for AH */
             uint8_t     ipsr_esp_alg;          /* Encr algs for ESP */
             uint8_t     ipsr_esp_auth_alg;     /* Auth algs for ESP */
         } ipsec_req_t;
       The IPsec request has fields for both 
AH and 
ESP. Algorithms may or
       may not be specified. The actual request for 
AH or 
ESP services can
       take one of the following values:       
IPSEC_PREF_NEVER                              Bypass all policy. Only the superuser may
                              request this service.       
IPSEC_PREF_REQUIRED                              Regardless of other policy, require the use of
                              the  IPsec  service.
       The following value can be logically ORed to an 
IPSEC_PREF_REQUIRED       value:       
IPSEC_PREF_UNIQUE                            Regardless of other policy, enforce a unique 
SA                            for traffic originating from this socket.
       In the event 
IP options not normally encapsulated by 
ESP need to be,
       the 
ipsec_self_encap_req is used to add an additional 
IP header
       outside the original one. Algorithm values from <
net/pfkeyv2.h> are
       as follows:       
SADB_AALG_MD5HMAC                               Uses the MD5-HMAC (
RFC 2403)  algorithm for
                               authentication.       
SADB_AALG_SHA1HMAC                               Uses the SHA1-HMAC (
RFC 2404) algorithm for
                               authentication.       
SADB_EALG_DESCBC                               Uses the 
DES (
RFC 2405) algorithm for
                               encryption.       
SADB_EALG_3DESCBC                               Uses the Triple  
DES  (
RFC 2451)   algorithm
                               for encryption.       
SADB_EALG_BLOWFISH                               Uses the Blowfish (
RFC 2451) algorithm for
                               encryption.       
SADB_EALG_AES                               Uses  the  Advanced Encryption Standard
                               algorithm for encryption.       
SADB_AALG_SHA256HMAC       SADB_AALG_SHA384HMAC       SADB_AALG_SHA512HMAC                               Uses the SHA2 hash algorithms with HMAC (
RFC                               4868)for authentication.
       An application should use either the 
getsockopt(3SOCKET) or the       
setsockopt(3SOCKET) call to manipulate IPsec requests.  For example:
         #include <sys/socket.h>
         #include <netinet/in.h>
         #include <net/pfkeyv2.h>   /* For SADB_*ALG_* */
         /* .... socket setup skipped */
         rc = setsockopt(s, IPPROTO_IP, IP_SEC_OPT,
            (const char *)&ipsec_req, sizeof (ipsec_req_t));
SECURITY
       While IPsec is an effective tool in securing network traffic, it will
       not make security problems disappear. Security issues beyond the
       mechanisms that IPsec offers may be discussed in similar "Security"
       or "Security Consideration" sections within individual reference
       manual pages.
       While a non-root user cannot bypass IPsec, a non-root user can set
       policy to be different from the system-wide policy. For ways to
       prevent this, consult the 
ndd(8) variables in 
/dev/ip.
ATTRIBUTES
       See 
attributes(7)  for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | Committed       |
       +--------------------+-----------------+
SEE ALSO
       getsockopt(3SOCKET), 
setsockopt(3SOCKET), 
inet(4P), 
ip(4P), 
ip6(4P),       
ipsecah(4P), 
ipsecesp(4P), 
pf_key(4P), 
udp(4P), 
attributes(7),       
in.iked(8), 
ipsecconf(8), 
ipseckey(8), 
ndd(8)       Kent, S., and Atkinson, R., 
RFC 2401, Security Architecture for the       Internet Protocol, The Internet Society, 1998.
       Kent, S. and Atkinson, R., 
RFC 2406, IP Encapsulating Security       Payload (ESP), The Internet Society, 1998.
       Madson, C., and Doraswamy, N., 
RFC 2405, The ESP DES-CBC Cipher       Algorithm with Explicit IV, The Internet Society, 1998.
       Madsen, C. and Glenn, R., 
RFC 2403, The Use of HMAC-MD5-96 within ESP       and AH, The Internet Society, 1998.
       Madsen, C. and Glenn, R., 
RFC 2404, The Use of HMAC-SHA-1-96 within       ESP and AH, The Internet Society, 1998.
       Pereira, R. and Adams, R., 
RFC 2451, The ESP CBC-Mode Cipher       Algorithms, The Internet Society, 1998.
       Kelly, S. and Frankel, S., 
RFC 4868, Using HMAC-SHA-256, HMAC-       SHA-384, and HMAC-SHA-512 with IPsec, 2007.
       Huttunen, A., Swander, B., Volpe, V., DiBurro, L., Stenberg, 
M., RFC       3948, UDP Encapsulation of IPsec ESP Packets, The Internet Society,
       2005.
                             September 25, 2009                    IPSEC(4P)